60d6e00e9f3030a03ada6de749eb77c698bf5e7d
[dragonfly.git] / contrib / gcc-5.0 / gcc / dwarf2out.c
1 /* Output Dwarf2 format symbol table information from GCC.
2    Copyright (C) 1992-2015 Free Software Foundation, Inc.
3    Contributed by Gary Funck (gary@intrepid.com).
4    Derived from DWARF 1 implementation of Ron Guilmette (rfg@monkeys.com).
5    Extensively modified by Jason Merrill (jason@cygnus.com).
6
7 This file is part of GCC.
8
9 GCC is free software; you can redistribute it and/or modify it under
10 the terms of the GNU General Public License as published by the Free
11 Software Foundation; either version 3, or (at your option) any later
12 version.
13
14 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
15 WARRANTY; without even the implied warranty of MERCHANTABILITY or
16 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
17 for more details.
18
19 You should have received a copy of the GNU General Public License
20 along with GCC; see the file COPYING3.  If not see
21 <http://www.gnu.org/licenses/>.  */
22
23 /* TODO: Emit .debug_line header even when there are no functions, since
24            the file numbers are used by .debug_info.  Alternately, leave
25            out locations for types and decls.
26          Avoid talking about ctors and op= for PODs.
27          Factor out common prologue sequences into multiple CIEs.  */
28
29 /* The first part of this file deals with the DWARF 2 frame unwind
30    information, which is also used by the GCC efficient exception handling
31    mechanism.  The second part, controlled only by an #ifdef
32    DWARF2_DEBUGGING_INFO, deals with the other DWARF 2 debugging
33    information.  */
34
35 /* DWARF2 Abbreviation Glossary:
36
37    CFA = Canonical Frame Address
38            a fixed address on the stack which identifies a call frame.
39            We define it to be the value of SP just before the call insn.
40            The CFA register and offset, which may change during the course
41            of the function, are used to calculate its value at runtime.
42
43    CFI = Call Frame Instruction
44            an instruction for the DWARF2 abstract machine
45
46    CIE = Common Information Entry
47            information describing information common to one or more FDEs
48
49    DIE = Debugging Information Entry
50
51    FDE = Frame Description Entry
52            information describing the stack call frame, in particular,
53            how to restore registers
54
55    DW_CFA_... = DWARF2 CFA call frame instruction
56    DW_TAG_... = DWARF2 DIE tag */
57
58 #include "config.h"
59 #include "system.h"
60 #include "coretypes.h"
61 #include "tm.h"
62 #include "rtl.h"
63 #include "hash-set.h"
64 #include "machmode.h"
65 #include "vec.h"
66 #include "double-int.h"
67 #include "input.h"
68 #include "alias.h"
69 #include "symtab.h"
70 #include "wide-int.h"
71 #include "inchash.h"
72 #include "real.h"
73 #include "tree.h"
74 #include "fold-const.h"
75 #include "stringpool.h"
76 #include "stor-layout.h"
77 #include "varasm.h"
78 #include "hashtab.h"
79 #include "hard-reg-set.h"
80 #include "function.h"
81 #include "emit-rtl.h"
82 #include "hash-table.h"
83 #include "version.h"
84 #include "flags.h"
85 #include "regs.h"
86 #include "rtlhash.h"
87 #include "insn-config.h"
88 #include "reload.h"
89 #include "output.h"
90 #include "statistics.h"
91 #include "fixed-value.h"
92 #include "expmed.h"
93 #include "dojump.h"
94 #include "explow.h"
95 #include "calls.h"
96 #include "stmt.h"
97 #include "expr.h"
98 #include "except.h"
99 #include "dwarf2.h"
100 #include "dwarf2out.h"
101 #include "dwarf2asm.h"
102 #include "toplev.h"
103 #include "md5.h"
104 #include "tm_p.h"
105 #include "diagnostic.h"
106 #include "tree-pretty-print.h"
107 #include "debug.h"
108 #include "target.h"
109 #include "common/common-target.h"
110 #include "langhooks.h"
111 #include "hash-map.h"
112 #include "is-a.h"
113 #include "plugin-api.h"
114 #include "ipa-ref.h"
115 #include "cgraph.h"
116 #include "ira.h"
117 #include "lra.h"
118 #include "dumpfile.h"
119 #include "opts.h"
120 #include "tree-dfa.h"
121 #include "gdb/gdb-index.h"
122 #include "rtl-iter.h"
123
124 static void dwarf2out_source_line (unsigned int, const char *, int, bool);
125 static rtx_insn *last_var_location_insn;
126 static rtx_insn *cached_next_real_insn;
127 static void dwarf2out_decl (tree);
128
129 #ifdef VMS_DEBUGGING_INFO
130 int vms_file_stats_name (const char *, long long *, long *, char *, int *);
131
132 /* Define this macro to be a nonzero value if the directory specifications
133     which are output in the debug info should end with a separator.  */
134 #define DWARF2_DIR_SHOULD_END_WITH_SEPARATOR 1
135 /* Define this macro to evaluate to a nonzero value if GCC should refrain
136    from generating indirect strings in DWARF2 debug information, for instance
137    if your target is stuck with an old version of GDB that is unable to
138    process them properly or uses VMS Debug.  */
139 #define DWARF2_INDIRECT_STRING_SUPPORT_MISSING_ON_TARGET 1
140 #else
141 #define DWARF2_DIR_SHOULD_END_WITH_SEPARATOR 0
142 #define DWARF2_INDIRECT_STRING_SUPPORT_MISSING_ON_TARGET 0
143 #endif
144
145 /* ??? Poison these here until it can be done generically.  They've been
146    totally replaced in this file; make sure it stays that way.  */
147 #undef DWARF2_UNWIND_INFO
148 #undef DWARF2_FRAME_INFO
149 #if (GCC_VERSION >= 3000)
150  #pragma GCC poison DWARF2_UNWIND_INFO DWARF2_FRAME_INFO
151 #endif
152
153 /* The size of the target's pointer type.  */
154 #ifndef PTR_SIZE
155 #define PTR_SIZE (POINTER_SIZE / BITS_PER_UNIT)
156 #endif
157
158 /* Array of RTXes referenced by the debugging information, which therefore
159    must be kept around forever.  */
160 static GTY(()) vec<rtx, va_gc> *used_rtx_array;
161
162 /* A pointer to the base of a list of incomplete types which might be
163    completed at some later time.  incomplete_types_list needs to be a
164    vec<tree, va_gc> *because we want to tell the garbage collector about
165    it.  */
166 static GTY(()) vec<tree, va_gc> *incomplete_types;
167
168 /* A pointer to the base of a table of references to declaration
169    scopes.  This table is a display which tracks the nesting
170    of declaration scopes at the current scope and containing
171    scopes.  This table is used to find the proper place to
172    define type declaration DIE's.  */
173 static GTY(()) vec<tree, va_gc> *decl_scope_table;
174
175 /* Pointers to various DWARF2 sections.  */
176 static GTY(()) section *debug_info_section;
177 static GTY(()) section *debug_skeleton_info_section;
178 static GTY(()) section *debug_abbrev_section;
179 static GTY(()) section *debug_skeleton_abbrev_section;
180 static GTY(()) section *debug_aranges_section;
181 static GTY(()) section *debug_addr_section;
182 static GTY(()) section *debug_macinfo_section;
183 static GTY(()) section *debug_line_section;
184 static GTY(()) section *debug_skeleton_line_section;
185 static GTY(()) section *debug_loc_section;
186 static GTY(()) section *debug_pubnames_section;
187 static GTY(()) section *debug_pubtypes_section;
188 static GTY(()) section *debug_str_section;
189 static GTY(()) section *debug_str_dwo_section;
190 static GTY(()) section *debug_str_offsets_section;
191 static GTY(()) section *debug_ranges_section;
192 static GTY(()) section *debug_frame_section;
193
194 /* Maximum size (in bytes) of an artificially generated label.  */
195 #define MAX_ARTIFICIAL_LABEL_BYTES      30
196
197 /* According to the (draft) DWARF 3 specification, the initial length
198    should either be 4 or 12 bytes.  When it's 12 bytes, the first 4
199    bytes are 0xffffffff, followed by the length stored in the next 8
200    bytes.
201
202    However, the SGI/MIPS ABI uses an initial length which is equal to
203    DWARF_OFFSET_SIZE.  It is defined (elsewhere) accordingly.  */
204
205 #ifndef DWARF_INITIAL_LENGTH_SIZE
206 #define DWARF_INITIAL_LENGTH_SIZE (DWARF_OFFSET_SIZE == 4 ? 4 : 12)
207 #endif
208
209 /* Round SIZE up to the nearest BOUNDARY.  */
210 #define DWARF_ROUND(SIZE,BOUNDARY) \
211   ((((SIZE) + (BOUNDARY) - 1) / (BOUNDARY)) * (BOUNDARY))
212
213 /* CIE identifier.  */
214 #if HOST_BITS_PER_WIDE_INT >= 64
215 #define DWARF_CIE_ID \
216   (unsigned HOST_WIDE_INT) (DWARF_OFFSET_SIZE == 4 ? DW_CIE_ID : DW64_CIE_ID)
217 #else
218 #define DWARF_CIE_ID DW_CIE_ID
219 #endif
220
221
222 /* A vector for a table that contains frame description
223    information for each routine.  */
224 #define NOT_INDEXED (-1U)
225 #define NO_INDEX_ASSIGNED (-2U)
226
227 static GTY(()) vec<dw_fde_ref, va_gc> *fde_vec;
228
229 struct GTY((for_user)) indirect_string_node {
230   const char *str;
231   unsigned int refcount;
232   enum dwarf_form form;
233   char *label;
234   unsigned int index;
235 };
236
237 struct indirect_string_hasher : ggc_hasher<indirect_string_node *>
238 {
239   typedef const char *compare_type;
240
241   static hashval_t hash (indirect_string_node *);
242   static bool equal (indirect_string_node *, const char *);
243 };
244
245 static GTY (()) hash_table<indirect_string_hasher> *debug_str_hash;
246
247 /* With split_debug_info, both the comp_dir and dwo_name go in the
248    main object file, rather than the dwo, similar to the force_direct
249    parameter elsewhere but with additional complications:
250
251    1) The string is needed in both the main object file and the dwo.
252    That is, the comp_dir and dwo_name will appear in both places.
253
254    2) Strings can use three forms: DW_FORM_string, DW_FORM_strp or
255    DW_FORM_GNU_str_index.
256
257    3) GCC chooses the form to use late, depending on the size and
258    reference count.
259
260    Rather than forcing the all debug string handling functions and
261    callers to deal with these complications, simply use a separate,
262    special-cased string table for any attribute that should go in the
263    main object file.  This limits the complexity to just the places
264    that need it.  */
265
266 static GTY (()) hash_table<indirect_string_hasher> *skeleton_debug_str_hash;
267
268 static GTY(()) int dw2_string_counter;
269
270 /* True if the compilation unit places functions in more than one section.  */
271 static GTY(()) bool have_multiple_function_sections = false;
272
273 /* Whether the default text and cold text sections have been used at all.  */
274
275 static GTY(()) bool text_section_used = false;
276 static GTY(()) bool cold_text_section_used = false;
277
278 /* The default cold text section.  */
279 static GTY(()) section *cold_text_section;
280
281 /* The DIE for C++14 'auto' in a function return type.  */
282 static GTY(()) dw_die_ref auto_die;
283
284 /* The DIE for C++14 'decltype(auto)' in a function return type.  */
285 static GTY(()) dw_die_ref decltype_auto_die;
286
287 /* Forward declarations for functions defined in this file.  */
288
289 static char *stripattributes (const char *);
290 static void output_call_frame_info (int);
291 static void dwarf2out_note_section_used (void);
292
293 /* Personality decl of current unit.  Used only when assembler does not support
294    personality CFI.  */
295 static GTY(()) rtx current_unit_personality;
296
297 /* Data and reference forms for relocatable data.  */
298 #define DW_FORM_data (DWARF_OFFSET_SIZE == 8 ? DW_FORM_data8 : DW_FORM_data4)
299 #define DW_FORM_ref (DWARF_OFFSET_SIZE == 8 ? DW_FORM_ref8 : DW_FORM_ref4)
300
301 #ifndef DEBUG_FRAME_SECTION
302 #define DEBUG_FRAME_SECTION     ".debug_frame"
303 #endif
304
305 #ifndef FUNC_BEGIN_LABEL
306 #define FUNC_BEGIN_LABEL        "LFB"
307 #endif
308
309 #ifndef FUNC_END_LABEL
310 #define FUNC_END_LABEL          "LFE"
311 #endif
312
313 #ifndef PROLOGUE_END_LABEL
314 #define PROLOGUE_END_LABEL      "LPE"
315 #endif
316
317 #ifndef EPILOGUE_BEGIN_LABEL
318 #define EPILOGUE_BEGIN_LABEL    "LEB"
319 #endif
320
321 #ifndef FRAME_BEGIN_LABEL
322 #define FRAME_BEGIN_LABEL       "Lframe"
323 #endif
324 #define CIE_AFTER_SIZE_LABEL    "LSCIE"
325 #define CIE_END_LABEL           "LECIE"
326 #define FDE_LABEL               "LSFDE"
327 #define FDE_AFTER_SIZE_LABEL    "LASFDE"
328 #define FDE_END_LABEL           "LEFDE"
329 #define LINE_NUMBER_BEGIN_LABEL "LSLT"
330 #define LINE_NUMBER_END_LABEL   "LELT"
331 #define LN_PROLOG_AS_LABEL      "LASLTP"
332 #define LN_PROLOG_END_LABEL     "LELTP"
333 #define DIE_LABEL_PREFIX        "DW"
334 \f
335 /* Match the base name of a file to the base name of a compilation unit. */
336
337 static int
338 matches_main_base (const char *path)
339 {
340   /* Cache the last query. */
341   static const char *last_path = NULL;
342   static int last_match = 0;
343   if (path != last_path)
344     {
345       const char *base;
346       int length = base_of_path (path, &base);
347       last_path = path;
348       last_match = (length == main_input_baselength
349                     && memcmp (base, main_input_basename, length) == 0);
350     }
351   return last_match;
352 }
353
354 #ifdef DEBUG_DEBUG_STRUCT
355
356 static int
357 dump_struct_debug (tree type, enum debug_info_usage usage,
358                    enum debug_struct_file criterion, int generic,
359                    int matches, int result)
360 {
361   /* Find the type name. */
362   tree type_decl = TYPE_STUB_DECL (type);
363   tree t = type_decl;
364   const char *name = 0;
365   if (TREE_CODE (t) == TYPE_DECL)
366     t = DECL_NAME (t);
367   if (t)
368     name = IDENTIFIER_POINTER (t);
369
370   fprintf (stderr, "    struct %d %s %s %s %s %d %p %s\n",
371            criterion,
372            DECL_IN_SYSTEM_HEADER (type_decl) ? "sys" : "usr",
373            matches ? "bas" : "hdr",
374            generic ? "gen" : "ord",
375            usage == DINFO_USAGE_DFN ? ";" :
376              usage == DINFO_USAGE_DIR_USE ? "." : "*",
377            result,
378            (void*) type_decl, name);
379   return result;
380 }
381 #define DUMP_GSTRUCT(type, usage, criterion, generic, matches, result) \
382   dump_struct_debug (type, usage, criterion, generic, matches, result)
383
384 #else
385
386 #define DUMP_GSTRUCT(type, usage, criterion, generic, matches, result) \
387   (result)
388
389 #endif
390
391 /* Get the number of HOST_WIDE_INTs needed to represent the precision
392    of the number.  */
393
394 static unsigned int
395 get_full_len (const wide_int &op)
396 {
397   return ((op.get_precision () + HOST_BITS_PER_WIDE_INT - 1)
398           / HOST_BITS_PER_WIDE_INT);
399 }
400
401 static bool
402 should_emit_struct_debug (tree type, enum debug_info_usage usage)
403 {
404   enum debug_struct_file criterion;
405   tree type_decl;
406   bool generic = lang_hooks.types.generic_p (type);
407
408   if (generic)
409     criterion = debug_struct_generic[usage];
410   else
411     criterion = debug_struct_ordinary[usage];
412
413   if (criterion == DINFO_STRUCT_FILE_NONE)
414     return DUMP_GSTRUCT (type, usage, criterion, generic, false, false);
415   if (criterion == DINFO_STRUCT_FILE_ANY)
416     return DUMP_GSTRUCT (type, usage, criterion, generic, false, true);
417
418   type_decl = TYPE_STUB_DECL (TYPE_MAIN_VARIANT (type));
419
420   if (type_decl != NULL)
421     {
422      if (criterion == DINFO_STRUCT_FILE_SYS && DECL_IN_SYSTEM_HEADER (type_decl))
423         return DUMP_GSTRUCT (type, usage, criterion, generic, false, true);
424
425       if (matches_main_base (DECL_SOURCE_FILE (type_decl)))
426         return DUMP_GSTRUCT (type, usage, criterion, generic, true, true);
427     }
428
429   return DUMP_GSTRUCT (type, usage, criterion, generic, false, false);
430 }
431 \f
432 /* Return a pointer to a copy of the section string name S with all
433    attributes stripped off, and an asterisk prepended (for assemble_name).  */
434
435 static inline char *
436 stripattributes (const char *s)
437 {
438   char *stripped = XNEWVEC (char, strlen (s) + 2);
439   char *p = stripped;
440
441   *p++ = '*';
442
443   while (*s && *s != ',')
444     *p++ = *s++;
445
446   *p = '\0';
447   return stripped;
448 }
449
450 /* Switch [BACK] to eh_frame_section.  If we don't have an eh_frame_section,
451    switch to the data section instead, and write out a synthetic start label
452    for collect2 the first time around.  */
453
454 static void
455 switch_to_eh_frame_section (bool back)
456 {
457   tree label;
458
459 #ifdef EH_FRAME_SECTION_NAME
460   if (eh_frame_section == 0)
461     {
462       int flags;
463
464       if (EH_TABLES_CAN_BE_READ_ONLY)
465         {
466           int fde_encoding;
467           int per_encoding;
468           int lsda_encoding;
469
470           fde_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/1,
471                                                        /*global=*/0);
472           per_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2,
473                                                        /*global=*/1);
474           lsda_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0,
475                                                         /*global=*/0);
476           flags = ((! flag_pic
477                     || ((fde_encoding & 0x70) != DW_EH_PE_absptr
478                         && (fde_encoding & 0x70) != DW_EH_PE_aligned
479                         && (per_encoding & 0x70) != DW_EH_PE_absptr
480                         && (per_encoding & 0x70) != DW_EH_PE_aligned
481                         && (lsda_encoding & 0x70) != DW_EH_PE_absptr
482                         && (lsda_encoding & 0x70) != DW_EH_PE_aligned))
483                    ? 0 : SECTION_WRITE);
484         }
485       else
486         flags = SECTION_WRITE;
487       eh_frame_section = get_section (EH_FRAME_SECTION_NAME, flags, NULL);
488     }
489 #endif /* EH_FRAME_SECTION_NAME */
490
491   if (eh_frame_section)
492     switch_to_section (eh_frame_section);
493   else
494     {
495       /* We have no special eh_frame section.  Put the information in
496          the data section and emit special labels to guide collect2.  */
497       switch_to_section (data_section);
498
499       if (!back)
500         {
501           label = get_file_function_name ("F");
502           ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (PTR_SIZE));
503           targetm.asm_out.globalize_label (asm_out_file,
504                                            IDENTIFIER_POINTER (label));
505           ASM_OUTPUT_LABEL (asm_out_file, IDENTIFIER_POINTER (label));
506         }
507     }
508 }
509
510 /* Switch [BACK] to the eh or debug frame table section, depending on
511    FOR_EH.  */
512
513 static void
514 switch_to_frame_table_section (int for_eh, bool back)
515 {
516   if (for_eh)
517     switch_to_eh_frame_section (back);
518   else
519     {
520       if (!debug_frame_section)
521         debug_frame_section = get_section (DEBUG_FRAME_SECTION,
522                                            SECTION_DEBUG, NULL);
523       switch_to_section (debug_frame_section);
524     }
525 }
526
527 /* Describe for the GTY machinery what parts of dw_cfi_oprnd1 are used.  */
528
529 enum dw_cfi_oprnd_type
530 dw_cfi_oprnd1_desc (enum dwarf_call_frame_info cfi)
531 {
532   switch (cfi)
533     {
534     case DW_CFA_nop:
535     case DW_CFA_GNU_window_save:
536     case DW_CFA_remember_state:
537     case DW_CFA_restore_state:
538       return dw_cfi_oprnd_unused;
539
540     case DW_CFA_set_loc:
541     case DW_CFA_advance_loc1:
542     case DW_CFA_advance_loc2:
543     case DW_CFA_advance_loc4:
544     case DW_CFA_MIPS_advance_loc8:
545       return dw_cfi_oprnd_addr;
546
547     case DW_CFA_offset:
548     case DW_CFA_offset_extended:
549     case DW_CFA_def_cfa:
550     case DW_CFA_offset_extended_sf:
551     case DW_CFA_def_cfa_sf:
552     case DW_CFA_restore:
553     case DW_CFA_restore_extended:
554     case DW_CFA_undefined:
555     case DW_CFA_same_value:
556     case DW_CFA_def_cfa_register:
557     case DW_CFA_register:
558     case DW_CFA_expression:
559       return dw_cfi_oprnd_reg_num;
560
561     case DW_CFA_def_cfa_offset:
562     case DW_CFA_GNU_args_size:
563     case DW_CFA_def_cfa_offset_sf:
564       return dw_cfi_oprnd_offset;
565
566     case DW_CFA_def_cfa_expression:
567       return dw_cfi_oprnd_loc;
568
569     default:
570       gcc_unreachable ();
571     }
572 }
573
574 /* Describe for the GTY machinery what parts of dw_cfi_oprnd2 are used.  */
575
576 enum dw_cfi_oprnd_type
577 dw_cfi_oprnd2_desc (enum dwarf_call_frame_info cfi)
578 {
579   switch (cfi)
580     {
581     case DW_CFA_def_cfa:
582     case DW_CFA_def_cfa_sf:
583     case DW_CFA_offset:
584     case DW_CFA_offset_extended_sf:
585     case DW_CFA_offset_extended:
586       return dw_cfi_oprnd_offset;
587
588     case DW_CFA_register:
589       return dw_cfi_oprnd_reg_num;
590
591     case DW_CFA_expression:
592       return dw_cfi_oprnd_loc;
593
594     default:
595       return dw_cfi_oprnd_unused;
596     }
597 }
598
599 /* Output one FDE.  */
600
601 static void
602 output_fde (dw_fde_ref fde, bool for_eh, bool second,
603             char *section_start_label, int fde_encoding, char *augmentation,
604             bool any_lsda_needed, int lsda_encoding)
605 {
606   const char *begin, *end;
607   static unsigned int j;
608   char l1[20], l2[20];
609
610   targetm.asm_out.emit_unwind_label (asm_out_file, fde->decl, for_eh,
611                                      /* empty */ 0);
612   targetm.asm_out.internal_label (asm_out_file, FDE_LABEL,
613                                   for_eh + j);
614   ASM_GENERATE_INTERNAL_LABEL (l1, FDE_AFTER_SIZE_LABEL, for_eh + j);
615   ASM_GENERATE_INTERNAL_LABEL (l2, FDE_END_LABEL, for_eh + j);
616   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4 && !for_eh)
617     dw2_asm_output_data (4, 0xffffffff, "Initial length escape value"
618                          " indicating 64-bit DWARF extension");
619   dw2_asm_output_delta (for_eh ? 4 : DWARF_OFFSET_SIZE, l2, l1,
620                         "FDE Length");
621   ASM_OUTPUT_LABEL (asm_out_file, l1);
622
623   if (for_eh)
624     dw2_asm_output_delta (4, l1, section_start_label, "FDE CIE offset");
625   else
626     dw2_asm_output_offset (DWARF_OFFSET_SIZE, section_start_label,
627                            debug_frame_section, "FDE CIE offset");
628
629   begin = second ? fde->dw_fde_second_begin : fde->dw_fde_begin;
630   end = second ? fde->dw_fde_second_end : fde->dw_fde_end;
631
632   if (for_eh)
633     {
634       rtx sym_ref = gen_rtx_SYMBOL_REF (Pmode, begin);
635       SYMBOL_REF_FLAGS (sym_ref) |= SYMBOL_FLAG_LOCAL;
636       dw2_asm_output_encoded_addr_rtx (fde_encoding, sym_ref, false,
637                                        "FDE initial location");
638       dw2_asm_output_delta (size_of_encoded_value (fde_encoding),
639                             end, begin, "FDE address range");
640     }
641   else
642     {
643       dw2_asm_output_addr (DWARF2_ADDR_SIZE, begin, "FDE initial location");
644       dw2_asm_output_delta (DWARF2_ADDR_SIZE, end, begin, "FDE address range");
645     }
646
647   if (augmentation[0])
648     {
649       if (any_lsda_needed)
650         {
651           int size = size_of_encoded_value (lsda_encoding);
652
653           if (lsda_encoding == DW_EH_PE_aligned)
654             {
655               int offset = (  4         /* Length */
656                             + 4         /* CIE offset */
657                             + 2 * size_of_encoded_value (fde_encoding)
658                             + 1         /* Augmentation size */ );
659               int pad = -offset & (PTR_SIZE - 1);
660
661               size += pad;
662               gcc_assert (size_of_uleb128 (size) == 1);
663             }
664
665           dw2_asm_output_data_uleb128 (size, "Augmentation size");
666
667           if (fde->uses_eh_lsda)
668             {
669               ASM_GENERATE_INTERNAL_LABEL (l1, second ? "LLSDAC" : "LLSDA",
670                                            fde->funcdef_number);
671               dw2_asm_output_encoded_addr_rtx (lsda_encoding,
672                                                gen_rtx_SYMBOL_REF (Pmode, l1),
673                                                false,
674                                                "Language Specific Data Area");
675             }
676           else
677             {
678               if (lsda_encoding == DW_EH_PE_aligned)
679                 ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (PTR_SIZE));
680               dw2_asm_output_data (size_of_encoded_value (lsda_encoding), 0,
681                                    "Language Specific Data Area (none)");
682             }
683         }
684       else
685         dw2_asm_output_data_uleb128 (0, "Augmentation size");
686     }
687
688   /* Loop through the Call Frame Instructions associated with this FDE.  */
689   fde->dw_fde_current_label = begin;
690   {
691     size_t from, until, i;
692
693     from = 0;
694     until = vec_safe_length (fde->dw_fde_cfi);
695
696     if (fde->dw_fde_second_begin == NULL)
697       ;
698     else if (!second)
699       until = fde->dw_fde_switch_cfi_index;
700     else
701       from = fde->dw_fde_switch_cfi_index;
702
703     for (i = from; i < until; i++)
704       output_cfi ((*fde->dw_fde_cfi)[i], fde, for_eh);
705   }
706
707   /* If we are to emit a ref/link from function bodies to their frame tables,
708      do it now.  This is typically performed to make sure that tables
709      associated with functions are dragged with them and not discarded in
710      garbage collecting links. We need to do this on a per function basis to
711      cope with -ffunction-sections.  */
712
713 #ifdef ASM_OUTPUT_DWARF_TABLE_REF
714   /* Switch to the function section, emit the ref to the tables, and
715      switch *back* into the table section.  */
716   switch_to_section (function_section (fde->decl));
717   ASM_OUTPUT_DWARF_TABLE_REF (section_start_label);
718   switch_to_frame_table_section (for_eh, true);
719 #endif
720
721   /* Pad the FDE out to an address sized boundary.  */
722   ASM_OUTPUT_ALIGN (asm_out_file,
723                     floor_log2 ((for_eh ? PTR_SIZE : DWARF2_ADDR_SIZE)));
724   ASM_OUTPUT_LABEL (asm_out_file, l2);
725
726   j += 2;
727 }
728
729 /* Return true if frame description entry FDE is needed for EH.  */
730
731 static bool
732 fde_needed_for_eh_p (dw_fde_ref fde)
733 {
734   if (flag_asynchronous_unwind_tables)
735     return true;
736
737   if (TARGET_USES_WEAK_UNWIND_INFO && DECL_WEAK (fde->decl))
738     return true;
739
740   if (fde->uses_eh_lsda)
741     return true;
742
743   /* If exceptions are enabled, we have collected nothrow info.  */
744   if (flag_exceptions && (fde->all_throwers_are_sibcalls || fde->nothrow))
745     return false;
746
747   return true;
748 }
749
750 /* Output the call frame information used to record information
751    that relates to calculating the frame pointer, and records the
752    location of saved registers.  */
753
754 static void
755 output_call_frame_info (int for_eh)
756 {
757   unsigned int i;
758   dw_fde_ref fde;
759   dw_cfi_ref cfi;
760   char l1[20], l2[20], section_start_label[20];
761   bool any_lsda_needed = false;
762   char augmentation[6];
763   int augmentation_size;
764   int fde_encoding = DW_EH_PE_absptr;
765   int per_encoding = DW_EH_PE_absptr;
766   int lsda_encoding = DW_EH_PE_absptr;
767   int return_reg;
768   rtx personality = NULL;
769   int dw_cie_version;
770
771   /* Don't emit a CIE if there won't be any FDEs.  */
772   if (!fde_vec)
773     return;
774
775   /* Nothing to do if the assembler's doing it all.  */
776   if (dwarf2out_do_cfi_asm ())
777     return;
778
779   /* If we don't have any functions we'll want to unwind out of, don't emit
780      any EH unwind information.  If we make FDEs linkonce, we may have to
781      emit an empty label for an FDE that wouldn't otherwise be emitted.  We
782      want to avoid having an FDE kept around when the function it refers to
783      is discarded.  Example where this matters: a primary function template
784      in C++ requires EH information, an explicit specialization doesn't.  */
785   if (for_eh)
786     {
787       bool any_eh_needed = false;
788
789       FOR_EACH_VEC_ELT (*fde_vec, i, fde)
790         {
791           if (fde->uses_eh_lsda)
792             any_eh_needed = any_lsda_needed = true;
793           else if (fde_needed_for_eh_p (fde))
794             any_eh_needed = true;
795           else if (TARGET_USES_WEAK_UNWIND_INFO)
796             targetm.asm_out.emit_unwind_label (asm_out_file, fde->decl, 1, 1);
797         }
798
799       if (!any_eh_needed)
800         return;
801     }
802
803   /* We're going to be generating comments, so turn on app.  */
804   if (flag_debug_asm)
805     app_enable ();
806
807   /* Switch to the proper frame section, first time.  */
808   switch_to_frame_table_section (for_eh, false);
809
810   ASM_GENERATE_INTERNAL_LABEL (section_start_label, FRAME_BEGIN_LABEL, for_eh);
811   ASM_OUTPUT_LABEL (asm_out_file, section_start_label);
812
813   /* Output the CIE.  */
814   ASM_GENERATE_INTERNAL_LABEL (l1, CIE_AFTER_SIZE_LABEL, for_eh);
815   ASM_GENERATE_INTERNAL_LABEL (l2, CIE_END_LABEL, for_eh);
816   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4 && !for_eh)
817     dw2_asm_output_data (4, 0xffffffff,
818       "Initial length escape value indicating 64-bit DWARF extension");
819   dw2_asm_output_delta (for_eh ? 4 : DWARF_OFFSET_SIZE, l2, l1,
820                         "Length of Common Information Entry");
821   ASM_OUTPUT_LABEL (asm_out_file, l1);
822
823   /* Now that the CIE pointer is PC-relative for EH,
824      use 0 to identify the CIE.  */
825   dw2_asm_output_data ((for_eh ? 4 : DWARF_OFFSET_SIZE),
826                        (for_eh ? 0 : DWARF_CIE_ID),
827                        "CIE Identifier Tag");
828
829   /* Use the CIE version 3 for DWARF3; allow DWARF2 to continue to
830      use CIE version 1, unless that would produce incorrect results
831      due to overflowing the return register column.  */
832   return_reg = DWARF2_FRAME_REG_OUT (DWARF_FRAME_RETURN_COLUMN, for_eh);
833   dw_cie_version = 1;
834   if (return_reg >= 256 || dwarf_version > 2)
835     dw_cie_version = 3;
836   dw2_asm_output_data (1, dw_cie_version, "CIE Version");
837
838   augmentation[0] = 0;
839   augmentation_size = 0;
840
841   personality = current_unit_personality;
842   if (for_eh)
843     {
844       char *p;
845
846       /* Augmentation:
847          z      Indicates that a uleb128 is present to size the
848                 augmentation section.
849          L      Indicates the encoding (and thus presence) of
850                 an LSDA pointer in the FDE augmentation.
851          R      Indicates a non-default pointer encoding for
852                 FDE code pointers.
853          P      Indicates the presence of an encoding + language
854                 personality routine in the CIE augmentation.  */
855
856       fde_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/1, /*global=*/0);
857       per_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2, /*global=*/1);
858       lsda_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0, /*global=*/0);
859
860       p = augmentation + 1;
861       if (personality)
862         {
863           *p++ = 'P';
864           augmentation_size += 1 + size_of_encoded_value (per_encoding);
865           assemble_external_libcall (personality);
866         }
867       if (any_lsda_needed)
868         {
869           *p++ = 'L';
870           augmentation_size += 1;
871         }
872       if (fde_encoding != DW_EH_PE_absptr)
873         {
874           *p++ = 'R';
875           augmentation_size += 1;
876         }
877       if (p > augmentation + 1)
878         {
879           augmentation[0] = 'z';
880           *p = '\0';
881         }
882
883       /* Ug.  Some platforms can't do unaligned dynamic relocations at all.  */
884       if (personality && per_encoding == DW_EH_PE_aligned)
885         {
886           int offset = (  4             /* Length */
887                         + 4             /* CIE Id */
888                         + 1             /* CIE version */
889                         + strlen (augmentation) + 1     /* Augmentation */
890                         + size_of_uleb128 (1)           /* Code alignment */
891                         + size_of_sleb128 (DWARF_CIE_DATA_ALIGNMENT)
892                         + 1             /* RA column */
893                         + 1             /* Augmentation size */
894                         + 1             /* Personality encoding */ );
895           int pad = -offset & (PTR_SIZE - 1);
896
897           augmentation_size += pad;
898
899           /* Augmentations should be small, so there's scarce need to
900              iterate for a solution.  Die if we exceed one uleb128 byte.  */
901           gcc_assert (size_of_uleb128 (augmentation_size) == 1);
902         }
903     }
904
905   dw2_asm_output_nstring (augmentation, -1, "CIE Augmentation");
906   if (dw_cie_version >= 4)
907     {
908       dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "CIE Address Size");
909       dw2_asm_output_data (1, 0, "CIE Segment Size");
910     }
911   dw2_asm_output_data_uleb128 (1, "CIE Code Alignment Factor");
912   dw2_asm_output_data_sleb128 (DWARF_CIE_DATA_ALIGNMENT,
913                                "CIE Data Alignment Factor");
914
915   if (dw_cie_version == 1)
916     dw2_asm_output_data (1, return_reg, "CIE RA Column");
917   else
918     dw2_asm_output_data_uleb128 (return_reg, "CIE RA Column");
919
920   if (augmentation[0])
921     {
922       dw2_asm_output_data_uleb128 (augmentation_size, "Augmentation size");
923       if (personality)
924         {
925           dw2_asm_output_data (1, per_encoding, "Personality (%s)",
926                                eh_data_format_name (per_encoding));
927           dw2_asm_output_encoded_addr_rtx (per_encoding,
928                                            personality,
929                                            true, NULL);
930         }
931
932       if (any_lsda_needed)
933         dw2_asm_output_data (1, lsda_encoding, "LSDA Encoding (%s)",
934                              eh_data_format_name (lsda_encoding));
935
936       if (fde_encoding != DW_EH_PE_absptr)
937         dw2_asm_output_data (1, fde_encoding, "FDE Encoding (%s)",
938                              eh_data_format_name (fde_encoding));
939     }
940
941   FOR_EACH_VEC_ELT (*cie_cfi_vec, i, cfi)
942     output_cfi (cfi, NULL, for_eh);
943
944   /* Pad the CIE out to an address sized boundary.  */
945   ASM_OUTPUT_ALIGN (asm_out_file,
946                     floor_log2 (for_eh ? PTR_SIZE : DWARF2_ADDR_SIZE));
947   ASM_OUTPUT_LABEL (asm_out_file, l2);
948
949   /* Loop through all of the FDE's.  */
950   FOR_EACH_VEC_ELT (*fde_vec, i, fde)
951     {
952       unsigned int k;
953
954       /* Don't emit EH unwind info for leaf functions that don't need it.  */
955       if (for_eh && !fde_needed_for_eh_p (fde))
956         continue;
957
958       for (k = 0; k < (fde->dw_fde_second_begin ? 2 : 1); k++)
959         output_fde (fde, for_eh, k, section_start_label, fde_encoding,
960                     augmentation, any_lsda_needed, lsda_encoding);
961     }
962
963   if (for_eh && targetm.terminate_dw2_eh_frame_info)
964     dw2_asm_output_data (4, 0, "End of Table");
965
966   /* Turn off app to make assembly quicker.  */
967   if (flag_debug_asm)
968     app_disable ();
969 }
970
971 /* Emit .cfi_startproc and .cfi_personality/.cfi_lsda if needed.  */
972
973 static void
974 dwarf2out_do_cfi_startproc (bool second)
975 {
976   int enc;
977   rtx ref;
978   rtx personality = get_personality_function (current_function_decl);
979
980   fprintf (asm_out_file, "\t.cfi_startproc\n");
981
982   if (personality)
983     {
984       enc = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2, /*global=*/1);
985       ref = personality;
986
987       /* ??? The GAS support isn't entirely consistent.  We have to
988          handle indirect support ourselves, but PC-relative is done
989          in the assembler.  Further, the assembler can't handle any
990          of the weirder relocation types.  */
991       if (enc & DW_EH_PE_indirect)
992         ref = dw2_force_const_mem (ref, true);
993
994       fprintf (asm_out_file, "\t.cfi_personality %#x,", enc);
995       output_addr_const (asm_out_file, ref);
996       fputc ('\n', asm_out_file);
997     }
998
999   if (crtl->uses_eh_lsda)
1000     {
1001       char lab[20];
1002
1003       enc = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0, /*global=*/0);
1004       ASM_GENERATE_INTERNAL_LABEL (lab, second ? "LLSDAC" : "LLSDA",
1005                                    current_function_funcdef_no);
1006       ref = gen_rtx_SYMBOL_REF (Pmode, lab);
1007       SYMBOL_REF_FLAGS (ref) = SYMBOL_FLAG_LOCAL;
1008
1009       if (enc & DW_EH_PE_indirect)
1010         ref = dw2_force_const_mem (ref, true);
1011
1012       fprintf (asm_out_file, "\t.cfi_lsda %#x,", enc);
1013       output_addr_const (asm_out_file, ref);
1014       fputc ('\n', asm_out_file);
1015     }
1016 }
1017
1018 /* Allocate CURRENT_FDE.  Immediately initialize all we can, noting that
1019    this allocation may be done before pass_final.  */
1020
1021 dw_fde_ref
1022 dwarf2out_alloc_current_fde (void)
1023 {
1024   dw_fde_ref fde;
1025
1026   fde = ggc_cleared_alloc<dw_fde_node> ();
1027   fde->decl = current_function_decl;
1028   fde->funcdef_number = current_function_funcdef_no;
1029   fde->fde_index = vec_safe_length (fde_vec);
1030   fde->all_throwers_are_sibcalls = crtl->all_throwers_are_sibcalls;
1031   fde->uses_eh_lsda = crtl->uses_eh_lsda;
1032   fde->nothrow = crtl->nothrow;
1033   fde->drap_reg = INVALID_REGNUM;
1034   fde->vdrap_reg = INVALID_REGNUM;
1035
1036   /* Record the FDE associated with this function.  */
1037   cfun->fde = fde;
1038   vec_safe_push (fde_vec, fde);
1039
1040   return fde;
1041 }
1042
1043 /* Output a marker (i.e. a label) for the beginning of a function, before
1044    the prologue.  */
1045
1046 void
1047 dwarf2out_begin_prologue (unsigned int line ATTRIBUTE_UNUSED,
1048                           const char *file ATTRIBUTE_UNUSED)
1049 {
1050   char label[MAX_ARTIFICIAL_LABEL_BYTES];
1051   char * dup_label;
1052   dw_fde_ref fde;
1053   section *fnsec;
1054   bool do_frame;
1055
1056   current_function_func_begin_label = NULL;
1057
1058   do_frame = dwarf2out_do_frame ();
1059
1060   /* ??? current_function_func_begin_label is also used by except.c for
1061      call-site information.  We must emit this label if it might be used.  */
1062   if (!do_frame
1063       && (!flag_exceptions
1064           || targetm_common.except_unwind_info (&global_options) == UI_SJLJ))
1065     return;
1066
1067   fnsec = function_section (current_function_decl);
1068   switch_to_section (fnsec);
1069   ASM_GENERATE_INTERNAL_LABEL (label, FUNC_BEGIN_LABEL,
1070                                current_function_funcdef_no);
1071   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, FUNC_BEGIN_LABEL,
1072                           current_function_funcdef_no);
1073   dup_label = xstrdup (label);
1074   current_function_func_begin_label = dup_label;
1075
1076   /* We can elide the fde allocation if we're not emitting debug info.  */
1077   if (!do_frame)
1078     return;
1079
1080   /* Cater to the various TARGET_ASM_OUTPUT_MI_THUNK implementations that
1081      emit insns as rtx but bypass the bulk of rest_of_compilation, which
1082      would include pass_dwarf2_frame.  If we've not created the FDE yet,
1083      do so now.  */
1084   fde = cfun->fde;
1085   if (fde == NULL)
1086     fde = dwarf2out_alloc_current_fde ();
1087
1088   /* Initialize the bits of CURRENT_FDE that were not available earlier.  */
1089   fde->dw_fde_begin = dup_label;
1090   fde->dw_fde_current_label = dup_label;
1091   fde->in_std_section = (fnsec == text_section
1092                          || (cold_text_section && fnsec == cold_text_section));
1093
1094   /* We only want to output line number information for the genuine dwarf2
1095      prologue case, not the eh frame case.  */
1096 #ifdef DWARF2_DEBUGGING_INFO
1097   if (file)
1098     dwarf2out_source_line (line, file, 0, true);
1099 #endif
1100
1101   if (dwarf2out_do_cfi_asm ())
1102     dwarf2out_do_cfi_startproc (false);
1103   else
1104     {
1105       rtx personality = get_personality_function (current_function_decl);
1106       if (!current_unit_personality)
1107         current_unit_personality = personality;
1108
1109       /* We cannot keep a current personality per function as without CFI
1110          asm, at the point where we emit the CFI data, there is no current
1111          function anymore.  */
1112       if (personality && current_unit_personality != personality)
1113         sorry ("multiple EH personalities are supported only with assemblers "
1114                "supporting .cfi_personality directive");
1115     }
1116 }
1117
1118 /* Output a marker (i.e. a label) for the end of the generated code
1119    for a function prologue.  This gets called *after* the prologue code has
1120    been generated.  */
1121
1122 void
1123 dwarf2out_vms_end_prologue (unsigned int line ATTRIBUTE_UNUSED,
1124                         const char *file ATTRIBUTE_UNUSED)
1125 {
1126   char label[MAX_ARTIFICIAL_LABEL_BYTES];
1127
1128   /* Output a label to mark the endpoint of the code generated for this
1129      function.  */
1130   ASM_GENERATE_INTERNAL_LABEL (label, PROLOGUE_END_LABEL,
1131                                current_function_funcdef_no);
1132   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, PROLOGUE_END_LABEL,
1133                           current_function_funcdef_no);
1134   cfun->fde->dw_fde_vms_end_prologue = xstrdup (label);
1135 }
1136
1137 /* Output a marker (i.e. a label) for the beginning of the generated code
1138    for a function epilogue.  This gets called *before* the prologue code has
1139    been generated.  */
1140
1141 void
1142 dwarf2out_vms_begin_epilogue (unsigned int line ATTRIBUTE_UNUSED,
1143                           const char *file ATTRIBUTE_UNUSED)
1144 {
1145   dw_fde_ref fde = cfun->fde;
1146   char label[MAX_ARTIFICIAL_LABEL_BYTES];
1147
1148   if (fde->dw_fde_vms_begin_epilogue)
1149     return;
1150
1151   /* Output a label to mark the endpoint of the code generated for this
1152      function.  */
1153   ASM_GENERATE_INTERNAL_LABEL (label, EPILOGUE_BEGIN_LABEL,
1154                                current_function_funcdef_no);
1155   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, EPILOGUE_BEGIN_LABEL,
1156                           current_function_funcdef_no);
1157   fde->dw_fde_vms_begin_epilogue = xstrdup (label);
1158 }
1159
1160 /* Output a marker (i.e. a label) for the absolute end of the generated code
1161    for a function definition.  This gets called *after* the epilogue code has
1162    been generated.  */
1163
1164 void
1165 dwarf2out_end_epilogue (unsigned int line ATTRIBUTE_UNUSED,
1166                         const char *file ATTRIBUTE_UNUSED)
1167 {
1168   dw_fde_ref fde;
1169   char label[MAX_ARTIFICIAL_LABEL_BYTES];
1170
1171   last_var_location_insn = NULL;
1172   cached_next_real_insn = NULL;
1173
1174   if (dwarf2out_do_cfi_asm ())
1175     fprintf (asm_out_file, "\t.cfi_endproc\n");
1176
1177   /* Output a label to mark the endpoint of the code generated for this
1178      function.  */
1179   ASM_GENERATE_INTERNAL_LABEL (label, FUNC_END_LABEL,
1180                                current_function_funcdef_no);
1181   ASM_OUTPUT_LABEL (asm_out_file, label);
1182   fde = cfun->fde;
1183   gcc_assert (fde != NULL);
1184   if (fde->dw_fde_second_begin == NULL)
1185     fde->dw_fde_end = xstrdup (label);
1186 }
1187
1188 void
1189 dwarf2out_frame_finish (void)
1190 {
1191   /* Output call frame information.  */
1192   if (targetm.debug_unwind_info () == UI_DWARF2)
1193     output_call_frame_info (0);
1194
1195   /* Output another copy for the unwinder.  */
1196   if ((flag_unwind_tables || flag_exceptions)
1197       && targetm_common.except_unwind_info (&global_options) == UI_DWARF2)
1198     output_call_frame_info (1);
1199 }
1200
1201 /* Note that the current function section is being used for code.  */
1202
1203 static void
1204 dwarf2out_note_section_used (void)
1205 {
1206   section *sec = current_function_section ();
1207   if (sec == text_section)
1208     text_section_used = true;
1209   else if (sec == cold_text_section)
1210     cold_text_section_used = true;
1211 }
1212
1213 static void var_location_switch_text_section (void);
1214 static void set_cur_line_info_table (section *);
1215
1216 void
1217 dwarf2out_switch_text_section (void)
1218 {
1219   section *sect;
1220   dw_fde_ref fde = cfun->fde;
1221
1222   gcc_assert (cfun && fde && fde->dw_fde_second_begin == NULL);
1223
1224   if (!in_cold_section_p)
1225     {
1226       fde->dw_fde_end = crtl->subsections.cold_section_end_label;
1227       fde->dw_fde_second_begin = crtl->subsections.hot_section_label;
1228       fde->dw_fde_second_end = crtl->subsections.hot_section_end_label;
1229     }
1230   else
1231     {
1232       fde->dw_fde_end = crtl->subsections.hot_section_end_label;
1233       fde->dw_fde_second_begin = crtl->subsections.cold_section_label;
1234       fde->dw_fde_second_end = crtl->subsections.cold_section_end_label;
1235     }
1236   have_multiple_function_sections = true;
1237
1238   /* There is no need to mark used sections when not debugging.  */
1239   if (cold_text_section != NULL)
1240     dwarf2out_note_section_used ();
1241
1242   if (dwarf2out_do_cfi_asm ())
1243     fprintf (asm_out_file, "\t.cfi_endproc\n");
1244
1245   /* Now do the real section switch.  */
1246   sect = current_function_section ();
1247   switch_to_section (sect);
1248
1249   fde->second_in_std_section
1250     = (sect == text_section
1251        || (cold_text_section && sect == cold_text_section));
1252
1253   if (dwarf2out_do_cfi_asm ())
1254     dwarf2out_do_cfi_startproc (true);
1255
1256   var_location_switch_text_section ();
1257
1258   if (cold_text_section != NULL)
1259     set_cur_line_info_table (sect);
1260 }
1261 \f
1262 /* And now, the subset of the debugging information support code necessary
1263    for emitting location expressions.  */
1264
1265 /* Data about a single source file.  */
1266 struct GTY((for_user)) dwarf_file_data {
1267   const char * filename;
1268   int emitted_number;
1269 };
1270
1271 typedef struct GTY(()) deferred_locations_struct
1272 {
1273   tree variable;
1274   dw_die_ref die;
1275 } deferred_locations;
1276
1277
1278 static GTY(()) vec<deferred_locations, va_gc> *deferred_locations_list;
1279
1280
1281 /* Describe an entry into the .debug_addr section.  */
1282
1283 enum ate_kind {
1284   ate_kind_rtx,
1285   ate_kind_rtx_dtprel,
1286   ate_kind_label
1287 };
1288
1289 typedef struct GTY((for_user)) addr_table_entry_struct {
1290   enum ate_kind kind;
1291   unsigned int refcount;
1292   unsigned int index;
1293   union addr_table_entry_struct_union
1294     {
1295       rtx GTY ((tag ("0"))) rtl;
1296       char * GTY ((tag ("1"))) label;
1297     }
1298   GTY ((desc ("%1.kind"))) addr;
1299 }
1300 addr_table_entry;
1301
1302 /* Location lists are ranges + location descriptions for that range,
1303    so you can track variables that are in different places over
1304    their entire life.  */
1305 typedef struct GTY(()) dw_loc_list_struct {
1306   dw_loc_list_ref dw_loc_next;
1307   const char *begin; /* Label and addr_entry for start of range */
1308   addr_table_entry *begin_entry;
1309   const char *end;  /* Label for end of range */
1310   char *ll_symbol; /* Label for beginning of location list.
1311                       Only on head of list */
1312   const char *section; /* Section this loclist is relative to */
1313   dw_loc_descr_ref expr;
1314   hashval_t hash;
1315   /* True if all addresses in this and subsequent lists are known to be
1316      resolved.  */
1317   bool resolved_addr;
1318   /* True if this list has been replaced by dw_loc_next.  */
1319   bool replaced;
1320   bool emitted;
1321   /* True if the range should be emitted even if begin and end
1322      are the same.  */
1323   bool force;
1324 } dw_loc_list_node;
1325
1326 static dw_loc_descr_ref int_loc_descriptor (HOST_WIDE_INT);
1327
1328 /* Convert a DWARF stack opcode into its string name.  */
1329
1330 static const char *
1331 dwarf_stack_op_name (unsigned int op)
1332 {
1333   const char *name = get_DW_OP_name (op);
1334
1335   if (name != NULL)
1336     return name;
1337
1338   return "OP_<unknown>";
1339 }
1340
1341 /* Return a pointer to a newly allocated location description.  Location
1342    descriptions are simple expression terms that can be strung
1343    together to form more complicated location (address) descriptions.  */
1344
1345 static inline dw_loc_descr_ref
1346 new_loc_descr (enum dwarf_location_atom op, unsigned HOST_WIDE_INT oprnd1,
1347                unsigned HOST_WIDE_INT oprnd2)
1348 {
1349   dw_loc_descr_ref descr = ggc_cleared_alloc<dw_loc_descr_node> ();
1350
1351   descr->dw_loc_opc = op;
1352   descr->dw_loc_oprnd1.val_class = dw_val_class_unsigned_const;
1353   descr->dw_loc_oprnd1.val_entry = NULL;
1354   descr->dw_loc_oprnd1.v.val_unsigned = oprnd1;
1355   descr->dw_loc_oprnd2.val_class = dw_val_class_unsigned_const;
1356   descr->dw_loc_oprnd2.val_entry = NULL;
1357   descr->dw_loc_oprnd2.v.val_unsigned = oprnd2;
1358
1359   return descr;
1360 }
1361
1362 /* Return a pointer to a newly allocated location description for
1363    REG and OFFSET.  */
1364
1365 static inline dw_loc_descr_ref
1366 new_reg_loc_descr (unsigned int reg,  unsigned HOST_WIDE_INT offset)
1367 {
1368   if (reg <= 31)
1369     return new_loc_descr ((enum dwarf_location_atom) (DW_OP_breg0 + reg),
1370                           offset, 0);
1371   else
1372     return new_loc_descr (DW_OP_bregx, reg, offset);
1373 }
1374
1375 /* Add a location description term to a location description expression.  */
1376
1377 static inline void
1378 add_loc_descr (dw_loc_descr_ref *list_head, dw_loc_descr_ref descr)
1379 {
1380   dw_loc_descr_ref *d;
1381
1382   /* Find the end of the chain.  */
1383   for (d = list_head; (*d) != NULL; d = &(*d)->dw_loc_next)
1384     ;
1385
1386   *d = descr;
1387 }
1388
1389 /* Compare two location operands for exact equality.  */
1390
1391 static bool
1392 dw_val_equal_p (dw_val_node *a, dw_val_node *b)
1393 {
1394   if (a->val_class != b->val_class)
1395     return false;
1396   switch (a->val_class)
1397     {
1398     case dw_val_class_none:
1399       return true;
1400     case dw_val_class_addr:
1401       return rtx_equal_p (a->v.val_addr, b->v.val_addr);
1402
1403     case dw_val_class_offset:
1404     case dw_val_class_unsigned_const:
1405     case dw_val_class_const:
1406     case dw_val_class_range_list:
1407     case dw_val_class_lineptr:
1408     case dw_val_class_macptr:
1409       /* These are all HOST_WIDE_INT, signed or unsigned.  */
1410       return a->v.val_unsigned == b->v.val_unsigned;
1411
1412     case dw_val_class_loc:
1413       return a->v.val_loc == b->v.val_loc;
1414     case dw_val_class_loc_list:
1415       return a->v.val_loc_list == b->v.val_loc_list;
1416     case dw_val_class_die_ref:
1417       return a->v.val_die_ref.die == b->v.val_die_ref.die;
1418     case dw_val_class_fde_ref:
1419       return a->v.val_fde_index == b->v.val_fde_index;
1420     case dw_val_class_lbl_id:
1421     case dw_val_class_high_pc:
1422       return strcmp (a->v.val_lbl_id, b->v.val_lbl_id) == 0;
1423     case dw_val_class_str:
1424       return a->v.val_str == b->v.val_str;
1425     case dw_val_class_flag:
1426       return a->v.val_flag == b->v.val_flag;
1427     case dw_val_class_file:
1428       return a->v.val_file == b->v.val_file;
1429     case dw_val_class_decl_ref:
1430       return a->v.val_decl_ref == b->v.val_decl_ref;
1431     
1432     case dw_val_class_const_double:
1433       return (a->v.val_double.high == b->v.val_double.high
1434               && a->v.val_double.low == b->v.val_double.low);
1435
1436     case dw_val_class_wide_int:
1437       return *a->v.val_wide == *b->v.val_wide;
1438
1439     case dw_val_class_vec:
1440       {
1441         size_t a_len = a->v.val_vec.elt_size * a->v.val_vec.length;
1442         size_t b_len = b->v.val_vec.elt_size * b->v.val_vec.length;
1443
1444         return (a_len == b_len
1445                 && !memcmp (a->v.val_vec.array, b->v.val_vec.array, a_len));
1446       }
1447
1448     case dw_val_class_data8:
1449       return memcmp (a->v.val_data8, b->v.val_data8, 8) == 0;
1450
1451     case dw_val_class_vms_delta:
1452       return (!strcmp (a->v.val_vms_delta.lbl1, b->v.val_vms_delta.lbl1)
1453               && !strcmp (a->v.val_vms_delta.lbl1, b->v.val_vms_delta.lbl1));
1454     }
1455   gcc_unreachable ();
1456 }
1457
1458 /* Compare two location atoms for exact equality.  */
1459
1460 static bool
1461 loc_descr_equal_p_1 (dw_loc_descr_ref a, dw_loc_descr_ref b)
1462 {
1463   if (a->dw_loc_opc != b->dw_loc_opc)
1464     return false;
1465
1466   /* ??? This is only ever set for DW_OP_constNu, for N equal to the
1467      address size, but since we always allocate cleared storage it
1468      should be zero for other types of locations.  */
1469   if (a->dtprel != b->dtprel)
1470     return false;
1471
1472   return (dw_val_equal_p (&a->dw_loc_oprnd1, &b->dw_loc_oprnd1)
1473           && dw_val_equal_p (&a->dw_loc_oprnd2, &b->dw_loc_oprnd2));
1474 }
1475
1476 /* Compare two complete location expressions for exact equality.  */
1477
1478 bool
1479 loc_descr_equal_p (dw_loc_descr_ref a, dw_loc_descr_ref b)
1480 {
1481   while (1)
1482     {
1483       if (a == b)
1484         return true;
1485       if (a == NULL || b == NULL)
1486         return false;
1487       if (!loc_descr_equal_p_1 (a, b))
1488         return false;
1489
1490       a = a->dw_loc_next;
1491       b = b->dw_loc_next;
1492     }
1493 }
1494
1495
1496 /* Add a constant OFFSET to a location expression.  */
1497
1498 static void
1499 loc_descr_plus_const (dw_loc_descr_ref *list_head, HOST_WIDE_INT offset)
1500 {
1501   dw_loc_descr_ref loc;
1502   HOST_WIDE_INT *p;
1503
1504   gcc_assert (*list_head != NULL);
1505
1506   if (!offset)
1507     return;
1508
1509   /* Find the end of the chain.  */
1510   for (loc = *list_head; loc->dw_loc_next != NULL; loc = loc->dw_loc_next)
1511     ;
1512
1513   p = NULL;
1514   if (loc->dw_loc_opc == DW_OP_fbreg
1515       || (loc->dw_loc_opc >= DW_OP_breg0 && loc->dw_loc_opc <= DW_OP_breg31))
1516     p = &loc->dw_loc_oprnd1.v.val_int;
1517   else if (loc->dw_loc_opc == DW_OP_bregx)
1518     p = &loc->dw_loc_oprnd2.v.val_int;
1519
1520   /* If the last operation is fbreg, breg{0..31,x}, optimize by adjusting its
1521      offset.  Don't optimize if an signed integer overflow would happen.  */
1522   if (p != NULL
1523       && ((offset > 0 && *p <= INTTYPE_MAXIMUM (HOST_WIDE_INT) - offset)
1524           || (offset < 0 && *p >= INTTYPE_MINIMUM (HOST_WIDE_INT) - offset)))
1525     *p += offset;
1526
1527   else if (offset > 0)
1528     loc->dw_loc_next = new_loc_descr (DW_OP_plus_uconst, offset, 0);
1529
1530   else
1531     {
1532       loc->dw_loc_next = int_loc_descriptor (-offset);
1533       add_loc_descr (&loc->dw_loc_next, new_loc_descr (DW_OP_minus, 0, 0));
1534     }
1535 }
1536
1537 /* Add a constant OFFSET to a location list.  */
1538
1539 static void
1540 loc_list_plus_const (dw_loc_list_ref list_head, HOST_WIDE_INT offset)
1541 {
1542   dw_loc_list_ref d;
1543   for (d = list_head; d != NULL; d = d->dw_loc_next)
1544     loc_descr_plus_const (&d->expr, offset);
1545 }
1546
1547 #define DWARF_REF_SIZE  \
1548   (dwarf_version == 2 ? DWARF2_ADDR_SIZE : DWARF_OFFSET_SIZE)
1549
1550 static unsigned long int get_base_type_offset (dw_die_ref);
1551
1552 /* Return the size of a location descriptor.  */
1553
1554 static unsigned long
1555 size_of_loc_descr (dw_loc_descr_ref loc)
1556 {
1557   unsigned long size = 1;
1558
1559   switch (loc->dw_loc_opc)
1560     {
1561     case DW_OP_addr:
1562       size += DWARF2_ADDR_SIZE;
1563       break;
1564     case DW_OP_GNU_addr_index:
1565     case DW_OP_GNU_const_index:
1566       gcc_assert (loc->dw_loc_oprnd1.val_entry->index != NO_INDEX_ASSIGNED);
1567       size += size_of_uleb128 (loc->dw_loc_oprnd1.val_entry->index);
1568       break;
1569     case DW_OP_const1u:
1570     case DW_OP_const1s:
1571       size += 1;
1572       break;
1573     case DW_OP_const2u:
1574     case DW_OP_const2s:
1575       size += 2;
1576       break;
1577     case DW_OP_const4u:
1578     case DW_OP_const4s:
1579       size += 4;
1580       break;
1581     case DW_OP_const8u:
1582     case DW_OP_const8s:
1583       size += 8;
1584       break;
1585     case DW_OP_constu:
1586       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
1587       break;
1588     case DW_OP_consts:
1589       size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
1590       break;
1591     case DW_OP_pick:
1592       size += 1;
1593       break;
1594     case DW_OP_plus_uconst:
1595       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
1596       break;
1597     case DW_OP_skip:
1598     case DW_OP_bra:
1599       size += 2;
1600       break;
1601     case DW_OP_breg0:
1602     case DW_OP_breg1:
1603     case DW_OP_breg2:
1604     case DW_OP_breg3:
1605     case DW_OP_breg4:
1606     case DW_OP_breg5:
1607     case DW_OP_breg6:
1608     case DW_OP_breg7:
1609     case DW_OP_breg8:
1610     case DW_OP_breg9:
1611     case DW_OP_breg10:
1612     case DW_OP_breg11:
1613     case DW_OP_breg12:
1614     case DW_OP_breg13:
1615     case DW_OP_breg14:
1616     case DW_OP_breg15:
1617     case DW_OP_breg16:
1618     case DW_OP_breg17:
1619     case DW_OP_breg18:
1620     case DW_OP_breg19:
1621     case DW_OP_breg20:
1622     case DW_OP_breg21:
1623     case DW_OP_breg22:
1624     case DW_OP_breg23:
1625     case DW_OP_breg24:
1626     case DW_OP_breg25:
1627     case DW_OP_breg26:
1628     case DW_OP_breg27:
1629     case DW_OP_breg28:
1630     case DW_OP_breg29:
1631     case DW_OP_breg30:
1632     case DW_OP_breg31:
1633       size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
1634       break;
1635     case DW_OP_regx:
1636       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
1637       break;
1638     case DW_OP_fbreg:
1639       size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
1640       break;
1641     case DW_OP_bregx:
1642       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
1643       size += size_of_sleb128 (loc->dw_loc_oprnd2.v.val_int);
1644       break;
1645     case DW_OP_piece:
1646       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
1647       break;
1648     case DW_OP_bit_piece:
1649       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
1650       size += size_of_uleb128 (loc->dw_loc_oprnd2.v.val_unsigned);
1651       break;
1652     case DW_OP_deref_size:
1653     case DW_OP_xderef_size:
1654       size += 1;
1655       break;
1656     case DW_OP_call2:
1657       size += 2;
1658       break;
1659     case DW_OP_call4:
1660       size += 4;
1661       break;
1662     case DW_OP_call_ref:
1663       size += DWARF_REF_SIZE;
1664       break;
1665     case DW_OP_implicit_value:
1666       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned)
1667               + loc->dw_loc_oprnd1.v.val_unsigned;
1668       break;
1669     case DW_OP_GNU_implicit_pointer:
1670       size += DWARF_REF_SIZE + size_of_sleb128 (loc->dw_loc_oprnd2.v.val_int);
1671       break;
1672     case DW_OP_GNU_entry_value:
1673       {
1674         unsigned long op_size = size_of_locs (loc->dw_loc_oprnd1.v.val_loc);
1675         size += size_of_uleb128 (op_size) + op_size;
1676         break;
1677       }
1678     case DW_OP_GNU_const_type:
1679       {
1680         unsigned long o
1681           = get_base_type_offset (loc->dw_loc_oprnd1.v.val_die_ref.die);
1682         size += size_of_uleb128 (o) + 1;
1683         switch (loc->dw_loc_oprnd2.val_class)
1684           {
1685           case dw_val_class_vec:
1686             size += loc->dw_loc_oprnd2.v.val_vec.length
1687                     * loc->dw_loc_oprnd2.v.val_vec.elt_size;
1688             break;
1689           case dw_val_class_const:
1690             size += HOST_BITS_PER_WIDE_INT / BITS_PER_UNIT;
1691             break;
1692           case dw_val_class_const_double:
1693             size += HOST_BITS_PER_DOUBLE_INT / BITS_PER_UNIT;
1694             break;
1695           case dw_val_class_wide_int:
1696             size += (get_full_len (*loc->dw_loc_oprnd2.v.val_wide)
1697                      * HOST_BITS_PER_WIDE_INT / BITS_PER_UNIT);
1698             break;
1699           default:
1700             gcc_unreachable ();
1701           }
1702         break;
1703       }
1704     case DW_OP_GNU_regval_type:
1705       {
1706         unsigned long o
1707           = get_base_type_offset (loc->dw_loc_oprnd2.v.val_die_ref.die);
1708         size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned)
1709                 + size_of_uleb128 (o);
1710       }
1711       break;
1712     case DW_OP_GNU_deref_type:
1713       {
1714         unsigned long o
1715           = get_base_type_offset (loc->dw_loc_oprnd2.v.val_die_ref.die);
1716         size += 1 + size_of_uleb128 (o);
1717       }
1718       break;
1719     case DW_OP_GNU_convert:
1720     case DW_OP_GNU_reinterpret:
1721       if (loc->dw_loc_oprnd1.val_class == dw_val_class_unsigned_const)
1722         size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
1723       else
1724         {
1725           unsigned long o
1726             = get_base_type_offset (loc->dw_loc_oprnd1.v.val_die_ref.die);
1727           size += size_of_uleb128 (o);
1728         }
1729       break;
1730     case DW_OP_GNU_parameter_ref:
1731       size += 4;
1732       break;
1733     default:
1734       break;
1735     }
1736
1737   return size;
1738 }
1739
1740 /* Return the size of a series of location descriptors.  */
1741
1742 unsigned long
1743 size_of_locs (dw_loc_descr_ref loc)
1744 {
1745   dw_loc_descr_ref l;
1746   unsigned long size;
1747
1748   /* If there are no skip or bra opcodes, don't fill in the dw_loc_addr
1749      field, to avoid writing to a PCH file.  */
1750   for (size = 0, l = loc; l != NULL; l = l->dw_loc_next)
1751     {
1752       if (l->dw_loc_opc == DW_OP_skip || l->dw_loc_opc == DW_OP_bra)
1753         break;
1754       size += size_of_loc_descr (l);
1755     }
1756   if (! l)
1757     return size;
1758
1759   for (size = 0, l = loc; l != NULL; l = l->dw_loc_next)
1760     {
1761       l->dw_loc_addr = size;
1762       size += size_of_loc_descr (l);
1763     }
1764
1765   return size;
1766 }
1767
1768 static HOST_WIDE_INT extract_int (const unsigned char *, unsigned);
1769 static void get_ref_die_offset_label (char *, dw_die_ref);
1770 static unsigned long int get_ref_die_offset (dw_die_ref);
1771
1772 /* Output location description stack opcode's operands (if any).
1773    The for_eh_or_skip parameter controls whether register numbers are
1774    converted using DWARF2_FRAME_REG_OUT, which is needed in the case that
1775    hard reg numbers have been processed via DWARF_FRAME_REGNUM (i.e. for unwind
1776    info).  This should be suppressed for the cases that have not been converted
1777    (i.e. symbolic debug info), by setting the parameter < 0.  See PR47324.  */
1778
1779 static void
1780 output_loc_operands (dw_loc_descr_ref loc, int for_eh_or_skip)
1781 {
1782   dw_val_ref val1 = &loc->dw_loc_oprnd1;
1783   dw_val_ref val2 = &loc->dw_loc_oprnd2;
1784
1785   switch (loc->dw_loc_opc)
1786     {
1787 #ifdef DWARF2_DEBUGGING_INFO
1788     case DW_OP_const2u:
1789     case DW_OP_const2s:
1790       dw2_asm_output_data (2, val1->v.val_int, NULL);
1791       break;
1792     case DW_OP_const4u:
1793       if (loc->dtprel)
1794         {
1795           gcc_assert (targetm.asm_out.output_dwarf_dtprel);
1796           targetm.asm_out.output_dwarf_dtprel (asm_out_file, 4,
1797                                                val1->v.val_addr);
1798           fputc ('\n', asm_out_file);
1799           break;
1800         }
1801       /* FALLTHRU */
1802     case DW_OP_const4s:
1803       dw2_asm_output_data (4, val1->v.val_int, NULL);
1804       break;
1805     case DW_OP_const8u:
1806       if (loc->dtprel)
1807         {
1808           gcc_assert (targetm.asm_out.output_dwarf_dtprel);
1809           targetm.asm_out.output_dwarf_dtprel (asm_out_file, 8,
1810                                                val1->v.val_addr);
1811           fputc ('\n', asm_out_file);
1812           break;
1813         }
1814       /* FALLTHRU */
1815     case DW_OP_const8s:
1816       gcc_assert (HOST_BITS_PER_WIDE_INT >= 64);
1817       dw2_asm_output_data (8, val1->v.val_int, NULL);
1818       break;
1819     case DW_OP_skip:
1820     case DW_OP_bra:
1821       {
1822         int offset;
1823
1824         gcc_assert (val1->val_class == dw_val_class_loc);
1825         offset = val1->v.val_loc->dw_loc_addr - (loc->dw_loc_addr + 3);
1826
1827         dw2_asm_output_data (2, offset, NULL);
1828       }
1829       break;
1830     case DW_OP_implicit_value:
1831       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
1832       switch (val2->val_class)
1833         {
1834         case dw_val_class_const:
1835           dw2_asm_output_data (val1->v.val_unsigned, val2->v.val_int, NULL);
1836           break;
1837         case dw_val_class_vec:
1838           {
1839             unsigned int elt_size = val2->v.val_vec.elt_size;
1840             unsigned int len = val2->v.val_vec.length;
1841             unsigned int i;
1842             unsigned char *p;
1843
1844             if (elt_size > sizeof (HOST_WIDE_INT))
1845               {
1846                 elt_size /= 2;
1847                 len *= 2;
1848               }
1849             for (i = 0, p = val2->v.val_vec.array;
1850                  i < len;
1851                  i++, p += elt_size)
1852               dw2_asm_output_data (elt_size, extract_int (p, elt_size),
1853                                    "fp or vector constant word %u", i);
1854           }
1855           break;
1856         case dw_val_class_const_double:
1857           {
1858             unsigned HOST_WIDE_INT first, second;
1859
1860             if (WORDS_BIG_ENDIAN)
1861               {
1862                 first = val2->v.val_double.high;
1863                 second = val2->v.val_double.low;
1864               }
1865             else
1866               {
1867                 first = val2->v.val_double.low;
1868                 second = val2->v.val_double.high;
1869               }
1870             dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR,
1871                                  first, NULL);
1872             dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR,
1873                                  second, NULL);
1874           }
1875           break;
1876         case dw_val_class_wide_int:
1877           {
1878             int i;
1879             int len = get_full_len (*val2->v.val_wide);
1880             if (WORDS_BIG_ENDIAN)
1881               for (i = len - 1; i >= 0; --i)
1882                 dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR,
1883                                      val2->v.val_wide->elt (i), NULL);
1884             else
1885               for (i = 0; i < len; ++i)
1886                 dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR,
1887                                      val2->v.val_wide->elt (i), NULL);
1888           }
1889           break;
1890         case dw_val_class_addr:
1891           gcc_assert (val1->v.val_unsigned == DWARF2_ADDR_SIZE);
1892           dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE, val2->v.val_addr, NULL);
1893           break;
1894         default:
1895           gcc_unreachable ();
1896         }
1897       break;
1898 #else
1899     case DW_OP_const2u:
1900     case DW_OP_const2s:
1901     case DW_OP_const4u:
1902     case DW_OP_const4s:
1903     case DW_OP_const8u:
1904     case DW_OP_const8s:
1905     case DW_OP_skip:
1906     case DW_OP_bra:
1907     case DW_OP_implicit_value:
1908       /* We currently don't make any attempt to make sure these are
1909          aligned properly like we do for the main unwind info, so
1910          don't support emitting things larger than a byte if we're
1911          only doing unwinding.  */
1912       gcc_unreachable ();
1913 #endif
1914     case DW_OP_const1u:
1915     case DW_OP_const1s:
1916       dw2_asm_output_data (1, val1->v.val_int, NULL);
1917       break;
1918     case DW_OP_constu:
1919       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
1920       break;
1921     case DW_OP_consts:
1922       dw2_asm_output_data_sleb128 (val1->v.val_int, NULL);
1923       break;
1924     case DW_OP_pick:
1925       dw2_asm_output_data (1, val1->v.val_int, NULL);
1926       break;
1927     case DW_OP_plus_uconst:
1928       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
1929       break;
1930     case DW_OP_breg0:
1931     case DW_OP_breg1:
1932     case DW_OP_breg2:
1933     case DW_OP_breg3:
1934     case DW_OP_breg4:
1935     case DW_OP_breg5:
1936     case DW_OP_breg6:
1937     case DW_OP_breg7:
1938     case DW_OP_breg8:
1939     case DW_OP_breg9:
1940     case DW_OP_breg10:
1941     case DW_OP_breg11:
1942     case DW_OP_breg12:
1943     case DW_OP_breg13:
1944     case DW_OP_breg14:
1945     case DW_OP_breg15:
1946     case DW_OP_breg16:
1947     case DW_OP_breg17:
1948     case DW_OP_breg18:
1949     case DW_OP_breg19:
1950     case DW_OP_breg20:
1951     case DW_OP_breg21:
1952     case DW_OP_breg22:
1953     case DW_OP_breg23:
1954     case DW_OP_breg24:
1955     case DW_OP_breg25:
1956     case DW_OP_breg26:
1957     case DW_OP_breg27:
1958     case DW_OP_breg28:
1959     case DW_OP_breg29:
1960     case DW_OP_breg30:
1961     case DW_OP_breg31:
1962       dw2_asm_output_data_sleb128 (val1->v.val_int, NULL);
1963       break;
1964     case DW_OP_regx:
1965       {
1966         unsigned r = val1->v.val_unsigned;
1967         if (for_eh_or_skip >= 0)
1968           r = DWARF2_FRAME_REG_OUT (r, for_eh_or_skip);
1969         gcc_assert (size_of_uleb128 (r) 
1970                     == size_of_uleb128 (val1->v.val_unsigned));
1971         dw2_asm_output_data_uleb128 (r, NULL);  
1972       }
1973       break;
1974     case DW_OP_fbreg:
1975       dw2_asm_output_data_sleb128 (val1->v.val_int, NULL);
1976       break;
1977     case DW_OP_bregx:
1978       {
1979         unsigned r = val1->v.val_unsigned;
1980         if (for_eh_or_skip >= 0)
1981           r = DWARF2_FRAME_REG_OUT (r, for_eh_or_skip);
1982         gcc_assert (size_of_uleb128 (r) 
1983                     == size_of_uleb128 (val1->v.val_unsigned));
1984         dw2_asm_output_data_uleb128 (r, NULL);  
1985         dw2_asm_output_data_sleb128 (val2->v.val_int, NULL);
1986       }
1987       break;
1988     case DW_OP_piece:
1989       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
1990       break;
1991     case DW_OP_bit_piece:
1992       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
1993       dw2_asm_output_data_uleb128 (val2->v.val_unsigned, NULL);
1994       break;
1995     case DW_OP_deref_size:
1996     case DW_OP_xderef_size:
1997       dw2_asm_output_data (1, val1->v.val_int, NULL);
1998       break;
1999
2000     case DW_OP_addr:
2001       if (loc->dtprel)
2002         {
2003           if (targetm.asm_out.output_dwarf_dtprel)
2004             {
2005               targetm.asm_out.output_dwarf_dtprel (asm_out_file,
2006                                                    DWARF2_ADDR_SIZE,
2007                                                    val1->v.val_addr);
2008               fputc ('\n', asm_out_file);
2009             }
2010           else
2011             gcc_unreachable ();
2012         }
2013       else
2014         {
2015 #ifdef DWARF2_DEBUGGING_INFO
2016           dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE, val1->v.val_addr, NULL);
2017 #else
2018           gcc_unreachable ();
2019 #endif
2020         }
2021       break;
2022
2023     case DW_OP_GNU_addr_index:
2024     case DW_OP_GNU_const_index:
2025       gcc_assert (loc->dw_loc_oprnd1.val_entry->index != NO_INDEX_ASSIGNED);
2026       dw2_asm_output_data_uleb128 (loc->dw_loc_oprnd1.val_entry->index,
2027                                    "(index into .debug_addr)");
2028       break;
2029
2030     case DW_OP_GNU_implicit_pointer:
2031       {
2032         char label[MAX_ARTIFICIAL_LABEL_BYTES
2033                    + HOST_BITS_PER_WIDE_INT / 2 + 2];
2034         gcc_assert (val1->val_class == dw_val_class_die_ref);
2035         get_ref_die_offset_label (label, val1->v.val_die_ref.die);
2036         dw2_asm_output_offset (DWARF_REF_SIZE, label, debug_info_section, NULL);
2037         dw2_asm_output_data_sleb128 (val2->v.val_int, NULL);
2038       }
2039       break;
2040
2041     case DW_OP_GNU_entry_value:
2042       dw2_asm_output_data_uleb128 (size_of_locs (val1->v.val_loc), NULL);
2043       output_loc_sequence (val1->v.val_loc, for_eh_or_skip);
2044       break;
2045
2046     case DW_OP_GNU_const_type:
2047       {
2048         unsigned long o = get_base_type_offset (val1->v.val_die_ref.die), l;
2049         gcc_assert (o);
2050         dw2_asm_output_data_uleb128 (o, NULL);
2051         switch (val2->val_class)
2052           {
2053           case dw_val_class_const:
2054             l = HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR;
2055             dw2_asm_output_data (1, l, NULL);
2056             dw2_asm_output_data (l, val2->v.val_int, NULL);
2057             break;
2058           case dw_val_class_vec:
2059             {
2060               unsigned int elt_size = val2->v.val_vec.elt_size;
2061               unsigned int len = val2->v.val_vec.length;
2062               unsigned int i;
2063               unsigned char *p;
2064
2065               l = len * elt_size;
2066               dw2_asm_output_data (1, l, NULL);
2067               if (elt_size > sizeof (HOST_WIDE_INT))
2068                 {
2069                   elt_size /= 2;
2070                   len *= 2;
2071                 }
2072               for (i = 0, p = val2->v.val_vec.array;
2073                    i < len;
2074                    i++, p += elt_size)
2075                 dw2_asm_output_data (elt_size, extract_int (p, elt_size),
2076                                      "fp or vector constant word %u", i);
2077             }
2078             break;
2079           case dw_val_class_const_double:
2080             {
2081               unsigned HOST_WIDE_INT first, second;
2082               l = HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR;
2083
2084               dw2_asm_output_data (1, 2 * l, NULL);
2085               if (WORDS_BIG_ENDIAN)
2086                 {
2087                   first = val2->v.val_double.high;
2088                   second = val2->v.val_double.low;
2089                 }
2090               else
2091                 {
2092                   first = val2->v.val_double.low;
2093                   second = val2->v.val_double.high;
2094                 }
2095               dw2_asm_output_data (l, first, NULL);
2096               dw2_asm_output_data (l, second, NULL);
2097             }
2098             break;
2099           case dw_val_class_wide_int:
2100             {
2101               int i;
2102               int len = get_full_len (*val2->v.val_wide);
2103               l = HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR;
2104
2105               dw2_asm_output_data (1, len * l, NULL);
2106               if (WORDS_BIG_ENDIAN)
2107                 for (i = len - 1; i >= 0; --i)
2108                   dw2_asm_output_data (l, val2->v.val_wide->elt (i), NULL);
2109               else
2110                 for (i = 0; i < len; ++i)
2111                   dw2_asm_output_data (l, val2->v.val_wide->elt (i), NULL);
2112             }
2113             break;
2114           default:
2115             gcc_unreachable ();
2116           }
2117       }
2118       break;
2119     case DW_OP_GNU_regval_type:
2120       {
2121         unsigned r = val1->v.val_unsigned;
2122         unsigned long o = get_base_type_offset (val2->v.val_die_ref.die);
2123         gcc_assert (o);
2124         if (for_eh_or_skip >= 0)
2125           {
2126             r = DWARF2_FRAME_REG_OUT (r, for_eh_or_skip);
2127             gcc_assert (size_of_uleb128 (r)
2128                         == size_of_uleb128 (val1->v.val_unsigned));
2129           }
2130         dw2_asm_output_data_uleb128 (r, NULL);
2131         dw2_asm_output_data_uleb128 (o, NULL);
2132       }
2133       break;
2134     case DW_OP_GNU_deref_type:
2135       {
2136         unsigned long o = get_base_type_offset (val2->v.val_die_ref.die);
2137         gcc_assert (o);
2138         dw2_asm_output_data (1, val1->v.val_int, NULL);
2139         dw2_asm_output_data_uleb128 (o, NULL);
2140       }
2141       break;
2142     case DW_OP_GNU_convert:
2143     case DW_OP_GNU_reinterpret:
2144       if (loc->dw_loc_oprnd1.val_class == dw_val_class_unsigned_const)
2145         dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
2146       else
2147         {
2148           unsigned long o = get_base_type_offset (val1->v.val_die_ref.die);
2149           gcc_assert (o);
2150           dw2_asm_output_data_uleb128 (o, NULL);
2151         }
2152       break;
2153
2154     case DW_OP_GNU_parameter_ref:
2155       {
2156         unsigned long o;
2157         gcc_assert (val1->val_class == dw_val_class_die_ref);
2158         o = get_ref_die_offset (val1->v.val_die_ref.die);
2159         dw2_asm_output_data (4, o, NULL);
2160       }
2161       break;
2162
2163     default:
2164       /* Other codes have no operands.  */
2165       break;
2166     }
2167 }
2168
2169 /* Output a sequence of location operations.  
2170    The for_eh_or_skip parameter controls whether register numbers are
2171    converted using DWARF2_FRAME_REG_OUT, which is needed in the case that
2172    hard reg numbers have been processed via DWARF_FRAME_REGNUM (i.e. for unwind
2173    info).  This should be suppressed for the cases that have not been converted
2174    (i.e. symbolic debug info), by setting the parameter < 0.  See PR47324.  */
2175
2176 void
2177 output_loc_sequence (dw_loc_descr_ref loc, int for_eh_or_skip)
2178 {
2179   for (; loc != NULL; loc = loc->dw_loc_next)
2180     {
2181       enum dwarf_location_atom opc = loc->dw_loc_opc;
2182       /* Output the opcode.  */
2183       if (for_eh_or_skip >= 0 
2184           && opc >= DW_OP_breg0 && opc <= DW_OP_breg31)
2185         {
2186           unsigned r = (opc - DW_OP_breg0);
2187           r = DWARF2_FRAME_REG_OUT (r, for_eh_or_skip);
2188           gcc_assert (r <= 31);
2189           opc = (enum dwarf_location_atom) (DW_OP_breg0 + r);
2190         }
2191       else if (for_eh_or_skip >= 0 
2192                && opc >= DW_OP_reg0 && opc <= DW_OP_reg31)
2193         {
2194           unsigned r = (opc - DW_OP_reg0);
2195           r = DWARF2_FRAME_REG_OUT (r, for_eh_or_skip);
2196           gcc_assert (r <= 31);
2197           opc = (enum dwarf_location_atom) (DW_OP_reg0 + r);
2198         }
2199
2200       dw2_asm_output_data (1, opc,
2201                              "%s", dwarf_stack_op_name (opc));
2202
2203       /* Output the operand(s) (if any).  */
2204       output_loc_operands (loc, for_eh_or_skip);
2205     }
2206 }
2207
2208 /* Output location description stack opcode's operands (if any).
2209    The output is single bytes on a line, suitable for .cfi_escape.  */
2210
2211 static void
2212 output_loc_operands_raw (dw_loc_descr_ref loc)
2213 {
2214   dw_val_ref val1 = &loc->dw_loc_oprnd1;
2215   dw_val_ref val2 = &loc->dw_loc_oprnd2;
2216
2217   switch (loc->dw_loc_opc)
2218     {
2219     case DW_OP_addr:
2220     case DW_OP_GNU_addr_index:
2221     case DW_OP_GNU_const_index:
2222     case DW_OP_implicit_value:
2223       /* We cannot output addresses in .cfi_escape, only bytes.  */
2224       gcc_unreachable ();
2225
2226     case DW_OP_const1u:
2227     case DW_OP_const1s:
2228     case DW_OP_pick:
2229     case DW_OP_deref_size:
2230     case DW_OP_xderef_size:
2231       fputc (',', asm_out_file);
2232       dw2_asm_output_data_raw (1, val1->v.val_int);
2233       break;
2234
2235     case DW_OP_const2u:
2236     case DW_OP_const2s:
2237       fputc (',', asm_out_file);
2238       dw2_asm_output_data_raw (2, val1->v.val_int);
2239       break;
2240
2241     case DW_OP_const4u:
2242     case DW_OP_const4s:
2243       fputc (',', asm_out_file);
2244       dw2_asm_output_data_raw (4, val1->v.val_int);
2245       break;
2246
2247     case DW_OP_const8u:
2248     case DW_OP_const8s:
2249       gcc_assert (HOST_BITS_PER_WIDE_INT >= 64);
2250       fputc (',', asm_out_file);
2251       dw2_asm_output_data_raw (8, val1->v.val_int);
2252       break;
2253
2254     case DW_OP_skip:
2255     case DW_OP_bra:
2256       {
2257         int offset;
2258
2259         gcc_assert (val1->val_class == dw_val_class_loc);
2260         offset = val1->v.val_loc->dw_loc_addr - (loc->dw_loc_addr + 3);
2261
2262         fputc (',', asm_out_file);
2263         dw2_asm_output_data_raw (2, offset);
2264       }
2265       break;
2266
2267     case DW_OP_regx:
2268       {
2269         unsigned r = DWARF2_FRAME_REG_OUT (val1->v.val_unsigned, 1);
2270         gcc_assert (size_of_uleb128 (r) 
2271                     == size_of_uleb128 (val1->v.val_unsigned));
2272         fputc (',', asm_out_file);
2273         dw2_asm_output_data_uleb128_raw (r);
2274       }
2275       break;
2276       
2277     case DW_OP_constu:
2278     case DW_OP_plus_uconst:
2279     case DW_OP_piece:
2280       fputc (',', asm_out_file);
2281       dw2_asm_output_data_uleb128_raw (val1->v.val_unsigned);
2282       break;
2283
2284     case DW_OP_bit_piece:
2285       fputc (',', asm_out_file);
2286       dw2_asm_output_data_uleb128_raw (val1->v.val_unsigned);
2287       dw2_asm_output_data_uleb128_raw (val2->v.val_unsigned);
2288       break;
2289
2290     case DW_OP_consts:
2291     case DW_OP_breg0:
2292     case DW_OP_breg1:
2293     case DW_OP_breg2:
2294     case DW_OP_breg3:
2295     case DW_OP_breg4:
2296     case DW_OP_breg5:
2297     case DW_OP_breg6:
2298     case DW_OP_breg7:
2299     case DW_OP_breg8:
2300     case DW_OP_breg9:
2301     case DW_OP_breg10:
2302     case DW_OP_breg11:
2303     case DW_OP_breg12:
2304     case DW_OP_breg13:
2305     case DW_OP_breg14:
2306     case DW_OP_breg15:
2307     case DW_OP_breg16:
2308     case DW_OP_breg17:
2309     case DW_OP_breg18:
2310     case DW_OP_breg19:
2311     case DW_OP_breg20:
2312     case DW_OP_breg21:
2313     case DW_OP_breg22:
2314     case DW_OP_breg23:
2315     case DW_OP_breg24:
2316     case DW_OP_breg25:
2317     case DW_OP_breg26:
2318     case DW_OP_breg27:
2319     case DW_OP_breg28:
2320     case DW_OP_breg29:
2321     case DW_OP_breg30:
2322     case DW_OP_breg31:
2323     case DW_OP_fbreg:
2324       fputc (',', asm_out_file);
2325       dw2_asm_output_data_sleb128_raw (val1->v.val_int);
2326       break;
2327
2328     case DW_OP_bregx:
2329       {
2330         unsigned r = DWARF2_FRAME_REG_OUT (val1->v.val_unsigned, 1);
2331         gcc_assert (size_of_uleb128 (r) 
2332                     == size_of_uleb128 (val1->v.val_unsigned));
2333         fputc (',', asm_out_file);
2334         dw2_asm_output_data_uleb128_raw (r);
2335         fputc (',', asm_out_file);
2336         dw2_asm_output_data_sleb128_raw (val2->v.val_int);
2337       }
2338       break;
2339
2340     case DW_OP_GNU_implicit_pointer:
2341     case DW_OP_GNU_entry_value:
2342     case DW_OP_GNU_const_type:
2343     case DW_OP_GNU_regval_type:
2344     case DW_OP_GNU_deref_type:
2345     case DW_OP_GNU_convert:
2346     case DW_OP_GNU_reinterpret:
2347     case DW_OP_GNU_parameter_ref:
2348       gcc_unreachable ();
2349       break;
2350
2351     default:
2352       /* Other codes have no operands.  */
2353       break;
2354     }
2355 }
2356
2357 void
2358 output_loc_sequence_raw (dw_loc_descr_ref loc)
2359 {
2360   while (1)
2361     {
2362       enum dwarf_location_atom opc = loc->dw_loc_opc;
2363       /* Output the opcode.  */
2364       if (opc >= DW_OP_breg0 && opc <= DW_OP_breg31)
2365         {
2366           unsigned r = (opc - DW_OP_breg0);
2367           r = DWARF2_FRAME_REG_OUT (r, 1);
2368           gcc_assert (r <= 31);
2369           opc = (enum dwarf_location_atom) (DW_OP_breg0 + r);
2370         }
2371       else if (opc >= DW_OP_reg0 && opc <= DW_OP_reg31)
2372         {
2373           unsigned r = (opc - DW_OP_reg0);
2374           r = DWARF2_FRAME_REG_OUT (r, 1);
2375           gcc_assert (r <= 31);
2376           opc = (enum dwarf_location_atom) (DW_OP_reg0 + r);
2377         }
2378       /* Output the opcode.  */
2379       fprintf (asm_out_file, "%#x", opc);
2380       output_loc_operands_raw (loc);
2381
2382       if (!loc->dw_loc_next)
2383         break;
2384       loc = loc->dw_loc_next;
2385
2386       fputc (',', asm_out_file);
2387     }
2388 }
2389
2390 /* This function builds a dwarf location descriptor sequence from a
2391    dw_cfa_location, adding the given OFFSET to the result of the
2392    expression.  */
2393
2394 struct dw_loc_descr_node *
2395 build_cfa_loc (dw_cfa_location *cfa, HOST_WIDE_INT offset)
2396 {
2397   struct dw_loc_descr_node *head, *tmp;
2398
2399   offset += cfa->offset;
2400
2401   if (cfa->indirect)
2402     {
2403       head = new_reg_loc_descr (cfa->reg, cfa->base_offset);
2404       head->dw_loc_oprnd1.val_class = dw_val_class_const;
2405       head->dw_loc_oprnd1.val_entry = NULL;
2406       tmp = new_loc_descr (DW_OP_deref, 0, 0);
2407       add_loc_descr (&head, tmp);
2408       if (offset != 0)
2409         {
2410           tmp = new_loc_descr (DW_OP_plus_uconst, offset, 0);
2411           add_loc_descr (&head, tmp);
2412         }
2413     }
2414   else
2415     head = new_reg_loc_descr (cfa->reg, offset);
2416
2417   return head;
2418 }
2419
2420 /* This function builds a dwarf location descriptor sequence for
2421    the address at OFFSET from the CFA when stack is aligned to
2422    ALIGNMENT byte.  */
2423
2424 struct dw_loc_descr_node *
2425 build_cfa_aligned_loc (dw_cfa_location *cfa,
2426                        HOST_WIDE_INT offset, HOST_WIDE_INT alignment)
2427 {
2428   struct dw_loc_descr_node *head;
2429   unsigned int dwarf_fp
2430     = DWARF_FRAME_REGNUM (HARD_FRAME_POINTER_REGNUM);
2431
2432   /* When CFA is defined as FP+OFFSET, emulate stack alignment.  */
2433   if (cfa->reg == HARD_FRAME_POINTER_REGNUM && cfa->indirect == 0)
2434     {
2435       head = new_reg_loc_descr (dwarf_fp, 0);
2436       add_loc_descr (&head, int_loc_descriptor (alignment));
2437       add_loc_descr (&head, new_loc_descr (DW_OP_and, 0, 0));
2438       loc_descr_plus_const (&head, offset);
2439     }
2440   else
2441     head = new_reg_loc_descr (dwarf_fp, offset);
2442   return head;
2443 }
2444 \f
2445 /* And now, the support for symbolic debugging information.  */
2446
2447 /* .debug_str support.  */
2448
2449 static void dwarf2out_init (const char *);
2450 static void dwarf2out_finish (const char *);
2451 static void dwarf2out_assembly_start (void);
2452 static void dwarf2out_define (unsigned int, const char *);
2453 static void dwarf2out_undef (unsigned int, const char *);
2454 static void dwarf2out_start_source_file (unsigned, const char *);
2455 static void dwarf2out_end_source_file (unsigned);
2456 static void dwarf2out_function_decl (tree);
2457 static void dwarf2out_begin_block (unsigned, unsigned);
2458 static void dwarf2out_end_block (unsigned, unsigned);
2459 static bool dwarf2out_ignore_block (const_tree);
2460 static void dwarf2out_global_decl (tree);
2461 static void dwarf2out_type_decl (tree, int);
2462 static void dwarf2out_imported_module_or_decl (tree, tree, tree, bool);
2463 static void dwarf2out_imported_module_or_decl_1 (tree, tree, tree,
2464                                                  dw_die_ref);
2465 static void dwarf2out_abstract_function (tree);
2466 static void dwarf2out_var_location (rtx_insn *);
2467 static void dwarf2out_begin_function (tree);
2468 static void dwarf2out_end_function (unsigned int);
2469 static void dwarf2out_set_name (tree, tree);
2470
2471 /* The debug hooks structure.  */
2472
2473 const struct gcc_debug_hooks dwarf2_debug_hooks =
2474 {
2475   dwarf2out_init,
2476   dwarf2out_finish,
2477   dwarf2out_assembly_start,
2478   dwarf2out_define,
2479   dwarf2out_undef,
2480   dwarf2out_start_source_file,
2481   dwarf2out_end_source_file,
2482   dwarf2out_begin_block,
2483   dwarf2out_end_block,
2484   dwarf2out_ignore_block,
2485   dwarf2out_source_line,
2486   dwarf2out_begin_prologue,
2487 #if VMS_DEBUGGING_INFO
2488   dwarf2out_vms_end_prologue,
2489   dwarf2out_vms_begin_epilogue,
2490 #else
2491   debug_nothing_int_charstar,
2492   debug_nothing_int_charstar,
2493 #endif
2494   dwarf2out_end_epilogue,
2495   dwarf2out_begin_function,
2496   dwarf2out_end_function,       /* end_function */
2497   dwarf2out_function_decl,      /* function_decl */
2498   dwarf2out_global_decl,
2499   dwarf2out_type_decl,          /* type_decl */
2500   dwarf2out_imported_module_or_decl,
2501   debug_nothing_tree,           /* deferred_inline_function */
2502   /* The DWARF 2 backend tries to reduce debugging bloat by not
2503      emitting the abstract description of inline functions until
2504      something tries to reference them.  */
2505   dwarf2out_abstract_function,  /* outlining_inline_function */
2506   debug_nothing_rtx_code_label, /* label */
2507   debug_nothing_int,            /* handle_pch */
2508   dwarf2out_var_location,
2509   dwarf2out_switch_text_section,
2510   dwarf2out_set_name,
2511   1,                            /* start_end_main_source_file */
2512   TYPE_SYMTAB_IS_DIE            /* tree_type_symtab_field */
2513 };
2514 \f
2515 /* NOTE: In the comments in this file, many references are made to
2516    "Debugging Information Entries".  This term is abbreviated as `DIE'
2517    throughout the remainder of this file.  */
2518
2519 /* An internal representation of the DWARF output is built, and then
2520    walked to generate the DWARF debugging info.  The walk of the internal
2521    representation is done after the entire program has been compiled.
2522    The types below are used to describe the internal representation.  */
2523
2524 /* Whether to put type DIEs into their own section .debug_types instead
2525    of making them part of the .debug_info section.  Only supported for
2526    Dwarf V4 or higher and the user didn't disable them through
2527    -fno-debug-types-section.  It is more efficient to put them in a
2528    separate comdat sections since the linker will then be able to
2529    remove duplicates.  But not all tools support .debug_types sections
2530    yet.  */
2531
2532 #define use_debug_types (dwarf_version >= 4 && flag_debug_types_section)
2533
2534 /* Various DIE's use offsets relative to the beginning of the
2535    .debug_info section to refer to each other.  */
2536
2537 typedef long int dw_offset;
2538
2539 /* Define typedefs here to avoid circular dependencies.  */
2540
2541 typedef struct dw_attr_struct *dw_attr_ref;
2542 typedef struct dw_line_info_struct *dw_line_info_ref;
2543 typedef struct pubname_struct *pubname_ref;
2544 typedef struct dw_ranges_struct *dw_ranges_ref;
2545 typedef struct dw_ranges_by_label_struct *dw_ranges_by_label_ref;
2546 typedef struct comdat_type_struct *comdat_type_node_ref;
2547
2548 /* The entries in the line_info table more-or-less mirror the opcodes
2549    that are used in the real dwarf line table.  Arrays of these entries
2550    are collected per section when DWARF2_ASM_LINE_DEBUG_INFO is not
2551    supported.  */
2552
2553 enum dw_line_info_opcode {
2554   /* Emit DW_LNE_set_address; the operand is the label index.  */
2555   LI_set_address,
2556
2557   /* Emit a row to the matrix with the given line.  This may be done
2558      via any combination of DW_LNS_copy, DW_LNS_advance_line, and
2559      special opcodes.  */
2560   LI_set_line,
2561
2562   /* Emit a DW_LNS_set_file.  */
2563   LI_set_file,
2564
2565   /* Emit a DW_LNS_set_column.  */
2566   LI_set_column,
2567
2568   /* Emit a DW_LNS_negate_stmt; the operand is ignored.  */
2569   LI_negate_stmt,
2570
2571   /* Emit a DW_LNS_set_prologue_end/epilogue_begin; the operand is ignored.  */
2572   LI_set_prologue_end,
2573   LI_set_epilogue_begin,
2574
2575   /* Emit a DW_LNE_set_discriminator.  */
2576   LI_set_discriminator
2577 };
2578
2579 typedef struct GTY(()) dw_line_info_struct {
2580   enum dw_line_info_opcode opcode;
2581   unsigned int val;
2582 } dw_line_info_entry;
2583
2584
2585 typedef struct GTY(()) dw_line_info_table_struct {
2586   /* The label that marks the end of this section.  */
2587   const char *end_label;
2588
2589   /* The values for the last row of the matrix, as collected in the table.
2590      These are used to minimize the changes to the next row.  */
2591   unsigned int file_num;
2592   unsigned int line_num;
2593   unsigned int column_num;
2594   int discrim_num;
2595   bool is_stmt;
2596   bool in_use;
2597
2598   vec<dw_line_info_entry, va_gc> *entries;
2599 } dw_line_info_table;
2600
2601 typedef dw_line_info_table *dw_line_info_table_p;
2602
2603
2604 /* Each DIE attribute has a field specifying the attribute kind,
2605    a link to the next attribute in the chain, and an attribute value.
2606    Attributes are typically linked below the DIE they modify.  */
2607
2608 typedef struct GTY(()) dw_attr_struct {
2609   enum dwarf_attribute dw_attr;
2610   dw_val_node dw_attr_val;
2611 }
2612 dw_attr_node;
2613
2614
2615 /* The Debugging Information Entry (DIE) structure.  DIEs form a tree.
2616    The children of each node form a circular list linked by
2617    die_sib.  die_child points to the node *before* the "first" child node.  */
2618
2619 typedef struct GTY((chain_circular ("%h.die_sib"), for_user)) die_struct {
2620   union die_symbol_or_type_node
2621     {
2622       const char * GTY ((tag ("0"))) die_symbol;
2623       comdat_type_node_ref GTY ((tag ("1"))) die_type_node;
2624     }
2625   GTY ((desc ("%0.comdat_type_p"))) die_id;
2626   vec<dw_attr_node, va_gc> *die_attr;
2627   dw_die_ref die_parent;
2628   dw_die_ref die_child;
2629   dw_die_ref die_sib;
2630   dw_die_ref die_definition; /* ref from a specification to its definition */
2631   dw_offset die_offset;
2632   unsigned long die_abbrev;
2633   int die_mark;
2634   unsigned int decl_id;
2635   enum dwarf_tag die_tag;
2636   /* Die is used and must not be pruned as unused.  */
2637   BOOL_BITFIELD die_perennial_p : 1;
2638   BOOL_BITFIELD comdat_type_p : 1; /* DIE has a type signature */
2639   /* Lots of spare bits.  */
2640 }
2641 die_node;
2642
2643 /* Evaluate 'expr' while 'c' is set to each child of DIE in order.  */
2644 #define FOR_EACH_CHILD(die, c, expr) do {       \
2645   c = die->die_child;                           \
2646   if (c) do {                                   \
2647     c = c->die_sib;                             \
2648     expr;                                       \
2649   } while (c != die->die_child);                \
2650 } while (0)
2651
2652 /* The pubname structure */
2653
2654 typedef struct GTY(()) pubname_struct {
2655   dw_die_ref die;
2656   const char *name;
2657 }
2658 pubname_entry;
2659
2660
2661 struct GTY(()) dw_ranges_struct {
2662   /* If this is positive, it's a block number, otherwise it's a
2663      bitwise-negated index into dw_ranges_by_label.  */
2664   int num;
2665 };
2666
2667 /* A structure to hold a macinfo entry.  */
2668
2669 typedef struct GTY(()) macinfo_struct {
2670   unsigned char code;
2671   unsigned HOST_WIDE_INT lineno;
2672   const char *info;
2673 }
2674 macinfo_entry;
2675
2676
2677 struct GTY(()) dw_ranges_by_label_struct {
2678   const char *begin;
2679   const char *end;
2680 };
2681
2682 /* The comdat type node structure.  */
2683 typedef struct GTY(()) comdat_type_struct
2684 {
2685   dw_die_ref root_die;
2686   dw_die_ref type_die;
2687   dw_die_ref skeleton_die;
2688   char signature[DWARF_TYPE_SIGNATURE_SIZE];
2689   struct comdat_type_struct *next;
2690 }
2691 comdat_type_node;
2692
2693 /* The limbo die list structure.  */
2694 typedef struct GTY(()) limbo_die_struct {
2695   dw_die_ref die;
2696   tree created_for;
2697   struct limbo_die_struct *next;
2698 }
2699 limbo_die_node;
2700
2701 typedef struct skeleton_chain_struct
2702 {
2703   dw_die_ref old_die;
2704   dw_die_ref new_die;
2705   struct skeleton_chain_struct *parent;
2706 }
2707 skeleton_chain_node;
2708
2709 /* Define a macro which returns nonzero for a TYPE_DECL which was
2710    implicitly generated for a type.
2711
2712    Note that, unlike the C front-end (which generates a NULL named
2713    TYPE_DECL node for each complete tagged type, each array type,
2714    and each function type node created) the C++ front-end generates
2715    a _named_ TYPE_DECL node for each tagged type node created.
2716    These TYPE_DECLs have DECL_ARTIFICIAL set, so we know not to
2717    generate a DW_TAG_typedef DIE for them.  Likewise with the Ada
2718    front-end, but for each type, tagged or not.  */
2719
2720 #define TYPE_DECL_IS_STUB(decl)                         \
2721   (DECL_NAME (decl) == NULL_TREE                        \
2722    || (DECL_ARTIFICIAL (decl)                           \
2723        && ((decl == TYPE_STUB_DECL (TREE_TYPE (decl)))  \
2724            /* This is necessary for stub decls that     \
2725               appear in nested inline functions.  */    \
2726            || (DECL_ABSTRACT_ORIGIN (decl) != NULL_TREE \
2727                && (decl_ultimate_origin (decl)          \
2728                    == TYPE_STUB_DECL (TREE_TYPE (decl)))))))
2729
2730 /* Information concerning the compilation unit's programming
2731    language, and compiler version.  */
2732
2733 /* Fixed size portion of the DWARF compilation unit header.  */
2734 #define DWARF_COMPILE_UNIT_HEADER_SIZE \
2735   (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 3)
2736
2737 /* Fixed size portion of the DWARF comdat type unit header.  */
2738 #define DWARF_COMDAT_TYPE_UNIT_HEADER_SIZE \
2739   (DWARF_COMPILE_UNIT_HEADER_SIZE + DWARF_TYPE_SIGNATURE_SIZE \
2740    + DWARF_OFFSET_SIZE)
2741
2742 /* Fixed size portion of public names info.  */
2743 #define DWARF_PUBNAMES_HEADER_SIZE (2 * DWARF_OFFSET_SIZE + 2)
2744
2745 /* Fixed size portion of the address range info.  */
2746 #define DWARF_ARANGES_HEADER_SIZE                                       \
2747   (DWARF_ROUND (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 4,      \
2748                 DWARF2_ADDR_SIZE * 2)                                   \
2749    - DWARF_INITIAL_LENGTH_SIZE)
2750
2751 /* Size of padding portion in the address range info.  It must be
2752    aligned to twice the pointer size.  */
2753 #define DWARF_ARANGES_PAD_SIZE \
2754   (DWARF_ROUND (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 4, \
2755                 DWARF2_ADDR_SIZE * 2)                              \
2756    - (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 4))
2757
2758 /* Use assembler line directives if available.  */
2759 #ifndef DWARF2_ASM_LINE_DEBUG_INFO
2760 #ifdef HAVE_AS_DWARF2_DEBUG_LINE
2761 #define DWARF2_ASM_LINE_DEBUG_INFO 1
2762 #else
2763 #define DWARF2_ASM_LINE_DEBUG_INFO 0
2764 #endif
2765 #endif
2766
2767 /* Minimum line offset in a special line info. opcode.
2768    This value was chosen to give a reasonable range of values.  */
2769 #define DWARF_LINE_BASE  -10
2770
2771 /* First special line opcode - leave room for the standard opcodes.  */
2772 #define DWARF_LINE_OPCODE_BASE  ((int)DW_LNS_set_isa + 1)
2773
2774 /* Range of line offsets in a special line info. opcode.  */
2775 #define DWARF_LINE_RANGE  (254-DWARF_LINE_OPCODE_BASE+1)
2776
2777 /* Flag that indicates the initial value of the is_stmt_start flag.
2778    In the present implementation, we do not mark any lines as
2779    the beginning of a source statement, because that information
2780    is not made available by the GCC front-end.  */
2781 #define DWARF_LINE_DEFAULT_IS_STMT_START 1
2782
2783 /* Maximum number of operations per instruction bundle.  */
2784 #ifndef DWARF_LINE_DEFAULT_MAX_OPS_PER_INSN
2785 #define DWARF_LINE_DEFAULT_MAX_OPS_PER_INSN 1
2786 #endif
2787
2788 /* This location is used by calc_die_sizes() to keep track
2789    the offset of each DIE within the .debug_info section.  */
2790 static unsigned long next_die_offset;
2791
2792 /* Record the root of the DIE's built for the current compilation unit.  */
2793 static GTY(()) dw_die_ref single_comp_unit_die;
2794
2795 /* A list of type DIEs that have been separated into comdat sections.  */
2796 static GTY(()) comdat_type_node *comdat_type_list;
2797
2798 /* A list of DIEs with a NULL parent waiting to be relocated.  */
2799 static GTY(()) limbo_die_node *limbo_die_list;
2800
2801 /* A list of DIEs for which we may have to generate
2802    DW_AT_{,MIPS_}linkage_name once their DECL_ASSEMBLER_NAMEs are set.  */
2803 static GTY(()) limbo_die_node *deferred_asm_name;
2804
2805 struct dwarf_file_hasher : ggc_hasher<dwarf_file_data *>
2806 {
2807   typedef const char *compare_type;
2808
2809   static hashval_t hash (dwarf_file_data *);
2810   static bool equal (dwarf_file_data *, const char *);
2811 };
2812
2813 /* Filenames referenced by this compilation unit.  */
2814 static GTY(()) hash_table<dwarf_file_hasher> *file_table;
2815
2816 struct decl_die_hasher : ggc_hasher<die_node *>
2817 {
2818   typedef tree compare_type;
2819
2820   static hashval_t hash (die_node *);
2821   static bool equal (die_node *, tree);
2822 };
2823 /* A hash table of references to DIE's that describe declarations.
2824    The key is a DECL_UID() which is a unique number identifying each decl.  */
2825 static GTY (()) hash_table<decl_die_hasher> *decl_die_table;
2826
2827 struct block_die_hasher : ggc_hasher<die_struct *>
2828 {
2829   static hashval_t hash (die_struct *);
2830   static bool equal (die_struct *, die_struct *);
2831 };
2832
2833 /* A hash table of references to DIE's that describe COMMON blocks.
2834    The key is DECL_UID() ^ die_parent.  */
2835 static GTY (()) hash_table<block_die_hasher> *common_block_die_table;
2836
2837 typedef struct GTY(()) die_arg_entry_struct {
2838     dw_die_ref die;
2839     tree arg;
2840 } die_arg_entry;
2841
2842
2843 /* Node of the variable location list.  */
2844 struct GTY ((chain_next ("%h.next"))) var_loc_node {
2845   /* Either NOTE_INSN_VAR_LOCATION, or, for SRA optimized variables,
2846      EXPR_LIST chain.  For small bitsizes, bitsize is encoded
2847      in mode of the EXPR_LIST node and first EXPR_LIST operand
2848      is either NOTE_INSN_VAR_LOCATION for a piece with a known
2849      location or NULL for padding.  For larger bitsizes,
2850      mode is 0 and first operand is a CONCAT with bitsize
2851      as first CONCAT operand and NOTE_INSN_VAR_LOCATION resp.
2852      NULL as second operand.  */
2853   rtx GTY (()) loc;
2854   const char * GTY (()) label;
2855   struct var_loc_node * GTY (()) next;
2856 };
2857
2858 /* Variable location list.  */
2859 struct GTY ((for_user)) var_loc_list_def {
2860   struct var_loc_node * GTY (()) first;
2861
2862   /* Pointer to the last but one or last element of the
2863      chained list.  If the list is empty, both first and
2864      last are NULL, if the list contains just one node
2865      or the last node certainly is not redundant, it points
2866      to the last node, otherwise points to the last but one.
2867      Do not mark it for GC because it is marked through the chain.  */
2868   struct var_loc_node * GTY ((skip ("%h"))) last;
2869
2870   /* Pointer to the last element before section switch,
2871      if NULL, either sections weren't switched or first
2872      is after section switch.  */
2873   struct var_loc_node * GTY ((skip ("%h"))) last_before_switch;
2874
2875   /* DECL_UID of the variable decl.  */
2876   unsigned int decl_id;
2877 };
2878 typedef struct var_loc_list_def var_loc_list;
2879
2880 /* Call argument location list.  */
2881 struct GTY ((chain_next ("%h.next"))) call_arg_loc_node {
2882   rtx GTY (()) call_arg_loc_note;
2883   const char * GTY (()) label;
2884   tree GTY (()) block;
2885   bool tail_call_p;
2886   rtx GTY (()) symbol_ref;
2887   struct call_arg_loc_node * GTY (()) next;
2888 };
2889
2890
2891 struct decl_loc_hasher : ggc_hasher<var_loc_list *>
2892 {
2893   typedef const_tree compare_type;
2894
2895   static hashval_t hash (var_loc_list *);
2896   static bool equal (var_loc_list *, const_tree);
2897 };
2898
2899 /* Table of decl location linked lists.  */
2900 static GTY (()) hash_table<decl_loc_hasher> *decl_loc_table;
2901
2902 /* Head and tail of call_arg_loc chain.  */
2903 static GTY (()) struct call_arg_loc_node *call_arg_locations;
2904 static struct call_arg_loc_node *call_arg_loc_last;
2905
2906 /* Number of call sites in the current function.  */
2907 static int call_site_count = -1;
2908 /* Number of tail call sites in the current function.  */
2909 static int tail_call_site_count = -1;
2910
2911 /* Vector mapping block numbers to DW_TAG_{lexical_block,inlined_subroutine}
2912    DIEs.  */
2913 static vec<dw_die_ref> block_map;
2914
2915 /* A cached location list.  */
2916 struct GTY ((for_user)) cached_dw_loc_list_def {
2917   /* The DECL_UID of the decl that this entry describes.  */
2918   unsigned int decl_id;
2919
2920   /* The cached location list.  */
2921   dw_loc_list_ref loc_list;
2922 };
2923 typedef struct cached_dw_loc_list_def cached_dw_loc_list;
2924
2925 struct dw_loc_list_hasher : ggc_hasher<cached_dw_loc_list *>
2926 {
2927
2928   typedef const_tree compare_type;
2929   
2930   static hashval_t hash (cached_dw_loc_list *);
2931   static bool equal (cached_dw_loc_list *, const_tree);
2932 };
2933
2934 /* Table of cached location lists.  */
2935 static GTY (()) hash_table<dw_loc_list_hasher> *cached_dw_loc_list_table;
2936
2937 /* A pointer to the base of a list of references to DIE's that
2938    are uniquely identified by their tag, presence/absence of
2939    children DIE's, and list of attribute/value pairs.  */
2940 static GTY((length ("abbrev_die_table_allocated")))
2941   dw_die_ref *abbrev_die_table;
2942
2943 /* Number of elements currently allocated for abbrev_die_table.  */
2944 static GTY(()) unsigned abbrev_die_table_allocated;
2945
2946 /* Number of elements in type_die_table currently in use.  */
2947 static GTY(()) unsigned abbrev_die_table_in_use;
2948
2949 /* Size (in elements) of increments by which we may expand the
2950    abbrev_die_table.  */
2951 #define ABBREV_DIE_TABLE_INCREMENT 256
2952
2953 /* A global counter for generating labels for line number data.  */
2954 static unsigned int line_info_label_num;
2955
2956 /* The current table to which we should emit line number information
2957    for the current function.  This will be set up at the beginning of
2958    assembly for the function.  */
2959 static dw_line_info_table *cur_line_info_table;
2960
2961 /* The two default tables of line number info.  */
2962 static GTY(()) dw_line_info_table *text_section_line_info;
2963 static GTY(()) dw_line_info_table *cold_text_section_line_info;
2964
2965 /* The set of all non-default tables of line number info.  */
2966 static GTY(()) vec<dw_line_info_table_p, va_gc> *separate_line_info;
2967
2968 /* A flag to tell pubnames/types export if there is an info section to
2969    refer to.  */
2970 static bool info_section_emitted;
2971
2972 /* A pointer to the base of a table that contains a list of publicly
2973    accessible names.  */
2974 static GTY (()) vec<pubname_entry, va_gc> *pubname_table;
2975
2976 /* A pointer to the base of a table that contains a list of publicly
2977    accessible types.  */
2978 static GTY (()) vec<pubname_entry, va_gc> *pubtype_table;
2979
2980 /* A pointer to the base of a table that contains a list of macro
2981    defines/undefines (and file start/end markers).  */
2982 static GTY (()) vec<macinfo_entry, va_gc> *macinfo_table;
2983
2984 /* True if .debug_macinfo or .debug_macros section is going to be
2985    emitted.  */
2986 #define have_macinfo \
2987   (debug_info_level >= DINFO_LEVEL_VERBOSE \
2988    && !macinfo_table->is_empty ())
2989
2990 /* Array of dies for which we should generate .debug_ranges info.  */
2991 static GTY ((length ("ranges_table_allocated"))) dw_ranges_ref ranges_table;
2992
2993 /* Number of elements currently allocated for ranges_table.  */
2994 static GTY(()) unsigned ranges_table_allocated;
2995
2996 /* Number of elements in ranges_table currently in use.  */
2997 static GTY(()) unsigned ranges_table_in_use;
2998
2999 /* Array of pairs of labels referenced in ranges_table.  */
3000 static GTY ((length ("ranges_by_label_allocated")))
3001      dw_ranges_by_label_ref ranges_by_label;
3002
3003 /* Number of elements currently allocated for ranges_by_label.  */
3004 static GTY(()) unsigned ranges_by_label_allocated;
3005
3006 /* Number of elements in ranges_by_label currently in use.  */
3007 static GTY(()) unsigned ranges_by_label_in_use;
3008
3009 /* Size (in elements) of increments by which we may expand the
3010    ranges_table.  */
3011 #define RANGES_TABLE_INCREMENT 64
3012
3013 /* Whether we have location lists that need outputting */
3014 static GTY(()) bool have_location_lists;
3015
3016 /* Unique label counter.  */
3017 static GTY(()) unsigned int loclabel_num;
3018
3019 /* Unique label counter for point-of-call tables.  */
3020 static GTY(()) unsigned int poc_label_num;
3021
3022 /* The last file entry emitted by maybe_emit_file().  */
3023 static GTY(()) struct dwarf_file_data * last_emitted_file;
3024
3025 /* Number of internal labels generated by gen_internal_sym().  */
3026 static GTY(()) int label_num;
3027
3028 /* Cached result of previous call to lookup_filename.  */
3029 static GTY(()) struct dwarf_file_data * file_table_last_lookup;
3030
3031 static GTY(()) vec<die_arg_entry, va_gc> *tmpl_value_parm_die_table;
3032
3033 /* Instances of generic types for which we need to generate debug
3034    info that describe their generic parameters and arguments. That
3035    generation needs to happen once all types are properly laid out so
3036    we do it at the end of compilation.  */
3037 static GTY(()) vec<tree, va_gc> *generic_type_instances;
3038
3039 /* Offset from the "steady-state frame pointer" to the frame base,
3040    within the current function.  */
3041 static HOST_WIDE_INT frame_pointer_fb_offset;
3042 static bool frame_pointer_fb_offset_valid;
3043
3044 static vec<dw_die_ref> base_types;
3045
3046 /* Flags to represent a set of attribute classes for attributes that represent
3047    a scalar value (bounds, pointers, ...).  */
3048 enum dw_scalar_form
3049 {
3050   dw_scalar_form_constant = 0x01,
3051   dw_scalar_form_exprloc = 0x02,
3052   dw_scalar_form_reference = 0x04
3053 };
3054
3055 /* Forward declarations for functions defined in this file.  */
3056
3057 static int is_pseudo_reg (const_rtx);
3058 static tree type_main_variant (tree);
3059 static int is_tagged_type (const_tree);
3060 static const char *dwarf_tag_name (unsigned);
3061 static const char *dwarf_attr_name (unsigned);
3062 static const char *dwarf_form_name (unsigned);
3063 static tree decl_ultimate_origin (const_tree);
3064 static tree decl_class_context (tree);
3065 static void add_dwarf_attr (dw_die_ref, dw_attr_ref);
3066 static inline enum dw_val_class AT_class (dw_attr_ref);
3067 static inline unsigned int AT_index (dw_attr_ref);
3068 static void add_AT_flag (dw_die_ref, enum dwarf_attribute, unsigned);
3069 static inline unsigned AT_flag (dw_attr_ref);
3070 static void add_AT_int (dw_die_ref, enum dwarf_attribute, HOST_WIDE_INT);
3071 static inline HOST_WIDE_INT AT_int (dw_attr_ref);
3072 static void add_AT_unsigned (dw_die_ref, enum dwarf_attribute, unsigned HOST_WIDE_INT);
3073 static inline unsigned HOST_WIDE_INT AT_unsigned (dw_attr_ref);
3074 static void add_AT_double (dw_die_ref, enum dwarf_attribute,
3075                            HOST_WIDE_INT, unsigned HOST_WIDE_INT);
3076 static inline void add_AT_vec (dw_die_ref, enum dwarf_attribute, unsigned int,
3077                                unsigned int, unsigned char *);
3078 static void add_AT_data8 (dw_die_ref, enum dwarf_attribute, unsigned char *);
3079 static void add_AT_string (dw_die_ref, enum dwarf_attribute, const char *);
3080 static inline const char *AT_string (dw_attr_ref);
3081 static enum dwarf_form AT_string_form (dw_attr_ref);
3082 static void add_AT_die_ref (dw_die_ref, enum dwarf_attribute, dw_die_ref);
3083 static void add_AT_specification (dw_die_ref, dw_die_ref);
3084 static inline dw_die_ref AT_ref (dw_attr_ref);
3085 static inline int AT_ref_external (dw_attr_ref);
3086 static inline void set_AT_ref_external (dw_attr_ref, int);
3087 static void add_AT_fde_ref (dw_die_ref, enum dwarf_attribute, unsigned);
3088 static void add_AT_loc (dw_die_ref, enum dwarf_attribute, dw_loc_descr_ref);
3089 static inline dw_loc_descr_ref AT_loc (dw_attr_ref);
3090 static void add_AT_loc_list (dw_die_ref, enum dwarf_attribute,
3091                              dw_loc_list_ref);
3092 static inline dw_loc_list_ref AT_loc_list (dw_attr_ref);
3093 static addr_table_entry *add_addr_table_entry (void *, enum ate_kind);
3094 static void remove_addr_table_entry (addr_table_entry *);
3095 static void add_AT_addr (dw_die_ref, enum dwarf_attribute, rtx, bool);
3096 static inline rtx AT_addr (dw_attr_ref);
3097 static void add_AT_lbl_id (dw_die_ref, enum dwarf_attribute, const char *);
3098 static void add_AT_lineptr (dw_die_ref, enum dwarf_attribute, const char *);
3099 static void add_AT_macptr (dw_die_ref, enum dwarf_attribute, const char *);
3100 static void add_AT_offset (dw_die_ref, enum dwarf_attribute,
3101                            unsigned HOST_WIDE_INT);
3102 static void add_AT_range_list (dw_die_ref, enum dwarf_attribute,
3103                                unsigned long, bool);
3104 static inline const char *AT_lbl (dw_attr_ref);
3105 static dw_attr_ref get_AT (dw_die_ref, enum dwarf_attribute);
3106 static const char *get_AT_low_pc (dw_die_ref);
3107 static const char *get_AT_hi_pc (dw_die_ref);
3108 static const char *get_AT_string (dw_die_ref, enum dwarf_attribute);
3109 static int get_AT_flag (dw_die_ref, enum dwarf_attribute);
3110 static unsigned get_AT_unsigned (dw_die_ref, enum dwarf_attribute);
3111 static inline dw_die_ref get_AT_ref (dw_die_ref, enum dwarf_attribute);
3112 static bool is_cxx (void);
3113 static bool is_fortran (void);
3114 static bool is_ada (void);
3115 static void remove_AT (dw_die_ref, enum dwarf_attribute);
3116 static void remove_child_TAG (dw_die_ref, enum dwarf_tag);
3117 static void add_child_die (dw_die_ref, dw_die_ref);
3118 static dw_die_ref new_die (enum dwarf_tag, dw_die_ref, tree);
3119 static dw_die_ref lookup_type_die (tree);
3120 static dw_die_ref strip_naming_typedef (tree, dw_die_ref);
3121 static dw_die_ref lookup_type_die_strip_naming_typedef (tree);
3122 static void equate_type_number_to_die (tree, dw_die_ref);
3123 static dw_die_ref lookup_decl_die (tree);
3124 static var_loc_list *lookup_decl_loc (const_tree);
3125 static void equate_decl_number_to_die (tree, dw_die_ref);
3126 static struct var_loc_node *add_var_loc_to_decl (tree, rtx, const char *);
3127 static void print_spaces (FILE *);
3128 static void print_die (dw_die_ref, FILE *);
3129 static dw_die_ref push_new_compile_unit (dw_die_ref, dw_die_ref);
3130 static dw_die_ref pop_compile_unit (dw_die_ref);
3131 static void loc_checksum (dw_loc_descr_ref, struct md5_ctx *);
3132 static void attr_checksum (dw_attr_ref, struct md5_ctx *, int *);
3133 static void die_checksum (dw_die_ref, struct md5_ctx *, int *);
3134 static void checksum_sleb128 (HOST_WIDE_INT, struct md5_ctx *);
3135 static void checksum_uleb128 (unsigned HOST_WIDE_INT, struct md5_ctx *);
3136 static void loc_checksum_ordered (dw_loc_descr_ref, struct md5_ctx *);
3137 static void attr_checksum_ordered (enum dwarf_tag, dw_attr_ref,
3138                                    struct md5_ctx *, int *);
3139 struct checksum_attributes;
3140 static void collect_checksum_attributes (struct checksum_attributes *, dw_die_ref);
3141 static void die_checksum_ordered (dw_die_ref, struct md5_ctx *, int *);
3142 static void checksum_die_context (dw_die_ref, struct md5_ctx *);
3143 static void generate_type_signature (dw_die_ref, comdat_type_node *);
3144 static int same_loc_p (dw_loc_descr_ref, dw_loc_descr_ref, int *);
3145 static int same_dw_val_p (const dw_val_node *, const dw_val_node *, int *);
3146 static int same_attr_p (dw_attr_ref, dw_attr_ref, int *);
3147 static int same_die_p (dw_die_ref, dw_die_ref, int *);
3148 static int same_die_p_wrap (dw_die_ref, dw_die_ref);
3149 static void compute_section_prefix (dw_die_ref);
3150 static int is_type_die (dw_die_ref);
3151 static int is_comdat_die (dw_die_ref);
3152 static int is_symbol_die (dw_die_ref);
3153 static inline bool is_template_instantiation (dw_die_ref);
3154 static void assign_symbol_names (dw_die_ref);
3155 static void break_out_includes (dw_die_ref);
3156 static int is_declaration_die (dw_die_ref);
3157 static int should_move_die_to_comdat (dw_die_ref);
3158 static dw_die_ref clone_as_declaration (dw_die_ref);
3159 static dw_die_ref clone_die (dw_die_ref);
3160 static dw_die_ref clone_tree (dw_die_ref);
3161 static dw_die_ref copy_declaration_context (dw_die_ref, dw_die_ref);
3162 static void generate_skeleton_ancestor_tree (skeleton_chain_node *);
3163 static void generate_skeleton_bottom_up (skeleton_chain_node *);
3164 static dw_die_ref generate_skeleton (dw_die_ref);
3165 static dw_die_ref remove_child_or_replace_with_skeleton (dw_die_ref,
3166                                                          dw_die_ref,
3167                                                          dw_die_ref);
3168 static void break_out_comdat_types (dw_die_ref);
3169 static void copy_decls_for_unworthy_types (dw_die_ref);
3170
3171 static void add_sibling_attributes (dw_die_ref);
3172 static void output_location_lists (dw_die_ref);
3173 static int constant_size (unsigned HOST_WIDE_INT);
3174 static unsigned long size_of_die (dw_die_ref);
3175 static void calc_die_sizes (dw_die_ref);
3176 static void calc_base_type_die_sizes (void);
3177 static void mark_dies (dw_die_ref);
3178 static void unmark_dies (dw_die_ref);
3179 static void unmark_all_dies (dw_die_ref);
3180 static unsigned long size_of_pubnames (vec<pubname_entry, va_gc> *);
3181 static unsigned long size_of_aranges (void);
3182 static enum dwarf_form value_format (dw_attr_ref);
3183 static void output_value_format (dw_attr_ref);
3184 static void output_abbrev_section (void);
3185 static void output_die_abbrevs (unsigned long, dw_die_ref);
3186 static void output_die_symbol (dw_die_ref);
3187 static void output_die (dw_die_ref);
3188 static void output_compilation_unit_header (void);
3189 static void output_comp_unit (dw_die_ref, int);
3190 static void output_comdat_type_unit (comdat_type_node *);
3191 static const char *dwarf2_name (tree, int);
3192 static void add_pubname (tree, dw_die_ref);
3193 static void add_enumerator_pubname (const char *, dw_die_ref);
3194 static void add_pubname_string (const char *, dw_die_ref);
3195 static void add_pubtype (tree, dw_die_ref);
3196 static void output_pubnames (vec<pubname_entry, va_gc> *);
3197 static void output_aranges (unsigned long);
3198 static unsigned int add_ranges_num (int);
3199 static unsigned int add_ranges (const_tree);
3200 static void add_ranges_by_labels (dw_die_ref, const char *, const char *,
3201                                   bool *, bool);
3202 static void output_ranges (void);
3203 static dw_line_info_table *new_line_info_table (void);
3204 static void output_line_info (bool);
3205 static void output_file_names (void);
3206 static dw_die_ref base_type_die (tree);
3207 static int is_base_type (tree);
3208 static dw_die_ref subrange_type_die (tree, tree, tree, dw_die_ref);
3209 static int decl_quals (const_tree);
3210 static dw_die_ref modified_type_die (tree, int, dw_die_ref);
3211 static dw_die_ref generic_parameter_die (tree, tree, bool, dw_die_ref);
3212 static dw_die_ref template_parameter_pack_die (tree, tree, dw_die_ref);
3213 static int type_is_enum (const_tree);
3214 static unsigned int dbx_reg_number (const_rtx);
3215 static void add_loc_descr_op_piece (dw_loc_descr_ref *, int);
3216 static dw_loc_descr_ref reg_loc_descriptor (rtx, enum var_init_status);
3217 static dw_loc_descr_ref one_reg_loc_descriptor (unsigned int,
3218                                                 enum var_init_status);
3219 static dw_loc_descr_ref multiple_reg_loc_descriptor (rtx, rtx,
3220                                                      enum var_init_status);
3221 static dw_loc_descr_ref based_loc_descr (rtx, HOST_WIDE_INT,
3222                                          enum var_init_status);
3223 static int is_based_loc (const_rtx);
3224 static bool resolve_one_addr (rtx *);
3225 static dw_loc_descr_ref concat_loc_descriptor (rtx, rtx,
3226                                                enum var_init_status);
3227 static dw_loc_descr_ref loc_descriptor (rtx, machine_mode mode,
3228                                         enum var_init_status);
3229 struct loc_descr_context;
3230 static dw_loc_list_ref loc_list_from_tree (tree, int,
3231                                            const struct loc_descr_context *);
3232 static dw_loc_descr_ref loc_descriptor_from_tree (tree, int,
3233                                                   const struct loc_descr_context *);
3234 static HOST_WIDE_INT ceiling (HOST_WIDE_INT, unsigned int);
3235 static tree field_type (const_tree);
3236 static unsigned int simple_type_align_in_bits (const_tree);
3237 static unsigned int simple_decl_align_in_bits (const_tree);
3238 static unsigned HOST_WIDE_INT simple_type_size_in_bits (const_tree);
3239 static HOST_WIDE_INT field_byte_offset (const_tree);
3240 static void add_AT_location_description (dw_die_ref, enum dwarf_attribute,
3241                                          dw_loc_list_ref);
3242 static void add_data_member_location_attribute (dw_die_ref, tree);
3243 static bool add_const_value_attribute (dw_die_ref, rtx);
3244 static void insert_int (HOST_WIDE_INT, unsigned, unsigned char *);
3245 static void insert_wide_int (const wide_int &, unsigned char *, int);
3246 static void insert_float (const_rtx, unsigned char *);
3247 static rtx rtl_for_decl_location (tree);
3248 static bool add_location_or_const_value_attribute (dw_die_ref, tree, bool,
3249                                                    enum dwarf_attribute);
3250 static bool tree_add_const_value_attribute (dw_die_ref, tree);
3251 static bool tree_add_const_value_attribute_for_decl (dw_die_ref, tree);
3252 static void add_name_attribute (dw_die_ref, const char *);
3253 static void add_gnat_descriptive_type_attribute (dw_die_ref, tree, dw_die_ref);
3254 static void add_comp_dir_attribute (dw_die_ref);
3255 static void add_scalar_info (dw_die_ref, enum dwarf_attribute, tree, int,
3256                              const struct loc_descr_context *);
3257 static void add_bound_info (dw_die_ref, enum dwarf_attribute, tree,
3258                             const struct loc_descr_context *);
3259 static void add_subscript_info (dw_die_ref, tree, bool);
3260 static void add_byte_size_attribute (dw_die_ref, tree);
3261 static void add_bit_offset_attribute (dw_die_ref, tree);
3262 static void add_bit_size_attribute (dw_die_ref, tree);
3263 static void add_prototyped_attribute (dw_die_ref, tree);
3264 static dw_die_ref add_abstract_origin_attribute (dw_die_ref, tree);
3265 static void add_pure_or_virtual_attribute (dw_die_ref, tree);
3266 static void add_src_coords_attributes (dw_die_ref, tree);
3267 static void add_name_and_src_coords_attributes (dw_die_ref, tree);
3268 static void push_decl_scope (tree);
3269 static void pop_decl_scope (void);
3270 static dw_die_ref scope_die_for (tree, dw_die_ref);
3271 static inline int local_scope_p (dw_die_ref);
3272 static inline int class_scope_p (dw_die_ref);
3273 static inline int class_or_namespace_scope_p (dw_die_ref);
3274 static void add_type_attribute (dw_die_ref, tree, int, dw_die_ref);
3275 static void add_calling_convention_attribute (dw_die_ref, tree);
3276 static const char *type_tag (const_tree);
3277 static tree member_declared_type (const_tree);
3278 #if 0
3279 static const char *decl_start_label (tree);
3280 #endif
3281 static void gen_array_type_die (tree, dw_die_ref);
3282 static void gen_descr_array_type_die (tree, struct array_descr_info *, dw_die_ref);
3283 #if 0
3284 static void gen_entry_point_die (tree, dw_die_ref);
3285 #endif
3286 static dw_die_ref gen_enumeration_type_die (tree, dw_die_ref);
3287 static dw_die_ref gen_formal_parameter_die (tree, tree, bool, dw_die_ref);
3288 static dw_die_ref gen_formal_parameter_pack_die  (tree, tree, dw_die_ref, tree*);
3289 static void gen_unspecified_parameters_die (tree, dw_die_ref);
3290 static void gen_formal_types_die (tree, dw_die_ref);
3291 static void gen_subprogram_die (tree, dw_die_ref);
3292 static void gen_variable_die (tree, tree, dw_die_ref);
3293 static void gen_const_die (tree, dw_die_ref);
3294 static void gen_label_die (tree, dw_die_ref);
3295 static void gen_lexical_block_die (tree, dw_die_ref);
3296 static void gen_inlined_subroutine_die (tree, dw_die_ref);
3297 static void gen_field_die (tree, dw_die_ref);
3298 static void gen_ptr_to_mbr_type_die (tree, dw_die_ref);
3299 static dw_die_ref gen_compile_unit_die (const char *);
3300 static void gen_inheritance_die (tree, tree, dw_die_ref);
3301 static void gen_member_die (tree, dw_die_ref);
3302 static void gen_struct_or_union_type_die (tree, dw_die_ref,
3303                                                 enum debug_info_usage);
3304 static void gen_subroutine_type_die (tree, dw_die_ref);
3305 static void gen_typedef_die (tree, dw_die_ref);
3306 static void gen_type_die (tree, dw_die_ref);
3307 static void gen_block_die (tree, dw_die_ref);
3308 static void decls_for_scope (tree, dw_die_ref);
3309 static inline int is_redundant_typedef (const_tree);
3310 static bool is_naming_typedef_decl (const_tree);
3311 static inline dw_die_ref get_context_die (tree);
3312 static void gen_namespace_die (tree, dw_die_ref);
3313 static dw_die_ref gen_namelist_decl (tree, dw_die_ref, tree);
3314 static dw_die_ref gen_decl_die (tree, tree, dw_die_ref);
3315 static dw_die_ref force_decl_die (tree);
3316 static dw_die_ref force_type_die (tree);
3317 static dw_die_ref setup_namespace_context (tree, dw_die_ref);
3318 static dw_die_ref declare_in_namespace (tree, dw_die_ref);
3319 static struct dwarf_file_data * lookup_filename (const char *);
3320 static void retry_incomplete_types (void);
3321 static void gen_type_die_for_member (tree, tree, dw_die_ref);
3322 static void gen_generic_params_dies (tree);
3323 static void gen_tagged_type_die (tree, dw_die_ref, enum debug_info_usage);
3324 static void gen_type_die_with_usage (tree, dw_die_ref, enum debug_info_usage);
3325 static void splice_child_die (dw_die_ref, dw_die_ref);
3326 static int file_info_cmp (const void *, const void *);
3327 static dw_loc_list_ref new_loc_list (dw_loc_descr_ref, const char *,
3328                                      const char *, const char *);
3329 static void output_loc_list (dw_loc_list_ref);
3330 static char *gen_internal_sym (const char *);
3331 static bool want_pubnames (void);
3332
3333 static void prune_unmark_dies (dw_die_ref);
3334 static void prune_unused_types_mark_generic_parms_dies (dw_die_ref);
3335 static void prune_unused_types_mark (dw_die_ref, int);
3336 static void prune_unused_types_walk (dw_die_ref);
3337 static void prune_unused_types_walk_attribs (dw_die_ref);
3338 static void prune_unused_types_prune (dw_die_ref);
3339 static void prune_unused_types (void);
3340 static int maybe_emit_file (struct dwarf_file_data *fd);
3341 static inline const char *AT_vms_delta1 (dw_attr_ref);
3342 static inline const char *AT_vms_delta2 (dw_attr_ref);
3343 static inline void add_AT_vms_delta (dw_die_ref, enum dwarf_attribute,
3344                                      const char *, const char *);
3345 static void append_entry_to_tmpl_value_parm_die_table (dw_die_ref, tree);
3346 static void gen_remaining_tmpl_value_param_die_attribute (void);
3347 static bool generic_type_p (tree);
3348 static void schedule_generic_params_dies_gen (tree t);
3349 static void gen_scheduled_generic_parms_dies (void);
3350
3351 static const char *comp_dir_string (void);
3352
3353 static void hash_loc_operands (dw_loc_descr_ref, inchash::hash &);
3354
3355 /* enum for tracking thread-local variables whose address is really an offset
3356    relative to the TLS pointer, which will need link-time relocation, but will
3357    not need relocation by the DWARF consumer.  */
3358
3359 enum dtprel_bool
3360 {
3361   dtprel_false = 0,
3362   dtprel_true = 1
3363 };
3364
3365 /* Return the operator to use for an address of a variable.  For dtprel_true, we
3366    use DW_OP_const*.  For regular variables, which need both link-time
3367    relocation and consumer-level relocation (e.g., to account for shared objects
3368    loaded at a random address), we use DW_OP_addr*.  */
3369
3370 static inline enum dwarf_location_atom
3371 dw_addr_op (enum dtprel_bool dtprel)
3372 {
3373   if (dtprel == dtprel_true)
3374     return (dwarf_split_debug_info ? DW_OP_GNU_const_index
3375             : (DWARF2_ADDR_SIZE == 4 ? DW_OP_const4u : DW_OP_const8u));
3376   else
3377     return dwarf_split_debug_info ? DW_OP_GNU_addr_index : DW_OP_addr;
3378 }
3379
3380 /* Return a pointer to a newly allocated address location description.  If
3381    dwarf_split_debug_info is true, then record the address with the appropriate
3382    relocation.  */
3383 static inline dw_loc_descr_ref
3384 new_addr_loc_descr (rtx addr, enum dtprel_bool dtprel)
3385 {
3386   dw_loc_descr_ref ref = new_loc_descr (dw_addr_op (dtprel), 0, 0);
3387
3388   ref->dw_loc_oprnd1.val_class = dw_val_class_addr;
3389   ref->dw_loc_oprnd1.v.val_addr = addr;
3390   ref->dtprel = dtprel;
3391   if (dwarf_split_debug_info)
3392     ref->dw_loc_oprnd1.val_entry
3393         = add_addr_table_entry (addr,
3394                                 dtprel ? ate_kind_rtx_dtprel : ate_kind_rtx);
3395   else
3396     ref->dw_loc_oprnd1.val_entry = NULL;
3397
3398   return ref;
3399 }
3400
3401 /* Section names used to hold DWARF debugging information.  */
3402
3403 #ifndef DEBUG_INFO_SECTION
3404 #define DEBUG_INFO_SECTION      ".debug_info"
3405 #endif
3406 #ifndef DEBUG_DWO_INFO_SECTION
3407 #define DEBUG_DWO_INFO_SECTION ".debug_info.dwo"
3408 #endif
3409 #ifndef DEBUG_ABBREV_SECTION
3410 #define DEBUG_ABBREV_SECTION    ".debug_abbrev"
3411 #endif
3412 #ifndef DEBUG_DWO_ABBREV_SECTION
3413 #define DEBUG_DWO_ABBREV_SECTION ".debug_abbrev.dwo"
3414 #endif
3415 #ifndef DEBUG_ARANGES_SECTION
3416 #define DEBUG_ARANGES_SECTION   ".debug_aranges"
3417 #endif
3418 #ifndef DEBUG_ADDR_SECTION
3419 #define DEBUG_ADDR_SECTION     ".debug_addr"
3420 #endif
3421 #ifndef DEBUG_NORM_MACINFO_SECTION
3422 #define DEBUG_NORM_MACINFO_SECTION     ".debug_macinfo"
3423 #endif
3424 #ifndef DEBUG_DWO_MACINFO_SECTION
3425 #define DEBUG_DWO_MACINFO_SECTION      ".debug_macinfo.dwo"
3426 #endif
3427 #ifndef DEBUG_MACINFO_SECTION
3428 #define DEBUG_MACINFO_SECTION                                           \
3429   (!dwarf_split_debug_info                                              \
3430    ? (DEBUG_NORM_MACINFO_SECTION) : (DEBUG_DWO_MACINFO_SECTION))
3431 #endif
3432 #ifndef DEBUG_NORM_MACRO_SECTION
3433 #define DEBUG_NORM_MACRO_SECTION ".debug_macro"
3434 #endif
3435 #ifndef DEBUG_DWO_MACRO_SECTION
3436 #define DEBUG_DWO_MACRO_SECTION        ".debug_macro.dwo"
3437 #endif
3438 #ifndef DEBUG_MACRO_SECTION
3439 #define DEBUG_MACRO_SECTION                                             \
3440   (!dwarf_split_debug_info                                              \
3441    ? (DEBUG_NORM_MACRO_SECTION) : (DEBUG_DWO_MACRO_SECTION))
3442 #endif
3443 #ifndef DEBUG_LINE_SECTION
3444 #define DEBUG_LINE_SECTION      ".debug_line"
3445 #endif
3446 #ifndef DEBUG_DWO_LINE_SECTION
3447 #define DEBUG_DWO_LINE_SECTION ".debug_line.dwo"
3448 #endif
3449 #ifndef DEBUG_LOC_SECTION
3450 #define DEBUG_LOC_SECTION       ".debug_loc"
3451 #endif
3452 #ifndef DEBUG_DWO_LOC_SECTION
3453 #define DEBUG_DWO_LOC_SECTION  ".debug_loc.dwo"
3454 #endif
3455 #ifndef DEBUG_PUBNAMES_SECTION
3456 #define DEBUG_PUBNAMES_SECTION  \
3457   ((debug_generate_pub_sections == 2) \
3458    ? ".debug_gnu_pubnames" : ".debug_pubnames")
3459 #endif
3460 #ifndef DEBUG_PUBTYPES_SECTION
3461 #define DEBUG_PUBTYPES_SECTION  \
3462   ((debug_generate_pub_sections == 2) \
3463    ? ".debug_gnu_pubtypes" : ".debug_pubtypes")
3464 #endif
3465 #define DEBUG_NORM_STR_OFFSETS_SECTION ".debug_str_offsets"
3466 #define DEBUG_DWO_STR_OFFSETS_SECTION ".debug_str_offsets.dwo"
3467 #ifndef DEBUG_STR_OFFSETS_SECTION
3468 #define DEBUG_STR_OFFSETS_SECTION                                       \
3469   (!dwarf_split_debug_info                                              \
3470    ? (DEBUG_NORM_STR_OFFSETS_SECTION) : (DEBUG_DWO_STR_OFFSETS_SECTION))
3471 #endif
3472 #ifndef DEBUG_STR_DWO_SECTION
3473 #define DEBUG_STR_DWO_SECTION   ".debug_str.dwo"
3474 #endif
3475 #ifndef DEBUG_STR_SECTION
3476 #define DEBUG_STR_SECTION  ".debug_str"
3477 #endif
3478 #ifndef DEBUG_RANGES_SECTION
3479 #define DEBUG_RANGES_SECTION    ".debug_ranges"
3480 #endif
3481
3482 /* Standard ELF section names for compiled code and data.  */
3483 #ifndef TEXT_SECTION_NAME
3484 #define TEXT_SECTION_NAME       ".text"
3485 #endif
3486
3487 /* Section flags for .debug_macinfo/.debug_macro section.  */
3488 #define DEBUG_MACRO_SECTION_FLAGS                                       \
3489   (dwarf_split_debug_info ? SECTION_DEBUG | SECTION_EXCLUDE : SECTION_DEBUG)
3490
3491 /* Section flags for .debug_str section.  */
3492 #define DEBUG_STR_SECTION_FLAGS                                 \
3493   (HAVE_GAS_SHF_MERGE && flag_merge_debug_strings               \
3494    ? SECTION_DEBUG | SECTION_MERGE | SECTION_STRINGS | 1        \
3495    : SECTION_DEBUG)
3496
3497 /* Section flags for .debug_str.dwo section.  */
3498 #define DEBUG_STR_DWO_SECTION_FLAGS (SECTION_DEBUG | SECTION_EXCLUDE)
3499
3500 /* Labels we insert at beginning sections we can reference instead of
3501    the section names themselves.  */
3502
3503 #ifndef TEXT_SECTION_LABEL
3504 #define TEXT_SECTION_LABEL                 "Ltext"
3505 #endif
3506 #ifndef COLD_TEXT_SECTION_LABEL
3507 #define COLD_TEXT_SECTION_LABEL             "Ltext_cold"
3508 #endif
3509 #ifndef DEBUG_LINE_SECTION_LABEL
3510 #define DEBUG_LINE_SECTION_LABEL           "Ldebug_line"
3511 #endif
3512 #ifndef DEBUG_SKELETON_LINE_SECTION_LABEL
3513 #define DEBUG_SKELETON_LINE_SECTION_LABEL   "Lskeleton_debug_line"
3514 #endif
3515 #ifndef DEBUG_INFO_SECTION_LABEL
3516 #define DEBUG_INFO_SECTION_LABEL           "Ldebug_info"
3517 #endif
3518 #ifndef DEBUG_SKELETON_INFO_SECTION_LABEL
3519 #define DEBUG_SKELETON_INFO_SECTION_LABEL   "Lskeleton_debug_info"
3520 #endif
3521 #ifndef DEBUG_ABBREV_SECTION_LABEL
3522 #define DEBUG_ABBREV_SECTION_LABEL         "Ldebug_abbrev"
3523 #endif
3524 #ifndef DEBUG_SKELETON_ABBREV_SECTION_LABEL
3525 #define DEBUG_SKELETON_ABBREV_SECTION_LABEL "Lskeleton_debug_abbrev"
3526 #endif
3527 #ifndef DEBUG_ADDR_SECTION_LABEL
3528 #define DEBUG_ADDR_SECTION_LABEL           "Ldebug_addr"
3529 #endif
3530 #ifndef DEBUG_LOC_SECTION_LABEL
3531 #define DEBUG_LOC_SECTION_LABEL                    "Ldebug_loc"
3532 #endif
3533 #ifndef DEBUG_RANGES_SECTION_LABEL
3534 #define DEBUG_RANGES_SECTION_LABEL         "Ldebug_ranges"
3535 #endif
3536 #ifndef DEBUG_MACINFO_SECTION_LABEL
3537 #define DEBUG_MACINFO_SECTION_LABEL         "Ldebug_macinfo"
3538 #endif
3539 #ifndef DEBUG_MACRO_SECTION_LABEL
3540 #define DEBUG_MACRO_SECTION_LABEL          "Ldebug_macro"
3541 #endif
3542 #define SKELETON_COMP_DIE_ABBREV 1
3543 #define SKELETON_TYPE_DIE_ABBREV 2
3544
3545 /* Definitions of defaults for formats and names of various special
3546    (artificial) labels which may be generated within this file (when the -g
3547    options is used and DWARF2_DEBUGGING_INFO is in effect.
3548    If necessary, these may be overridden from within the tm.h file, but
3549    typically, overriding these defaults is unnecessary.  */
3550
3551 static char text_end_label[MAX_ARTIFICIAL_LABEL_BYTES];
3552 static char text_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3553 static char cold_text_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3554 static char cold_end_label[MAX_ARTIFICIAL_LABEL_BYTES];
3555 static char abbrev_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3556 static char debug_info_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3557 static char debug_skeleton_info_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3558 static char debug_skeleton_abbrev_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3559 static char debug_line_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3560 static char debug_addr_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3561 static char debug_skeleton_line_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3562 static char macinfo_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3563 static char loc_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3564 static char ranges_section_label[2 * MAX_ARTIFICIAL_LABEL_BYTES];
3565
3566 #ifndef TEXT_END_LABEL
3567 #define TEXT_END_LABEL          "Letext"
3568 #endif
3569 #ifndef COLD_END_LABEL
3570 #define COLD_END_LABEL          "Letext_cold"
3571 #endif
3572 #ifndef BLOCK_BEGIN_LABEL
3573 #define BLOCK_BEGIN_LABEL       "LBB"
3574 #endif
3575 #ifndef BLOCK_END_LABEL
3576 #define BLOCK_END_LABEL         "LBE"
3577 #endif
3578 #ifndef LINE_CODE_LABEL
3579 #define LINE_CODE_LABEL         "LM"
3580 #endif
3581
3582 \f
3583 /* Return the root of the DIE's built for the current compilation unit.  */
3584 static dw_die_ref
3585 comp_unit_die (void)
3586 {
3587   if (!single_comp_unit_die)
3588     single_comp_unit_die = gen_compile_unit_die (NULL);
3589   return single_comp_unit_die;
3590 }
3591
3592 /* We allow a language front-end to designate a function that is to be
3593    called to "demangle" any name before it is put into a DIE.  */
3594
3595 static const char *(*demangle_name_func) (const char *);
3596
3597 void
3598 dwarf2out_set_demangle_name_func (const char *(*func) (const char *))
3599 {
3600   demangle_name_func = func;
3601 }
3602
3603 /* Test if rtl node points to a pseudo register.  */
3604
3605 static inline int
3606 is_pseudo_reg (const_rtx rtl)
3607 {
3608   return ((REG_P (rtl) && REGNO (rtl) >= FIRST_PSEUDO_REGISTER)
3609           || (GET_CODE (rtl) == SUBREG
3610               && REGNO (SUBREG_REG (rtl)) >= FIRST_PSEUDO_REGISTER));
3611 }
3612
3613 /* Return a reference to a type, with its const and volatile qualifiers
3614    removed.  */
3615
3616 static inline tree
3617 type_main_variant (tree type)
3618 {
3619   type = TYPE_MAIN_VARIANT (type);
3620
3621   /* ??? There really should be only one main variant among any group of
3622      variants of a given type (and all of the MAIN_VARIANT values for all
3623      members of the group should point to that one type) but sometimes the C
3624      front-end messes this up for array types, so we work around that bug
3625      here.  */
3626   if (TREE_CODE (type) == ARRAY_TYPE)
3627     while (type != TYPE_MAIN_VARIANT (type))
3628       type = TYPE_MAIN_VARIANT (type);
3629
3630   return type;
3631 }
3632
3633 /* Return nonzero if the given type node represents a tagged type.  */
3634
3635 static inline int
3636 is_tagged_type (const_tree type)
3637 {
3638   enum tree_code code = TREE_CODE (type);
3639
3640   return (code == RECORD_TYPE || code == UNION_TYPE
3641           || code == QUAL_UNION_TYPE || code == ENUMERAL_TYPE);
3642 }
3643
3644 /* Set label to debug_info_section_label + die_offset of a DIE reference.  */
3645
3646 static void
3647 get_ref_die_offset_label (char *label, dw_die_ref ref)
3648 {
3649   sprintf (label, "%s+%ld", debug_info_section_label, ref->die_offset);
3650 }
3651
3652 /* Return die_offset of a DIE reference to a base type.  */
3653
3654 static unsigned long int
3655 get_base_type_offset (dw_die_ref ref)
3656 {
3657   if (ref->die_offset)
3658     return ref->die_offset;
3659   if (comp_unit_die ()->die_abbrev)
3660     {
3661       calc_base_type_die_sizes ();
3662       gcc_assert (ref->die_offset);
3663     }
3664   return ref->die_offset;
3665 }
3666
3667 /* Return die_offset of a DIE reference other than base type.  */
3668
3669 static unsigned long int
3670 get_ref_die_offset (dw_die_ref ref)
3671 {
3672   gcc_assert (ref->die_offset);
3673   return ref->die_offset;
3674 }
3675
3676 /* Convert a DIE tag into its string name.  */
3677
3678 static const char *
3679 dwarf_tag_name (unsigned int tag)
3680 {
3681   const char *name = get_DW_TAG_name (tag);
3682
3683   if (name != NULL)
3684     return name;
3685
3686   return "DW_TAG_<unknown>";
3687 }
3688
3689 /* Convert a DWARF attribute code into its string name.  */
3690
3691 static const char *
3692 dwarf_attr_name (unsigned int attr)
3693 {
3694   const char *name;
3695
3696   switch (attr)
3697     {
3698 #if VMS_DEBUGGING_INFO
3699     case DW_AT_HP_prologue:
3700       return "DW_AT_HP_prologue";
3701 #else
3702     case DW_AT_MIPS_loop_unroll_factor:
3703       return "DW_AT_MIPS_loop_unroll_factor";
3704 #endif
3705
3706 #if VMS_DEBUGGING_INFO
3707     case DW_AT_HP_epilogue:
3708       return "DW_AT_HP_epilogue";
3709 #else
3710     case DW_AT_MIPS_stride:
3711       return "DW_AT_MIPS_stride";
3712 #endif
3713     }
3714
3715   name = get_DW_AT_name (attr);
3716
3717   if (name != NULL)
3718     return name;
3719
3720   return "DW_AT_<unknown>";
3721 }
3722
3723 /* Convert a DWARF value form code into its string name.  */
3724
3725 static const char *
3726 dwarf_form_name (unsigned int form)
3727 {
3728   const char *name = get_DW_FORM_name (form);
3729
3730   if (name != NULL)
3731     return name;
3732
3733   return "DW_FORM_<unknown>";
3734 }
3735 \f
3736 /* Determine the "ultimate origin" of a decl.  The decl may be an inlined
3737    instance of an inlined instance of a decl which is local to an inline
3738    function, so we have to trace all of the way back through the origin chain
3739    to find out what sort of node actually served as the original seed for the
3740    given block.  */
3741
3742 static tree
3743 decl_ultimate_origin (const_tree decl)
3744 {
3745   if (!CODE_CONTAINS_STRUCT (TREE_CODE (decl), TS_DECL_COMMON))
3746     return NULL_TREE;
3747
3748   /* DECL_ABSTRACT_ORIGIN can point to itself; ignore that if
3749      we're trying to output the abstract instance of this function.  */
3750   if (DECL_ABSTRACT_P (decl) && DECL_ABSTRACT_ORIGIN (decl) == decl)
3751     return NULL_TREE;
3752
3753   /* Since the DECL_ABSTRACT_ORIGIN for a DECL is supposed to be the
3754      most distant ancestor, this should never happen.  */
3755   gcc_assert (!DECL_FROM_INLINE (DECL_ORIGIN (decl)));
3756
3757   return DECL_ABSTRACT_ORIGIN (decl);
3758 }
3759
3760 /* Get the class to which DECL belongs, if any.  In g++, the DECL_CONTEXT
3761    of a virtual function may refer to a base class, so we check the 'this'
3762    parameter.  */
3763
3764 static tree
3765 decl_class_context (tree decl)
3766 {
3767   tree context = NULL_TREE;
3768
3769   if (TREE_CODE (decl) != FUNCTION_DECL || ! DECL_VINDEX (decl))
3770     context = DECL_CONTEXT (decl);
3771   else
3772     context = TYPE_MAIN_VARIANT
3773       (TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (decl)))));
3774
3775   if (context && !TYPE_P (context))
3776     context = NULL_TREE;
3777
3778   return context;
3779 }
3780 \f
3781 /* Add an attribute/value pair to a DIE.  */
3782
3783 static inline void
3784 add_dwarf_attr (dw_die_ref die, dw_attr_ref attr)
3785 {
3786   /* Maybe this should be an assert?  */
3787   if (die == NULL)
3788     return;
3789
3790   vec_safe_reserve (die->die_attr, 1);
3791   vec_safe_push (die->die_attr, *attr);
3792 }
3793
3794 static inline enum dw_val_class
3795 AT_class (dw_attr_ref a)
3796 {
3797   return a->dw_attr_val.val_class;
3798 }
3799
3800 /* Return the index for any attribute that will be referenced with a
3801    DW_FORM_GNU_addr_index or DW_FORM_GNU_str_index.  String indices
3802    are stored in dw_attr_val.v.val_str for reference counting
3803    pruning.  */
3804
3805 static inline unsigned int
3806 AT_index (dw_attr_ref a)
3807 {
3808   if (AT_class (a) == dw_val_class_str)
3809     return a->dw_attr_val.v.val_str->index;
3810   else if (a->dw_attr_val.val_entry != NULL)
3811     return a->dw_attr_val.val_entry->index;
3812   return NOT_INDEXED;
3813 }
3814
3815 /* Add a flag value attribute to a DIE.  */
3816
3817 static inline void
3818 add_AT_flag (dw_die_ref die, enum dwarf_attribute attr_kind, unsigned int flag)
3819 {
3820   dw_attr_node attr;
3821
3822   attr.dw_attr = attr_kind;
3823   attr.dw_attr_val.val_class = dw_val_class_flag;
3824   attr.dw_attr_val.val_entry = NULL;
3825   attr.dw_attr_val.v.val_flag = flag;
3826   add_dwarf_attr (die, &attr);
3827 }
3828
3829 static inline unsigned
3830 AT_flag (dw_attr_ref a)
3831 {
3832   gcc_assert (a && AT_class (a) == dw_val_class_flag);
3833   return a->dw_attr_val.v.val_flag;
3834 }
3835
3836 /* Add a signed integer attribute value to a DIE.  */
3837
3838 static inline void
3839 add_AT_int (dw_die_ref die, enum dwarf_attribute attr_kind, HOST_WIDE_INT int_val)
3840 {
3841   dw_attr_node attr;
3842
3843   attr.dw_attr = attr_kind;
3844   attr.dw_attr_val.val_class = dw_val_class_const;
3845   attr.dw_attr_val.val_entry = NULL;
3846   attr.dw_attr_val.v.val_int = int_val;
3847   add_dwarf_attr (die, &attr);
3848 }
3849
3850 static inline HOST_WIDE_INT
3851 AT_int (dw_attr_ref a)
3852 {
3853   gcc_assert (a && AT_class (a) == dw_val_class_const);
3854   return a->dw_attr_val.v.val_int;
3855 }
3856
3857 /* Add an unsigned integer attribute value to a DIE.  */
3858
3859 static inline void
3860 add_AT_unsigned (dw_die_ref die, enum dwarf_attribute attr_kind,
3861                  unsigned HOST_WIDE_INT unsigned_val)
3862 {
3863   dw_attr_node attr;
3864
3865   attr.dw_attr = attr_kind;
3866   attr.dw_attr_val.val_class = dw_val_class_unsigned_const;
3867   attr.dw_attr_val.val_entry = NULL;
3868   attr.dw_attr_val.v.val_unsigned = unsigned_val;
3869   add_dwarf_attr (die, &attr);
3870 }
3871
3872 static inline unsigned HOST_WIDE_INT
3873 AT_unsigned (dw_attr_ref a)
3874 {
3875   gcc_assert (a && AT_class (a) == dw_val_class_unsigned_const);
3876   return a->dw_attr_val.v.val_unsigned;
3877 }
3878
3879 /* Add an unsigned wide integer attribute value to a DIE.  */
3880
3881 static inline void
3882 add_AT_wide (dw_die_ref die, enum dwarf_attribute attr_kind,
3883              const wide_int& w)
3884 {
3885   dw_attr_node attr;
3886
3887   attr.dw_attr = attr_kind;
3888   attr.dw_attr_val.val_class = dw_val_class_wide_int;
3889   attr.dw_attr_val.val_entry = NULL;
3890   attr.dw_attr_val.v.val_wide = ggc_alloc<wide_int> ();
3891   *attr.dw_attr_val.v.val_wide = w;
3892   add_dwarf_attr (die, &attr);
3893 }
3894
3895 /* Add an unsigned double integer attribute value to a DIE.  */
3896
3897 static inline void
3898 add_AT_double (dw_die_ref die, enum dwarf_attribute attr_kind,
3899                HOST_WIDE_INT high, unsigned HOST_WIDE_INT low)
3900 {
3901   dw_attr_node attr;
3902
3903   attr.dw_attr = attr_kind;
3904   attr.dw_attr_val.val_class = dw_val_class_const_double;
3905   attr.dw_attr_val.val_entry = NULL;
3906   attr.dw_attr_val.v.val_double.high = high;
3907   attr.dw_attr_val.v.val_double.low = low;
3908   add_dwarf_attr (die, &attr);
3909 }
3910
3911 /* Add a floating point attribute value to a DIE and return it.  */
3912
3913 static inline void
3914 add_AT_vec (dw_die_ref die, enum dwarf_attribute attr_kind,
3915             unsigned int length, unsigned int elt_size, unsigned char *array)
3916 {
3917   dw_attr_node attr;
3918
3919   attr.dw_attr = attr_kind;
3920   attr.dw_attr_val.val_class = dw_val_class_vec;
3921   attr.dw_attr_val.val_entry = NULL;
3922   attr.dw_attr_val.v.val_vec.length = length;
3923   attr.dw_attr_val.v.val_vec.elt_size = elt_size;
3924   attr.dw_attr_val.v.val_vec.array = array;
3925   add_dwarf_attr (die, &attr);
3926 }
3927
3928 /* Add an 8-byte data attribute value to a DIE.  */
3929
3930 static inline void
3931 add_AT_data8 (dw_die_ref die, enum dwarf_attribute attr_kind,
3932               unsigned char data8[8])
3933 {
3934   dw_attr_node attr;
3935
3936   attr.dw_attr = attr_kind;
3937   attr.dw_attr_val.val_class = dw_val_class_data8;
3938   attr.dw_attr_val.val_entry = NULL;
3939   memcpy (attr.dw_attr_val.v.val_data8, data8, 8);
3940   add_dwarf_attr (die, &attr);
3941 }
3942
3943 /* Add DW_AT_low_pc and DW_AT_high_pc to a DIE.  When using
3944    dwarf_split_debug_info, address attributes in dies destined for the
3945    final executable have force_direct set to avoid using indexed
3946    references.  */
3947
3948 static inline void
3949 add_AT_low_high_pc (dw_die_ref die, const char *lbl_low, const char *lbl_high,
3950                     bool force_direct)
3951 {
3952   dw_attr_node attr;
3953   char * lbl_id;
3954
3955   lbl_id = xstrdup (lbl_low);
3956   attr.dw_attr = DW_AT_low_pc;
3957   attr.dw_attr_val.val_class = dw_val_class_lbl_id;
3958   attr.dw_attr_val.v.val_lbl_id = lbl_id;
3959   if (dwarf_split_debug_info && !force_direct)
3960     attr.dw_attr_val.val_entry
3961         = add_addr_table_entry (lbl_id, ate_kind_label);
3962   else
3963     attr.dw_attr_val.val_entry = NULL;
3964   add_dwarf_attr (die, &attr);
3965
3966   attr.dw_attr = DW_AT_high_pc;
3967   if (dwarf_version < 4)
3968     attr.dw_attr_val.val_class = dw_val_class_lbl_id;
3969   else
3970     attr.dw_attr_val.val_class = dw_val_class_high_pc;
3971   lbl_id = xstrdup (lbl_high);
3972   attr.dw_attr_val.v.val_lbl_id = lbl_id;
3973   if (attr.dw_attr_val.val_class == dw_val_class_lbl_id
3974       && dwarf_split_debug_info && !force_direct)
3975     attr.dw_attr_val.val_entry
3976         = add_addr_table_entry (lbl_id, ate_kind_label);
3977   else
3978     attr.dw_attr_val.val_entry = NULL;
3979   add_dwarf_attr (die, &attr);
3980 }
3981
3982 /* Hash and equality functions for debug_str_hash.  */
3983
3984 hashval_t
3985 indirect_string_hasher::hash (indirect_string_node *x)
3986 {
3987   return htab_hash_string (x->str);
3988 }
3989
3990 bool
3991 indirect_string_hasher::equal (indirect_string_node *x1, const char *x2)
3992 {
3993   return strcmp (x1->str, x2) == 0;
3994 }
3995
3996 /* Add STR to the given string hash table.  */
3997
3998 static struct indirect_string_node *
3999 find_AT_string_in_table (const char *str,
4000                          hash_table<indirect_string_hasher> *table)
4001 {
4002   struct indirect_string_node *node;
4003
4004   indirect_string_node **slot
4005     = table->find_slot_with_hash (str, htab_hash_string (str), INSERT);
4006   if (*slot == NULL)
4007     {
4008       node = ggc_cleared_alloc<indirect_string_node> ();
4009       node->str = ggc_strdup (str);
4010       *slot = node;
4011     }
4012   else
4013     node = *slot;
4014
4015   node->refcount++;
4016   return node;
4017 }
4018
4019 /* Add STR to the indirect string hash table.  */
4020
4021 static struct indirect_string_node *
4022 find_AT_string (const char *str)
4023 {
4024   if (! debug_str_hash)
4025     debug_str_hash = hash_table<indirect_string_hasher>::create_ggc (10);
4026
4027   return find_AT_string_in_table (str, debug_str_hash);
4028 }
4029
4030 /* Add a string attribute value to a DIE.  */
4031
4032 static inline void
4033 add_AT_string (dw_die_ref die, enum dwarf_attribute attr_kind, const char *str)
4034 {
4035   dw_attr_node attr;
4036   struct indirect_string_node *node;
4037
4038   node = find_AT_string (str);
4039
4040   attr.dw_attr = attr_kind;
4041   attr.dw_attr_val.val_class = dw_val_class_str;
4042   attr.dw_attr_val.val_entry = NULL;
4043   attr.dw_attr_val.v.val_str = node;
4044   add_dwarf_attr (die, &attr);
4045 }
4046
4047 static inline const char *
4048 AT_string (dw_attr_ref a)
4049 {
4050   gcc_assert (a && AT_class (a) == dw_val_class_str);
4051   return a->dw_attr_val.v.val_str->str;
4052 }
4053
4054 /* Call this function directly to bypass AT_string_form's logic to put
4055    the string inline in the die. */
4056
4057 static void
4058 set_indirect_string (struct indirect_string_node *node)
4059 {
4060   char label[32];
4061   /* Already indirect is a no op.  */
4062   if (node->form == DW_FORM_strp || node->form == DW_FORM_GNU_str_index)
4063     {
4064       gcc_assert (node->label);
4065       return;
4066     }
4067   ASM_GENERATE_INTERNAL_LABEL (label, "LASF", dw2_string_counter);
4068   ++dw2_string_counter;
4069   node->label = xstrdup (label);
4070
4071   if (!dwarf_split_debug_info)
4072     {
4073       node->form = DW_FORM_strp;
4074       node->index = NOT_INDEXED;
4075     }
4076   else
4077     {
4078       node->form = DW_FORM_GNU_str_index;
4079       node->index = NO_INDEX_ASSIGNED;
4080     }
4081 }
4082
4083 /* Find out whether a string should be output inline in DIE
4084    or out-of-line in .debug_str section.  */
4085
4086 static enum dwarf_form
4087 find_string_form (struct indirect_string_node *node)
4088 {
4089   unsigned int len;
4090
4091   if (node->form)
4092     return node->form;
4093
4094   len = strlen (node->str) + 1;
4095
4096   /* If the string is shorter or equal to the size of the reference, it is
4097      always better to put it inline.  */
4098   if (len <= DWARF_OFFSET_SIZE || node->refcount == 0)
4099     return node->form = DW_FORM_string;
4100
4101   /* If we cannot expect the linker to merge strings in .debug_str
4102      section, only put it into .debug_str if it is worth even in this
4103      single module.  */
4104   if (DWARF2_INDIRECT_STRING_SUPPORT_MISSING_ON_TARGET
4105       || ((debug_str_section->common.flags & SECTION_MERGE) == 0
4106       && (len - DWARF_OFFSET_SIZE) * node->refcount <= len))
4107     return node->form = DW_FORM_string;
4108
4109   set_indirect_string (node);
4110
4111   return node->form;
4112 }
4113
4114 /* Find out whether the string referenced from the attribute should be
4115    output inline in DIE or out-of-line in .debug_str section.  */
4116
4117 static enum dwarf_form
4118 AT_string_form (dw_attr_ref a)
4119 {
4120   gcc_assert (a && AT_class (a) == dw_val_class_str);
4121   return find_string_form (a->dw_attr_val.v.val_str);
4122 }
4123
4124 /* Add a DIE reference attribute value to a DIE.  */
4125
4126 static inline void
4127 add_AT_die_ref (dw_die_ref die, enum dwarf_attribute attr_kind, dw_die_ref targ_die)
4128 {
4129   dw_attr_node attr;
4130
4131 #ifdef ENABLE_CHECKING
4132   gcc_assert (targ_die != NULL);
4133 #else
4134   /* With LTO we can end up trying to reference something we didn't create
4135      a DIE for.  Avoid crashing later on a NULL referenced DIE.  */
4136   if (targ_die == NULL)
4137     return;
4138 #endif
4139
4140   attr.dw_attr = attr_kind;
4141   attr.dw_attr_val.val_class = dw_val_class_die_ref;
4142   attr.dw_attr_val.val_entry = NULL;
4143   attr.dw_attr_val.v.val_die_ref.die = targ_die;
4144   attr.dw_attr_val.v.val_die_ref.external = 0;
4145   add_dwarf_attr (die, &attr);
4146 }
4147
4148 /* Change DIE reference REF to point to NEW_DIE instead.  */
4149
4150 static inline void
4151 change_AT_die_ref (dw_attr_ref ref, dw_die_ref new_die)
4152 {
4153   gcc_assert (ref->dw_attr_val.val_class == dw_val_class_die_ref);
4154   ref->dw_attr_val.v.val_die_ref.die = new_die;
4155   ref->dw_attr_val.v.val_die_ref.external = 0;
4156 }
4157
4158 /* Add an AT_specification attribute to a DIE, and also make the back
4159    pointer from the specification to the definition.  */
4160
4161 static inline void
4162 add_AT_specification (dw_die_ref die, dw_die_ref targ_die)
4163 {
4164   add_AT_die_ref (die, DW_AT_specification, targ_die);
4165   gcc_assert (!targ_die->die_definition);
4166   targ_die->die_definition = die;
4167 }
4168
4169 static inline dw_die_ref
4170 AT_ref (dw_attr_ref a)
4171 {
4172   gcc_assert (a && AT_class (a) == dw_val_class_die_ref);
4173   return a->dw_attr_val.v.val_die_ref.die;
4174 }
4175
4176 static inline int
4177 AT_ref_external (dw_attr_ref a)
4178 {
4179   if (a && AT_class (a) == dw_val_class_die_ref)
4180     return a->dw_attr_val.v.val_die_ref.external;
4181
4182   return 0;
4183 }
4184
4185 static inline void
4186 set_AT_ref_external (dw_attr_ref a, int i)
4187 {
4188   gcc_assert (a && AT_class (a) == dw_val_class_die_ref);
4189   a->dw_attr_val.v.val_die_ref.external = i;
4190 }
4191
4192 /* Add an FDE reference attribute value to a DIE.  */
4193
4194 static inline void
4195 add_AT_fde_ref (dw_die_ref die, enum dwarf_attribute attr_kind, unsigned int targ_fde)
4196 {
4197   dw_attr_node attr;
4198
4199   attr.dw_attr = attr_kind;
4200   attr.dw_attr_val.val_class = dw_val_class_fde_ref;
4201   attr.dw_attr_val.val_entry = NULL;
4202   attr.dw_attr_val.v.val_fde_index = targ_fde;
4203   add_dwarf_attr (die, &attr);
4204 }
4205
4206 /* Add a location description attribute value to a DIE.  */
4207
4208 static inline void
4209 add_AT_loc (dw_die_ref die, enum dwarf_attribute attr_kind, dw_loc_descr_ref loc)
4210 {
4211   dw_attr_node attr;
4212
4213   attr.dw_attr = attr_kind;
4214   attr.dw_attr_val.val_class = dw_val_class_loc;
4215   attr.dw_attr_val.val_entry = NULL;
4216   attr.dw_attr_val.v.val_loc = loc;
4217   add_dwarf_attr (die, &attr);
4218 }
4219
4220 static inline dw_loc_descr_ref
4221 AT_loc (dw_attr_ref a)
4222 {
4223   gcc_assert (a && AT_class (a) == dw_val_class_loc);
4224   return a->dw_attr_val.v.val_loc;
4225 }
4226
4227 static inline void
4228 add_AT_loc_list (dw_die_ref die, enum dwarf_attribute attr_kind, dw_loc_list_ref loc_list)
4229 {
4230   dw_attr_node attr;
4231
4232   attr.dw_attr = attr_kind;
4233   attr.dw_attr_val.val_class = dw_val_class_loc_list;
4234   attr.dw_attr_val.val_entry = NULL;
4235   attr.dw_attr_val.v.val_loc_list = loc_list;
4236   add_dwarf_attr (die, &attr);
4237   have_location_lists = true;
4238 }
4239
4240 static inline dw_loc_list_ref
4241 AT_loc_list (dw_attr_ref a)
4242 {
4243   gcc_assert (a && AT_class (a) == dw_val_class_loc_list);
4244   return a->dw_attr_val.v.val_loc_list;
4245 }
4246
4247 static inline dw_loc_list_ref *
4248 AT_loc_list_ptr (dw_attr_ref a)
4249 {
4250   gcc_assert (a && AT_class (a) == dw_val_class_loc_list);
4251   return &a->dw_attr_val.v.val_loc_list;
4252 }
4253
4254 struct addr_hasher : ggc_hasher<addr_table_entry *>
4255 {
4256   static hashval_t hash (addr_table_entry *);
4257   static bool equal (addr_table_entry *, addr_table_entry *);
4258 };
4259
4260 /* Table of entries into the .debug_addr section.  */
4261
4262 static GTY (()) hash_table<addr_hasher> *addr_index_table;
4263
4264 /* Hash an address_table_entry.  */
4265
4266 hashval_t
4267 addr_hasher::hash (addr_table_entry *a)
4268 {
4269   inchash::hash hstate;
4270   switch (a->kind)
4271     {
4272       case ate_kind_rtx:
4273         hstate.add_int (0);
4274         break;
4275       case ate_kind_rtx_dtprel:
4276         hstate.add_int (1);
4277         break;
4278       case ate_kind_label:
4279         return htab_hash_string (a->addr.label);
4280       default:
4281         gcc_unreachable ();
4282     }
4283   inchash::add_rtx (a->addr.rtl, hstate);
4284   return hstate.end ();
4285 }
4286
4287 /* Determine equality for two address_table_entries.  */
4288
4289 bool
4290 addr_hasher::equal (addr_table_entry *a1, addr_table_entry *a2)
4291 {
4292   if (a1->kind != a2->kind)
4293     return 0;
4294   switch (a1->kind)
4295     {
4296       case ate_kind_rtx:
4297       case ate_kind_rtx_dtprel:
4298         return rtx_equal_p (a1->addr.rtl, a2->addr.rtl);
4299       case ate_kind_label:
4300         return strcmp (a1->addr.label, a2->addr.label) == 0;
4301       default:
4302         gcc_unreachable ();
4303     }
4304 }
4305
4306 /* Initialize an addr_table_entry.  */
4307
4308 void
4309 init_addr_table_entry (addr_table_entry *e, enum ate_kind kind, void *addr)
4310 {
4311   e->kind = kind;
4312   switch (kind)
4313     {
4314       case ate_kind_rtx:
4315       case ate_kind_rtx_dtprel:
4316         e->addr.rtl = (rtx) addr;
4317         break;
4318       case ate_kind_label:
4319         e->addr.label = (char *) addr;
4320         break;
4321     }
4322   e->refcount = 0;
4323   e->index = NO_INDEX_ASSIGNED;
4324 }
4325
4326 /* Add attr to the address table entry to the table.  Defer setting an
4327    index until output time.  */
4328
4329 static addr_table_entry *
4330 add_addr_table_entry (void *addr, enum ate_kind kind)
4331 {
4332   addr_table_entry *node;
4333   addr_table_entry finder;
4334
4335   gcc_assert (dwarf_split_debug_info);
4336   if (! addr_index_table)
4337     addr_index_table = hash_table<addr_hasher>::create_ggc (10);
4338   init_addr_table_entry (&finder, kind, addr);
4339   addr_table_entry **slot = addr_index_table->find_slot (&finder, INSERT);
4340
4341   if (*slot == HTAB_EMPTY_ENTRY)
4342     {
4343       node = ggc_cleared_alloc<addr_table_entry> ();
4344       init_addr_table_entry (node, kind, addr);
4345       *slot = node;
4346     }
4347   else
4348     node = *slot;
4349
4350   node->refcount++;
4351   return node;
4352 }
4353
4354 /* Remove an entry from the addr table by decrementing its refcount.
4355    Strictly, decrementing the refcount would be enough, but the
4356    assertion that the entry is actually in the table has found
4357    bugs.  */
4358
4359 static void
4360 remove_addr_table_entry (addr_table_entry *entry)
4361 {
4362   gcc_assert (dwarf_split_debug_info && addr_index_table);
4363   /* After an index is assigned, the table is frozen.  */
4364   gcc_assert (entry->refcount > 0 && entry->index == NO_INDEX_ASSIGNED);
4365   entry->refcount--;
4366 }
4367
4368 /* Given a location list, remove all addresses it refers to from the
4369    address_table.  */
4370
4371 static void
4372 remove_loc_list_addr_table_entries (dw_loc_descr_ref descr)
4373 {
4374   for (; descr; descr = descr->dw_loc_next)
4375     if (descr->dw_loc_oprnd1.val_entry != NULL)
4376       {
4377         gcc_assert (descr->dw_loc_oprnd1.val_entry->index == NO_INDEX_ASSIGNED);
4378         remove_addr_table_entry (descr->dw_loc_oprnd1.val_entry);
4379       }
4380 }
4381
4382 /* A helper function for dwarf2out_finish called through
4383    htab_traverse.  Assign an addr_table_entry its index.  All entries
4384    must be collected into the table when this function is called,
4385    because the indexing code relies on htab_traverse to traverse nodes
4386    in the same order for each run. */
4387
4388 int
4389 index_addr_table_entry (addr_table_entry **h, unsigned int *index)
4390 {
4391   addr_table_entry *node = *h;
4392
4393   /* Don't index unreferenced nodes.  */
4394   if (node->refcount == 0)
4395     return 1;
4396
4397   gcc_assert (node->index == NO_INDEX_ASSIGNED);
4398   node->index = *index;
4399   *index += 1;
4400
4401   return 1;
4402 }
4403
4404 /* Add an address constant attribute value to a DIE.  When using
4405    dwarf_split_debug_info, address attributes in dies destined for the
4406    final executable should be direct references--setting the parameter
4407    force_direct ensures this behavior.  */
4408
4409 static inline void
4410 add_AT_addr (dw_die_ref die, enum dwarf_attribute attr_kind, rtx addr,
4411              bool force_direct)
4412 {
4413   dw_attr_node attr;
4414
4415   attr.dw_attr = attr_kind;
4416   attr.dw_attr_val.val_class = dw_val_class_addr;
4417   attr.dw_attr_val.v.val_addr = addr;
4418   if (dwarf_split_debug_info && !force_direct)
4419     attr.dw_attr_val.val_entry = add_addr_table_entry (addr, ate_kind_rtx);
4420   else
4421     attr.dw_attr_val.val_entry = NULL;
4422   add_dwarf_attr (die, &attr);
4423 }
4424
4425 /* Get the RTX from to an address DIE attribute.  */
4426
4427 static inline rtx
4428 AT_addr (dw_attr_ref a)
4429 {
4430   gcc_assert (a && AT_class (a) == dw_val_class_addr);
4431   return a->dw_attr_val.v.val_addr;
4432 }
4433
4434 /* Add a file attribute value to a DIE.  */
4435
4436 static inline void
4437 add_AT_file (dw_die_ref die, enum dwarf_attribute attr_kind,
4438              struct dwarf_file_data *fd)
4439 {
4440   dw_attr_node attr;
4441
4442   attr.dw_attr = attr_kind;
4443   attr.dw_attr_val.val_class = dw_val_class_file;
4444   attr.dw_attr_val.val_entry = NULL;
4445   attr.dw_attr_val.v.val_file = fd;
4446   add_dwarf_attr (die, &attr);
4447 }
4448
4449 /* Get the dwarf_file_data from a file DIE attribute.  */
4450
4451 static inline struct dwarf_file_data *
4452 AT_file (dw_attr_ref a)
4453 {
4454   gcc_assert (a && AT_class (a) == dw_val_class_file);
4455   return a->dw_attr_val.v.val_file;
4456 }
4457
4458 /* Add a vms delta attribute value to a DIE.  */
4459
4460 static inline void
4461 add_AT_vms_delta (dw_die_ref die, enum dwarf_attribute attr_kind,
4462                   const char *lbl1, const char *lbl2)
4463 {
4464   dw_attr_node attr;
4465
4466   attr.dw_attr = attr_kind;
4467   attr.dw_attr_val.val_class = dw_val_class_vms_delta;
4468   attr.dw_attr_val.val_entry = NULL;
4469   attr.dw_attr_val.v.val_vms_delta.lbl1 = xstrdup (lbl1);
4470   attr.dw_attr_val.v.val_vms_delta.lbl2 = xstrdup (lbl2);
4471   add_dwarf_attr (die, &attr);
4472 }
4473
4474 /* Add a label identifier attribute value to a DIE.  */
4475
4476 static inline void
4477 add_AT_lbl_id (dw_die_ref die, enum dwarf_attribute attr_kind,
4478                const char *lbl_id)
4479 {
4480   dw_attr_node attr;
4481
4482   attr.dw_attr = attr_kind;
4483   attr.dw_attr_val.val_class = dw_val_class_lbl_id;
4484   attr.dw_attr_val.val_entry = NULL;
4485   attr.dw_attr_val.v.val_lbl_id = xstrdup (lbl_id);
4486   if (dwarf_split_debug_info)
4487     attr.dw_attr_val.val_entry
4488         = add_addr_table_entry (attr.dw_attr_val.v.val_lbl_id,
4489                                 ate_kind_label);
4490   add_dwarf_attr (die, &attr);
4491 }
4492
4493 /* Add a section offset attribute value to a DIE, an offset into the
4494    debug_line section.  */
4495
4496 static inline void
4497 add_AT_lineptr (dw_die_ref die, enum dwarf_attribute attr_kind,
4498                 const char *label)
4499 {
4500   dw_attr_node attr;
4501
4502   attr.dw_attr = attr_kind;
4503   attr.dw_attr_val.val_class = dw_val_class_lineptr;
4504   attr.dw_attr_val.val_entry = NULL;
4505   attr.dw_attr_val.v.val_lbl_id = xstrdup (label);
4506   add_dwarf_attr (die, &attr);
4507 }
4508
4509 /* Add a section offset attribute value to a DIE, an offset into the
4510    debug_macinfo section.  */
4511
4512 static inline void
4513 add_AT_macptr (dw_die_ref die, enum dwarf_attribute attr_kind,
4514                const char *label)
4515 {
4516   dw_attr_node attr;
4517
4518   attr.dw_attr = attr_kind;
4519   attr.dw_attr_val.val_class = dw_val_class_macptr;
4520   attr.dw_attr_val.val_entry = NULL;
4521   attr.dw_attr_val.v.val_lbl_id = xstrdup (label);
4522   add_dwarf_attr (die, &attr);
4523 }
4524
4525 /* Add an offset attribute value to a DIE.  */
4526
4527 static inline void
4528 add_AT_offset (dw_die_ref die, enum dwarf_attribute attr_kind,
4529                unsigned HOST_WIDE_INT offset)
4530 {
4531   dw_attr_node attr;
4532
4533   attr.dw_attr = attr_kind;
4534   attr.dw_attr_val.val_class = dw_val_class_offset;
4535   attr.dw_attr_val.val_entry = NULL;
4536   attr.dw_attr_val.v.val_offset = offset;
4537   add_dwarf_attr (die, &attr);
4538 }
4539
4540 /* Add a range_list attribute value to a DIE.  When using
4541    dwarf_split_debug_info, address attributes in dies destined for the
4542    final executable should be direct references--setting the parameter
4543    force_direct ensures this behavior.  */
4544
4545 #define UNRELOCATED_OFFSET ((addr_table_entry *) 1)
4546 #define RELOCATED_OFFSET (NULL)
4547
4548 static void
4549 add_AT_range_list (dw_die_ref die, enum dwarf_attribute attr_kind,
4550                    long unsigned int offset, bool force_direct)
4551 {
4552   dw_attr_node attr;
4553
4554   attr.dw_attr = attr_kind;
4555   attr.dw_attr_val.val_class = dw_val_class_range_list;
4556   /* For the range_list attribute, use val_entry to store whether the
4557      offset should follow split-debug-info or normal semantics.  This
4558      value is read in output_range_list_offset.  */
4559   if (dwarf_split_debug_info && !force_direct)
4560     attr.dw_attr_val.val_entry = UNRELOCATED_OFFSET;
4561   else
4562     attr.dw_attr_val.val_entry = RELOCATED_OFFSET;
4563   attr.dw_attr_val.v.val_offset = offset;
4564   add_dwarf_attr (die, &attr);
4565 }
4566
4567 /* Return the start label of a delta attribute.  */
4568
4569 static inline const char *
4570 AT_vms_delta1 (dw_attr_ref a)
4571 {
4572   gcc_assert (a && (AT_class (a) == dw_val_class_vms_delta));
4573   return a->dw_attr_val.v.val_vms_delta.lbl1;
4574 }
4575
4576 /* Return the end label of a delta attribute.  */
4577
4578 static inline const char *
4579 AT_vms_delta2 (dw_attr_ref a)
4580 {
4581   gcc_assert (a && (AT_class (a) == dw_val_class_vms_delta));
4582   return a->dw_attr_val.v.val_vms_delta.lbl2;
4583 }
4584
4585 static inline const char *
4586 AT_lbl (dw_attr_ref a)
4587 {
4588   gcc_assert (a && (AT_class (a) == dw_val_class_lbl_id
4589                     || AT_class (a) == dw_val_class_lineptr
4590                     || AT_class (a) == dw_val_class_macptr
4591                     || AT_class (a) == dw_val_class_high_pc));
4592   return a->dw_attr_val.v.val_lbl_id;
4593 }
4594
4595 /* Get the attribute of type attr_kind.  */
4596
4597 static dw_attr_ref
4598 get_AT (dw_die_ref die, enum dwarf_attribute attr_kind)
4599 {
4600   dw_attr_ref a;
4601   unsigned ix;
4602   dw_die_ref spec = NULL;
4603
4604   if (! die)
4605     return NULL;
4606
4607   FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
4608     if (a->dw_attr == attr_kind)
4609       return a;
4610     else if (a->dw_attr == DW_AT_specification
4611              || a->dw_attr == DW_AT_abstract_origin)
4612       spec = AT_ref (a);
4613
4614   if (spec)
4615     return get_AT (spec, attr_kind);
4616
4617   return NULL;
4618 }
4619
4620 /* Returns the parent of the declaration of DIE.  */
4621
4622 static dw_die_ref
4623 get_die_parent (dw_die_ref die)
4624 {
4625   dw_die_ref t;
4626
4627   if (!die)
4628     return NULL;
4629
4630   if ((t = get_AT_ref (die, DW_AT_abstract_origin))
4631       || (t = get_AT_ref (die, DW_AT_specification)))
4632     die = t;
4633
4634   return die->die_parent;
4635 }
4636
4637 /* Return the "low pc" attribute value, typically associated with a subprogram
4638    DIE.  Return null if the "low pc" attribute is either not present, or if it
4639    cannot be represented as an assembler label identifier.  */
4640
4641 static inline const char *
4642 get_AT_low_pc (dw_die_ref die)
4643 {
4644   dw_attr_ref a = get_AT (die, DW_AT_low_pc);
4645
4646   return a ? AT_lbl (a) : NULL;
4647 }
4648
4649 /* Return the "high pc" attribute value, typically associated with a subprogram
4650    DIE.  Return null if the "high pc" attribute is either not present, or if it
4651    cannot be represented as an assembler label identifier.  */
4652
4653 static inline const char *
4654 get_AT_hi_pc (dw_die_ref die)
4655 {
4656   dw_attr_ref a = get_AT (die, DW_AT_high_pc);
4657
4658   return a ? AT_lbl (a) : NULL;
4659 }
4660
4661 /* Return the value of the string attribute designated by ATTR_KIND, or
4662    NULL if it is not present.  */
4663
4664 static inline const char *
4665 get_AT_string (dw_die_ref die, enum dwarf_attribute attr_kind)
4666 {
4667   dw_attr_ref a = get_AT (die, attr_kind);
4668
4669   return a ? AT_string (a) : NULL;
4670 }
4671
4672 /* Return the value of the flag attribute designated by ATTR_KIND, or -1
4673    if it is not present.  */
4674
4675 static inline int
4676 get_AT_flag (dw_die_ref die, enum dwarf_attribute attr_kind)
4677 {
4678   dw_attr_ref a = get_AT (die, attr_kind);
4679
4680   return a ? AT_flag (a) : 0;
4681 }
4682
4683 /* Return the value of the unsigned attribute designated by ATTR_KIND, or 0
4684    if it is not present.  */
4685
4686 static inline unsigned
4687 get_AT_unsigned (dw_die_ref die, enum dwarf_attribute attr_kind)
4688 {
4689   dw_attr_ref a = get_AT (die, attr_kind);
4690
4691   return a ? AT_unsigned (a) : 0;
4692 }
4693
4694 static inline dw_die_ref
4695 get_AT_ref (dw_die_ref die, enum dwarf_attribute attr_kind)
4696 {
4697   dw_attr_ref a = get_AT (die, attr_kind);
4698
4699   return a ? AT_ref (a) : NULL;
4700 }
4701
4702 static inline struct dwarf_file_data *
4703 get_AT_file (dw_die_ref die, enum dwarf_attribute attr_kind)
4704 {
4705   dw_attr_ref a = get_AT (die, attr_kind);
4706
4707   return a ? AT_file (a) : NULL;
4708 }
4709
4710 /* Return TRUE if the language is C++.  */
4711
4712 static inline bool
4713 is_cxx (void)
4714 {
4715   unsigned int lang = get_AT_unsigned (comp_unit_die (), DW_AT_language);
4716
4717   return (lang == DW_LANG_C_plus_plus || lang == DW_LANG_ObjC_plus_plus
4718           || lang == DW_LANG_C_plus_plus_11 || lang == DW_LANG_C_plus_plus_14);
4719 }
4720
4721 /* Return TRUE if the language is Java.  */
4722
4723 static inline bool
4724 is_java (void)
4725 {
4726   unsigned int lang = get_AT_unsigned (comp_unit_die (), DW_AT_language);
4727
4728   return lang == DW_LANG_Java;
4729 }
4730
4731 /* Return TRUE if the language is Fortran.  */
4732
4733 static inline bool
4734 is_fortran (void)
4735 {
4736   unsigned int lang = get_AT_unsigned (comp_unit_die (), DW_AT_language);
4737
4738   return (lang == DW_LANG_Fortran77
4739           || lang == DW_LANG_Fortran90
4740           || lang == DW_LANG_Fortran95
4741           || lang == DW_LANG_Fortran03
4742           || lang == DW_LANG_Fortran08);
4743 }
4744
4745 /* Return TRUE if the language is Ada.  */
4746
4747 static inline bool
4748 is_ada (void)
4749 {
4750   unsigned int lang = get_AT_unsigned (comp_unit_die (), DW_AT_language);
4751
4752   return lang == DW_LANG_Ada95 || lang == DW_LANG_Ada83;
4753 }
4754
4755 /* Remove the specified attribute if present.  */
4756
4757 static void
4758 remove_AT (dw_die_ref die, enum dwarf_attribute attr_kind)
4759 {
4760   dw_attr_ref a;
4761   unsigned ix;
4762
4763   if (! die)
4764     return;
4765
4766   FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
4767     if (a->dw_attr == attr_kind)
4768       {
4769         if (AT_class (a) == dw_val_class_str)
4770           if (a->dw_attr_val.v.val_str->refcount)
4771             a->dw_attr_val.v.val_str->refcount--;
4772
4773         /* vec::ordered_remove should help reduce the number of abbrevs
4774            that are needed.  */
4775         die->die_attr->ordered_remove (ix);
4776         return;
4777       }
4778 }
4779
4780 /* Remove CHILD from its parent.  PREV must have the property that
4781    PREV->DIE_SIB == CHILD.  Does not alter CHILD.  */
4782
4783 static void
4784 remove_child_with_prev (dw_die_ref child, dw_die_ref prev)
4785 {
4786   gcc_assert (child->die_parent == prev->die_parent);
4787   gcc_assert (prev->die_sib == child);
4788   if (prev == child)
4789     {
4790       gcc_assert (child->die_parent->die_child == child);
4791       prev = NULL;
4792     }
4793   else
4794     prev->die_sib = child->die_sib;
4795   if (child->die_parent->die_child == child)
4796     child->die_parent->die_child = prev;
4797 }
4798
4799 /* Replace OLD_CHILD with NEW_CHILD.  PREV must have the property that
4800    PREV->DIE_SIB == OLD_CHILD.  Does not alter OLD_CHILD.  */
4801
4802 static void
4803 replace_child (dw_die_ref old_child, dw_die_ref new_child, dw_die_ref prev)
4804 {
4805   dw_die_ref parent = old_child->die_parent;
4806
4807   gcc_assert (parent == prev->die_parent);
4808   gcc_assert (prev->die_sib == old_child);
4809
4810   new_child->die_parent = parent;
4811   if (prev == old_child)
4812     {
4813       gcc_assert (parent->die_child == old_child);
4814       new_child->die_sib = new_child;
4815     }
4816   else
4817     {
4818       prev->die_sib = new_child;
4819       new_child->die_sib = old_child->die_sib;
4820     }
4821   if (old_child->die_parent->die_child == old_child)
4822     old_child->die_parent->die_child = new_child;
4823 }
4824
4825 /* Move all children from OLD_PARENT to NEW_PARENT.  */
4826
4827 static void
4828 move_all_children (dw_die_ref old_parent, dw_die_ref new_parent)
4829 {
4830   dw_die_ref c;
4831   new_parent->die_child = old_parent->die_child;
4832   old_parent->die_child = NULL;
4833   FOR_EACH_CHILD (new_parent, c, c->die_parent = new_parent);
4834 }
4835
4836 /* Remove child DIE whose die_tag is TAG.  Do nothing if no child
4837    matches TAG.  */
4838
4839 static void
4840 remove_child_TAG (dw_die_ref die, enum dwarf_tag tag)
4841 {
4842   dw_die_ref c;
4843
4844   c = die->die_child;
4845   if (c) do {
4846     dw_die_ref prev = c;
4847     c = c->die_sib;
4848     while (c->die_tag == tag)
4849       {
4850         remove_child_with_prev (c, prev);
4851         /* Might have removed every child.  */
4852         if (c == c->die_sib)
4853           return;
4854         c = c->die_sib;
4855       }
4856   } while (c != die->die_child);
4857 }
4858
4859 /* Add a CHILD_DIE as the last child of DIE.  */
4860
4861 static void
4862 add_child_die (dw_die_ref die, dw_die_ref child_die)
4863 {
4864   /* FIXME this should probably be an assert.  */
4865   if (! die || ! child_die)
4866     return;
4867   gcc_assert (die != child_die);
4868
4869   child_die->die_parent = die;
4870   if (die->die_child)
4871     {
4872       child_die->die_sib = die->die_child->die_sib;
4873       die->die_child->die_sib = child_die;
4874     }
4875   else
4876     child_die->die_sib = child_die;
4877   die->die_child = child_die;
4878 }
4879
4880 /* Move CHILD, which must be a child of PARENT or the DIE for which PARENT
4881    is the specification, to the end of PARENT's list of children.
4882    This is done by removing and re-adding it.  */
4883
4884 static void
4885 splice_child_die (dw_die_ref parent, dw_die_ref child)
4886 {
4887   dw_die_ref p;
4888
4889   /* We want the declaration DIE from inside the class, not the
4890      specification DIE at toplevel.  */
4891   if (child->die_parent != parent)
4892     {
4893       dw_die_ref tmp = get_AT_ref (child, DW_AT_specification);
4894
4895       if (tmp)
4896         child = tmp;
4897     }
4898
4899   gcc_assert (child->die_parent == parent
4900               || (child->die_parent
4901                   == get_AT_ref (parent, DW_AT_specification)));
4902
4903   for (p = child->die_parent->die_child; ; p = p->die_sib)
4904     if (p->die_sib == child)
4905       {
4906         remove_child_with_prev (child, p);
4907         break;
4908       }
4909
4910   add_child_die (parent, child);
4911 }
4912
4913 /* Return a pointer to a newly created DIE node.  */
4914
4915 static inline dw_die_ref
4916 new_die (enum dwarf_tag tag_value, dw_die_ref parent_die, tree t)
4917 {
4918   dw_die_ref die = ggc_cleared_alloc<die_node> ();
4919
4920   die->die_tag = tag_value;
4921
4922   if (parent_die != NULL)
4923     add_child_die (parent_die, die);
4924   else
4925     {
4926       limbo_die_node *limbo_node;
4927
4928       limbo_node = ggc_cleared_alloc<limbo_die_node> ();
4929       limbo_node->die = die;
4930       limbo_node->created_for = t;
4931       limbo_node->next = limbo_die_list;
4932       limbo_die_list = limbo_node;
4933     }
4934
4935   return die;
4936 }
4937
4938 /* Return the DIE associated with the given type specifier.  */
4939
4940 static inline dw_die_ref
4941 lookup_type_die (tree type)
4942 {
4943   return TYPE_SYMTAB_DIE (type);
4944 }
4945
4946 /* Given a TYPE_DIE representing the type TYPE, if TYPE is an
4947    anonymous type named by the typedef TYPE_DIE, return the DIE of the
4948    anonymous type instead the one of the naming typedef.  */
4949
4950 static inline dw_die_ref
4951 strip_naming_typedef (tree type, dw_die_ref type_die)
4952 {
4953   if (type
4954       && TREE_CODE (type) == RECORD_TYPE
4955       && type_die
4956       && type_die->die_tag == DW_TAG_typedef
4957       && is_naming_typedef_decl (TYPE_NAME (type)))
4958     type_die = get_AT_ref (type_die, DW_AT_type);
4959   return type_die;
4960 }
4961
4962 /* Like lookup_type_die, but if type is an anonymous type named by a
4963    typedef[1], return the DIE of the anonymous type instead the one of
4964    the naming typedef.  This is because in gen_typedef_die, we did
4965    equate the anonymous struct named by the typedef with the DIE of
4966    the naming typedef. So by default, lookup_type_die on an anonymous
4967    struct yields the DIE of the naming typedef.
4968
4969    [1]: Read the comment of is_naming_typedef_decl to learn about what
4970    a naming typedef is.  */
4971
4972 static inline dw_die_ref
4973 lookup_type_die_strip_naming_typedef (tree type)
4974 {
4975   dw_die_ref die = lookup_type_die (type);
4976   return strip_naming_typedef (type, die);
4977 }
4978
4979 /* Equate a DIE to a given type specifier.  */
4980
4981 static inline void
4982 equate_type_number_to_die (tree type, dw_die_ref type_die)
4983 {
4984   TYPE_SYMTAB_DIE (type) = type_die;
4985 }
4986
4987 /* Returns a hash value for X (which really is a die_struct).  */
4988
4989 inline hashval_t
4990 decl_die_hasher::hash (die_node *x)
4991 {
4992   return (hashval_t) x->decl_id;
4993 }
4994
4995 /* Return nonzero if decl_id of die_struct X is the same as UID of decl *Y.  */
4996
4997 inline bool
4998 decl_die_hasher::equal (die_node *x, tree y)
4999 {
5000   return (x->decl_id == DECL_UID (y));
5001 }
5002
5003 /* Return the DIE associated with a given declaration.  */
5004
5005 static inline dw_die_ref
5006 lookup_decl_die (tree decl)
5007 {
5008   return decl_die_table->find_with_hash (decl, DECL_UID (decl));
5009 }
5010
5011 /* Returns a hash value for X (which really is a var_loc_list).  */
5012
5013 inline hashval_t
5014 decl_loc_hasher::hash (var_loc_list *x)
5015 {
5016   return (hashval_t) x->decl_id;
5017 }
5018
5019 /* Return nonzero if decl_id of var_loc_list X is the same as
5020    UID of decl *Y.  */
5021
5022 inline bool
5023 decl_loc_hasher::equal (var_loc_list *x, const_tree y)
5024 {
5025   return (x->decl_id == DECL_UID (y));
5026 }
5027
5028 /* Return the var_loc list associated with a given declaration.  */
5029
5030 static inline var_loc_list *
5031 lookup_decl_loc (const_tree decl)
5032 {
5033   if (!decl_loc_table)
5034     return NULL;
5035   return decl_loc_table->find_with_hash (decl, DECL_UID (decl));
5036 }
5037
5038 /* Returns a hash value for X (which really is a cached_dw_loc_list_list).  */
5039
5040 inline hashval_t
5041 dw_loc_list_hasher::hash (cached_dw_loc_list *x)
5042 {
5043   return (hashval_t) x->decl_id;
5044 }
5045
5046 /* Return nonzero if decl_id of cached_dw_loc_list X is the same as
5047    UID of decl *Y.  */
5048
5049 inline bool
5050 dw_loc_list_hasher::equal (cached_dw_loc_list *x, const_tree y)
5051 {
5052   return (x->decl_id == DECL_UID (y));
5053 }
5054
5055 /* Equate a DIE to a particular declaration.  */
5056
5057 static void
5058 equate_decl_number_to_die (tree decl, dw_die_ref decl_die)
5059 {
5060   unsigned int decl_id = DECL_UID (decl);
5061
5062   *decl_die_table->find_slot_with_hash (decl, decl_id, INSERT) = decl_die;
5063   decl_die->decl_id = decl_id;
5064 }
5065
5066 /* Return how many bits covers PIECE EXPR_LIST.  */
5067
5068 static HOST_WIDE_INT
5069 decl_piece_bitsize (rtx piece)
5070 {
5071   int ret = (int) GET_MODE (piece);
5072   if (ret)
5073     return ret;
5074   gcc_assert (GET_CODE (XEXP (piece, 0)) == CONCAT
5075               && CONST_INT_P (XEXP (XEXP (piece, 0), 0)));
5076   return INTVAL (XEXP (XEXP (piece, 0), 0));
5077 }
5078
5079 /* Return pointer to the location of location note in PIECE EXPR_LIST.  */
5080
5081 static rtx *
5082 decl_piece_varloc_ptr (rtx piece)
5083 {
5084   if ((int) GET_MODE (piece))
5085     return &XEXP (piece, 0);
5086   else
5087     return &XEXP (XEXP (piece, 0), 1);
5088 }
5089
5090 /* Create an EXPR_LIST for location note LOC_NOTE covering BITSIZE bits.
5091    Next is the chain of following piece nodes.  */
5092
5093 static rtx_expr_list *
5094 decl_piece_node (rtx loc_note, HOST_WIDE_INT bitsize, rtx next)
5095 {
5096   if (bitsize > 0 && bitsize <= (int) MAX_MACHINE_MODE)
5097     return alloc_EXPR_LIST (bitsize, loc_note, next);
5098   else
5099     return alloc_EXPR_LIST (0, gen_rtx_CONCAT (VOIDmode,
5100                                                GEN_INT (bitsize),
5101                                                loc_note), next);
5102 }
5103
5104 /* Return rtx that should be stored into loc field for
5105    LOC_NOTE and BITPOS/BITSIZE.  */
5106
5107 static rtx
5108 construct_piece_list (rtx loc_note, HOST_WIDE_INT bitpos,
5109                       HOST_WIDE_INT bitsize)
5110 {
5111   if (bitsize != -1)
5112     {
5113       loc_note = decl_piece_node (loc_note, bitsize, NULL_RTX);
5114       if (bitpos != 0)
5115         loc_note = decl_piece_node (NULL_RTX, bitpos, loc_note);
5116     }
5117   return loc_note;
5118 }
5119
5120 /* This function either modifies location piece list *DEST in
5121    place (if SRC and INNER is NULL), or copies location piece list
5122    *SRC to *DEST while modifying it.  Location BITPOS is modified
5123    to contain LOC_NOTE, any pieces overlapping it are removed resp.
5124    not copied and if needed some padding around it is added.
5125    When modifying in place, DEST should point to EXPR_LIST where
5126    earlier pieces cover PIECE_BITPOS bits, when copying SRC points
5127    to the start of the whole list and INNER points to the EXPR_LIST
5128    where earlier pieces cover PIECE_BITPOS bits.  */
5129
5130 static void
5131 adjust_piece_list (rtx *dest, rtx *src, rtx *inner,
5132                    HOST_WIDE_INT bitpos, HOST_WIDE_INT piece_bitpos,
5133                    HOST_WIDE_INT bitsize, rtx loc_note)
5134 {
5135   HOST_WIDE_INT diff;
5136   bool copy = inner != NULL;
5137
5138   if (copy)
5139     {
5140       /* First copy all nodes preceding the current bitpos.  */
5141       while (src != inner)
5142         {
5143           *dest = decl_piece_node (*decl_piece_varloc_ptr (*src),
5144                                    decl_piece_bitsize (*src), NULL_RTX);
5145           dest = &XEXP (*dest, 1);
5146           src = &XEXP (*src, 1);
5147         }
5148     }
5149   /* Add padding if needed.  */
5150   if (bitpos != piece_bitpos)
5151     {
5152       *dest = decl_piece_node (NULL_RTX, bitpos - piece_bitpos,
5153                                copy ? NULL_RTX : *dest);
5154       dest = &XEXP (*dest, 1);
5155     }
5156   else if (*dest && decl_piece_bitsize (*dest) == bitsize)
5157     {
5158       gcc_assert (!copy);
5159       /* A piece with correct bitpos and bitsize already exist,
5160          just update the location for it and return.  */
5161       *decl_piece_varloc_ptr (*dest) = loc_note;
5162       return;
5163     }
5164   /* Add the piece that changed.  */
5165   *dest = decl_piece_node (loc_note, bitsize, copy ? NULL_RTX : *dest);
5166   dest = &XEXP (*dest, 1);
5167   /* Skip over pieces that overlap it.  */
5168   diff = bitpos - piece_bitpos + bitsize;
5169   if (!copy)
5170     src = dest;
5171   while (diff > 0 && *src)
5172     {
5173       rtx piece = *src;
5174       diff -= decl_piece_bitsize (piece);
5175       if (copy)
5176         src = &XEXP (piece, 1);
5177       else
5178         {
5179           *src = XEXP (piece, 1);
5180           free_EXPR_LIST_node (piece);
5181         }
5182     }
5183   /* Add padding if needed.  */
5184   if (diff < 0 && *src)
5185     {
5186       if (!copy)
5187         dest = src;
5188       *dest = decl_piece_node (NULL_RTX, -diff, copy ? NULL_RTX : *dest);
5189       dest = &XEXP (*dest, 1);
5190     }
5191   if (!copy)
5192     return;
5193   /* Finally copy all nodes following it.  */
5194   while (*src)
5195     {
5196       *dest = decl_piece_node (*decl_piece_varloc_ptr (*src),
5197                                decl_piece_bitsize (*src), NULL_RTX);
5198       dest = &XEXP (*dest, 1);
5199       src = &XEXP (*src, 1);
5200     }
5201 }
5202
5203 /* Add a variable location node to the linked list for DECL.  */
5204
5205 static struct var_loc_node *
5206 add_var_loc_to_decl (tree decl, rtx loc_note, const char *label)
5207 {
5208   unsigned int decl_id;
5209   var_loc_list *temp;
5210   struct var_loc_node *loc = NULL;
5211   HOST_WIDE_INT bitsize = -1, bitpos = -1;
5212
5213   if (TREE_CODE (decl) == VAR_DECL
5214       && DECL_HAS_DEBUG_EXPR_P (decl))
5215     {
5216       tree realdecl = DECL_DEBUG_EXPR (decl);
5217       if (handled_component_p (realdecl)
5218           || (TREE_CODE (realdecl) == MEM_REF
5219               && TREE_CODE (TREE_OPERAND (realdecl, 0)) == ADDR_EXPR))
5220         {
5221           HOST_WIDE_INT maxsize;
5222           tree innerdecl;
5223           innerdecl
5224             = get_ref_base_and_extent (realdecl, &bitpos, &bitsize, &maxsize);
5225           if (!DECL_P (innerdecl)
5226               || DECL_IGNORED_P (innerdecl)
5227               || TREE_STATIC (innerdecl)
5228               || bitsize <= 0
5229               || bitpos + bitsize > 256
5230               || bitsize != maxsize)
5231             return NULL;
5232           decl = innerdecl;
5233         }
5234     }
5235
5236   decl_id = DECL_UID (decl);
5237   var_loc_list **slot
5238     = decl_loc_table->find_slot_with_hash (decl, decl_id, INSERT);
5239   if (*slot == NULL)
5240     {
5241       temp = ggc_cleared_alloc<var_loc_list> ();
5242       temp->decl_id = decl_id;
5243       *slot = temp;
5244     }
5245   else
5246     temp = *slot;
5247
5248   /* For PARM_DECLs try to keep around the original incoming value,
5249      even if that means we'll emit a zero-range .debug_loc entry.  */
5250   if (temp->last
5251       && temp->first == temp->last
5252       && TREE_CODE (decl) == PARM_DECL
5253       && NOTE_P (temp->first->loc)
5254       && NOTE_VAR_LOCATION_DECL (temp->first->loc) == decl
5255       && DECL_INCOMING_RTL (decl)
5256       && NOTE_VAR_LOCATION_LOC (temp->first->loc)
5257       && GET_CODE (NOTE_VAR_LOCATION_LOC (temp->first->loc))
5258          == GET_CODE (DECL_INCOMING_RTL (decl))
5259       && prev_real_insn (temp->first->loc) == NULL_RTX
5260       && (bitsize != -1
5261           || !rtx_equal_p (NOTE_VAR_LOCATION_LOC (temp->first->loc),
5262                            NOTE_VAR_LOCATION_LOC (loc_note))
5263           || (NOTE_VAR_LOCATION_STATUS (temp->first->loc)
5264               != NOTE_VAR_LOCATION_STATUS (loc_note))))
5265     {
5266       loc = ggc_cleared_alloc<var_loc_node> ();
5267       temp->first->next = loc;
5268       temp->last = loc;
5269       loc->loc = construct_piece_list (loc_note, bitpos, bitsize);
5270     }
5271   else if (temp->last)
5272     {
5273       struct var_loc_node *last = temp->last, *unused = NULL;
5274       rtx *piece_loc = NULL, last_loc_note;
5275       HOST_WIDE_INT piece_bitpos = 0;
5276       if (last->next)
5277         {
5278           last = last->next;
5279           gcc_assert (last->next == NULL);
5280         }
5281       if (bitsize != -1 && GET_CODE (last->loc) == EXPR_LIST)
5282         {
5283           piece_loc = &last->loc;
5284           do
5285             {
5286               HOST_WIDE_INT cur_bitsize = decl_piece_bitsize (*piece_loc);
5287               if (piece_bitpos + cur_bitsize > bitpos)
5288                 break;
5289               piece_bitpos += cur_bitsize;
5290               piece_loc = &XEXP (*piece_loc, 1);
5291             }
5292           while (*piece_loc);
5293         }
5294       /* TEMP->LAST here is either pointer to the last but one or
5295          last element in the chained list, LAST is pointer to the
5296          last element.  */
5297       if (label && strcmp (last->label, label) == 0)
5298         {
5299           /* For SRA optimized variables if there weren't any real
5300              insns since last note, just modify the last node.  */
5301           if (piece_loc != NULL)
5302             {
5303               adjust_piece_list (piece_loc, NULL, NULL,
5304                                  bitpos, piece_bitpos, bitsize, loc_note);
5305               return NULL;
5306             }
5307           /* If the last note doesn't cover any instructions, remove it.  */
5308           if (temp->last != last)
5309             {
5310               temp->last->next = NULL;
5311               unused = last;
5312               last = temp->last;
5313               gcc_assert (strcmp (last->label, label) != 0);
5314             }
5315           else
5316             {
5317               gcc_assert (temp->first == temp->last
5318                           || (temp->first->next == temp->last
5319                               && TREE_CODE (decl) == PARM_DECL));
5320               memset (temp->last, '\0', sizeof (*temp->last));
5321               temp->last->loc = construct_piece_list (loc_note, bitpos, bitsize);
5322               return temp->last;
5323             }
5324         }
5325       if (bitsize == -1 && NOTE_P (last->loc))
5326         last_loc_note = last->loc;
5327       else if (piece_loc != NULL
5328                && *piece_loc != NULL_RTX
5329                && piece_bitpos == bitpos
5330                && decl_piece_bitsize (*piece_loc) == bitsize)
5331         last_loc_note = *decl_piece_varloc_ptr (*piece_loc);
5332       else
5333         last_loc_note = NULL_RTX;
5334       /* If the current location is the same as the end of the list,
5335          and either both or neither of the locations is uninitialized,
5336          we have nothing to do.  */
5337       if (last_loc_note == NULL_RTX
5338           || (!rtx_equal_p (NOTE_VAR_LOCATION_LOC (last_loc_note),
5339                             NOTE_VAR_LOCATION_LOC (loc_note)))
5340           || ((NOTE_VAR_LOCATION_STATUS (last_loc_note)
5341                != NOTE_VAR_LOCATION_STATUS (loc_note))
5342               && ((NOTE_VAR_LOCATION_STATUS (last_loc_note)
5343                    == VAR_INIT_STATUS_UNINITIALIZED)
5344                   || (NOTE_VAR_LOCATION_STATUS (loc_note)
5345                       == VAR_INIT_STATUS_UNINITIALIZED))))
5346         {
5347           /* Add LOC to the end of list and update LAST.  If the last
5348              element of the list has been removed above, reuse its
5349              memory for the new node, otherwise allocate a new one.  */
5350           if (unused)
5351             {
5352               loc = unused;
5353               memset (loc, '\0', sizeof (*loc));
5354             }
5355           else
5356             loc = ggc_cleared_alloc<var_loc_node> ();
5357           if (bitsize == -1 || piece_loc == NULL)
5358             loc->loc = construct_piece_list (loc_note, bitpos, bitsize);
5359           else
5360             adjust_piece_list (&loc->loc, &last->loc, piece_loc,
5361                                bitpos, piece_bitpos, bitsize, loc_note);
5362           last->next = loc;
5363           /* Ensure TEMP->LAST will point either to the new last but one
5364              element of the chain, or to the last element in it.  */
5365           if (last != temp->last)
5366             temp->last = last;
5367         }
5368       else if (unused)
5369         ggc_free (unused);
5370     }
5371   else
5372     {
5373       loc = ggc_cleared_alloc<var_loc_node> ();
5374       temp->first = loc;
5375       temp->last = loc;
5376       loc->loc = construct_piece_list (loc_note, bitpos, bitsize);
5377     }
5378   return loc;
5379 }
5380 \f
5381 /* Keep track of the number of spaces used to indent the
5382    output of the debugging routines that print the structure of
5383    the DIE internal representation.  */
5384 static int print_indent;
5385
5386 /* Indent the line the number of spaces given by print_indent.  */
5387
5388 static inline void
5389 print_spaces (FILE *outfile)
5390 {
5391   fprintf (outfile, "%*s", print_indent, "");
5392 }
5393
5394 /* Print a type signature in hex.  */
5395
5396 static inline void
5397 print_signature (FILE *outfile, char *sig)
5398 {
5399   int i;
5400
5401   for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++)
5402     fprintf (outfile, "%02x", sig[i] & 0xff);
5403 }
5404
5405 static void print_loc_descr (dw_loc_descr_ref, FILE *);
5406
5407 /* Print the value associated to the VAL DWARF value node to OUTFILE.  If
5408    RECURSE, output location descriptor operations.  */
5409
5410 static void
5411 print_dw_val (dw_val_node *val, bool recurse, FILE *outfile)
5412 {
5413   switch (val->val_class)
5414     {
5415     case dw_val_class_addr:
5416       fprintf (outfile, "address");
5417       break;
5418     case dw_val_class_offset:
5419       fprintf (outfile, "offset");
5420       break;
5421     case dw_val_class_loc:
5422       fprintf (outfile, "location descriptor");
5423       if (val->v.val_loc == NULL)
5424         fprintf (outfile, " -> <null>\n");
5425       else if (recurse)
5426         {
5427           fprintf (outfile, ":\n");
5428           print_indent += 4;
5429           print_loc_descr (val->v.val_loc, outfile);
5430           print_indent -= 4;
5431         }
5432       else
5433         fprintf (outfile, " (%p)\n", (void *) val->v.val_loc);
5434       break;
5435     case dw_val_class_loc_list:
5436       fprintf (outfile, "location list -> label:%s",
5437                val->v.val_loc_list->ll_symbol);
5438       break;
5439     case dw_val_class_range_list:
5440       fprintf (outfile, "range list");
5441       break;
5442     case dw_val_class_const:
5443       fprintf (outfile, HOST_WIDE_INT_PRINT_DEC, val->v.val_int);
5444       break;
5445     case dw_val_class_unsigned_const:
5446       fprintf (outfile, HOST_WIDE_INT_PRINT_UNSIGNED, val->v.val_unsigned);
5447       break;
5448     case dw_val_class_const_double:
5449       fprintf (outfile, "constant ("HOST_WIDE_INT_PRINT_DEC","\
5450                         HOST_WIDE_INT_PRINT_UNSIGNED")",
5451                val->v.val_double.high,
5452                val->v.val_double.low);
5453       break;
5454     case dw_val_class_wide_int:
5455       {
5456         int i = val->v.val_wide->get_len ();
5457         fprintf (outfile, "constant (");
5458         gcc_assert (i > 0);
5459         if (val->v.val_wide->elt (i - 1) == 0)
5460           fprintf (outfile, "0x");
5461         fprintf (outfile, HOST_WIDE_INT_PRINT_HEX,
5462                  val->v.val_wide->elt (--i));
5463         while (--i >= 0)
5464           fprintf (outfile, HOST_WIDE_INT_PRINT_PADDED_HEX,
5465                    val->v.val_wide->elt (i));
5466         fprintf (outfile, ")");
5467         break;
5468       }
5469     case dw_val_class_vec:
5470       fprintf (outfile, "floating-point or vector constant");
5471       break;
5472     case dw_val_class_flag:
5473       fprintf (outfile, "%u", val->v.val_flag);
5474       break;
5475     case dw_val_class_die_ref:
5476       if (val->v.val_die_ref.die != NULL)
5477         {
5478           dw_die_ref die = val->v.val_die_ref.die;
5479
5480           if (die->comdat_type_p)
5481             {
5482               fprintf (outfile, "die -> signature: ");
5483               print_signature (outfile,
5484                                die->die_id.die_type_node->signature);
5485             }
5486           else if (die->die_id.die_symbol)
5487             fprintf (outfile, "die -> label: %s", die->die_id.die_symbol);
5488           else
5489             fprintf (outfile, "die -> %ld", die->die_offset);
5490           fprintf (outfile, " (%p)", (void *) die);
5491         }
5492       else
5493         fprintf (outfile, "die -> <null>");
5494       break;
5495     case dw_val_class_vms_delta:
5496       fprintf (outfile, "delta: @slotcount(%s-%s)",
5497                val->v.val_vms_delta.lbl2, val->v.val_vms_delta.lbl1);
5498       break;
5499     case dw_val_class_lbl_id:
5500     case dw_val_class_lineptr:
5501     case dw_val_class_macptr:
5502     case dw_val_class_high_pc:
5503       fprintf (outfile, "label: %s", val->v.val_lbl_id);
5504       break;
5505     case dw_val_class_str:
5506       if (val->v.val_str->str != NULL)
5507         fprintf (outfile, "\"%s\"", val->v.val_str->str);
5508       else
5509         fprintf (outfile, "<null>");
5510       break;
5511     case dw_val_class_file:
5512       fprintf (outfile, "\"%s\" (%d)", val->v.val_file->filename,
5513                val->v.val_file->emitted_number);
5514       break;
5515     case dw_val_class_data8:
5516       {
5517         int i;
5518
5519         for (i = 0; i < 8; i++)
5520           fprintf (outfile, "%02x", val->v.val_data8[i]);
5521         break;
5522       }
5523     default:
5524       break;
5525     }
5526 }
5527
5528 /* Likewise, for a DIE attribute.  */
5529
5530 static void
5531 print_attribute (dw_attr_ref a, bool recurse, FILE *outfile)
5532 {
5533   print_dw_val (&a->dw_attr_val, recurse, outfile);
5534 }
5535
5536
5537 /* Print the list of operands in the LOC location description to OUTFILE.  This
5538    routine is a debugging aid only.  */
5539
5540 static void
5541 print_loc_descr (dw_loc_descr_ref loc, FILE *outfile)
5542 {
5543   dw_loc_descr_ref l = loc;
5544
5545   if (loc == NULL)
5546     {
5547       print_spaces (outfile);
5548       fprintf (outfile, "<null>\n");
5549       return;
5550     }
5551
5552   for (l = loc; l != NULL; l = l->dw_loc_next)
5553     {
5554       print_spaces (outfile);
5555       fprintf (outfile, "(%p) %s",
5556                (void *) l,
5557                dwarf_stack_op_name (l->dw_loc_opc));
5558       if (l->dw_loc_oprnd1.val_class != dw_val_class_none)
5559         {
5560           fprintf (outfile, " ");
5561           print_dw_val (&l->dw_loc_oprnd1, false, outfile);
5562         }
5563       if (l->dw_loc_oprnd2.val_class != dw_val_class_none)
5564         {
5565           fprintf (outfile, ", ");
5566           print_dw_val (&l->dw_loc_oprnd2, false, outfile);
5567         }
5568       fprintf (outfile, "\n");
5569     }
5570 }
5571
5572 /* Print the information associated with a given DIE, and its children.
5573    This routine is a debugging aid only.  */
5574
5575 static void
5576 print_die (dw_die_ref die, FILE *outfile)
5577 {
5578   dw_attr_ref a;
5579   dw_die_ref c;
5580   unsigned ix;
5581
5582   print_spaces (outfile);
5583   fprintf (outfile, "DIE %4ld: %s (%p)\n",
5584            die->die_offset, dwarf_tag_name (die->die_tag),
5585            (void*) die);
5586   print_spaces (outfile);
5587   fprintf (outfile, "  abbrev id: %lu", die->die_abbrev);
5588   fprintf (outfile, " offset: %ld", die->die_offset);
5589   fprintf (outfile, " mark: %d\n", die->die_mark);
5590
5591   if (die->comdat_type_p)
5592     {
5593       print_spaces (outfile);
5594       fprintf (outfile, "  signature: ");
5595       print_signature (outfile, die->die_id.die_type_node->signature);
5596       fprintf (outfile, "\n");
5597     }
5598
5599   FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
5600     {
5601       print_spaces (outfile);
5602       fprintf (outfile, "  %s: ", dwarf_attr_name (a->dw_attr));
5603
5604       print_attribute (a, true, outfile);
5605       fprintf (outfile, "\n");
5606     }
5607
5608   if (die->die_child != NULL)
5609     {
5610       print_indent += 4;
5611       FOR_EACH_CHILD (die, c, print_die (c, outfile));
5612       print_indent -= 4;
5613     }
5614   if (print_indent == 0)
5615     fprintf (outfile, "\n");
5616 }
5617
5618 /* Print the list of operations in the LOC location description.  */
5619
5620 DEBUG_FUNCTION void
5621 debug_dwarf_loc_descr (dw_loc_descr_ref loc)
5622 {
5623   print_loc_descr (loc, stderr);
5624 }
5625
5626 /* Print the information collected for a given DIE.  */
5627
5628 DEBUG_FUNCTION void
5629 debug_dwarf_die (dw_die_ref die)
5630 {
5631   print_die (die, stderr);
5632 }
5633
5634 DEBUG_FUNCTION void
5635 debug (die_struct &ref)
5636 {
5637   print_die (&ref, stderr);
5638 }
5639
5640 DEBUG_FUNCTION void
5641 debug (die_struct *ptr)
5642 {
5643   if (ptr)
5644     debug (*ptr);
5645   else
5646     fprintf (stderr, "<nil>\n");
5647 }
5648
5649
5650 /* Print all DWARF information collected for the compilation unit.
5651    This routine is a debugging aid only.  */
5652
5653 DEBUG_FUNCTION void
5654 debug_dwarf (void)
5655 {
5656   print_indent = 0;
5657   print_die (comp_unit_die (), stderr);
5658 }
5659 \f
5660 /* Start a new compilation unit DIE for an include file.  OLD_UNIT is the CU
5661    for the enclosing include file, if any.  BINCL_DIE is the DW_TAG_GNU_BINCL
5662    DIE that marks the start of the DIEs for this include file.  */
5663
5664 static dw_die_ref
5665 push_new_compile_unit (dw_die_ref old_unit, dw_die_ref bincl_die)
5666 {
5667   const char *filename = get_AT_string (bincl_die, DW_AT_name);
5668   dw_die_ref new_unit = gen_compile_unit_die (filename);
5669
5670   new_unit->die_sib = old_unit;
5671   return new_unit;
5672 }
5673
5674 /* Close an include-file CU and reopen the enclosing one.  */
5675
5676 static dw_die_ref
5677 pop_compile_unit (dw_die_ref old_unit)
5678 {
5679   dw_die_ref new_unit = old_unit->die_sib;
5680
5681   old_unit->die_sib = NULL;
5682   return new_unit;
5683 }
5684
5685 #define CHECKSUM(FOO) md5_process_bytes (&(FOO), sizeof (FOO), ctx)
5686 #define CHECKSUM_BLOCK(FOO, SIZE) md5_process_bytes ((FOO), (SIZE), ctx)
5687 #define CHECKSUM_STRING(FOO) md5_process_bytes ((FOO), strlen (FOO), ctx)
5688
5689 /* Calculate the checksum of a location expression.  */
5690
5691 static inline void
5692 loc_checksum (dw_loc_descr_ref loc, struct md5_ctx *ctx)
5693 {
5694   int tem;
5695   inchash::hash hstate;
5696   hashval_t hash;
5697
5698   tem = (loc->dtprel << 8) | ((unsigned int) loc->dw_loc_opc);
5699   CHECKSUM (tem);
5700   hash_loc_operands (loc, hstate);
5701   hash = hstate.end();
5702   CHECKSUM (hash);
5703 }
5704
5705 /* Calculate the checksum of an attribute.  */
5706
5707 static void
5708 attr_checksum (dw_attr_ref at, struct md5_ctx *ctx, int *mark)
5709 {
5710   dw_loc_descr_ref loc;
5711   rtx r;
5712
5713   CHECKSUM (at->dw_attr);
5714
5715   /* We don't care that this was compiled with a different compiler
5716      snapshot; if the output is the same, that's what matters.  */
5717   if (at->dw_attr == DW_AT_producer)
5718     return;
5719
5720   switch (AT_class (at))
5721     {
5722     case dw_val_class_const:
5723       CHECKSUM (at->dw_attr_val.v.val_int);
5724       break;
5725     case dw_val_class_unsigned_const:
5726       CHECKSUM (at->dw_attr_val.v.val_unsigned);
5727       break;
5728     case dw_val_class_const_double:
5729       CHECKSUM (at->dw_attr_val.v.val_double);
5730       break;
5731     case dw_val_class_wide_int:
5732       CHECKSUM_BLOCK (at->dw_attr_val.v.val_wide->get_val (),
5733                       get_full_len (*at->dw_attr_val.v.val_wide)
5734                       * HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR);
5735       break;
5736     case dw_val_class_vec:
5737       CHECKSUM_BLOCK (at->dw_attr_val.v.val_vec.array,
5738                       (at->dw_attr_val.v.val_vec.length
5739                        * at->dw_attr_val.v.val_vec.elt_size));
5740       break;
5741     case dw_val_class_flag:
5742       CHECKSUM (at->dw_attr_val.v.val_flag);
5743       break;
5744     case dw_val_class_str:
5745       CHECKSUM_STRING (AT_string (at));
5746       break;
5747
5748     case dw_val_class_addr:
5749       r = AT_addr (at);
5750       gcc_assert (GET_CODE (r) == SYMBOL_REF);
5751       CHECKSUM_STRING (XSTR (r, 0));
5752       break;
5753
5754     case dw_val_class_offset:
5755       CHECKSUM (at->dw_attr_val.v.val_offset);
5756       break;
5757
5758     case dw_val_class_loc:
5759       for (loc = AT_loc (at); loc; loc = loc->dw_loc_next)
5760         loc_checksum (loc, ctx);
5761       break;
5762
5763     case dw_val_class_die_ref:
5764       die_checksum (AT_ref (at), ctx, mark);
5765       break;
5766
5767     case dw_val_class_fde_ref:
5768     case dw_val_class_vms_delta:
5769     case dw_val_class_lbl_id:
5770     case dw_val_class_lineptr:
5771     case dw_val_class_macptr:
5772     case dw_val_class_high_pc:
5773       break;
5774
5775     case dw_val_class_file:
5776       CHECKSUM_STRING (AT_file (at)->filename);
5777       break;
5778
5779     case dw_val_class_data8:
5780       CHECKSUM (at->dw_attr_val.v.val_data8);
5781       break;
5782
5783     default:
5784       break;
5785     }
5786 }
5787
5788 /* Calculate the checksum of a DIE.  */
5789
5790 static void
5791 die_checksum (dw_die_ref die, struct md5_ctx *ctx, int *mark)
5792 {
5793   dw_die_ref c;
5794   dw_attr_ref a;
5795   unsigned ix;
5796
5797   /* To avoid infinite recursion.  */
5798   if (die->die_mark)
5799     {
5800       CHECKSUM (die->die_mark);
5801       return;
5802     }
5803   die->die_mark = ++(*mark);
5804
5805   CHECKSUM (die->die_tag);
5806
5807   FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
5808     attr_checksum (a, ctx, mark);
5809
5810   FOR_EACH_CHILD (die, c, die_checksum (c, ctx, mark));
5811 }
5812
5813 #undef CHECKSUM
5814 #undef CHECKSUM_BLOCK
5815 #undef CHECKSUM_STRING
5816
5817 /* For DWARF-4 types, include the trailing NULL when checksumming strings.  */
5818 #define CHECKSUM(FOO) md5_process_bytes (&(FOO), sizeof (FOO), ctx)
5819 #define CHECKSUM_BLOCK(FOO, SIZE) md5_process_bytes ((FOO), (SIZE), ctx)
5820 #define CHECKSUM_STRING(FOO) md5_process_bytes ((FOO), strlen (FOO) + 1, ctx)
5821 #define CHECKSUM_SLEB128(FOO) checksum_sleb128 ((FOO), ctx)
5822 #define CHECKSUM_ULEB128(FOO) checksum_uleb128 ((FOO), ctx)
5823 #define CHECKSUM_ATTR(FOO) \
5824   if (FOO) attr_checksum_ordered (die->die_tag, (FOO), ctx, mark)
5825
5826 /* Calculate the checksum of a number in signed LEB128 format.  */
5827
5828 static void
5829 checksum_sleb128 (HOST_WIDE_INT value, struct md5_ctx *ctx)
5830 {
5831   unsigned char byte;
5832   bool more;
5833
5834   while (1)
5835     {
5836       byte = (value & 0x7f);
5837       value >>= 7;
5838       more = !((value == 0 && (byte & 0x40) == 0)
5839                 || (value == -1 && (byte & 0x40) != 0));
5840       if (more)
5841         byte |= 0x80;
5842       CHECKSUM (byte);
5843       if (!more)
5844         break;
5845     }
5846 }
5847
5848 /* Calculate the checksum of a number in unsigned LEB128 format.  */
5849
5850 static void
5851 checksum_uleb128 (unsigned HOST_WIDE_INT value, struct md5_ctx *ctx)
5852 {
5853   while (1)
5854     {
5855       unsigned char byte = (value & 0x7f);
5856       value >>= 7;
5857       if (value != 0)
5858         /* More bytes to follow.  */
5859         byte |= 0x80;
5860       CHECKSUM (byte);
5861       if (value == 0)
5862         break;
5863     }
5864 }
5865
5866 /* Checksum the context of the DIE.  This adds the names of any
5867    surrounding namespaces or structures to the checksum.  */
5868
5869 static void
5870 checksum_die_context (dw_die_ref die, struct md5_ctx *ctx)
5871 {
5872   const char *name;
5873   dw_die_ref spec;
5874   int tag = die->die_tag;
5875
5876   if (tag != DW_TAG_namespace
5877       && tag != DW_TAG_structure_type
5878       && tag != DW_TAG_class_type)
5879     return;
5880
5881   name = get_AT_string (die, DW_AT_name);
5882
5883   spec = get_AT_ref (die, DW_AT_specification);
5884   if (spec != NULL)
5885     die = spec;
5886
5887   if (die->die_parent != NULL)
5888     checksum_die_context (die->die_parent, ctx);
5889
5890   CHECKSUM_ULEB128 ('C');
5891   CHECKSUM_ULEB128 (tag);
5892   if (name != NULL)
5893     CHECKSUM_STRING (name);
5894 }
5895
5896 /* Calculate the checksum of a location expression.  */
5897
5898 static inline void
5899 loc_checksum_ordered (dw_loc_descr_ref loc, struct md5_ctx *ctx)
5900 {
5901   /* Special case for lone DW_OP_plus_uconst: checksum as if the location
5902      were emitted as a DW_FORM_sdata instead of a location expression.  */
5903   if (loc->dw_loc_opc == DW_OP_plus_uconst && loc->dw_loc_next == NULL)
5904     {
5905       CHECKSUM_ULEB128 (DW_FORM_sdata);
5906       CHECKSUM_SLEB128 ((HOST_WIDE_INT) loc->dw_loc_oprnd1.v.val_unsigned);
5907       return;
5908     }
5909
5910   /* Otherwise, just checksum the raw location expression.  */
5911   while (loc != NULL)
5912     {
5913       inchash::hash hstate;
5914       hashval_t hash;
5915
5916       CHECKSUM_ULEB128 (loc->dtprel);
5917       CHECKSUM_ULEB128 (loc->dw_loc_opc);
5918       hash_loc_operands (loc, hstate);
5919       hash = hstate.end ();
5920       CHECKSUM (hash);
5921       loc = loc->dw_loc_next;
5922     }
5923 }
5924
5925 /* Calculate the checksum of an attribute.  */
5926
5927 static void
5928 attr_checksum_ordered (enum dwarf_tag tag, dw_attr_ref at,
5929                        struct md5_ctx *ctx, int *mark)
5930 {
5931   dw_loc_descr_ref loc;
5932   rtx r;
5933
5934   if (AT_class (at) == dw_val_class_die_ref)
5935     {
5936       dw_die_ref target_die = AT_ref (at);
5937
5938       /* For pointer and reference types, we checksum only the (qualified)
5939          name of the target type (if there is a name).  For friend entries,
5940          we checksum only the (qualified) name of the target type or function.
5941          This allows the checksum to remain the same whether the target type
5942          is complete or not.  */
5943       if ((at->dw_attr == DW_AT_type
5944            && (tag == DW_TAG_pointer_type
5945                || tag == DW_TAG_reference_type
5946                || tag == DW_TAG_rvalue_reference_type
5947                || tag == DW_TAG_ptr_to_member_type))
5948           || (at->dw_attr == DW_AT_friend
5949               && tag == DW_TAG_friend))
5950         {
5951           dw_attr_ref name_attr = get_AT (target_die, DW_AT_name);
5952
5953           if (name_attr != NULL)
5954             {
5955               dw_die_ref decl = get_AT_ref (target_die, DW_AT_specification);
5956
5957               if (decl == NULL)
5958                 decl = target_die;
5959               CHECKSUM_ULEB128 ('N');
5960               CHECKSUM_ULEB128 (at->dw_attr);
5961               if (decl->die_parent != NULL)
5962                 checksum_die_context (decl->die_parent, ctx);
5963               CHECKSUM_ULEB128 ('E');
5964               CHECKSUM_STRING (AT_string (name_attr));
5965               return;
5966             }
5967         }
5968
5969       /* For all other references to another DIE, we check to see if the
5970          target DIE has already been visited.  If it has, we emit a
5971          backward reference; if not, we descend recursively.  */
5972       if (target_die->die_mark > 0)
5973         {
5974           CHECKSUM_ULEB128 ('R');
5975           CHECKSUM_ULEB128 (at->dw_attr);
5976           CHECKSUM_ULEB128 (target_die->die_mark);
5977         }
5978       else
5979         {
5980           dw_die_ref decl = get_AT_ref (target_die, DW_AT_specification);
5981
5982           if (decl == NULL)
5983             decl = target_die;
5984           target_die->die_mark = ++(*mark);
5985           CHECKSUM_ULEB128 ('T');
5986           CHECKSUM_ULEB128 (at->dw_attr);
5987           if (decl->die_parent != NULL)
5988             checksum_die_context (decl->die_parent, ctx);
5989           die_checksum_ordered (target_die, ctx, mark);
5990         }
5991       return;
5992     }
5993
5994   CHECKSUM_ULEB128 ('A');
5995   CHECKSUM_ULEB128 (at->dw_attr);
5996
5997   switch (AT_class (at))
5998     {
5999     case dw_val_class_const:
6000       CHECKSUM_ULEB128 (DW_FORM_sdata);
6001       CHECKSUM_SLEB128 (at->dw_attr_val.v.val_int);
6002       break;
6003
6004     case dw_val_class_unsigned_const:
6005       CHECKSUM_ULEB128 (DW_FORM_sdata);
6006       CHECKSUM_SLEB128 ((int) at->dw_attr_val.v.val_unsigned);
6007       break;
6008
6009     case dw_val_class_const_double:
6010       CHECKSUM_ULEB128 (DW_FORM_block);
6011       CHECKSUM_ULEB128 (sizeof (at->dw_attr_val.v.val_double));
6012       CHECKSUM (at->dw_attr_val.v.val_double);
6013       break;
6014
6015     case dw_val_class_wide_int:
6016       CHECKSUM_ULEB128 (DW_FORM_block);
6017       CHECKSUM_ULEB128 (get_full_len (*at->dw_attr_val.v.val_wide)
6018                         * HOST_BITS_PER_WIDE_INT / BITS_PER_UNIT);
6019       CHECKSUM_BLOCK (at->dw_attr_val.v.val_wide->get_val (),
6020                       get_full_len (*at->dw_attr_val.v.val_wide)
6021                       * HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR);
6022       break;
6023
6024     case dw_val_class_vec:
6025       CHECKSUM_ULEB128 (DW_FORM_block);
6026       CHECKSUM_ULEB128 (at->dw_attr_val.v.val_vec.length
6027                         * at->dw_attr_val.v.val_vec.elt_size);
6028       CHECKSUM_BLOCK (at->dw_attr_val.v.val_vec.array,
6029                       (at->dw_attr_val.v.val_vec.length
6030                        * at->dw_attr_val.v.val_vec.elt_size));
6031       break;
6032
6033     case dw_val_class_flag:
6034       CHECKSUM_ULEB128 (DW_FORM_flag);
6035       CHECKSUM_ULEB128 (at->dw_attr_val.v.val_flag ? 1 : 0);
6036       break;
6037
6038     case dw_val_class_str:
6039       CHECKSUM_ULEB128 (DW_FORM_string);
6040       CHECKSUM_STRING (AT_string (at));
6041       break;
6042
6043     case dw_val_class_addr:
6044       r = AT_addr (at);
6045       gcc_assert (GET_CODE (r) == SYMBOL_REF);
6046       CHECKSUM_ULEB128 (DW_FORM_string);
6047       CHECKSUM_STRING (XSTR (r, 0));
6048       break;
6049
6050     case dw_val_class_offset:
6051       CHECKSUM_ULEB128 (DW_FORM_sdata);
6052       CHECKSUM_ULEB128 (at->dw_attr_val.v.val_offset);
6053       break;
6054
6055     case dw_val_class_loc:
6056       for (loc = AT_loc (at); loc; loc = loc->dw_loc_next)
6057         loc_checksum_ordered (loc, ctx);
6058       break;
6059
6060     case dw_val_class_fde_ref:
6061     case dw_val_class_lbl_id:
6062     case dw_val_class_lineptr:
6063     case dw_val_class_macptr:
6064     case dw_val_class_high_pc:
6065       break;
6066
6067     case dw_val_class_file:
6068       CHECKSUM_ULEB128 (DW_FORM_string);
6069       CHECKSUM_STRING (AT_file (at)->filename);
6070       break;
6071
6072     case dw_val_class_data8:
6073       CHECKSUM (at->dw_attr_val.v.val_data8);
6074       break;
6075
6076     default:
6077       break;
6078     }
6079 }
6080
6081 struct checksum_attributes
6082 {
6083   dw_attr_ref at_name;
6084   dw_attr_ref at_type;
6085   dw_attr_ref at_friend;
6086   dw_attr_ref at_accessibility;
6087   dw_attr_ref at_address_class;
6088   dw_attr_ref at_allocated;
6089   dw_attr_ref at_artificial;
6090   dw_attr_ref at_associated;
6091   dw_attr_ref at_binary_scale;
6092   dw_attr_ref at_bit_offset;
6093   dw_attr_ref at_bit_size;
6094   dw_attr_ref at_bit_stride;
6095   dw_attr_ref at_byte_size;
6096   dw_attr_ref at_byte_stride;
6097   dw_attr_ref at_const_value;
6098   dw_attr_ref at_containing_type;
6099   dw_attr_ref at_count;
6100   dw_attr_ref at_data_location;
6101   dw_attr_ref at_data_member_location;
6102   dw_attr_ref at_decimal_scale;
6103   dw_attr_ref at_decimal_sign;
6104   dw_attr_ref at_default_value;
6105   dw_attr_ref at_digit_count;
6106   dw_attr_ref at_discr;
6107   dw_attr_ref at_discr_list;
6108   dw_attr_ref at_discr_value;
6109   dw_attr_ref at_encoding;
6110   dw_attr_ref at_endianity;
6111   dw_attr_ref at_explicit;
6112   dw_attr_ref at_is_optional;
6113   dw_attr_ref at_location;
6114   dw_attr_ref at_lower_bound;
6115   dw_attr_ref at_mutable;
6116   dw_attr_ref at_ordering;
6117   dw_attr_ref at_picture_string;
6118   dw_attr_ref at_prototyped;
6119   dw_attr_ref at_small;
6120   dw_attr_ref at_segment;
6121   dw_attr_ref at_string_length;
6122   dw_attr_ref at_threads_scaled;
6123   dw_attr_ref at_upper_bound;
6124   dw_attr_ref at_use_location;
6125   dw_attr_ref at_use_UTF8;
6126   dw_attr_ref at_variable_parameter;
6127   dw_attr_ref at_virtuality;
6128   dw_attr_ref at_visibility;
6129   dw_attr_ref at_vtable_elem_location;
6130 };
6131
6132 /* Collect the attributes that we will want to use for the checksum.  */
6133
6134 static void
6135 collect_checksum_attributes (struct checksum_attributes *attrs, dw_die_ref die)
6136 {
6137   dw_attr_ref a;
6138   unsigned ix;
6139
6140   FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
6141     {
6142       switch (a->dw_attr)
6143         {
6144         case DW_AT_name:
6145           attrs->at_name = a;
6146           break;
6147         case DW_AT_type:
6148           attrs->at_type = a;
6149           break;
6150         case DW_AT_friend:
6151           attrs->at_friend = a;
6152           break;
6153         case DW_AT_accessibility:
6154           attrs->at_accessibility = a;
6155           break;
6156         case DW_AT_address_class:
6157           attrs->at_address_class = a;
6158           break;
6159         case DW_AT_allocated:
6160           attrs->at_allocated = a;
6161           break;
6162         case DW_AT_artificial:
6163           attrs->at_artificial = a;
6164           break;
6165         case DW_AT_associated:
6166           attrs->at_associated = a;
6167           break;
6168         case DW_AT_binary_scale:
6169           attrs->at_binary_scale = a;
6170           break;
6171         case DW_AT_bit_offset:
6172           attrs->at_bit_offset = a;
6173           break;
6174         case DW_AT_bit_size:
6175           attrs->at_bit_size = a;
6176           break;
6177         case DW_AT_bit_stride:
6178           attrs->at_bit_stride = a;
6179           break;
6180         case DW_AT_byte_size:
6181           attrs->at_byte_size = a;
6182           break;
6183         case DW_AT_byte_stride:
6184           attrs->at_byte_stride = a;
6185           break;
6186         case DW_AT_const_value:
6187           attrs->at_const_value = a;
6188           break;
6189         case DW_AT_containing_type:
6190           attrs->at_containing_type = a;
6191           break;
6192         case DW_AT_count:
6193           attrs->at_count = a;
6194           break;
6195         case DW_AT_data_location:
6196           attrs->at_data_location = a;
6197           break;
6198         case DW_AT_data_member_location:
6199           attrs->at_data_member_location = a;
6200           break;
6201         case DW_AT_decimal_scale:
6202           attrs->at_decimal_scale = a;
6203           break;
6204         case DW_AT_decimal_sign:
6205           attrs->at_decimal_sign = a;
6206           break;
6207         case DW_AT_default_value:
6208           attrs->at_default_value = a;
6209           break;
6210         case DW_AT_digit_count:
6211           attrs->at_digit_count = a;
6212           break;
6213         case DW_AT_discr:
6214           attrs->at_discr = a;
6215           break;
6216         case DW_AT_discr_list:
6217           attrs->at_discr_list = a;
6218           break;
6219         case DW_AT_discr_value:
6220           attrs->at_discr_value = a;
6221           break;
6222         case DW_AT_encoding:
6223           attrs->at_encoding = a;
6224           break;
6225         case DW_AT_endianity:
6226           attrs->at_endianity = a;
6227           break;
6228         case DW_AT_explicit:
6229           attrs->at_explicit = a;
6230           break;
6231         case DW_AT_is_optional:
6232           attrs->at_is_optional = a;
6233           break;
6234         case DW_AT_location:
6235           attrs->at_location = a;
6236           break;
6237         case DW_AT_lower_bound:
6238           attrs->at_lower_bound = a;
6239           break;
6240         case DW_AT_mutable:
6241           attrs->at_mutable = a;
6242           break;
6243         case DW_AT_ordering:
6244           attrs->at_ordering = a;
6245           break;
6246         case DW_AT_picture_string:
6247           attrs->at_picture_string = a;
6248           break;
6249         case DW_AT_prototyped:
6250           attrs->at_prototyped = a;
6251           break;
6252         case DW_AT_small:
6253           attrs->at_small = a;
6254           break;
6255         case DW_AT_segment:
6256           attrs->at_segment = a;
6257           break;
6258         case DW_AT_string_length:
6259           attrs->at_string_length = a;
6260           break;
6261         case DW_AT_threads_scaled:
6262           attrs->at_threads_scaled = a;
6263           break;
6264         case DW_AT_upper_bound:
6265           attrs->at_upper_bound = a;
6266           break;
6267         case DW_AT_use_location:
6268           attrs->at_use_location = a;
6269           break;
6270         case DW_AT_use_UTF8:
6271           attrs->at_use_UTF8 = a;
6272           break;
6273         case DW_AT_variable_parameter:
6274           attrs->at_variable_parameter = a;
6275           break;
6276         case DW_AT_virtuality:
6277           attrs->at_virtuality = a;
6278           break;
6279         case DW_AT_visibility:
6280           attrs->at_visibility = a;
6281           break;
6282         case DW_AT_vtable_elem_location:
6283           attrs->at_vtable_elem_location = a;
6284           break;
6285         default:
6286           break;
6287         }
6288     }
6289 }
6290
6291 /* Calculate the checksum of a DIE, using an ordered subset of attributes.  */
6292
6293 static void
6294 die_checksum_ordered (dw_die_ref die, struct md5_ctx *ctx, int *mark)
6295 {
6296   dw_die_ref c;
6297   dw_die_ref decl;
6298   struct checksum_attributes attrs;
6299
6300   CHECKSUM_ULEB128 ('D');
6301   CHECKSUM_ULEB128 (die->die_tag);
6302
6303   memset (&attrs, 0, sizeof (attrs));
6304
6305   decl = get_AT_ref (die, DW_AT_specification);
6306   if (decl != NULL)
6307     collect_checksum_attributes (&attrs, decl);
6308   collect_checksum_attributes (&attrs, die);
6309
6310   CHECKSUM_ATTR (attrs.at_name);
6311   CHECKSUM_ATTR (attrs.at_accessibility);
6312   CHECKSUM_ATTR (attrs.at_address_class);
6313   CHECKSUM_ATTR (attrs.at_allocated);
6314   CHECKSUM_ATTR (attrs.at_artificial);
6315   CHECKSUM_ATTR (attrs.at_associated);
6316   CHECKSUM_ATTR (attrs.at_binary_scale);
6317   CHECKSUM_ATTR (attrs.at_bit_offset);
6318   CHECKSUM_ATTR (attrs.at_bit_size);
6319   CHECKSUM_ATTR (attrs.at_bit_stride);
6320   CHECKSUM_ATTR (attrs.at_byte_size);
6321   CHECKSUM_ATTR (attrs.at_byte_stride);
6322   CHECKSUM_ATTR (attrs.at_const_value);
6323   CHECKSUM_ATTR (attrs.at_containing_type);
6324   CHECKSUM_ATTR (attrs.at_count);
6325   CHECKSUM_ATTR (attrs.at_data_location);
6326   CHECKSUM_ATTR (attrs.at_data_member_location);
6327   CHECKSUM_ATTR (attrs.at_decimal_scale);
6328   CHECKSUM_ATTR (attrs.at_decimal_sign);
6329   CHECKSUM_ATTR (attrs.at_default_value);
6330   CHECKSUM_ATTR (attrs.at_digit_count);
6331   CHECKSUM_ATTR (attrs.at_discr);
6332   CHECKSUM_ATTR (attrs.at_discr_list);
6333   CHECKSUM_ATTR (attrs.at_discr_value);
6334   CHECKSUM_ATTR (attrs.at_encoding);
6335   CHECKSUM_ATTR (attrs.at_endianity);
6336   CHECKSUM_ATTR (attrs.at_explicit);
6337   CHECKSUM_ATTR (attrs.at_is_optional);
6338   CHECKSUM_ATTR (attrs.at_location);
6339   CHECKSUM_ATTR (attrs.at_lower_bound);
6340   CHECKSUM_ATTR (attrs.at_mutable);
6341   CHECKSUM_ATTR (attrs.at_ordering);
6342   CHECKSUM_ATTR (attrs.at_picture_string);
6343   CHECKSUM_ATTR (attrs.at_prototyped);
6344   CHECKSUM_ATTR (attrs.at_small);
6345   CHECKSUM_ATTR (attrs.at_segment);
6346   CHECKSUM_ATTR (attrs.at_string_length);
6347   CHECKSUM_ATTR (attrs.at_threads_scaled);
6348   CHECKSUM_ATTR (attrs.at_upper_bound);
6349   CHECKSUM_ATTR (attrs.at_use_location);
6350   CHECKSUM_ATTR (attrs.at_use_UTF8);
6351   CHECKSUM_ATTR (attrs.at_variable_parameter);
6352   CHECKSUM_ATTR (attrs.at_virtuality);
6353   CHECKSUM_ATTR (attrs.at_visibility);
6354   CHECKSUM_ATTR (attrs.at_vtable_elem_location);
6355   CHECKSUM_ATTR (attrs.at_type);
6356   CHECKSUM_ATTR (attrs.at_friend);
6357
6358   /* Checksum the child DIEs.  */
6359   c = die->die_child;
6360   if (c) do {
6361     dw_attr_ref name_attr;
6362
6363     c = c->die_sib;
6364     name_attr = get_AT (c, DW_AT_name);
6365     if (is_template_instantiation (c))
6366       {
6367         /* Ignore instantiations of member type and function templates.  */
6368       }
6369     else if (name_attr != NULL
6370              && (is_type_die (c) || c->die_tag == DW_TAG_subprogram))
6371       {
6372         /* Use a shallow checksum for named nested types and member
6373            functions.  */
6374         CHECKSUM_ULEB128 ('S');
6375         CHECKSUM_ULEB128 (c->die_tag);
6376         CHECKSUM_STRING (AT_string (name_attr));
6377       }
6378     else
6379       {
6380         /* Use a deep checksum for other children.  */
6381         /* Mark this DIE so it gets processed when unmarking.  */
6382         if (c->die_mark == 0)
6383           c->die_mark = -1;
6384         die_checksum_ordered (c, ctx, mark);
6385       }
6386   } while (c != die->die_child);
6387
6388   CHECKSUM_ULEB128 (0);
6389 }
6390
6391 /* Add a type name and tag to a hash.  */
6392 static void
6393 die_odr_checksum (int tag, const char *name, md5_ctx *ctx)
6394 {
6395   CHECKSUM_ULEB128 (tag);
6396   CHECKSUM_STRING (name);
6397 }
6398
6399 #undef CHECKSUM
6400 #undef CHECKSUM_STRING
6401 #undef CHECKSUM_ATTR
6402 #undef CHECKSUM_LEB128
6403 #undef CHECKSUM_ULEB128
6404
6405 /* Generate the type signature for DIE.  This is computed by generating an
6406    MD5 checksum over the DIE's tag, its relevant attributes, and its
6407    children.  Attributes that are references to other DIEs are processed
6408    by recursion, using the MARK field to prevent infinite recursion.
6409    If the DIE is nested inside a namespace or another type, we also
6410    need to include that context in the signature.  The lower 64 bits
6411    of the resulting MD5 checksum comprise the signature.  */
6412
6413 static void
6414 generate_type_signature (dw_die_ref die, comdat_type_node *type_node)
6415 {
6416   int mark;
6417   const char *name;
6418   unsigned char checksum[16];
6419   struct md5_ctx ctx;
6420   dw_die_ref decl;
6421   dw_die_ref parent;
6422
6423   name = get_AT_string (die, DW_AT_name);
6424   decl = get_AT_ref (die, DW_AT_specification);
6425   parent = get_die_parent (die);
6426
6427   /* First, compute a signature for just the type name (and its surrounding
6428      context, if any.  This is stored in the type unit DIE for link-time
6429      ODR (one-definition rule) checking.  */
6430
6431   if (is_cxx () && name != NULL)
6432     {
6433       md5_init_ctx (&ctx);
6434
6435       /* Checksum the names of surrounding namespaces and structures.  */
6436       if (parent != NULL)
6437         checksum_die_context (parent, &ctx);
6438
6439       /* Checksum the current DIE. */
6440       die_odr_checksum (die->die_tag, name, &ctx);
6441       md5_finish_ctx (&ctx, checksum);
6442
6443       add_AT_data8 (type_node->root_die, DW_AT_GNU_odr_signature, &checksum[8]);
6444     }
6445
6446   /* Next, compute the complete type signature.  */
6447
6448   md5_init_ctx (&ctx);
6449   mark = 1;
6450   die->die_mark = mark;
6451
6452   /* Checksum the names of surrounding namespaces and structures.  */
6453   if (parent != NULL)
6454     checksum_die_context (parent, &ctx);
6455
6456   /* Checksum the DIE and its children.  */
6457   die_checksum_ordered (die, &ctx, &mark);
6458   unmark_all_dies (die);
6459   md5_finish_ctx (&ctx, checksum);
6460
6461   /* Store the signature in the type node and link the type DIE and the
6462      type node together.  */
6463   memcpy (type_node->signature, &checksum[16 - DWARF_TYPE_SIGNATURE_SIZE],
6464           DWARF_TYPE_SIGNATURE_SIZE);
6465   die->comdat_type_p = true;
6466   die->die_id.die_type_node = type_node;
6467   type_node->type_die = die;
6468
6469   /* If the DIE is a specification, link its declaration to the type node
6470      as well.  */
6471   if (decl != NULL)
6472     {
6473       decl->comdat_type_p = true;
6474       decl->die_id.die_type_node = type_node;
6475     }
6476 }
6477
6478 /* Do the location expressions look same?  */
6479 static inline int
6480 same_loc_p (dw_loc_descr_ref loc1, dw_loc_descr_ref loc2, int *mark)
6481 {
6482   return loc1->dw_loc_opc == loc2->dw_loc_opc
6483          && same_dw_val_p (&loc1->dw_loc_oprnd1, &loc2->dw_loc_oprnd1, mark)
6484          && same_dw_val_p (&loc1->dw_loc_oprnd2, &loc2->dw_loc_oprnd2, mark);
6485 }
6486
6487 /* Do the values look the same?  */
6488 static int
6489 same_dw_val_p (const dw_val_node *v1, const dw_val_node *v2, int *mark)
6490 {
6491   dw_loc_descr_ref loc1, loc2;
6492   rtx r1, r2;
6493
6494   if (v1->val_class != v2->val_class)
6495     return 0;
6496
6497   switch (v1->val_class)
6498     {
6499     case dw_val_class_const:
6500       return v1->v.val_int == v2->v.val_int;
6501     case dw_val_class_unsigned_const:
6502       return v1->v.val_unsigned == v2->v.val_unsigned;
6503     case dw_val_class_const_double:
6504       return v1->v.val_double.high == v2->v.val_double.high
6505              && v1->v.val_double.low == v2->v.val_double.low;
6506     case dw_val_class_wide_int:
6507       return *v1->v.val_wide == *v2->v.val_wide;
6508     case dw_val_class_vec:
6509       if (v1->v.val_vec.length != v2->v.val_vec.length
6510           || v1->v.val_vec.elt_size != v2->v.val_vec.elt_size)
6511         return 0;
6512       if (memcmp (v1->v.val_vec.array, v2->v.val_vec.array,
6513                   v1->v.val_vec.length * v1->v.val_vec.elt_size))
6514         return 0;
6515       return 1;
6516     case dw_val_class_flag:
6517       return v1->v.val_flag == v2->v.val_flag;
6518     case dw_val_class_str:
6519       return !strcmp (v1->v.val_str->str, v2->v.val_str->str);
6520
6521     case dw_val_class_addr:
6522       r1 = v1->v.val_addr;
6523       r2 = v2->v.val_addr;
6524       if (GET_CODE (r1) != GET_CODE (r2))
6525         return 0;
6526       return !rtx_equal_p (r1, r2);
6527
6528     case dw_val_class_offset:
6529       return v1->v.val_offset == v2->v.val_offset;
6530
6531     case dw_val_class_loc:
6532       for (loc1 = v1->v.val_loc, loc2 = v2->v.val_loc;
6533            loc1 && loc2;
6534            loc1 = loc1->dw_loc_next, loc2 = loc2->dw_loc_next)
6535         if (!same_loc_p (loc1, loc2, mark))
6536           return 0;
6537       return !loc1 && !loc2;
6538
6539     case dw_val_class_die_ref:
6540       return same_die_p (v1->v.val_die_ref.die, v2->v.val_die_ref.die, mark);
6541
6542     case dw_val_class_fde_ref:
6543     case dw_val_class_vms_delta:
6544     case dw_val_class_lbl_id:
6545     case dw_val_class_lineptr:
6546     case dw_val_class_macptr:
6547     case dw_val_class_high_pc:
6548       return 1;
6549
6550     case dw_val_class_file:
6551       return v1->v.val_file == v2->v.val_file;
6552
6553     case dw_val_class_data8:
6554       return !memcmp (v1->v.val_data8, v2->v.val_data8, 8);
6555
6556     default:
6557       return 1;
6558     }
6559 }
6560
6561 /* Do the attributes look the same?  */
6562
6563 static int
6564 same_attr_p (dw_attr_ref at1, dw_attr_ref at2, int *mark)
6565 {
6566   if (at1->dw_attr != at2->dw_attr)
6567     return 0;
6568
6569   /* We don't care that this was compiled with a different compiler
6570      snapshot; if the output is the same, that's what matters. */
6571   if (at1->dw_attr == DW_AT_producer)
6572     return 1;
6573
6574   return same_dw_val_p (&at1->dw_attr_val, &at2->dw_attr_val, mark);
6575 }
6576
6577 /* Do the dies look the same?  */
6578
6579 static int
6580 same_die_p (dw_die_ref die1, dw_die_ref die2, int *mark)
6581 {
6582   dw_die_ref c1, c2;
6583   dw_attr_ref a1;
6584   unsigned ix;
6585
6586   /* To avoid infinite recursion.  */
6587   if (die1->die_mark)
6588     return die1->die_mark == die2->die_mark;
6589   die1->die_mark = die2->die_mark = ++(*mark);
6590
6591   if (die1->die_tag != die2->die_tag)
6592     return 0;
6593
6594   if (vec_safe_length (die1->die_attr) != vec_safe_length (die2->die_attr))
6595     return 0;
6596
6597   FOR_EACH_VEC_SAFE_ELT (die1->die_attr, ix, a1)
6598     if (!same_attr_p (a1, &(*die2->die_attr)[ix], mark))
6599       return 0;
6600
6601   c1 = die1->die_child;
6602   c2 = die2->die_child;
6603   if (! c1)
6604     {
6605       if (c2)
6606         return 0;
6607     }
6608   else
6609     for (;;)
6610       {
6611         if (!same_die_p (c1, c2, mark))
6612           return 0;
6613         c1 = c1->die_sib;
6614         c2 = c2->die_sib;
6615         if (c1 == die1->die_child)
6616           {
6617             if (c2 == die2->die_child)
6618               break;
6619             else
6620               return 0;
6621           }
6622     }
6623
6624   return 1;
6625 }
6626
6627 /* Do the dies look the same?  Wrapper around same_die_p.  */
6628
6629 static int
6630 same_die_p_wrap (dw_die_ref die1, dw_die_ref die2)
6631 {
6632   int mark = 0;
6633   int ret = same_die_p (die1, die2, &mark);
6634
6635   unmark_all_dies (die1);
6636   unmark_all_dies (die2);
6637
6638   return ret;
6639 }
6640
6641 /* The prefix to attach to symbols on DIEs in the current comdat debug
6642    info section.  */
6643 static const char *comdat_symbol_id;
6644
6645 /* The index of the current symbol within the current comdat CU.  */
6646 static unsigned int comdat_symbol_number;
6647
6648 /* Calculate the MD5 checksum of the compilation unit DIE UNIT_DIE and its
6649    children, and set comdat_symbol_id accordingly.  */
6650
6651 static void
6652 compute_section_prefix (dw_die_ref unit_die)
6653 {
6654   const char *die_name = get_AT_string (unit_die, DW_AT_name);
6655   const char *base = die_name ? lbasename (die_name) : "anonymous";
6656   char *name = XALLOCAVEC (char, strlen (base) + 64);
6657   char *p;
6658   int i, mark;
6659   unsigned char checksum[16];
6660   struct md5_ctx ctx;
6661
6662   /* Compute the checksum of the DIE, then append part of it as hex digits to
6663      the name filename of the unit.  */
6664
6665   md5_init_ctx (&ctx);
6666   mark = 0;
6667   die_checksum (unit_die, &ctx, &mark);
6668   unmark_all_dies (unit_die);
6669   md5_finish_ctx (&ctx, checksum);
6670
6671   sprintf (name, "%s.", base);
6672   clean_symbol_name (name);
6673
6674   p = name + strlen (name);
6675   for (i = 0; i < 4; i++)
6676     {
6677       sprintf (p, "%.2x", checksum[i]);
6678       p += 2;
6679     }
6680
6681   comdat_symbol_id = unit_die->die_id.die_symbol = xstrdup (name);
6682   comdat_symbol_number = 0;
6683 }
6684
6685 /* Returns nonzero if DIE represents a type, in the sense of TYPE_P.  */
6686
6687 static int
6688 is_type_die (dw_die_ref die)
6689 {
6690   switch (die->die_tag)
6691     {
6692     case DW_TAG_array_type:
6693     case DW_TAG_class_type:
6694     case DW_TAG_interface_type:
6695     case DW_TAG_enumeration_type:
6696     case DW_TAG_pointer_type:
6697     case DW_TAG_reference_type:
6698     case DW_TAG_rvalue_reference_type:
6699     case DW_TAG_string_type:
6700     case DW_TAG_structure_type:
6701     case DW_TAG_subroutine_type:
6702     case DW_TAG_union_type:
6703     case DW_TAG_ptr_to_member_type:
6704     case DW_TAG_set_type:
6705     case DW_TAG_subrange_type:
6706     case DW_TAG_base_type:
6707     case DW_TAG_const_type:
6708     case DW_TAG_file_type:
6709     case DW_TAG_packed_type:
6710     case DW_TAG_volatile_type:
6711     case DW_TAG_typedef:
6712       return 1;
6713     default:
6714       return 0;
6715     }
6716 }
6717
6718 /* Returns 1 iff C is the sort of DIE that should go into a COMDAT CU.
6719    Basically, we want to choose the bits that are likely to be shared between
6720    compilations (types) and leave out the bits that are specific to individual
6721    compilations (functions).  */
6722
6723 static int
6724 is_comdat_die (dw_die_ref c)
6725 {
6726   /* I think we want to leave base types and __vtbl_ptr_type in the main CU, as
6727      we do for stabs.  The advantage is a greater likelihood of sharing between
6728      objects that don't include headers in the same order (and therefore would
6729      put the base types in a different comdat).  jason 8/28/00 */
6730
6731   if (c->die_tag == DW_TAG_base_type)
6732     return 0;
6733
6734   if (c->die_tag == DW_TAG_pointer_type
6735       || c->die_tag == DW_TAG_reference_type
6736       || c->die_tag == DW_TAG_rvalue_reference_type
6737       || c->die_tag == DW_TAG_const_type
6738       || c->die_tag == DW_TAG_volatile_type)
6739     {
6740       dw_die_ref t = get_AT_ref (c, DW_AT_type);
6741
6742       return t ? is_comdat_die (t) : 0;
6743     }
6744
6745   return is_type_die (c);
6746 }
6747
6748 /* Returns 1 iff C is the sort of DIE that might be referred to from another
6749    compilation unit.  */
6750
6751 static int
6752 is_symbol_die (dw_die_ref c)
6753 {
6754   return (is_type_die (c)
6755           || is_declaration_die (c)
6756           || c->die_tag == DW_TAG_namespace
6757           || c->die_tag == DW_TAG_module);
6758 }
6759
6760 /* Returns true iff C is a compile-unit DIE.  */
6761
6762 static inline bool
6763 is_cu_die (dw_die_ref c)
6764 {
6765   return c && c->die_tag == DW_TAG_compile_unit;
6766 }
6767
6768 /* Returns true iff C is a unit DIE of some sort.  */
6769
6770 static inline bool
6771 is_unit_die (dw_die_ref c)
6772 {
6773   return c && (c->die_tag == DW_TAG_compile_unit
6774                || c->die_tag == DW_TAG_partial_unit
6775                || c->die_tag == DW_TAG_type_unit);
6776 }
6777
6778 /* Returns true iff C is a namespace DIE.  */
6779
6780 static inline bool
6781 is_namespace_die (dw_die_ref c)
6782 {
6783   return c && c->die_tag == DW_TAG_namespace;
6784 }
6785
6786 /* Returns true iff C is a class or structure DIE.  */
6787
6788 static inline bool
6789 is_class_die (dw_die_ref c)
6790 {
6791   return c && (c->die_tag == DW_TAG_class_type
6792                || c->die_tag == DW_TAG_structure_type);
6793 }
6794
6795 /* Return non-zero if this DIE is a template parameter.  */
6796
6797 static inline bool
6798 is_template_parameter (dw_die_ref die)
6799 {
6800   switch (die->die_tag)
6801     {
6802     case DW_TAG_template_type_param:
6803     case DW_TAG_template_value_param:
6804     case DW_TAG_GNU_template_template_param:
6805     case DW_TAG_GNU_template_parameter_pack:
6806       return true;
6807     default:
6808       return false;
6809     }
6810 }
6811
6812 /* Return non-zero if this DIE represents a template instantiation.  */
6813
6814 static inline bool
6815 is_template_instantiation (dw_die_ref die)
6816 {
6817   dw_die_ref c;
6818
6819   if (!is_type_die (die) && die->die_tag != DW_TAG_subprogram)
6820     return false;
6821   FOR_EACH_CHILD (die, c, if (is_template_parameter (c)) return true);
6822   return false;
6823 }
6824
6825 static char *
6826 gen_internal_sym (const char *prefix)
6827 {
6828   char buf[256];
6829
6830   ASM_GENERATE_INTERNAL_LABEL (buf, prefix, label_num++);
6831   return xstrdup (buf);
6832 }
6833
6834 /* Assign symbols to all worthy DIEs under DIE.  */
6835
6836 static void
6837 assign_symbol_names (dw_die_ref die)
6838 {
6839   dw_die_ref c;
6840
6841   if (is_symbol_die (die) && !die->comdat_type_p)
6842     {
6843       if (comdat_symbol_id)
6844         {
6845           char *p = XALLOCAVEC (char, strlen (comdat_symbol_id) + 64);
6846
6847           sprintf (p, "%s.%s.%x", DIE_LABEL_PREFIX,
6848                    comdat_symbol_id, comdat_symbol_number++);
6849           die->die_id.die_symbol = xstrdup (p);
6850         }
6851       else
6852         die->die_id.die_symbol = gen_internal_sym ("LDIE");
6853     }
6854
6855   FOR_EACH_CHILD (die, c, assign_symbol_names (c));
6856 }
6857
6858 struct cu_hash_table_entry
6859 {
6860   dw_die_ref cu;
6861   unsigned min_comdat_num, max_comdat_num;
6862   struct cu_hash_table_entry *next;
6863 };
6864
6865 /* Helpers to manipulate hash table of CUs.  */
6866
6867 struct cu_hash_table_entry_hasher
6868 {
6869   typedef cu_hash_table_entry value_type;
6870   typedef die_struct compare_type;
6871   static inline hashval_t hash (const value_type *);
6872   static inline bool equal (const value_type *, const compare_type *);
6873   static inline void remove (value_type *);
6874 };
6875
6876 inline hashval_t
6877 cu_hash_table_entry_hasher::hash (const value_type *entry)
6878 {
6879   return htab_hash_string (entry->cu->die_id.die_symbol);
6880 }
6881
6882 inline bool
6883 cu_hash_table_entry_hasher::equal (const value_type *entry1,
6884                                    const compare_type *entry2)
6885 {
6886   return !strcmp (entry1->cu->die_id.die_symbol, entry2->die_id.die_symbol);
6887 }
6888
6889 inline void
6890 cu_hash_table_entry_hasher::remove (value_type *entry)
6891 {
6892   struct cu_hash_table_entry *next;
6893
6894   while (entry)
6895     {
6896       next = entry->next;
6897       free (entry);
6898       entry = next;
6899     }
6900 }
6901
6902 typedef hash_table<cu_hash_table_entry_hasher> cu_hash_type;
6903
6904 /* Check whether we have already seen this CU and set up SYM_NUM
6905    accordingly.  */
6906 static int
6907 check_duplicate_cu (dw_die_ref cu, cu_hash_type *htable, unsigned int *sym_num)
6908 {
6909   struct cu_hash_table_entry dummy;
6910   struct cu_hash_table_entry **slot, *entry, *last = &dummy;
6911
6912   dummy.max_comdat_num = 0;
6913
6914   slot = htable->find_slot_with_hash (cu,
6915                                       htab_hash_string (cu->die_id.die_symbol),
6916                                       INSERT);
6917   entry = *slot;
6918
6919   for (; entry; last = entry, entry = entry->next)
6920     {
6921       if (same_die_p_wrap (cu, entry->cu))
6922         break;
6923     }
6924
6925   if (entry)
6926     {
6927       *sym_num = entry->min_comdat_num;
6928       return 1;
6929     }
6930
6931   entry = XCNEW (struct cu_hash_table_entry);
6932   entry->cu = cu;
6933   entry->min_comdat_num = *sym_num = last->max_comdat_num;
6934   entry->next = *slot;
6935   *slot = entry;
6936
6937   return 0;
6938 }
6939
6940 /* Record SYM_NUM to record of CU in HTABLE.  */
6941 static void
6942 record_comdat_symbol_number (dw_die_ref cu, cu_hash_type *htable,
6943                              unsigned int sym_num)
6944 {
6945   struct cu_hash_table_entry **slot, *entry;
6946
6947   slot = htable->find_slot_with_hash (cu,
6948                                       htab_hash_string (cu->die_id.die_symbol),
6949                                       NO_INSERT);
6950   entry = *slot;
6951
6952   entry->max_comdat_num = sym_num;
6953 }
6954
6955 /* Traverse the DIE (which is always comp_unit_die), and set up
6956    additional compilation units for each of the include files we see
6957    bracketed by BINCL/EINCL.  */
6958
6959 static void
6960 break_out_includes (dw_die_ref die)
6961 {
6962   dw_die_ref c;
6963   dw_die_ref unit = NULL;
6964   limbo_die_node *node, **pnode;
6965
6966   c = die->die_child;
6967   if (c) do {
6968     dw_die_ref prev = c;
6969     c = c->die_sib;
6970     while (c->die_tag == DW_TAG_GNU_BINCL || c->die_tag == DW_TAG_GNU_EINCL
6971            || (unit && is_comdat_die (c)))
6972       {
6973         dw_die_ref next = c->die_sib;
6974
6975         /* This DIE is for a secondary CU; remove it from the main one.  */
6976         remove_child_with_prev (c, prev);
6977
6978         if (c->die_tag == DW_TAG_GNU_BINCL)
6979           unit = push_new_compile_unit (unit, c);
6980         else if (c->die_tag == DW_TAG_GNU_EINCL)
6981           unit = pop_compile_unit (unit);
6982         else
6983           add_child_die (unit, c);
6984         c = next;
6985         if (c == die->die_child)
6986           break;
6987       }
6988   } while (c != die->die_child);
6989
6990 #if 0
6991   /* We can only use this in debugging, since the frontend doesn't check
6992      to make sure that we leave every include file we enter.  */
6993   gcc_assert (!unit);
6994 #endif
6995
6996   assign_symbol_names (die);
6997   cu_hash_type cu_hash_table (10);
6998   for (node = limbo_die_list, pnode = &limbo_die_list;
6999        node;
7000        node = node->next)
7001     {
7002       int is_dupl;
7003
7004       compute_section_prefix (node->die);
7005       is_dupl = check_duplicate_cu (node->die, &cu_hash_table,
7006                         &comdat_symbol_number);
7007       assign_symbol_names (node->die);
7008       if (is_dupl)
7009         *pnode = node->next;
7010       else
7011         {
7012           pnode = &node->next;
7013           record_comdat_symbol_number (node->die, &cu_hash_table,
7014                 comdat_symbol_number);
7015         }
7016     }
7017 }
7018
7019 /* Return non-zero if this DIE is a declaration.  */
7020
7021 static int
7022 is_declaration_die (dw_die_ref die)
7023 {
7024   dw_attr_ref a;
7025   unsigned ix;
7026
7027   FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
7028     if (a->dw_attr == DW_AT_declaration)
7029       return 1;
7030
7031   return 0;
7032 }
7033
7034 /* Return non-zero if this DIE is nested inside a subprogram.  */
7035
7036 static int
7037 is_nested_in_subprogram (dw_die_ref die)
7038 {
7039   dw_die_ref decl = get_AT_ref (die, DW_AT_specification);
7040
7041   if (decl == NULL)
7042     decl = die;
7043   return local_scope_p (decl);
7044 }
7045
7046 /* Return non-zero if this DIE contains a defining declaration of a
7047    subprogram.  */
7048
7049 static int
7050 contains_subprogram_definition (dw_die_ref die)
7051 {
7052   dw_die_ref c;
7053
7054   if (die->die_tag == DW_TAG_subprogram && ! is_declaration_die (die))
7055     return 1;
7056   FOR_EACH_CHILD (die, c, if (contains_subprogram_definition (c)) return 1);
7057   return 0;
7058 }
7059
7060 /* Return non-zero if this is a type DIE that should be moved to a
7061    COMDAT .debug_types section.  */
7062
7063 static int
7064 should_move_die_to_comdat (dw_die_ref die)
7065 {
7066   switch (die->die_tag)
7067     {
7068     case DW_TAG_class_type:
7069     case DW_TAG_structure_type:
7070     case DW_TAG_enumeration_type:
7071     case DW_TAG_union_type:
7072       /* Don't move declarations, inlined instances, types nested in a
7073          subprogram, or types that contain subprogram definitions.  */
7074       if (is_declaration_die (die)
7075           || get_AT (die, DW_AT_abstract_origin)
7076           || is_nested_in_subprogram (die)
7077           || contains_subprogram_definition (die))
7078         return 0;
7079       return 1;
7080     case DW_TAG_array_type:
7081     case DW_TAG_interface_type:
7082     case DW_TAG_pointer_type:
7083     case DW_TAG_reference_type:
7084     case DW_TAG_rvalue_reference_type:
7085     case DW_TAG_string_type:
7086     case DW_TAG_subroutine_type:
7087     case DW_TAG_ptr_to_member_type:
7088     case DW_TAG_set_type:
7089     case DW_TAG_subrange_type:
7090     case DW_TAG_base_type:
7091     case DW_TAG_const_type:
7092     case DW_TAG_file_type:
7093     case DW_TAG_packed_type:
7094     case DW_TAG_volatile_type:
7095     case DW_TAG_typedef:
7096     default:
7097       return 0;
7098     }
7099 }
7100
7101 /* Make a clone of DIE.  */
7102
7103 static dw_die_ref
7104 clone_die (dw_die_ref die)
7105 {
7106   dw_die_ref clone;
7107   dw_attr_ref a;
7108   unsigned ix;
7109
7110   clone = ggc_cleared_alloc<die_node> ();
7111   clone->die_tag = die->die_tag;
7112
7113   FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
7114     add_dwarf_attr (clone, a);
7115
7116   return clone;
7117 }
7118
7119 /* Make a clone of the tree rooted at DIE.  */
7120
7121 static dw_die_ref
7122 clone_tree (dw_die_ref die)
7123 {
7124   dw_die_ref c;
7125   dw_die_ref clone = clone_die (die);
7126
7127   FOR_EACH_CHILD (die, c, add_child_die (clone, clone_tree (c)));
7128
7129   return clone;
7130 }
7131
7132 /* Make a clone of DIE as a declaration.  */
7133
7134 static dw_die_ref
7135 clone_as_declaration (dw_die_ref die)
7136 {
7137   dw_die_ref clone;
7138   dw_die_ref decl;
7139   dw_attr_ref a;
7140   unsigned ix;
7141
7142   /* If the DIE is already a declaration, just clone it.  */
7143   if (is_declaration_die (die))
7144     return clone_die (die);
7145
7146   /* If the DIE is a specification, just clone its declaration DIE.  */
7147   decl = get_AT_ref (die, DW_AT_specification);
7148   if (decl != NULL)
7149     {
7150       clone = clone_die (decl);
7151       if (die->comdat_type_p)
7152         add_AT_die_ref (clone, DW_AT_signature, die);
7153       return clone;
7154     }
7155
7156   clone = ggc_cleared_alloc<die_node> ();
7157   clone->die_tag = die->die_tag;
7158
7159   FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
7160     {
7161       /* We don't want to copy over all attributes.
7162          For example we don't want DW_AT_byte_size because otherwise we will no
7163          longer have a declaration and GDB will treat it as a definition.  */
7164
7165       switch (a->dw_attr)
7166         {
7167         case DW_AT_abstract_origin:
7168         case DW_AT_artificial:
7169         case DW_AT_containing_type:
7170         case DW_AT_external:
7171         case DW_AT_name:
7172         case DW_AT_type:
7173         case DW_AT_virtuality:
7174         case DW_AT_linkage_name:
7175         case DW_AT_MIPS_linkage_name:
7176           add_dwarf_attr (clone, a);
7177           break;
7178         case DW_AT_byte_size:
7179         default:
7180           break;
7181         }
7182     }
7183
7184   if (die->comdat_type_p)
7185     add_AT_die_ref (clone, DW_AT_signature, die);
7186
7187   add_AT_flag (clone, DW_AT_declaration, 1);
7188   return clone;
7189 }
7190
7191
7192 /* Structure to map a DIE in one CU to its copy in a comdat type unit.  */
7193
7194 struct decl_table_entry
7195 {
7196   dw_die_ref orig;
7197   dw_die_ref copy;
7198 };
7199
7200 /* Helpers to manipulate hash table of copied declarations.  */
7201
7202 /* Hashtable helpers.  */
7203
7204 struct decl_table_entry_hasher : typed_free_remove <decl_table_entry>
7205 {
7206   typedef decl_table_entry value_type;
7207   typedef die_struct compare_type;
7208   static inline hashval_t hash (const value_type *);
7209   static inline bool equal (const value_type *, const compare_type *);
7210 };
7211
7212 inline hashval_t
7213 decl_table_entry_hasher::hash (const value_type *entry)
7214 {
7215   return htab_hash_pointer (entry->orig);
7216 }
7217
7218 inline bool
7219 decl_table_entry_hasher::equal (const value_type *entry1,
7220                                 const compare_type *entry2)
7221 {
7222   return entry1->orig == entry2;
7223 }
7224
7225 typedef hash_table<decl_table_entry_hasher> decl_hash_type;
7226
7227 /* Copy DIE and its ancestors, up to, but not including, the compile unit
7228    or type unit entry, to a new tree.  Adds the new tree to UNIT and returns
7229    a pointer to the copy of DIE.  If DECL_TABLE is provided, it is used
7230    to check if the ancestor has already been copied into UNIT.  */
7231
7232 static dw_die_ref
7233 copy_ancestor_tree (dw_die_ref unit, dw_die_ref die,
7234                     decl_hash_type *decl_table)
7235 {
7236   dw_die_ref parent = die->die_parent;
7237   dw_die_ref new_parent = unit;
7238   dw_die_ref copy;
7239   decl_table_entry **slot = NULL;
7240   struct decl_table_entry *entry = NULL;
7241
7242   if (decl_table)
7243     {
7244       /* Check if the entry has already been copied to UNIT.  */
7245       slot = decl_table->find_slot_with_hash (die, htab_hash_pointer (die),
7246                                               INSERT);
7247       if (*slot != HTAB_EMPTY_ENTRY)
7248         {
7249           entry = *slot;
7250           return entry->copy;
7251         }
7252
7253       /* Record in DECL_TABLE that DIE has been copied to UNIT.  */
7254       entry = XCNEW (struct decl_table_entry);
7255       entry->orig = die;
7256       entry->copy = NULL;
7257       *slot = entry;
7258     }
7259
7260   if (parent != NULL)
7261     {
7262       dw_die_ref spec = get_AT_ref (parent, DW_AT_specification);
7263       if (spec != NULL)
7264         parent = spec;
7265       if (!is_unit_die (parent))
7266         new_parent = copy_ancestor_tree (unit, parent, decl_table);
7267     }
7268
7269   copy = clone_as_declaration (die);
7270   add_child_die (new_parent, copy);
7271
7272   if (decl_table)
7273     {
7274       /* Record the pointer to the copy.  */
7275       entry->copy = copy;
7276     }
7277
7278   return copy;
7279 }
7280 /* Copy the declaration context to the new type unit DIE.  This includes
7281    any surrounding namespace or type declarations.  If the DIE has an
7282    AT_specification attribute, it also includes attributes and children
7283    attached to the specification, and returns a pointer to the original
7284    parent of the declaration DIE.  Returns NULL otherwise.  */
7285
7286 static dw_die_ref
7287 copy_declaration_context (dw_die_ref unit, dw_die_ref die)
7288 {
7289   dw_die_ref decl;
7290   dw_die_ref new_decl;
7291   dw_die_ref orig_parent = NULL;
7292
7293   decl = get_AT_ref (die, DW_AT_specification);
7294   if (decl == NULL)
7295     decl = die;
7296   else
7297     {
7298       unsigned ix;
7299       dw_die_ref c;
7300       dw_attr_ref a;
7301
7302       /* The original DIE will be changed to a declaration, and must
7303          be moved to be a child of the original declaration DIE.  */
7304       orig_parent = decl->die_parent;
7305
7306       /* Copy the type node pointer from the new DIE to the original
7307          declaration DIE so we can forward references later.  */
7308       decl->comdat_type_p = true;
7309       decl->die_id.die_type_node = die->die_id.die_type_node;
7310
7311       remove_AT (die, DW_AT_specification);
7312
7313       FOR_EACH_VEC_SAFE_ELT (decl->die_attr, ix, a)
7314         {
7315           if (a->dw_attr != DW_AT_name
7316               && a->dw_attr != DW_AT_declaration
7317               && a->dw_attr != DW_AT_external)
7318             add_dwarf_attr (die, a);
7319         }
7320
7321       FOR_EACH_CHILD (decl, c, add_child_die (die, clone_tree (c)));
7322     }
7323
7324   if (decl->die_parent != NULL
7325       && !is_unit_die (decl->die_parent))
7326     {
7327       new_decl = copy_ancestor_tree (unit, decl, NULL);
7328       if (new_decl != NULL)
7329         {
7330           remove_AT (new_decl, DW_AT_signature);
7331           add_AT_specification (die, new_decl);
7332         }
7333     }
7334
7335   return orig_parent;
7336 }
7337
7338 /* Generate the skeleton ancestor tree for the given NODE, then clone
7339    the DIE and add the clone into the tree.  */
7340
7341 static void
7342 generate_skeleton_ancestor_tree (skeleton_chain_node *node)
7343 {
7344   if (node->new_die != NULL)
7345     return;
7346
7347   node->new_die = clone_as_declaration (node->old_die);
7348
7349   if (node->parent != NULL)
7350     {
7351       generate_skeleton_ancestor_tree (node->parent);
7352       add_child_die (node->parent->new_die, node->new_die);
7353     }
7354 }
7355
7356 /* Generate a skeleton tree of DIEs containing any declarations that are
7357    found in the original tree.  We traverse the tree looking for declaration
7358    DIEs, and construct the skeleton from the bottom up whenever we find one.  */
7359
7360 static void
7361 generate_skeleton_bottom_up (skeleton_chain_node *parent)
7362 {
7363   skeleton_chain_node node;
7364   dw_die_ref c;
7365   dw_die_ref first;
7366   dw_die_ref prev = NULL;
7367   dw_die_ref next = NULL;
7368
7369   node.parent = parent;
7370
7371   first = c = parent->old_die->die_child;
7372   if (c)
7373     next = c->die_sib;
7374   if (c) do {
7375     if (prev == NULL || prev->die_sib == c)
7376       prev = c;
7377     c = next;
7378     next = (c == first ? NULL : c->die_sib);
7379     node.old_die = c;
7380     node.new_die = NULL;
7381     if (is_declaration_die (c))
7382       {
7383         if (is_template_instantiation (c))
7384           {
7385             /* Instantiated templates do not need to be cloned into the
7386                type unit.  Just move the DIE and its children back to
7387                the skeleton tree (in the main CU).  */
7388             remove_child_with_prev (c, prev);
7389             add_child_die (parent->new_die, c);
7390             c = prev;
7391           }
7392         else
7393           {
7394             /* Clone the existing DIE, move the original to the skeleton
7395                tree (which is in the main CU), and put the clone, with
7396                all the original's children, where the original came from
7397                (which is about to be moved to the type unit).  */
7398             dw_die_ref clone = clone_die (c);
7399             move_all_children (c, clone);
7400
7401             /* If the original has a DW_AT_object_pointer attribute,
7402                it would now point to a child DIE just moved to the
7403                cloned tree, so we need to remove that attribute from
7404                the original.  */
7405             remove_AT (c, DW_AT_object_pointer);
7406
7407             replace_child (c, clone, prev);
7408             generate_skeleton_ancestor_tree (parent);
7409             add_child_die (parent->new_die, c);
7410             node.new_die = c;
7411             c = clone;
7412           }
7413       }
7414     generate_skeleton_bottom_up (&node);
7415   } while (next != NULL);
7416 }
7417
7418 /* Wrapper function for generate_skeleton_bottom_up.  */
7419
7420 static dw_die_ref
7421 generate_skeleton (dw_die_ref die)
7422 {
7423   skeleton_chain_node node;
7424
7425   node.old_die = die;
7426   node.new_die = NULL;
7427   node.parent = NULL;
7428
7429   /* If this type definition is nested inside another type,
7430      and is not an instantiation of a template, always leave
7431      at least a declaration in its place.  */
7432   if (die->die_parent != NULL
7433       && is_type_die (die->die_parent)
7434       && !is_template_instantiation (die))
7435     node.new_die = clone_as_declaration (die);
7436
7437   generate_skeleton_bottom_up (&node);
7438   return node.new_die;
7439 }
7440
7441 /* Remove the CHILD DIE from its parent, possibly replacing it with a cloned
7442    declaration.  The original DIE is moved to a new compile unit so that
7443    existing references to it follow it to the new location.  If any of the
7444    original DIE's descendants is a declaration, we need to replace the
7445    original DIE with a skeleton tree and move the declarations back into the
7446    skeleton tree.  */
7447
7448 static dw_die_ref
7449 remove_child_or_replace_with_skeleton (dw_die_ref unit, dw_die_ref child,
7450                                        dw_die_ref prev)
7451 {
7452   dw_die_ref skeleton, orig_parent;
7453
7454   /* Copy the declaration context to the type unit DIE.  If the returned
7455      ORIG_PARENT is not NULL, the skeleton needs to be added as a child of
7456      that DIE.  */
7457   orig_parent = copy_declaration_context (unit, child);
7458
7459   skeleton = generate_skeleton (child);
7460   if (skeleton == NULL)
7461     remove_child_with_prev (child, prev);
7462   else
7463     {
7464       skeleton->comdat_type_p = true;
7465       skeleton->die_id.die_type_node = child->die_id.die_type_node;
7466
7467       /* If the original DIE was a specification, we need to put
7468          the skeleton under the parent DIE of the declaration.
7469          This leaves the original declaration in the tree, but
7470          it will be pruned later since there are no longer any
7471          references to it.  */
7472       if (orig_parent != NULL)
7473         {
7474           remove_child_with_prev (child, prev);
7475           add_child_die (orig_parent, skeleton);
7476         }
7477       else
7478         replace_child (child, skeleton, prev);
7479     }
7480
7481   return skeleton;
7482 }
7483
7484 /* Traverse the DIE and set up additional .debug_types sections for each
7485    type worthy of being placed in a COMDAT section.  */
7486
7487 static void
7488 break_out_comdat_types (dw_die_ref die)
7489 {
7490   dw_die_ref c;
7491   dw_die_ref first;
7492   dw_die_ref prev = NULL;
7493   dw_die_ref next = NULL;
7494   dw_die_ref unit = NULL;
7495
7496   first = c = die->die_child;
7497   if (c)
7498     next = c->die_sib;
7499   if (c) do {
7500     if (prev == NULL || prev->die_sib == c)
7501       prev = c;
7502     c = next;
7503     next = (c == first ? NULL : c->die_sib);
7504     if (should_move_die_to_comdat (c))
7505       {
7506         dw_die_ref replacement;
7507         comdat_type_node_ref type_node;
7508
7509         /* Break out nested types into their own type units.  */
7510         break_out_comdat_types (c);
7511
7512         /* Create a new type unit DIE as the root for the new tree, and
7513            add it to the list of comdat types.  */
7514         unit = new_die (DW_TAG_type_unit, NULL, NULL);
7515         add_AT_unsigned (unit, DW_AT_language,
7516                          get_AT_unsigned (comp_unit_die (), DW_AT_language));
7517         type_node = ggc_cleared_alloc<comdat_type_node> ();
7518         type_node->root_die = unit;
7519         type_node->next = comdat_type_list;
7520         comdat_type_list = type_node;
7521
7522         /* Generate the type signature.  */
7523         generate_type_signature (c, type_node);
7524
7525         /* Copy the declaration context, attributes, and children of the
7526            declaration into the new type unit DIE, then remove this DIE
7527            from the main CU (or replace it with a skeleton if necessary).  */
7528         replacement = remove_child_or_replace_with_skeleton (unit, c, prev);
7529         type_node->skeleton_die = replacement;
7530
7531         /* Add the DIE to the new compunit.  */
7532         add_child_die (unit, c);
7533
7534         if (replacement != NULL)
7535           c = replacement;
7536       }
7537     else if (c->die_tag == DW_TAG_namespace
7538              || c->die_tag == DW_TAG_class_type
7539              || c->die_tag == DW_TAG_structure_type
7540              || c->die_tag == DW_TAG_union_type)
7541       {
7542         /* Look for nested types that can be broken out.  */
7543         break_out_comdat_types (c);
7544       }
7545   } while (next != NULL);
7546 }
7547
7548 /* Like clone_tree, but copy DW_TAG_subprogram DIEs as declarations.
7549    Enter all the cloned children into the hash table decl_table.  */
7550
7551 static dw_die_ref
7552 clone_tree_partial (dw_die_ref die, decl_hash_type *decl_table)
7553 {
7554   dw_die_ref c;
7555   dw_die_ref clone;
7556   struct decl_table_entry *entry;
7557   decl_table_entry **slot;
7558
7559   if (die->die_tag == DW_TAG_subprogram)
7560     clone = clone_as_declaration (die);
7561   else
7562     clone = clone_die (die);
7563
7564   slot = decl_table->find_slot_with_hash (die,
7565                                           htab_hash_pointer (die), INSERT);
7566
7567   /* Assert that DIE isn't in the hash table yet.  If it would be there
7568      before, the ancestors would be necessarily there as well, therefore
7569      clone_tree_partial wouldn't be called.  */
7570   gcc_assert (*slot == HTAB_EMPTY_ENTRY);
7571
7572   entry = XCNEW (struct decl_table_entry);
7573   entry->orig = die;
7574   entry->copy = clone;
7575   *slot = entry;
7576
7577   if (die->die_tag != DW_TAG_subprogram)
7578     FOR_EACH_CHILD (die, c,
7579                     add_child_die (clone, clone_tree_partial (c, decl_table)));
7580
7581   return clone;
7582 }
7583
7584 /* Walk the DIE and its children, looking for references to incomplete
7585    or trivial types that are unmarked (i.e., that are not in the current
7586    type_unit).  */
7587
7588 static void
7589 copy_decls_walk (dw_die_ref unit, dw_die_ref die, decl_hash_type *decl_table)
7590 {
7591   dw_die_ref c;
7592   dw_attr_ref a;
7593   unsigned ix;
7594
7595   FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
7596     {
7597       if (AT_class (a) == dw_val_class_die_ref)
7598         {
7599           dw_die_ref targ = AT_ref (a);
7600           decl_table_entry **slot;
7601           struct decl_table_entry *entry;
7602
7603           if (targ->die_mark != 0 || targ->comdat_type_p)
7604             continue;
7605
7606           slot = decl_table->find_slot_with_hash (targ,
7607                                                   htab_hash_pointer (targ),
7608                                                   INSERT);
7609
7610           if (*slot != HTAB_EMPTY_ENTRY)
7611             {
7612               /* TARG has already been copied, so we just need to
7613                  modify the reference to point to the copy.  */
7614               entry = *slot;
7615               a->dw_attr_val.v.val_die_ref.die = entry->copy;
7616             }
7617           else
7618             {
7619               dw_die_ref parent = unit;
7620               dw_die_ref copy = clone_die (targ);
7621
7622               /* Record in DECL_TABLE that TARG has been copied.
7623                  Need to do this now, before the recursive call,
7624                  because DECL_TABLE may be expanded and SLOT
7625                  would no longer be a valid pointer.  */
7626               entry = XCNEW (struct decl_table_entry);
7627               entry->orig = targ;
7628               entry->copy = copy;
7629               *slot = entry;
7630
7631               /* If TARG is not a declaration DIE, we need to copy its
7632                  children.  */
7633               if (!is_declaration_die (targ))
7634                 {
7635                   FOR_EACH_CHILD (
7636                       targ, c,
7637                       add_child_die (copy,
7638                                      clone_tree_partial (c, decl_table)));
7639                 }
7640
7641               /* Make sure the cloned tree is marked as part of the
7642                  type unit.  */
7643               mark_dies (copy);
7644
7645               /* If TARG has surrounding context, copy its ancestor tree
7646                  into the new type unit.  */
7647               if (targ->die_parent != NULL
7648                   && !is_unit_die (targ->die_parent))
7649                 parent = copy_ancestor_tree (unit, targ->die_parent,
7650                                              decl_table);
7651
7652               add_child_die (parent, copy);
7653               a->dw_attr_val.v.val_die_ref.die = copy;
7654
7655               /* Make sure the newly-copied DIE is walked.  If it was
7656                  installed in a previously-added context, it won't
7657                  get visited otherwise.  */
7658               if (parent != unit)
7659                 {
7660                   /* Find the highest point of the newly-added tree,
7661                      mark each node along the way, and walk from there.  */
7662                   parent->die_mark = 1;
7663                   while (parent->die_parent
7664                          && parent->die_parent->die_mark == 0)
7665                     {
7666                       parent = parent->die_parent;
7667                       parent->die_mark = 1;
7668                     }
7669                   copy_decls_walk (unit, parent, decl_table);
7670                 }
7671             }
7672         }
7673     }
7674
7675   FOR_EACH_CHILD (die, c, copy_decls_walk (unit, c, decl_table));
7676 }
7677
7678 /* Copy declarations for "unworthy" types into the new comdat section.
7679    Incomplete types, modified types, and certain other types aren't broken
7680    out into comdat sections of their own, so they don't have a signature,
7681    and we need to copy the declaration into the same section so that we
7682    don't have an external reference.  */
7683
7684 static void
7685 copy_decls_for_unworthy_types (dw_die_ref unit)
7686 {
7687   mark_dies (unit);
7688   decl_hash_type decl_table (10);
7689   copy_decls_walk (unit, unit, &decl_table);
7690   unmark_dies (unit);
7691 }
7692
7693 /* Traverse the DIE and add a sibling attribute if it may have the
7694    effect of speeding up access to siblings.  To save some space,
7695    avoid generating sibling attributes for DIE's without children.  */
7696
7697 static void
7698 add_sibling_attributes (dw_die_ref die)
7699 {
7700   dw_die_ref c;
7701
7702   if (! die->die_child)
7703     return;
7704
7705   if (die->die_parent && die != die->die_parent->die_child)
7706     add_AT_die_ref (die, DW_AT_sibling, die->die_sib);
7707
7708   FOR_EACH_CHILD (die, c, add_sibling_attributes (c));
7709 }
7710
7711 /* Output all location lists for the DIE and its children.  */
7712
7713 static void
7714 output_location_lists (dw_die_ref die)
7715 {
7716   dw_die_ref c;
7717   dw_attr_ref a;
7718   unsigned ix;
7719
7720   FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
7721     if (AT_class (a) == dw_val_class_loc_list)
7722       output_loc_list (AT_loc_list (a));
7723
7724   FOR_EACH_CHILD (die, c, output_location_lists (c));
7725 }
7726
7727 /* We want to limit the number of external references, because they are
7728    larger than local references: a relocation takes multiple words, and
7729    even a sig8 reference is always eight bytes, whereas a local reference
7730    can be as small as one byte (though DW_FORM_ref is usually 4 in GCC).
7731    So if we encounter multiple external references to the same type DIE, we
7732    make a local typedef stub for it and redirect all references there.
7733
7734    This is the element of the hash table for keeping track of these
7735    references.  */
7736
7737 struct external_ref
7738 {
7739   dw_die_ref type;
7740   dw_die_ref stub;
7741   unsigned n_refs;
7742 };
7743
7744 /* Hashtable helpers.  */
7745
7746 struct external_ref_hasher : typed_free_remove <external_ref>
7747 {
7748   typedef external_ref value_type;
7749   typedef external_ref compare_type;
7750   static inline hashval_t hash (const value_type *);
7751   static inline bool equal (const value_type *, const compare_type *);
7752 };
7753
7754 inline hashval_t
7755 external_ref_hasher::hash (const value_type *r)
7756 {
7757   dw_die_ref die = r->type;
7758   hashval_t h = 0;
7759
7760   /* We can't use the address of the DIE for hashing, because
7761      that will make the order of the stub DIEs non-deterministic.  */
7762   if (! die->comdat_type_p)
7763     /* We have a symbol; use it to compute a hash.  */
7764     h = htab_hash_string (die->die_id.die_symbol);
7765   else
7766     {
7767       /* We have a type signature; use a subset of the bits as the hash.
7768          The 8-byte signature is at least as large as hashval_t.  */
7769       comdat_type_node_ref type_node = die->die_id.die_type_node;
7770       memcpy (&h, type_node->signature, sizeof (h));
7771     }
7772   return h;
7773 }
7774
7775 inline bool
7776 external_ref_hasher::equal (const value_type *r1, const compare_type *r2)
7777 {
7778   return r1->type == r2->type;
7779 }
7780
7781 typedef hash_table<external_ref_hasher> external_ref_hash_type;
7782
7783 /* Return a pointer to the external_ref for references to DIE.  */
7784
7785 static struct external_ref *
7786 lookup_external_ref (external_ref_hash_type *map, dw_die_ref die)
7787 {
7788   struct external_ref ref, *ref_p;
7789   external_ref **slot;
7790
7791   ref.type = die;
7792   slot = map->find_slot (&ref, INSERT);
7793   if (*slot != HTAB_EMPTY_ENTRY)
7794     return *slot;
7795
7796   ref_p = XCNEW (struct external_ref);
7797   ref_p->type = die;
7798   *slot = ref_p;
7799   return ref_p;
7800 }
7801
7802 /* Subroutine of optimize_external_refs, below.
7803
7804    If we see a type skeleton, record it as our stub.  If we see external
7805    references, remember how many we've seen.  */
7806
7807 static void
7808 optimize_external_refs_1 (dw_die_ref die, external_ref_hash_type *map)
7809 {
7810   dw_die_ref c;
7811   dw_attr_ref a;
7812   unsigned ix;
7813   struct external_ref *ref_p;
7814
7815   if (is_type_die (die)
7816       && (c = get_AT_ref (die, DW_AT_signature)))
7817     {
7818       /* This is a local skeleton; use it for local references.  */
7819       ref_p = lookup_external_ref (map, c);
7820       ref_p->stub = die;
7821     }
7822
7823   /* Scan the DIE references, and remember any that refer to DIEs from
7824      other CUs (i.e. those which are not marked).  */
7825   FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
7826     if (AT_class (a) == dw_val_class_die_ref
7827         && (c = AT_ref (a))->die_mark == 0
7828         && is_type_die (c))
7829       {
7830         ref_p = lookup_external_ref (map, c);
7831         ref_p->n_refs++;
7832       }
7833
7834   FOR_EACH_CHILD (die, c, optimize_external_refs_1 (c, map));
7835 }
7836
7837 /* htab_traverse callback function for optimize_external_refs, below.  SLOT
7838    points to an external_ref, DATA is the CU we're processing.  If we don't
7839    already have a local stub, and we have multiple refs, build a stub.  */
7840
7841 int
7842 dwarf2_build_local_stub (external_ref **slot, dw_die_ref data)
7843 {
7844   struct external_ref *ref_p = *slot;
7845
7846   if (ref_p->stub == NULL && ref_p->n_refs > 1 && !dwarf_strict)
7847     {
7848       /* We have multiple references to this type, so build a small stub.
7849          Both of these forms are a bit dodgy from the perspective of the
7850          DWARF standard, since technically they should have names.  */
7851       dw_die_ref cu = data;
7852       dw_die_ref type = ref_p->type;
7853       dw_die_ref stub = NULL;
7854
7855       if (type->comdat_type_p)
7856         {
7857           /* If we refer to this type via sig8, use AT_signature.  */
7858           stub = new_die (type->die_tag, cu, NULL_TREE);
7859           add_AT_die_ref (stub, DW_AT_signature, type);
7860         }
7861       else
7862         {
7863           /* Otherwise, use a typedef with no name.  */
7864           stub = new_die (DW_TAG_typedef, cu, NULL_TREE);
7865           add_AT_die_ref (stub, DW_AT_type, type);
7866         }
7867
7868       stub->die_mark++;
7869       ref_p->stub = stub;
7870     }
7871   return 1;
7872 }
7873
7874 /* DIE is a unit; look through all the DIE references to see if there are
7875    any external references to types, and if so, create local stubs for
7876    them which will be applied in build_abbrev_table.  This is useful because
7877    references to local DIEs are smaller.  */
7878
7879 static external_ref_hash_type *
7880 optimize_external_refs (dw_die_ref die)
7881 {
7882   external_ref_hash_type *map = new external_ref_hash_type (10);
7883   optimize_external_refs_1 (die, map);
7884   map->traverse <dw_die_ref, dwarf2_build_local_stub> (die);
7885   return map;
7886 }
7887
7888 /* The format of each DIE (and its attribute value pairs) is encoded in an
7889    abbreviation table.  This routine builds the abbreviation table and assigns
7890    a unique abbreviation id for each abbreviation entry.  The children of each
7891    die are visited recursively.  */
7892
7893 static void
7894 build_abbrev_table (dw_die_ref die, external_ref_hash_type *extern_map)
7895 {
7896   unsigned long abbrev_id;
7897   unsigned int n_alloc;
7898   dw_die_ref c;
7899   dw_attr_ref a;
7900   unsigned ix;
7901
7902   /* Scan the DIE references, and replace any that refer to
7903      DIEs from other CUs (i.e. those which are not marked) with
7904      the local stubs we built in optimize_external_refs.  */
7905   FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
7906     if (AT_class (a) == dw_val_class_die_ref
7907         && (c = AT_ref (a))->die_mark == 0)
7908       {
7909         struct external_ref *ref_p;
7910         gcc_assert (AT_ref (a)->comdat_type_p || AT_ref (a)->die_id.die_symbol);
7911
7912         ref_p = lookup_external_ref (extern_map, c);
7913         if (ref_p->stub && ref_p->stub != die)
7914           change_AT_die_ref (a, ref_p->stub);
7915         else
7916           /* We aren't changing this reference, so mark it external.  */
7917           set_AT_ref_external (a, 1);
7918       }
7919
7920   for (abbrev_id = 1; abbrev_id < abbrev_die_table_in_use; ++abbrev_id)
7921     {
7922       dw_die_ref abbrev = abbrev_die_table[abbrev_id];
7923       dw_attr_ref die_a, abbrev_a;
7924       unsigned ix;
7925       bool ok = true;
7926
7927       if (abbrev->die_tag != die->die_tag)
7928         continue;
7929       if ((abbrev->die_child != NULL) != (die->die_child != NULL))
7930         continue;
7931
7932       if (vec_safe_length (abbrev->die_attr) != vec_safe_length (die->die_attr))
7933         continue;
7934
7935       FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, die_a)
7936         {
7937           abbrev_a = &(*abbrev->die_attr)[ix];
7938           if ((abbrev_a->dw_attr != die_a->dw_attr)
7939               || (value_format (abbrev_a) != value_format (die_a)))
7940             {
7941               ok = false;
7942               break;
7943             }
7944         }
7945       if (ok)
7946         break;
7947     }
7948
7949   if (abbrev_id >= abbrev_die_table_in_use)
7950     {
7951       if (abbrev_die_table_in_use >= abbrev_die_table_allocated)
7952         {
7953           n_alloc = abbrev_die_table_allocated + ABBREV_DIE_TABLE_INCREMENT;
7954           abbrev_die_table = GGC_RESIZEVEC (dw_die_ref, abbrev_die_table,
7955                                             n_alloc);
7956
7957           memset (&abbrev_die_table[abbrev_die_table_allocated], 0,
7958                  (n_alloc - abbrev_die_table_allocated) * sizeof (dw_die_ref));
7959           abbrev_die_table_allocated = n_alloc;
7960         }
7961
7962       ++abbrev_die_table_in_use;
7963       abbrev_die_table[abbrev_id] = die;
7964     }
7965
7966   die->die_abbrev = abbrev_id;
7967   FOR_EACH_CHILD (die, c, build_abbrev_table (c, extern_map));
7968 }
7969 \f
7970 /* Return the power-of-two number of bytes necessary to represent VALUE.  */
7971
7972 static int
7973 constant_size (unsigned HOST_WIDE_INT value)
7974 {
7975   int log;
7976
7977   if (value == 0)
7978     log = 0;
7979   else
7980     log = floor_log2 (value);
7981
7982   log = log / 8;
7983   log = 1 << (floor_log2 (log) + 1);
7984
7985   return log;
7986 }
7987
7988 /* Return the size of a DIE as it is represented in the
7989    .debug_info section.  */
7990
7991 static unsigned long
7992 size_of_die (dw_die_ref die)
7993 {
7994   unsigned long size = 0;
7995   dw_attr_ref a;
7996   unsigned ix;
7997   enum dwarf_form form;
7998
7999   size += size_of_uleb128 (die->die_abbrev);
8000   FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
8001     {
8002       switch (AT_class (a))
8003         {
8004         case dw_val_class_addr:
8005           if (dwarf_split_debug_info && AT_index (a) != NOT_INDEXED)
8006             {
8007               gcc_assert (AT_index (a) != NO_INDEX_ASSIGNED);
8008               size += size_of_uleb128 (AT_index (a));
8009             }
8010           else
8011             size += DWARF2_ADDR_SIZE;
8012           break;
8013         case dw_val_class_offset:
8014           size += DWARF_OFFSET_SIZE;
8015           break;
8016         case dw_val_class_loc:
8017           {
8018             unsigned long lsize = size_of_locs (AT_loc (a));
8019
8020             /* Block length.  */
8021             if (dwarf_version >= 4)
8022               size += size_of_uleb128 (lsize);
8023             else
8024               size += constant_size (lsize);
8025             size += lsize;
8026           }
8027           break;
8028         case dw_val_class_loc_list:
8029           if (dwarf_split_debug_info && AT_index (a) != NOT_INDEXED)
8030             {
8031               gcc_assert (AT_index (a) != NO_INDEX_ASSIGNED);
8032               size += size_of_uleb128 (AT_index (a));
8033             }
8034           else
8035             size += DWARF_OFFSET_SIZE;
8036           break;
8037         case dw_val_class_range_list:
8038           size += DWARF_OFFSET_SIZE;
8039           break;
8040         case dw_val_class_const:
8041           size += size_of_sleb128 (AT_int (a));
8042           break;
8043         case dw_val_class_unsigned_const:
8044           {
8045             int csize = constant_size (AT_unsigned (a));
8046             if (dwarf_version == 3
8047                 && a->dw_attr == DW_AT_data_member_location
8048                 && csize >= 4)
8049               size += size_of_uleb128 (AT_unsigned (a));
8050             else
8051               size += csize;
8052           }
8053           break;
8054         case dw_val_class_const_double:
8055           size += HOST_BITS_PER_DOUBLE_INT / HOST_BITS_PER_CHAR;
8056           if (HOST_BITS_PER_WIDE_INT >= 64)
8057             size++; /* block */
8058           break;
8059         case dw_val_class_wide_int:
8060           size += (get_full_len (*a->dw_attr_val.v.val_wide)
8061                    * HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR);
8062           if (get_full_len (*a->dw_attr_val.v.val_wide) * HOST_BITS_PER_WIDE_INT
8063               > 64)
8064             size++; /* block */
8065           break;
8066         case dw_val_class_vec:
8067           size += constant_size (a->dw_attr_val.v.val_vec.length
8068                                  * a->dw_attr_val.v.val_vec.elt_size)
8069                   + a->dw_attr_val.v.val_vec.length
8070                     * a->dw_attr_val.v.val_vec.elt_size; /* block */
8071           break;
8072         case dw_val_class_flag:
8073           if (dwarf_version >= 4)
8074             /* Currently all add_AT_flag calls pass in 1 as last argument,
8075                so DW_FORM_flag_present can be used.  If that ever changes,
8076                we'll need to use DW_FORM_flag and have some optimization
8077                in build_abbrev_table that will change those to
8078                DW_FORM_flag_present if it is set to 1 in all DIEs using
8079                the same abbrev entry.  */
8080             gcc_assert (a->dw_attr_val.v.val_flag == 1);
8081           else
8082             size += 1;
8083           break;
8084         case dw_val_class_die_ref:
8085           if (AT_ref_external (a))
8086             {
8087               /* In DWARF4, we use DW_FORM_ref_sig8; for earlier versions
8088                  we use DW_FORM_ref_addr.  In DWARF2, DW_FORM_ref_addr
8089                  is sized by target address length, whereas in DWARF3
8090                  it's always sized as an offset.  */
8091               if (use_debug_types)
8092                 size += DWARF_TYPE_SIGNATURE_SIZE;
8093               else if (dwarf_version == 2)
8094                 size += DWARF2_ADDR_SIZE;
8095               else
8096                 size += DWARF_OFFSET_SIZE;
8097             }
8098           else
8099             size += DWARF_OFFSET_SIZE;
8100           break;
8101         case dw_val_class_fde_ref:
8102           size += DWARF_OFFSET_SIZE;
8103           break;
8104         case dw_val_class_lbl_id:
8105           if (dwarf_split_debug_info && AT_index (a) != NOT_INDEXED)
8106             {
8107               gcc_assert (AT_index (a) != NO_INDEX_ASSIGNED);
8108               size += size_of_uleb128 (AT_index (a));
8109             }
8110           else
8111             size += DWARF2_ADDR_SIZE;
8112           break;
8113         case dw_val_class_lineptr:
8114         case dw_val_class_macptr:
8115           size += DWARF_OFFSET_SIZE;
8116           break;
8117         case dw_val_class_str:
8118           form = AT_string_form (a);
8119           if (form == DW_FORM_strp)
8120             size += DWARF_OFFSET_SIZE;
8121          else if (form == DW_FORM_GNU_str_index)
8122             size += size_of_uleb128 (AT_index (a));
8123           else
8124             size += strlen (a->dw_attr_val.v.val_str->str) + 1;
8125           break;
8126         case dw_val_class_file:
8127           size += constant_size (maybe_emit_file (a->dw_attr_val.v.val_file));
8128           break;
8129         case dw_val_class_data8:
8130           size += 8;
8131           break;
8132         case dw_val_class_vms_delta:
8133           size += DWARF_OFFSET_SIZE;
8134           break;
8135         case dw_val_class_high_pc:
8136           size += DWARF2_ADDR_SIZE;
8137           break;
8138         default:
8139           gcc_unreachable ();
8140         }
8141     }
8142
8143   return size;
8144 }
8145
8146 /* Size the debugging information associated with a given DIE.  Visits the
8147    DIE's children recursively.  Updates the global variable next_die_offset, on
8148    each time through.  Uses the current value of next_die_offset to update the
8149    die_offset field in each DIE.  */
8150
8151 static void
8152 calc_die_sizes (dw_die_ref die)
8153 {
8154   dw_die_ref c;
8155
8156   gcc_assert (die->die_offset == 0
8157               || (unsigned long int) die->die_offset == next_die_offset);
8158   die->die_offset = next_die_offset;
8159   next_die_offset += size_of_die (die);
8160
8161   FOR_EACH_CHILD (die, c, calc_die_sizes (c));
8162
8163   if (die->die_child != NULL)
8164     /* Count the null byte used to terminate sibling lists.  */
8165     next_die_offset += 1;
8166 }
8167
8168 /* Size just the base type children at the start of the CU.
8169    This is needed because build_abbrev needs to size locs
8170    and sizing of type based stack ops needs to know die_offset
8171    values for the base types.  */
8172
8173 static void
8174 calc_base_type_die_sizes (void)
8175 {
8176   unsigned long die_offset = DWARF_COMPILE_UNIT_HEADER_SIZE;
8177   unsigned int i;
8178   dw_die_ref base_type;
8179 #if ENABLE_ASSERT_CHECKING
8180   dw_die_ref prev = comp_unit_die ()->die_child;
8181 #endif
8182
8183   die_offset += size_of_die (comp_unit_die ());
8184   for (i = 0; base_types.iterate (i, &base_type); i++)
8185     {
8186 #if ENABLE_ASSERT_CHECKING
8187       gcc_assert (base_type->die_offset == 0
8188                   && prev->die_sib == base_type
8189                   && base_type->die_child == NULL
8190                   && base_type->die_abbrev);
8191       prev = base_type;
8192 #endif
8193       base_type->die_offset = die_offset;
8194       die_offset += size_of_die (base_type);
8195     }
8196 }
8197
8198 /* Set the marks for a die and its children.  We do this so
8199    that we know whether or not a reference needs to use FORM_ref_addr; only
8200    DIEs in the same CU will be marked.  We used to clear out the offset
8201    and use that as the flag, but ran into ordering problems.  */
8202
8203 static void
8204 mark_dies (dw_die_ref die)
8205 {
8206   dw_die_ref c;
8207
8208   gcc_assert (!die->die_mark);
8209
8210   die->die_mark = 1;
8211   FOR_EACH_CHILD (die, c, mark_dies (c));
8212 }
8213
8214 /* Clear the marks for a die and its children.  */
8215
8216 static void
8217 unmark_dies (dw_die_ref die)
8218 {
8219   dw_die_ref c;
8220
8221   if (! use_debug_types)
8222     gcc_assert (die->die_mark);
8223
8224   die->die_mark = 0;
8225   FOR_EACH_CHILD (die, c, unmark_dies (c));
8226 }
8227
8228 /* Clear the marks for a die, its children and referred dies.  */
8229
8230 static void
8231 unmark_all_dies (dw_die_ref die)
8232 {
8233   dw_die_ref c;
8234   dw_attr_ref a;
8235   unsigned ix;
8236
8237   if (!die->die_mark)
8238     return;
8239   die->die_mark = 0;
8240
8241   FOR_EACH_CHILD (die, c, unmark_all_dies (c));
8242
8243   FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
8244     if (AT_class (a) == dw_val_class_die_ref)
8245       unmark_all_dies (AT_ref (a));
8246 }
8247
8248 /* Calculate if the entry should appear in the final output file.  It may be
8249    from a pruned a type.  */
8250
8251 static bool
8252 include_pubname_in_output (vec<pubname_entry, va_gc> *table, pubname_entry *p)
8253 {
8254   /* By limiting gnu pubnames to definitions only, gold can generate a
8255      gdb index without entries for declarations, which don't include
8256      enough information to be useful.  */
8257   if (debug_generate_pub_sections == 2 && is_declaration_die (p->die))
8258     return false;
8259
8260   if (table == pubname_table)
8261     {
8262       /* Enumerator names are part of the pubname table, but the
8263          parent DW_TAG_enumeration_type die may have been pruned.
8264          Don't output them if that is the case.  */
8265       if (p->die->die_tag == DW_TAG_enumerator &&
8266           (p->die->die_parent == NULL
8267            || !p->die->die_parent->die_perennial_p))
8268         return false;
8269
8270       /* Everything else in the pubname table is included.  */
8271       return true;
8272     }
8273
8274   /* The pubtypes table shouldn't include types that have been
8275      pruned.  */
8276   return (p->die->die_offset != 0
8277           || !flag_eliminate_unused_debug_types);
8278 }
8279
8280 /* Return the size of the .debug_pubnames or .debug_pubtypes table
8281    generated for the compilation unit.  */
8282
8283 static unsigned long
8284 size_of_pubnames (vec<pubname_entry, va_gc> *names)
8285 {
8286   unsigned long size;
8287   unsigned i;
8288   pubname_ref p;
8289   int space_for_flags = (debug_generate_pub_sections == 2) ? 1 : 0;
8290
8291   size = DWARF_PUBNAMES_HEADER_SIZE;
8292   FOR_EACH_VEC_ELT (*names, i, p)
8293     if (include_pubname_in_output (names, p))
8294       size += strlen (p->name) + DWARF_OFFSET_SIZE + 1 + space_for_flags;
8295
8296   size += DWARF_OFFSET_SIZE;
8297   return size;
8298 }
8299
8300 /* Return the size of the information in the .debug_aranges section.  */
8301
8302 static unsigned long
8303 size_of_aranges (void)
8304 {
8305   unsigned long size;
8306
8307   size = DWARF_ARANGES_HEADER_SIZE;
8308
8309   /* Count the address/length pair for this compilation unit.  */
8310   if (text_section_used)
8311     size += 2 * DWARF2_ADDR_SIZE;
8312   if (cold_text_section_used)
8313     size += 2 * DWARF2_ADDR_SIZE;
8314   if (have_multiple_function_sections)
8315     {
8316       unsigned fde_idx;
8317       dw_fde_ref fde;
8318
8319       FOR_EACH_VEC_ELT (*fde_vec, fde_idx, fde)
8320         {
8321           if (DECL_IGNORED_P (fde->decl))
8322             continue;
8323           if (!fde->in_std_section)
8324             size += 2 * DWARF2_ADDR_SIZE;
8325           if (fde->dw_fde_second_begin && !fde->second_in_std_section)
8326             size += 2 * DWARF2_ADDR_SIZE;
8327         }
8328     }
8329
8330   /* Count the two zero words used to terminated the address range table.  */
8331   size += 2 * DWARF2_ADDR_SIZE;
8332   return size;
8333 }
8334 \f
8335 /* Select the encoding of an attribute value.  */
8336
8337 static enum dwarf_form
8338 value_format (dw_attr_ref a)
8339 {
8340   switch (AT_class (a))
8341     {
8342     case dw_val_class_addr:
8343       /* Only very few attributes allow DW_FORM_addr.  */
8344       switch (a->dw_attr)
8345         {
8346         case DW_AT_low_pc:
8347         case DW_AT_high_pc:
8348         case DW_AT_entry_pc:
8349         case DW_AT_trampoline:
8350           return (AT_index (a) == NOT_INDEXED
8351                   ? DW_FORM_addr : DW_FORM_GNU_addr_index);
8352         default:
8353           break;
8354         }
8355       switch (DWARF2_ADDR_SIZE)
8356         {
8357         case 1:
8358           return DW_FORM_data1;
8359         case 2:
8360           return DW_FORM_data2;
8361         case 4:
8362           return DW_FORM_data4;
8363         case 8:
8364           return DW_FORM_data8;
8365         default:
8366           gcc_unreachable ();
8367         }
8368     case dw_val_class_range_list:
8369     case dw_val_class_loc_list:
8370       if (dwarf_version >= 4)
8371         return DW_FORM_sec_offset;
8372       /* FALLTHRU */
8373     case dw_val_class_vms_delta:
8374     case dw_val_class_offset:
8375       switch (DWARF_OFFSET_SIZE)
8376         {
8377         case 4:
8378           return DW_FORM_data4;
8379         case 8:
8380           return DW_FORM_data8;
8381         default:
8382           gcc_unreachable ();
8383         }
8384     case dw_val_class_loc:
8385       if (dwarf_version >= 4)
8386         return DW_FORM_exprloc;
8387       switch (constant_size (size_of_locs (AT_loc (a))))
8388         {
8389         case 1:
8390           return DW_FORM_block1;
8391         case 2:
8392           return DW_FORM_block2;
8393         case 4:
8394           return DW_FORM_block4;
8395         default:
8396           gcc_unreachable ();
8397         }
8398     case dw_val_class_const:
8399       return DW_FORM_sdata;
8400     case dw_val_class_unsigned_const:
8401       switch (constant_size (AT_unsigned (a)))
8402         {
8403         case 1:
8404           return DW_FORM_data1;
8405         case 2:
8406           return DW_FORM_data2;
8407         case 4:
8408           /* In DWARF3 DW_AT_data_member_location with
8409              DW_FORM_data4 or DW_FORM_data8 is a loclistptr, not
8410              constant, so we need to use DW_FORM_udata if we need
8411              a large constant.  */
8412           if (dwarf_version == 3 && a->dw_attr == DW_AT_data_member_location)
8413             return DW_FORM_udata;
8414           return DW_FORM_data4;
8415         case 8:
8416           if (dwarf_version == 3 && a->dw_attr == DW_AT_data_member_location)
8417             return DW_FORM_udata;
8418           return DW_FORM_data8;
8419         default:
8420           gcc_unreachable ();
8421         }
8422     case dw_val_class_const_double:
8423       switch (HOST_BITS_PER_WIDE_INT)
8424         {
8425         case 8:
8426           return DW_FORM_data2;
8427         case 16:
8428           return DW_FORM_data4;
8429         case 32:
8430           return DW_FORM_data8;
8431         case 64:
8432         default:
8433           return DW_FORM_block1;
8434         }
8435     case dw_val_class_wide_int:
8436       switch (get_full_len (*a->dw_attr_val.v.val_wide) * HOST_BITS_PER_WIDE_INT)
8437         {
8438         case 8:
8439           return DW_FORM_data1;
8440         case 16:
8441           return DW_FORM_data2;
8442         case 32:
8443           return DW_FORM_data4;
8444         case 64:
8445           return DW_FORM_data8;
8446         default:
8447           return DW_FORM_block1;
8448         }
8449     case dw_val_class_vec:
8450       switch (constant_size (a->dw_attr_val.v.val_vec.length
8451                              * a->dw_attr_val.v.val_vec.elt_size))
8452         {
8453         case 1:
8454           return DW_FORM_block1;
8455         case 2:
8456           return DW_FORM_block2;
8457         case 4:
8458           return DW_FORM_block4;
8459         default:
8460           gcc_unreachable ();
8461         }
8462     case dw_val_class_flag:
8463       if (dwarf_version >= 4)
8464         {
8465           /* Currently all add_AT_flag calls pass in 1 as last argument,
8466              so DW_FORM_flag_present can be used.  If that ever changes,
8467              we'll need to use DW_FORM_flag and have some optimization
8468              in build_abbrev_table that will change those to
8469              DW_FORM_flag_present if it is set to 1 in all DIEs using
8470              the same abbrev entry.  */
8471           gcc_assert (a->dw_attr_val.v.val_flag == 1);
8472           return DW_FORM_flag_present;
8473         }
8474       return DW_FORM_flag;
8475     case dw_val_class_die_ref:
8476       if (AT_ref_external (a))
8477         return use_debug_types ? DW_FORM_ref_sig8 : DW_FORM_ref_addr;
8478       else
8479         return DW_FORM_ref;
8480     case dw_val_class_fde_ref:
8481       return DW_FORM_data;
8482     case dw_val_class_lbl_id:
8483       return (AT_index (a) == NOT_INDEXED
8484               ? DW_FORM_addr : DW_FORM_GNU_addr_index);
8485     case dw_val_class_lineptr:
8486     case dw_val_class_macptr:
8487       return dwarf_version >= 4 ? DW_FORM_sec_offset : DW_FORM_data;
8488     case dw_val_class_str:
8489       return AT_string_form (a);
8490     case dw_val_class_file:
8491       switch (constant_size (maybe_emit_file (a->dw_attr_val.v.val_file)))
8492         {
8493         case 1:
8494           return DW_FORM_data1;
8495         case 2:
8496           return DW_FORM_data2;
8497         case 4:
8498           return DW_FORM_data4;
8499         default:
8500           gcc_unreachable ();
8501         }
8502
8503     case dw_val_class_data8:
8504       return DW_FORM_data8;
8505
8506     case dw_val_class_high_pc:
8507       switch (DWARF2_ADDR_SIZE)
8508         {
8509         case 1:
8510           return DW_FORM_data1;
8511         case 2:
8512           return DW_FORM_data2;
8513         case 4:
8514           return DW_FORM_data4;
8515         case 8:
8516           return DW_FORM_data8;
8517         default:
8518           gcc_unreachable ();
8519         }
8520
8521     default:
8522       gcc_unreachable ();
8523     }
8524 }
8525
8526 /* Output the encoding of an attribute value.  */
8527
8528 static void
8529 output_value_format (dw_attr_ref a)
8530 {
8531   enum dwarf_form form = value_format (a);
8532
8533   dw2_asm_output_data_uleb128 (form, "(%s)", dwarf_form_name (form));
8534 }
8535
8536 /* Given a die and id, produce the appropriate abbreviations.  */
8537
8538 static void
8539 output_die_abbrevs (unsigned long abbrev_id, dw_die_ref abbrev)
8540 {
8541   unsigned ix;
8542   dw_attr_ref a_attr;
8543
8544   dw2_asm_output_data_uleb128 (abbrev_id, "(abbrev code)");
8545   dw2_asm_output_data_uleb128 (abbrev->die_tag, "(TAG: %s)",
8546                                dwarf_tag_name (abbrev->die_tag));
8547
8548   if (abbrev->die_child != NULL)
8549     dw2_asm_output_data (1, DW_children_yes, "DW_children_yes");
8550   else
8551     dw2_asm_output_data (1, DW_children_no, "DW_children_no");
8552
8553   for (ix = 0; vec_safe_iterate (abbrev->die_attr, ix, &a_attr); ix++)
8554     {
8555       dw2_asm_output_data_uleb128 (a_attr->dw_attr, "(%s)",
8556                                    dwarf_attr_name (a_attr->dw_attr));
8557       output_value_format (a_attr);
8558     }
8559
8560   dw2_asm_output_data (1, 0, NULL);
8561   dw2_asm_output_data (1, 0, NULL);
8562 }
8563
8564
8565 /* Output the .debug_abbrev section which defines the DIE abbreviation
8566    table.  */
8567
8568 static void
8569 output_abbrev_section (void)
8570 {
8571   unsigned long abbrev_id;
8572
8573   for (abbrev_id = 1; abbrev_id < abbrev_die_table_in_use; ++abbrev_id)
8574     output_die_abbrevs (abbrev_id, abbrev_die_table[abbrev_id]);
8575
8576   /* Terminate the table.  */
8577   dw2_asm_output_data (1, 0, NULL);
8578 }
8579
8580 /* Output a symbol we can use to refer to this DIE from another CU.  */
8581
8582 static inline void
8583 output_die_symbol (dw_die_ref die)
8584 {
8585   const char *sym = die->die_id.die_symbol;
8586
8587   gcc_assert (!die->comdat_type_p);
8588
8589   if (sym == 0)
8590     return;
8591
8592   if (strncmp (sym, DIE_LABEL_PREFIX, sizeof (DIE_LABEL_PREFIX) - 1) == 0)
8593     /* We make these global, not weak; if the target doesn't support
8594        .linkonce, it doesn't support combining the sections, so debugging
8595        will break.  */
8596     targetm.asm_out.globalize_label (asm_out_file, sym);
8597
8598   ASM_OUTPUT_LABEL (asm_out_file, sym);
8599 }
8600
8601 /* Return a new location list, given the begin and end range, and the
8602    expression.  */
8603
8604 static inline dw_loc_list_ref
8605 new_loc_list (dw_loc_descr_ref expr, const char *begin, const char *end,
8606               const char *section)
8607 {
8608   dw_loc_list_ref retlist = ggc_cleared_alloc<dw_loc_list_node> ();
8609
8610   retlist->begin = begin;
8611   retlist->begin_entry = NULL;
8612   retlist->end = end;
8613   retlist->expr = expr;
8614   retlist->section = section;
8615
8616   return retlist;
8617 }
8618
8619 /* Generate a new internal symbol for this location list node, if it
8620    hasn't got one yet.  */
8621
8622 static inline void
8623 gen_llsym (dw_loc_list_ref list)
8624 {
8625   gcc_assert (!list->ll_symbol);
8626   list->ll_symbol = gen_internal_sym ("LLST");
8627 }
8628
8629 /* Output the location list given to us.  */
8630
8631 static void
8632 output_loc_list (dw_loc_list_ref list_head)
8633 {
8634   dw_loc_list_ref curr = list_head;
8635
8636   if (list_head->emitted)
8637     return;
8638   list_head->emitted = true;
8639
8640   ASM_OUTPUT_LABEL (asm_out_file, list_head->ll_symbol);
8641
8642   /* Walk the location list, and output each range + expression.  */
8643   for (curr = list_head; curr != NULL; curr = curr->dw_loc_next)
8644     {
8645       unsigned long size;
8646       /* Don't output an entry that starts and ends at the same address.  */
8647       if (strcmp (curr->begin, curr->end) == 0 && !curr->force)
8648         continue;
8649       size = size_of_locs (curr->expr);
8650       /* If the expression is too large, drop it on the floor.  We could
8651          perhaps put it into DW_TAG_dwarf_procedure and refer to that
8652          in the expression, but >= 64KB expressions for a single value
8653          in a single range are unlikely very useful.  */
8654       if (size > 0xffff)
8655         continue;
8656       if (dwarf_split_debug_info)
8657         {
8658           dw2_asm_output_data (1, DW_LLE_GNU_start_length_entry,
8659                                "Location list start/length entry (%s)",
8660                                list_head->ll_symbol);
8661           dw2_asm_output_data_uleb128 (curr->begin_entry->index,
8662                                        "Location list range start index (%s)",
8663                                        curr->begin);
8664           /* The length field is 4 bytes.  If we ever need to support
8665             an 8-byte length, we can add a new DW_LLE code or fall back
8666             to DW_LLE_GNU_start_end_entry.  */
8667           dw2_asm_output_delta (4, curr->end, curr->begin,
8668                                 "Location list range length (%s)",
8669                                 list_head->ll_symbol);
8670         }
8671       else if (!have_multiple_function_sections)
8672         {
8673           dw2_asm_output_delta (DWARF2_ADDR_SIZE, curr->begin, curr->section,
8674                                 "Location list begin address (%s)",
8675                                 list_head->ll_symbol);
8676           dw2_asm_output_delta (DWARF2_ADDR_SIZE, curr->end, curr->section,
8677                                 "Location list end address (%s)",
8678                                 list_head->ll_symbol);
8679         }
8680       else
8681         {
8682           dw2_asm_output_addr (DWARF2_ADDR_SIZE, curr->begin,
8683                                "Location list begin address (%s)",
8684                                list_head->ll_symbol);
8685           dw2_asm_output_addr (DWARF2_ADDR_SIZE, curr->end,
8686                                "Location list end address (%s)",
8687                                list_head->ll_symbol);
8688         }
8689
8690       /* Output the block length for this list of location operations.  */
8691       gcc_assert (size <= 0xffff);
8692       dw2_asm_output_data (2, size, "%s", "Location expression size");
8693
8694       output_loc_sequence (curr->expr, -1);
8695     }
8696
8697   if (dwarf_split_debug_info)
8698     dw2_asm_output_data (1, DW_LLE_GNU_end_of_list_entry,
8699                          "Location list terminator (%s)",
8700                          list_head->ll_symbol);
8701   else
8702     {
8703       dw2_asm_output_data (DWARF2_ADDR_SIZE, 0,
8704                            "Location list terminator begin (%s)",
8705                            list_head->ll_symbol);
8706       dw2_asm_output_data (DWARF2_ADDR_SIZE, 0,
8707                            "Location list terminator end (%s)",
8708                            list_head->ll_symbol);
8709     }
8710 }
8711
8712 /* Output a range_list offset into the debug_range section.  Emit a
8713    relocated reference if val_entry is NULL, otherwise, emit an
8714    indirect reference.  */
8715
8716 static void
8717 output_range_list_offset (dw_attr_ref a)
8718 {
8719   const char *name = dwarf_attr_name (a->dw_attr);
8720
8721   if (a->dw_attr_val.val_entry == RELOCATED_OFFSET)
8722     {
8723       char *p = strchr (ranges_section_label, '\0');
8724       sprintf (p, "+" HOST_WIDE_INT_PRINT_HEX, a->dw_attr_val.v.val_offset);
8725       dw2_asm_output_offset (DWARF_OFFSET_SIZE, ranges_section_label,
8726                              debug_ranges_section, "%s", name);
8727       *p = '\0';
8728     }
8729   else
8730     dw2_asm_output_data (DWARF_OFFSET_SIZE, a->dw_attr_val.v.val_offset,
8731                          "%s (offset from %s)", name, ranges_section_label);
8732 }
8733
8734 /* Output the offset into the debug_loc section.  */
8735
8736 static void
8737 output_loc_list_offset (dw_attr_ref a)
8738 {
8739   char *sym = AT_loc_list (a)->ll_symbol;
8740
8741   gcc_assert (sym);
8742   if (dwarf_split_debug_info)
8743     dw2_asm_output_delta (DWARF_OFFSET_SIZE, sym, loc_section_label,
8744                           "%s", dwarf_attr_name (a->dw_attr));
8745   else
8746     dw2_asm_output_offset (DWARF_OFFSET_SIZE, sym, debug_loc_section,
8747                            "%s", dwarf_attr_name (a->dw_attr));
8748 }
8749
8750 /* Output an attribute's index or value appropriately.  */
8751
8752 static void
8753 output_attr_index_or_value (dw_attr_ref a)
8754 {
8755   const char *name = dwarf_attr_name (a->dw_attr);
8756
8757   if (dwarf_split_debug_info && AT_index (a) != NOT_INDEXED)
8758     {
8759       dw2_asm_output_data_uleb128 (AT_index (a), "%s", name);
8760       return;
8761     }
8762   switch (AT_class (a))
8763     {
8764       case dw_val_class_addr:
8765         dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE, AT_addr (a), "%s", name);
8766         break;
8767       case dw_val_class_high_pc:
8768       case dw_val_class_lbl_id:
8769         dw2_asm_output_addr (DWARF2_ADDR_SIZE, AT_lbl (a), "%s", name);
8770         break;
8771       case dw_val_class_loc_list:
8772         output_loc_list_offset (a);
8773         break;
8774       default:
8775         gcc_unreachable ();
8776     }
8777 }
8778
8779 /* Output a type signature.  */
8780
8781 static inline void
8782 output_signature (const char *sig, const char *name)
8783 {
8784   int i;
8785
8786   for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++)
8787     dw2_asm_output_data (1, sig[i], i == 0 ? "%s" : NULL, name);
8788 }
8789
8790 /* Output the DIE and its attributes.  Called recursively to generate
8791    the definitions of each child DIE.  */
8792
8793 static void
8794 output_die (dw_die_ref die)
8795 {
8796   dw_attr_ref a;
8797   dw_die_ref c;
8798   unsigned long size;
8799   unsigned ix;
8800
8801   /* If someone in another CU might refer to us, set up a symbol for
8802      them to point to.  */
8803   if (! die->comdat_type_p && die->die_id.die_symbol)
8804     output_die_symbol (die);
8805
8806   dw2_asm_output_data_uleb128 (die->die_abbrev, "(DIE (%#lx) %s)",
8807                                (unsigned long)die->die_offset,
8808                                dwarf_tag_name (die->die_tag));
8809
8810   FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
8811     {
8812       const char *name = dwarf_attr_name (a->dw_attr);
8813
8814       switch (AT_class (a))
8815         {
8816         case dw_val_class_addr:
8817           output_attr_index_or_value (a);
8818           break;
8819
8820         case dw_val_class_offset:
8821           dw2_asm_output_data (DWARF_OFFSET_SIZE, a->dw_attr_val.v.val_offset,
8822                                "%s", name);
8823           break;
8824
8825         case dw_val_class_range_list:
8826           output_range_list_offset (a);
8827           break;
8828
8829         case dw_val_class_loc:
8830           size = size_of_locs (AT_loc (a));
8831
8832           /* Output the block length for this list of location operations.  */
8833           if (dwarf_version >= 4)
8834             dw2_asm_output_data_uleb128 (size, "%s", name);
8835           else
8836             dw2_asm_output_data (constant_size (size), size, "%s", name);
8837
8838           output_loc_sequence (AT_loc (a), -1);
8839           break;
8840
8841         case dw_val_class_const:
8842           /* ??? It would be slightly more efficient to use a scheme like is
8843              used for unsigned constants below, but gdb 4.x does not sign
8844              extend.  Gdb 5.x does sign extend.  */
8845           dw2_asm_output_data_sleb128 (AT_int (a), "%s", name);
8846           break;
8847
8848         case dw_val_class_unsigned_const:
8849           {
8850             int csize = constant_size (AT_unsigned (a));
8851             if (dwarf_version == 3
8852                 && a->dw_attr == DW_AT_data_member_location
8853                 && csize >= 4)
8854               dw2_asm_output_data_uleb128 (AT_unsigned (a), "%s", name);
8855             else
8856               dw2_asm_output_data (csize, AT_unsigned (a), "%s", name);
8857           }
8858           break;
8859
8860         case dw_val_class_const_double:
8861           {
8862             unsigned HOST_WIDE_INT first, second;
8863
8864             if (HOST_BITS_PER_WIDE_INT >= 64)
8865               dw2_asm_output_data (1,
8866                                    HOST_BITS_PER_DOUBLE_INT
8867                                    / HOST_BITS_PER_CHAR,
8868                                    NULL);
8869
8870             if (WORDS_BIG_ENDIAN)
8871               {
8872                 first = a->dw_attr_val.v.val_double.high;
8873                 second = a->dw_attr_val.v.val_double.low;
8874               }
8875             else
8876               {
8877                 first = a->dw_attr_val.v.val_double.low;
8878                 second = a->dw_attr_val.v.val_double.high;
8879               }
8880
8881             dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR,
8882                                  first, "%s", name);
8883             dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR,
8884                                  second, NULL);
8885           }
8886           break;
8887
8888         case dw_val_class_wide_int:
8889           {
8890             int i;
8891             int len = get_full_len (*a->dw_attr_val.v.val_wide);
8892             int l = HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR;
8893             if (len * HOST_BITS_PER_WIDE_INT > 64)
8894               dw2_asm_output_data (1, get_full_len (*a->dw_attr_val.v.val_wide) * l,
8895                                    NULL);
8896
8897             if (WORDS_BIG_ENDIAN)
8898               for (i = len - 1; i >= 0; --i)
8899                 {
8900                   dw2_asm_output_data (l, a->dw_attr_val.v.val_wide->elt (i),
8901                                        "%s", name);
8902                   name = NULL;
8903                 }
8904             else
8905               for (i = 0; i < len; ++i)
8906                 {
8907                   dw2_asm_output_data (l, a->dw_attr_val.v.val_wide->elt (i),
8908                                        "%s", name);
8909                   name = NULL;
8910                 }
8911           }
8912           break;
8913
8914         case dw_val_class_vec:
8915           {
8916             unsigned int elt_size = a->dw_attr_val.v.val_vec.elt_size;
8917             unsigned int len = a->dw_attr_val.v.val_vec.length;
8918             unsigned int i;
8919             unsigned char *p;
8920
8921             dw2_asm_output_data (constant_size (len * elt_size),
8922                                  len * elt_size, "%s", name);
8923             if (elt_size > sizeof (HOST_WIDE_INT))
8924               {
8925                 elt_size /= 2;
8926                 len *= 2;
8927               }
8928             for (i = 0, p = a->dw_attr_val.v.val_vec.array;
8929                  i < len;
8930                  i++, p += elt_size)
8931               dw2_asm_output_data (elt_size, extract_int (p, elt_size),
8932                                    "fp or vector constant word %u", i);
8933             break;
8934           }
8935
8936         case dw_val_class_flag:
8937           if (dwarf_version >= 4)
8938             {
8939               /* Currently all add_AT_flag calls pass in 1 as last argument,
8940                  so DW_FORM_flag_present can be used.  If that ever changes,
8941                  we'll need to use DW_FORM_flag and have some optimization
8942                  in build_abbrev_table that will change those to
8943                  DW_FORM_flag_present if it is set to 1 in all DIEs using
8944                  the same abbrev entry.  */
8945               gcc_assert (AT_flag (a) == 1);
8946               if (flag_debug_asm)
8947                 fprintf (asm_out_file, "\t\t\t%s %s\n",
8948                          ASM_COMMENT_START, name);
8949               break;
8950             }
8951           dw2_asm_output_data (1, AT_flag (a), "%s", name);
8952           break;
8953
8954         case dw_val_class_loc_list:
8955           output_attr_index_or_value (a);
8956           break;
8957
8958         case dw_val_class_die_ref:
8959           if (AT_ref_external (a))
8960             {
8961               if (AT_ref (a)->comdat_type_p)
8962                 {
8963                   comdat_type_node_ref type_node =
8964                     AT_ref (a)->die_id.die_type_node;
8965
8966                   gcc_assert (type_node);
8967                   output_signature (type_node->signature, name);
8968                 }
8969               else
8970                 {
8971                   const char *sym = AT_ref (a)->die_id.die_symbol;
8972                   int size;
8973
8974                   gcc_assert (sym);
8975                   /* In DWARF2, DW_FORM_ref_addr is sized by target address
8976                      length, whereas in DWARF3 it's always sized as an
8977                      offset.  */
8978                   if (dwarf_version == 2)
8979                     size = DWARF2_ADDR_SIZE;
8980                   else
8981                     size = DWARF_OFFSET_SIZE;
8982                   dw2_asm_output_offset (size, sym, debug_info_section, "%s",
8983                                          name);
8984                 }
8985             }
8986           else
8987             {
8988               gcc_assert (AT_ref (a)->die_offset);
8989               dw2_asm_output_data (DWARF_OFFSET_SIZE, AT_ref (a)->die_offset,
8990                                    "%s", name);
8991             }
8992           break;
8993
8994         case dw_val_class_fde_ref:
8995           {
8996             char l1[20];
8997
8998             ASM_GENERATE_INTERNAL_LABEL (l1, FDE_LABEL,
8999                                          a->dw_attr_val.v.val_fde_index * 2);
9000             dw2_asm_output_offset (DWARF_OFFSET_SIZE, l1, debug_frame_section,
9001                                    "%s", name);
9002           }
9003           break;
9004
9005         case dw_val_class_vms_delta:
9006 #ifdef ASM_OUTPUT_DWARF_VMS_DELTA
9007           dw2_asm_output_vms_delta (DWARF_OFFSET_SIZE,
9008                                     AT_vms_delta2 (a), AT_vms_delta1 (a),
9009                                     "%s", name);
9010 #else
9011           dw2_asm_output_delta (DWARF_OFFSET_SIZE,
9012                                 AT_vms_delta2 (a), AT_vms_delta1 (a),
9013                                 "%s", name);
9014 #endif
9015           break;
9016
9017         case dw_val_class_lbl_id:
9018           output_attr_index_or_value (a);
9019           break;
9020
9021         case dw_val_class_lineptr:
9022           dw2_asm_output_offset (DWARF_OFFSET_SIZE, AT_lbl (a),
9023                                  debug_line_section, "%s", name);
9024           break;
9025
9026         case dw_val_class_macptr:
9027           dw2_asm_output_offset (DWARF_OFFSET_SIZE, AT_lbl (a),
9028                                  debug_macinfo_section, "%s", name);
9029           break;
9030
9031         case dw_val_class_str:
9032           if (a->dw_attr_val.v.val_str->form == DW_FORM_strp)
9033             dw2_asm_output_offset (DWARF_OFFSET_SIZE,
9034                                    a->dw_attr_val.v.val_str->label,
9035                                    debug_str_section,
9036                                    "%s: \"%s\"", name, AT_string (a));
9037           else if (a->dw_attr_val.v.val_str->form == DW_FORM_GNU_str_index)
9038             dw2_asm_output_data_uleb128 (AT_index (a),
9039                                          "%s: \"%s\"", name, AT_string (a));
9040           else
9041             dw2_asm_output_nstring (AT_string (a), -1, "%s", name);
9042           break;
9043
9044         case dw_val_class_file:
9045           {
9046             int f = maybe_emit_file (a->dw_attr_val.v.val_file);
9047
9048             dw2_asm_output_data (constant_size (f), f, "%s (%s)", name,
9049                                  a->dw_attr_val.v.val_file->filename);
9050             break;
9051           }
9052
9053         case dw_val_class_data8:
9054           {
9055             int i;
9056
9057             for (i = 0; i < 8; i++)
9058               dw2_asm_output_data (1, a->dw_attr_val.v.val_data8[i],
9059                                    i == 0 ? "%s" : NULL, name);
9060             break;
9061           }
9062
9063         case dw_val_class_high_pc:
9064           dw2_asm_output_delta (DWARF2_ADDR_SIZE, AT_lbl (a),
9065                                 get_AT_low_pc (die), "DW_AT_high_pc");
9066           break;
9067
9068         default:
9069           gcc_unreachable ();
9070         }
9071     }
9072
9073   FOR_EACH_CHILD (die, c, output_die (c));
9074
9075   /* Add null byte to terminate sibling list.  */
9076   if (die->die_child != NULL)
9077     dw2_asm_output_data (1, 0, "end of children of DIE %#lx",
9078                          (unsigned long) die->die_offset);
9079 }
9080
9081 /* Output the compilation unit that appears at the beginning of the
9082    .debug_info section, and precedes the DIE descriptions.  */
9083
9084 static void
9085 output_compilation_unit_header (void)
9086 {
9087   /* We don't support actual DWARFv5 units yet, we just use some
9088      DWARFv5 draft DIE tags in DWARFv4 format.  */
9089   int ver = dwarf_version < 5 ? dwarf_version : 4;
9090
9091   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
9092     dw2_asm_output_data (4, 0xffffffff,
9093       "Initial length escape value indicating 64-bit DWARF extension");
9094   dw2_asm_output_data (DWARF_OFFSET_SIZE,
9095                        next_die_offset - DWARF_INITIAL_LENGTH_SIZE,
9096                        "Length of Compilation Unit Info");
9097   dw2_asm_output_data (2, ver, "DWARF version number");
9098   dw2_asm_output_offset (DWARF_OFFSET_SIZE, abbrev_section_label,
9099                          debug_abbrev_section,
9100                          "Offset Into Abbrev. Section");
9101   dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Pointer Size (in bytes)");
9102 }
9103
9104 /* Output the compilation unit DIE and its children.  */
9105
9106 static void
9107 output_comp_unit (dw_die_ref die, int output_if_empty)
9108 {
9109   const char *secname, *oldsym;
9110   char *tmp;
9111
9112   /* Unless we are outputting main CU, we may throw away empty ones.  */
9113   if (!output_if_empty && die->die_child == NULL)
9114     return;
9115
9116   /* Even if there are no children of this DIE, we must output the information
9117      about the compilation unit.  Otherwise, on an empty translation unit, we
9118      will generate a present, but empty, .debug_info section.  IRIX 6.5 `nm'
9119      will then complain when examining the file.  First mark all the DIEs in
9120      this CU so we know which get local refs.  */
9121   mark_dies (die);
9122
9123   external_ref_hash_type *extern_map = optimize_external_refs (die);
9124
9125   build_abbrev_table (die, extern_map);
9126
9127   delete extern_map;
9128
9129   /* Initialize the beginning DIE offset - and calculate sizes/offsets.  */
9130   next_die_offset = DWARF_COMPILE_UNIT_HEADER_SIZE;
9131   calc_die_sizes (die);
9132
9133   oldsym = die->die_id.die_symbol;
9134   if (oldsym)
9135     {
9136       tmp = XALLOCAVEC (char, strlen (oldsym) + 24);
9137
9138       sprintf (tmp, ".gnu.linkonce.wi.%s", oldsym);
9139       secname = tmp;
9140       die->die_id.die_symbol = NULL;
9141       switch_to_section (get_section (secname, SECTION_DEBUG, NULL));
9142     }
9143   else
9144     {
9145       switch_to_section (debug_info_section);
9146       ASM_OUTPUT_LABEL (asm_out_file, debug_info_section_label);
9147       info_section_emitted = true;
9148     }
9149
9150   /* Output debugging information.  */
9151   output_compilation_unit_header ();
9152   output_die (die);
9153
9154   /* Leave the marks on the main CU, so we can check them in
9155      output_pubnames.  */
9156   if (oldsym)
9157     {
9158       unmark_dies (die);
9159       die->die_id.die_symbol = oldsym;
9160     }
9161 }
9162
9163 /* Whether to generate the DWARF accelerator tables in .debug_pubnames
9164    and .debug_pubtypes.  This is configured per-target, but can be
9165    overridden by the -gpubnames or -gno-pubnames options.  */
9166
9167 static inline bool
9168 want_pubnames (void)
9169 {
9170   if (debug_info_level <= DINFO_LEVEL_TERSE)
9171     return false;
9172   if (debug_generate_pub_sections != -1)
9173     return debug_generate_pub_sections;
9174   return targetm.want_debug_pub_sections;
9175 }
9176
9177 /* Add the DW_AT_GNU_pubnames and DW_AT_GNU_pubtypes attributes.  */
9178
9179 static void
9180 add_AT_pubnames (dw_die_ref die)
9181 {
9182   if (want_pubnames ())
9183     add_AT_flag (die, DW_AT_GNU_pubnames, 1);
9184 }
9185
9186 /* Add a string attribute value to a skeleton DIE.  */
9187
9188 static inline void
9189 add_skeleton_AT_string (dw_die_ref die, enum dwarf_attribute attr_kind,
9190                         const char *str)
9191 {
9192   dw_attr_node attr;
9193   struct indirect_string_node *node;
9194
9195   if (! skeleton_debug_str_hash)
9196     skeleton_debug_str_hash
9197       = hash_table<indirect_string_hasher>::create_ggc (10);
9198
9199   node = find_AT_string_in_table (str, skeleton_debug_str_hash);
9200   find_string_form (node);
9201   if (node->form == DW_FORM_GNU_str_index)
9202     node->form = DW_FORM_strp;
9203
9204   attr.dw_attr = attr_kind;
9205   attr.dw_attr_val.val_class = dw_val_class_str;
9206   attr.dw_attr_val.val_entry = NULL;
9207   attr.dw_attr_val.v.val_str = node;
9208   add_dwarf_attr (die, &attr);
9209 }
9210
9211 /* Helper function to generate top-level dies for skeleton debug_info and
9212    debug_types.  */
9213
9214 static void
9215 add_top_level_skeleton_die_attrs (dw_die_ref die)
9216 {
9217   const char *dwo_file_name = concat (aux_base_name, ".dwo", NULL);
9218   const char *comp_dir = comp_dir_string ();
9219
9220   add_skeleton_AT_string (die, DW_AT_GNU_dwo_name, dwo_file_name);
9221   if (comp_dir != NULL)
9222     add_skeleton_AT_string (die, DW_AT_comp_dir, comp_dir);
9223   add_AT_pubnames (die);
9224   add_AT_lineptr (die, DW_AT_GNU_addr_base, debug_addr_section_label);
9225 }
9226
9227 /* Output skeleton debug sections that point to the dwo file.  */
9228
9229 static void
9230 output_skeleton_debug_sections (dw_die_ref comp_unit)
9231 {
9232   /* We don't support actual DWARFv5 units yet, we just use some
9233      DWARFv5 draft DIE tags in DWARFv4 format.  */
9234   int ver = dwarf_version < 5 ? dwarf_version : 4;
9235
9236   /* These attributes will be found in the full debug_info section.  */
9237   remove_AT (comp_unit, DW_AT_producer);
9238   remove_AT (comp_unit, DW_AT_language);
9239
9240   switch_to_section (debug_skeleton_info_section);
9241   ASM_OUTPUT_LABEL (asm_out_file, debug_skeleton_info_section_label);
9242
9243   /* Produce the skeleton compilation-unit header.  This one differs enough from
9244      a normal CU header that it's better not to call output_compilation_unit
9245      header.  */
9246   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
9247     dw2_asm_output_data (4, 0xffffffff,
9248       "Initial length escape value indicating 64-bit DWARF extension");
9249
9250   dw2_asm_output_data (DWARF_OFFSET_SIZE,
9251                        DWARF_COMPILE_UNIT_HEADER_SIZE
9252                        - DWARF_INITIAL_LENGTH_SIZE
9253                        + size_of_die (comp_unit),
9254                       "Length of Compilation Unit Info");
9255   dw2_asm_output_data (2, ver, "DWARF version number");
9256   dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_skeleton_abbrev_section_label,
9257                          debug_abbrev_section,
9258                          "Offset Into Abbrev. Section");
9259   dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Pointer Size (in bytes)");
9260
9261   comp_unit->die_abbrev = SKELETON_COMP_DIE_ABBREV;
9262   output_die (comp_unit);
9263
9264   /* Build the skeleton debug_abbrev section.  */
9265   switch_to_section (debug_skeleton_abbrev_section);
9266   ASM_OUTPUT_LABEL (asm_out_file, debug_skeleton_abbrev_section_label);
9267
9268   output_die_abbrevs (SKELETON_COMP_DIE_ABBREV, comp_unit);
9269
9270   dw2_asm_output_data (1, 0, "end of skeleton .debug_abbrev");
9271 }
9272
9273 /* Output a comdat type unit DIE and its children.  */
9274
9275 static void
9276 output_comdat_type_unit (comdat_type_node *node)
9277 {
9278   const char *secname;
9279   char *tmp;
9280   int i;
9281 #if defined (OBJECT_FORMAT_ELF)
9282   tree comdat_key;
9283 #endif
9284
9285   /* First mark all the DIEs in this CU so we know which get local refs.  */
9286   mark_dies (node->root_die);
9287
9288   external_ref_hash_type *extern_map = optimize_external_refs (node->root_die);
9289
9290   build_abbrev_table (node->root_die, extern_map);
9291
9292   delete extern_map;
9293   extern_map = NULL;
9294
9295   /* Initialize the beginning DIE offset - and calculate sizes/offsets.  */
9296   next_die_offset = DWARF_COMDAT_TYPE_UNIT_HEADER_SIZE;
9297   calc_die_sizes (node->root_die);
9298
9299 #if defined (OBJECT_FORMAT_ELF)
9300   if (!dwarf_split_debug_info)
9301     secname = ".debug_types";
9302   else
9303     secname = ".debug_types.dwo";
9304
9305   tmp = XALLOCAVEC (char, 4 + DWARF_TYPE_SIGNATURE_SIZE * 2);
9306   sprintf (tmp, "wt.");
9307   for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++)
9308     sprintf (tmp + 3 + i * 2, "%02x", node->signature[i] & 0xff);
9309   comdat_key = get_identifier (tmp);
9310   targetm.asm_out.named_section (secname,
9311                                  SECTION_DEBUG | SECTION_LINKONCE,
9312                                  comdat_key);
9313 #else
9314   tmp = XALLOCAVEC (char, 18 + DWARF_TYPE_SIGNATURE_SIZE * 2);
9315   sprintf (tmp, ".gnu.linkonce.wt.");
9316   for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++)
9317     sprintf (tmp + 17 + i * 2, "%02x", node->signature[i] & 0xff);
9318   secname = tmp;
9319   switch_to_section (get_section (secname, SECTION_DEBUG, NULL));
9320 #endif
9321
9322   /* Output debugging information.  */
9323   output_compilation_unit_header ();
9324   output_signature (node->signature, "Type Signature");
9325   dw2_asm_output_data (DWARF_OFFSET_SIZE, node->type_die->die_offset,
9326                        "Offset to Type DIE");
9327   output_die (node->root_die);
9328
9329   unmark_dies (node->root_die);
9330 }
9331
9332 /* Return the DWARF2/3 pubname associated with a decl.  */
9333
9334 static const char *
9335 dwarf2_name (tree decl, int scope)
9336 {
9337   if (DECL_NAMELESS (decl))
9338     return NULL;
9339   return lang_hooks.dwarf_name (decl, scope ? 1 : 0);
9340 }
9341
9342 /* Add a new entry to .debug_pubnames if appropriate.  */
9343
9344 static void
9345 add_pubname_string (const char *str, dw_die_ref die)
9346 {
9347   pubname_entry e;
9348
9349   e.die = die;
9350   e.name = xstrdup (str);
9351   vec_safe_push (pubname_table, e);
9352 }
9353
9354 static void
9355 add_pubname (tree decl, dw_die_ref die)
9356 {
9357   if (!want_pubnames ())
9358     return;
9359
9360   /* Don't add items to the table when we expect that the consumer will have
9361      just read the enclosing die.  For example, if the consumer is looking at a
9362      class_member, it will either be inside the class already, or will have just
9363      looked up the class to find the member.  Either way, searching the class is
9364      faster than searching the index.  */
9365   if ((TREE_PUBLIC (decl) && !class_scope_p (die->die_parent))
9366       || is_cu_die (die->die_parent) || is_namespace_die (die->die_parent))
9367     {
9368       const char *name = dwarf2_name (decl, 1);
9369
9370       if (name)
9371         add_pubname_string (name, die);
9372     }
9373 }
9374
9375 /* Add an enumerator to the pubnames section.  */
9376
9377 static void
9378 add_enumerator_pubname (const char *scope_name, dw_die_ref die)
9379 {
9380   pubname_entry e;
9381
9382   gcc_assert (scope_name);
9383   e.name = concat (scope_name, get_AT_string (die, DW_AT_name), NULL);
9384   e.die = die;
9385   vec_safe_push (pubname_table, e);
9386 }
9387
9388 /* Add a new entry to .debug_pubtypes if appropriate.  */
9389
9390 static void
9391 add_pubtype (tree decl, dw_die_ref die)
9392 {
9393   pubname_entry e;
9394
9395   if (!want_pubnames ())
9396     return;
9397
9398   if ((TREE_PUBLIC (decl)
9399        || is_cu_die (die->die_parent) || is_namespace_die (die->die_parent))
9400       && (die->die_tag == DW_TAG_typedef || COMPLETE_TYPE_P (decl)))
9401     {
9402       tree scope = NULL;
9403       const char *scope_name = "";
9404       const char *sep = is_cxx () ? "::" : ".";
9405       const char *name;
9406
9407       scope = TYPE_P (decl) ? TYPE_CONTEXT (decl) : NULL;
9408       if (scope && TREE_CODE (scope) == NAMESPACE_DECL)
9409         {
9410           scope_name = lang_hooks.dwarf_name (scope, 1);
9411           if (scope_name != NULL && scope_name[0] != '\0')
9412             scope_name = concat (scope_name, sep, NULL);
9413           else
9414             scope_name = "";
9415         }
9416
9417       if (TYPE_P (decl))
9418         name = type_tag (decl);
9419       else
9420         name = lang_hooks.dwarf_name (decl, 1);
9421
9422       /* If we don't have a name for the type, there's no point in adding
9423          it to the table.  */
9424       if (name != NULL && name[0] != '\0')
9425         {
9426           e.die = die;
9427           e.name = concat (scope_name, name, NULL);
9428           vec_safe_push (pubtype_table, e);
9429         }
9430
9431       /* Although it might be more consistent to add the pubinfo for the
9432          enumerators as their dies are created, they should only be added if the
9433          enum type meets the criteria above.  So rather than re-check the parent
9434          enum type whenever an enumerator die is created, just output them all
9435          here.  This isn't protected by the name conditional because anonymous
9436          enums don't have names.  */
9437       if (die->die_tag == DW_TAG_enumeration_type)
9438         {
9439           dw_die_ref c;
9440
9441           FOR_EACH_CHILD (die, c, add_enumerator_pubname (scope_name, c));
9442         }
9443     }
9444 }
9445
9446 /* Output a single entry in the pubnames table.  */
9447
9448 static void
9449 output_pubname (dw_offset die_offset, pubname_entry *entry)
9450 {
9451   dw_die_ref die = entry->die;
9452   int is_static = get_AT_flag (die, DW_AT_external) ? 0 : 1;
9453
9454   dw2_asm_output_data (DWARF_OFFSET_SIZE, die_offset, "DIE offset");
9455
9456   if (debug_generate_pub_sections == 2)
9457     {
9458       /* This logic follows gdb's method for determining the value of the flag
9459          byte.  */
9460       uint32_t flags = GDB_INDEX_SYMBOL_KIND_NONE;
9461       switch (die->die_tag)
9462       {
9463         case DW_TAG_typedef:
9464         case DW_TAG_base_type:
9465         case DW_TAG_subrange_type:
9466           GDB_INDEX_SYMBOL_KIND_SET_VALUE(flags, GDB_INDEX_SYMBOL_KIND_TYPE);
9467           GDB_INDEX_SYMBOL_STATIC_SET_VALUE(flags, 1);
9468           break;
9469         case DW_TAG_enumerator:
9470           GDB_INDEX_SYMBOL_KIND_SET_VALUE(flags,
9471                                           GDB_INDEX_SYMBOL_KIND_VARIABLE);
9472           if (!is_cxx () && !is_java ())
9473             GDB_INDEX_SYMBOL_STATIC_SET_VALUE(flags, 1);
9474           break;
9475         case DW_TAG_subprogram:
9476           GDB_INDEX_SYMBOL_KIND_SET_VALUE(flags,
9477                                           GDB_INDEX_SYMBOL_KIND_FUNCTION);
9478           if (!is_ada ())
9479             GDB_INDEX_SYMBOL_STATIC_SET_VALUE(flags, is_static);
9480           break;
9481         case DW_TAG_constant:
9482           GDB_INDEX_SYMBOL_KIND_SET_VALUE(flags,
9483                                           GDB_INDEX_SYMBOL_KIND_VARIABLE);
9484           GDB_INDEX_SYMBOL_STATIC_SET_VALUE(flags, is_static);
9485           break;
9486         case DW_TAG_variable:
9487           GDB_INDEX_SYMBOL_KIND_SET_VALUE(flags,
9488                                           GDB_INDEX_SYMBOL_KIND_VARIABLE);
9489           GDB_INDEX_SYMBOL_STATIC_SET_VALUE(flags, is_static);
9490           break;
9491         case DW_TAG_namespace:
9492         case DW_TAG_imported_declaration:
9493           GDB_INDEX_SYMBOL_KIND_SET_VALUE(flags, GDB_INDEX_SYMBOL_KIND_TYPE);
9494           break;
9495         case DW_TAG_class_type:
9496         case DW_TAG_interface_type:
9497         case DW_TAG_structure_type:
9498         case DW_TAG_union_type:
9499         case DW_TAG_enumeration_type:
9500           GDB_INDEX_SYMBOL_KIND_SET_VALUE(flags, GDB_INDEX_SYMBOL_KIND_TYPE);
9501           if (!is_cxx () && !is_java ())
9502             GDB_INDEX_SYMBOL_STATIC_SET_VALUE(flags, 1);
9503           break;
9504         default:
9505           /* An unusual tag.  Leave the flag-byte empty.  */
9506           break;
9507       }
9508       dw2_asm_output_data (1, flags >> GDB_INDEX_CU_BITSIZE,
9509                            "GDB-index flags");
9510     }
9511
9512   dw2_asm_output_nstring (entry->name, -1, "external name");
9513 }
9514
9515
9516 /* Output the public names table used to speed up access to externally
9517    visible names; or the public types table used to find type definitions.  */
9518
9519 static void
9520 output_pubnames (vec<pubname_entry, va_gc> *names)
9521 {
9522   unsigned i;
9523   unsigned long pubnames_length = size_of_pubnames (names);
9524   pubname_ref pub;
9525
9526   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
9527     dw2_asm_output_data (4, 0xffffffff,
9528       "Initial length escape value indicating 64-bit DWARF extension");
9529   dw2_asm_output_data (DWARF_OFFSET_SIZE, pubnames_length, "Pub Info Length");
9530
9531   /* Version number for pubnames/pubtypes is independent of dwarf version.  */
9532   dw2_asm_output_data (2, 2, "DWARF Version");
9533
9534   if (dwarf_split_debug_info)
9535     dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_skeleton_info_section_label,
9536                            debug_skeleton_info_section,
9537                            "Offset of Compilation Unit Info");
9538   else
9539     dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_info_section_label,
9540                            debug_info_section,
9541                            "Offset of Compilation Unit Info");
9542   dw2_asm_output_data (DWARF_OFFSET_SIZE, next_die_offset,
9543                        "Compilation Unit Length");
9544
9545   FOR_EACH_VEC_ELT (*names, i, pub)
9546     {
9547       if (include_pubname_in_output (names, pub))
9548         {
9549           dw_offset die_offset = pub->die->die_offset;
9550
9551           /* We shouldn't see pubnames for DIEs outside of the main CU.  */
9552           if (names == pubname_table && pub->die->die_tag != DW_TAG_enumerator)
9553             gcc_assert (pub->die->die_mark);
9554
9555           /* If we're putting types in their own .debug_types sections,
9556              the .debug_pubtypes table will still point to the compile
9557              unit (not the type unit), so we want to use the offset of
9558              the skeleton DIE (if there is one).  */
9559           if (pub->die->comdat_type_p && names == pubtype_table)
9560             {
9561               comdat_type_node_ref type_node = pub->die->die_id.die_type_node;
9562
9563               if (type_node != NULL)
9564                 die_offset = (type_node->skeleton_die != NULL
9565                               ? type_node->skeleton_die->die_offset
9566                               : comp_unit_die ()->die_offset);
9567             }
9568
9569           output_pubname (die_offset, pub);
9570         }
9571     }
9572
9573   dw2_asm_output_data (DWARF_OFFSET_SIZE, 0, NULL);
9574 }
9575
9576 /* Output public names and types tables if necessary.  */
9577
9578 static void
9579 output_pubtables (void)
9580 {
9581   if (!want_pubnames () || !info_section_emitted)
9582     return;
9583
9584   switch_to_section (debug_pubnames_section);
9585   output_pubnames (pubname_table);
9586   /* ??? Only defined by DWARF3, but emitted by Darwin for DWARF2.
9587      It shouldn't hurt to emit it always, since pure DWARF2 consumers
9588      simply won't look for the section.  */
9589   switch_to_section (debug_pubtypes_section);
9590   output_pubnames (pubtype_table);
9591 }
9592
9593
9594 /* Output the information that goes into the .debug_aranges table.
9595    Namely, define the beginning and ending address range of the
9596    text section generated for this compilation unit.  */
9597
9598 static void
9599 output_aranges (unsigned long aranges_length)
9600 {
9601   unsigned i;
9602
9603   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
9604     dw2_asm_output_data (4, 0xffffffff,
9605       "Initial length escape value indicating 64-bit DWARF extension");
9606   dw2_asm_output_data (DWARF_OFFSET_SIZE, aranges_length,
9607                        "Length of Address Ranges Info");
9608   /* Version number for aranges is still 2, even up to DWARF5.  */
9609   dw2_asm_output_data (2, 2, "DWARF Version");
9610   if (dwarf_split_debug_info)
9611     dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_skeleton_info_section_label,
9612                            debug_skeleton_info_section,
9613                            "Offset of Compilation Unit Info");
9614   else
9615     dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_info_section_label,
9616                            debug_info_section,
9617                            "Offset of Compilation Unit Info");
9618   dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Size of Address");
9619   dw2_asm_output_data (1, 0, "Size of Segment Descriptor");
9620
9621   /* We need to align to twice the pointer size here.  */
9622   if (DWARF_ARANGES_PAD_SIZE)
9623     {
9624       /* Pad using a 2 byte words so that padding is correct for any
9625          pointer size.  */
9626       dw2_asm_output_data (2, 0, "Pad to %d byte boundary",
9627                            2 * DWARF2_ADDR_SIZE);
9628       for (i = 2; i < (unsigned) DWARF_ARANGES_PAD_SIZE; i += 2)
9629         dw2_asm_output_data (2, 0, NULL);
9630     }
9631
9632   /* It is necessary not to output these entries if the sections were
9633      not used; if the sections were not used, the length will be 0 and
9634      the address may end up as 0 if the section is discarded by ld
9635      --gc-sections, leaving an invalid (0, 0) entry that can be
9636      confused with the terminator.  */
9637   if (text_section_used)
9638     {
9639       dw2_asm_output_addr (DWARF2_ADDR_SIZE, text_section_label, "Address");
9640       dw2_asm_output_delta (DWARF2_ADDR_SIZE, text_end_label,
9641                             text_section_label, "Length");
9642     }
9643   if (cold_text_section_used)
9644     {
9645       dw2_asm_output_addr (DWARF2_ADDR_SIZE, cold_text_section_label,
9646                            "Address");
9647       dw2_asm_output_delta (DWARF2_ADDR_SIZE, cold_end_label,
9648                             cold_text_section_label, "Length");
9649     }
9650
9651   if (have_multiple_function_sections)
9652     {
9653       unsigned fde_idx;
9654       dw_fde_ref fde;
9655
9656       FOR_EACH_VEC_ELT (*fde_vec, fde_idx, fde)
9657         {
9658           if (DECL_IGNORED_P (fde->decl))
9659             continue;
9660           if (!fde->in_std_section)
9661             {
9662               dw2_asm_output_addr (DWARF2_ADDR_SIZE, fde->dw_fde_begin,
9663                                    "Address");
9664               dw2_asm_output_delta (DWARF2_ADDR_SIZE, fde->dw_fde_end,
9665                                     fde->dw_fde_begin, "Length");
9666             }
9667           if (fde->dw_fde_second_begin && !fde->second_in_std_section)
9668             {
9669               dw2_asm_output_addr (DWARF2_ADDR_SIZE, fde->dw_fde_second_begin,
9670                                    "Address");
9671               dw2_asm_output_delta (DWARF2_ADDR_SIZE, fde->dw_fde_second_end,
9672                                     fde->dw_fde_second_begin, "Length");
9673             }
9674         }
9675     }
9676
9677   /* Output the terminator words.  */
9678   dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
9679   dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
9680 }
9681
9682 /* Add a new entry to .debug_ranges.  Return the offset at which it
9683    was placed.  */
9684
9685 static unsigned int
9686 add_ranges_num (int num)
9687 {
9688   unsigned int in_use = ranges_table_in_use;
9689
9690   if (in_use == ranges_table_allocated)
9691     {
9692       ranges_table_allocated += RANGES_TABLE_INCREMENT;
9693       ranges_table = GGC_RESIZEVEC (struct dw_ranges_struct, ranges_table,
9694                                     ranges_table_allocated);
9695       memset (ranges_table + ranges_table_in_use, 0,
9696               RANGES_TABLE_INCREMENT * sizeof (struct dw_ranges_struct));
9697     }
9698
9699   ranges_table[in_use].num = num;
9700   ranges_table_in_use = in_use + 1;
9701
9702   return in_use * 2 * DWARF2_ADDR_SIZE;
9703 }
9704
9705 /* Add a new entry to .debug_ranges corresponding to a block, or a
9706    range terminator if BLOCK is NULL.  */
9707
9708 static unsigned int
9709 add_ranges (const_tree block)
9710 {
9711   return add_ranges_num (block ? BLOCK_NUMBER (block) : 0);
9712 }
9713
9714 /* Add a new entry to .debug_ranges corresponding to a pair of labels.
9715    When using dwarf_split_debug_info, address attributes in dies destined
9716    for the final executable should be direct references--setting the
9717    parameter force_direct ensures this behavior.  */
9718
9719 static void
9720 add_ranges_by_labels (dw_die_ref die, const char *begin, const char *end,
9721                       bool *added, bool force_direct)
9722 {
9723   unsigned int in_use = ranges_by_label_in_use;
9724   unsigned int offset;
9725
9726   if (in_use == ranges_by_label_allocated)
9727     {
9728       ranges_by_label_allocated += RANGES_TABLE_INCREMENT;
9729       ranges_by_label = GGC_RESIZEVEC (struct dw_ranges_by_label_struct,
9730                                        ranges_by_label,
9731                                        ranges_by_label_allocated);
9732       memset (ranges_by_label + ranges_by_label_in_use, 0,
9733               RANGES_TABLE_INCREMENT
9734               * sizeof (struct dw_ranges_by_label_struct));
9735     }
9736
9737   ranges_by_label[in_use].begin = begin;
9738   ranges_by_label[in_use].end = end;
9739   ranges_by_label_in_use = in_use + 1;
9740
9741   offset = add_ranges_num (-(int)in_use - 1);
9742   if (!*added)
9743     {
9744       add_AT_range_list (die, DW_AT_ranges, offset, force_direct);
9745       *added = true;
9746     }
9747 }
9748
9749 static void
9750 output_ranges (void)
9751 {
9752   unsigned i;
9753   static const char *const start_fmt = "Offset %#x";
9754   const char *fmt = start_fmt;
9755
9756   for (i = 0; i < ranges_table_in_use; i++)
9757     {
9758       int block_num = ranges_table[i].num;
9759
9760       if (block_num > 0)
9761         {
9762           char blabel[MAX_ARTIFICIAL_LABEL_BYTES];
9763           char elabel[MAX_ARTIFICIAL_LABEL_BYTES];
9764
9765           ASM_GENERATE_INTERNAL_LABEL (blabel, BLOCK_BEGIN_LABEL, block_num);
9766           ASM_GENERATE_INTERNAL_LABEL (elabel, BLOCK_END_LABEL, block_num);
9767
9768           /* If all code is in the text section, then the compilation
9769              unit base address defaults to DW_AT_low_pc, which is the
9770              base of the text section.  */
9771           if (!have_multiple_function_sections)
9772             {
9773               dw2_asm_output_delta (DWARF2_ADDR_SIZE, blabel,
9774                                     text_section_label,
9775                                     fmt, i * 2 * DWARF2_ADDR_SIZE);
9776               dw2_asm_output_delta (DWARF2_ADDR_SIZE, elabel,
9777                                     text_section_label, NULL);
9778             }
9779
9780           /* Otherwise, the compilation unit base address is zero,
9781              which allows us to use absolute addresses, and not worry
9782              about whether the target supports cross-section
9783              arithmetic.  */
9784           else
9785             {
9786               dw2_asm_output_addr (DWARF2_ADDR_SIZE, blabel,
9787                                    fmt, i * 2 * DWARF2_ADDR_SIZE);
9788               dw2_asm_output_addr (DWARF2_ADDR_SIZE, elabel, NULL);
9789             }
9790
9791           fmt = NULL;
9792         }
9793
9794       /* Negative block_num stands for an index into ranges_by_label.  */
9795       else if (block_num < 0)
9796         {
9797           int lab_idx = - block_num - 1;
9798
9799           if (!have_multiple_function_sections)
9800             {
9801               gcc_unreachable ();
9802 #if 0
9803               /* If we ever use add_ranges_by_labels () for a single
9804                  function section, all we have to do is to take out
9805                  the #if 0 above.  */
9806               dw2_asm_output_delta (DWARF2_ADDR_SIZE,
9807                                     ranges_by_label[lab_idx].begin,
9808                                     text_section_label,
9809                                     fmt, i * 2 * DWARF2_ADDR_SIZE);
9810               dw2_asm_output_delta (DWARF2_ADDR_SIZE,
9811                                     ranges_by_label[lab_idx].end,
9812                                     text_section_label, NULL);
9813 #endif
9814             }
9815           else
9816             {
9817               dw2_asm_output_addr (DWARF2_ADDR_SIZE,
9818                                    ranges_by_label[lab_idx].begin,
9819                                    fmt, i * 2 * DWARF2_ADDR_SIZE);
9820               dw2_asm_output_addr (DWARF2_ADDR_SIZE,
9821                                    ranges_by_label[lab_idx].end,
9822                                    NULL);
9823             }
9824         }
9825       else
9826         {
9827           dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
9828           dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
9829           fmt = start_fmt;
9830         }
9831     }
9832 }
9833
9834 /* Data structure containing information about input files.  */
9835 struct file_info
9836 {
9837   const char *path;     /* Complete file name.  */
9838   const char *fname;    /* File name part.  */
9839   int length;           /* Length of entire string.  */
9840   struct dwarf_file_data * file_idx;    /* Index in input file table.  */
9841   int dir_idx;          /* Index in directory table.  */
9842 };
9843
9844 /* Data structure containing information about directories with source
9845    files.  */
9846 struct dir_info
9847 {
9848   const char *path;     /* Path including directory name.  */
9849   int length;           /* Path length.  */
9850   int prefix;           /* Index of directory entry which is a prefix.  */
9851   int count;            /* Number of files in this directory.  */
9852   int dir_idx;          /* Index of directory used as base.  */
9853 };
9854
9855 /* Callback function for file_info comparison.  We sort by looking at
9856    the directories in the path.  */
9857
9858 static int
9859 file_info_cmp (const void *p1, const void *p2)
9860 {
9861   const struct file_info *const s1 = (const struct file_info *) p1;
9862   const struct file_info *const s2 = (const struct file_info *) p2;
9863   const unsigned char *cp1;
9864   const unsigned char *cp2;
9865
9866   /* Take care of file names without directories.  We need to make sure that
9867      we return consistent values to qsort since some will get confused if
9868      we return the same value when identical operands are passed in opposite
9869      orders.  So if neither has a directory, return 0 and otherwise return
9870      1 or -1 depending on which one has the directory.  */
9871   if ((s1->path == s1->fname || s2->path == s2->fname))
9872     return (s2->path == s2->fname) - (s1->path == s1->fname);
9873
9874   cp1 = (const unsigned char *) s1->path;
9875   cp2 = (const unsigned char *) s2->path;
9876
9877   while (1)
9878     {
9879       ++cp1;
9880       ++cp2;
9881       /* Reached the end of the first path?  If so, handle like above.  */
9882       if ((cp1 == (const unsigned char *) s1->fname)
9883           || (cp2 == (const unsigned char *) s2->fname))
9884         return ((cp2 == (const unsigned char *) s2->fname)
9885                 - (cp1 == (const unsigned char *) s1->fname));
9886
9887       /* Character of current path component the same?  */
9888       else if (*cp1 != *cp2)
9889         return *cp1 - *cp2;
9890     }
9891 }
9892
9893 struct file_name_acquire_data
9894 {
9895   struct file_info *files;
9896   int used_files;
9897   int max_files;
9898 };
9899
9900 /* Traversal function for the hash table.  */
9901
9902 int
9903 file_name_acquire (dwarf_file_data **slot, file_name_acquire_data *fnad)
9904 {
9905   struct dwarf_file_data *d = *slot;
9906   struct file_info *fi;
9907   const char *f;
9908
9909   gcc_assert (fnad->max_files >= d->emitted_number);
9910
9911   if (! d->emitted_number)
9912     return 1;
9913
9914   gcc_assert (fnad->max_files != fnad->used_files);
9915
9916   fi = fnad->files + fnad->used_files++;
9917
9918   /* Skip all leading "./".  */
9919   f = d->filename;
9920   while (f[0] == '.' && IS_DIR_SEPARATOR (f[1]))
9921     f += 2;
9922
9923   /* Create a new array entry.  */
9924   fi->path = f;
9925   fi->length = strlen (f);
9926   fi->file_idx = d;
9927
9928   /* Search for the file name part.  */
9929   f = strrchr (f, DIR_SEPARATOR);
9930 #if defined (DIR_SEPARATOR_2)
9931   {
9932     char *g = strrchr (fi->path, DIR_SEPARATOR_2);
9933
9934     if (g != NULL)
9935       {
9936         if (f == NULL || f < g)
9937           f = g;
9938       }
9939   }
9940 #endif
9941
9942   fi->fname = f == NULL ? fi->path : f + 1;
9943   return 1;
9944 }
9945
9946 /* Output the directory table and the file name table.  We try to minimize
9947    the total amount of memory needed.  A heuristic is used to avoid large
9948    slowdowns with many input files.  */
9949
9950 static void
9951 output_file_names (void)
9952 {
9953   struct file_name_acquire_data fnad;
9954   int numfiles;
9955   struct file_info *files;
9956   struct dir_info *dirs;
9957   int *saved;
9958   int *savehere;
9959   int *backmap;
9960   int ndirs;
9961   int idx_offset;
9962   int i;
9963
9964   if (!last_emitted_file)
9965     {
9966       dw2_asm_output_data (1, 0, "End directory table");
9967       dw2_asm_output_data (1, 0, "End file name table");
9968       return;
9969     }
9970
9971   numfiles = last_emitted_file->emitted_number;
9972
9973   /* Allocate the various arrays we need.  */
9974   files = XALLOCAVEC (struct file_info, numfiles);
9975   dirs = XALLOCAVEC (struct dir_info, numfiles);
9976
9977   fnad.files = files;
9978   fnad.used_files = 0;
9979   fnad.max_files = numfiles;
9980   file_table->traverse<file_name_acquire_data *, file_name_acquire> (&fnad);
9981   gcc_assert (fnad.used_files == fnad.max_files);
9982
9983   qsort (files, numfiles, sizeof (files[0]), file_info_cmp);
9984
9985   /* Find all the different directories used.  */
9986   dirs[0].path = files[0].path;
9987   dirs[0].length = files[0].fname - files[0].path;
9988   dirs[0].prefix = -1;
9989   dirs[0].count = 1;
9990   dirs[0].dir_idx = 0;
9991   files[0].dir_idx = 0;
9992   ndirs = 1;
9993
9994   for (i = 1; i < numfiles; i++)
9995     if (files[i].fname - files[i].path == dirs[ndirs - 1].length
9996         && memcmp (dirs[ndirs - 1].path, files[i].path,
9997                    dirs[ndirs - 1].length) == 0)
9998       {
9999         /* Same directory as last entry.  */
10000         files[i].dir_idx = ndirs - 1;
10001         ++dirs[ndirs - 1].count;
10002       }
10003     else
10004       {
10005         int j;
10006
10007         /* This is a new directory.  */
10008         dirs[ndirs].path = files[i].path;
10009         dirs[ndirs].length = files[i].fname - files[i].path;
10010         dirs[ndirs].count = 1;
10011         dirs[ndirs].dir_idx = ndirs;
10012         files[i].dir_idx = ndirs;
10013
10014         /* Search for a prefix.  */
10015         dirs[ndirs].prefix = -1;
10016         for (j = 0; j < ndirs; j++)
10017           if (dirs[j].length < dirs[ndirs].length
10018               && dirs[j].length > 1
10019               && (dirs[ndirs].prefix == -1
10020                   || dirs[j].length > dirs[dirs[ndirs].prefix].length)
10021               && memcmp (dirs[j].path, dirs[ndirs].path, dirs[j].length) == 0)
10022             dirs[ndirs].prefix = j;
10023
10024         ++ndirs;
10025       }
10026
10027   /* Now to the actual work.  We have to find a subset of the directories which
10028      allow expressing the file name using references to the directory table
10029      with the least amount of characters.  We do not do an exhaustive search
10030      where we would have to check out every combination of every single
10031      possible prefix.  Instead we use a heuristic which provides nearly optimal
10032      results in most cases and never is much off.  */
10033   saved = XALLOCAVEC (int, ndirs);
10034   savehere = XALLOCAVEC (int, ndirs);
10035
10036   memset (saved, '\0', ndirs * sizeof (saved[0]));
10037   for (i = 0; i < ndirs; i++)
10038     {
10039       int j;
10040       int total;
10041
10042       /* We can always save some space for the current directory.  But this
10043          does not mean it will be enough to justify adding the directory.  */
10044       savehere[i] = dirs[i].length;
10045       total = (savehere[i] - saved[i]) * dirs[i].count;
10046
10047       for (j = i + 1; j < ndirs; j++)
10048         {
10049           savehere[j] = 0;
10050           if (saved[j] < dirs[i].length)
10051             {
10052               /* Determine whether the dirs[i] path is a prefix of the
10053                  dirs[j] path.  */
10054               int k;
10055
10056               k = dirs[j].prefix;
10057               while (k != -1 && k != (int) i)
10058                 k = dirs[k].prefix;
10059
10060               if (k == (int) i)
10061                 {
10062                   /* Yes it is.  We can possibly save some memory by
10063                      writing the filenames in dirs[j] relative to
10064                      dirs[i].  */
10065                   savehere[j] = dirs[i].length;
10066                   total += (savehere[j] - saved[j]) * dirs[j].count;
10067                 }
10068             }
10069         }
10070
10071       /* Check whether we can save enough to justify adding the dirs[i]
10072          directory.  */
10073       if (total > dirs[i].length + 1)
10074         {
10075           /* It's worthwhile adding.  */
10076           for (j = i; j < ndirs; j++)
10077             if (savehere[j] > 0)
10078               {
10079                 /* Remember how much we saved for this directory so far.  */
10080                 saved[j] = savehere[j];
10081
10082                 /* Remember the prefix directory.  */
10083                 dirs[j].dir_idx = i;
10084               }
10085         }
10086     }
10087
10088   /* Emit the directory name table.  */
10089   idx_offset = dirs[0].length > 0 ? 1 : 0;
10090   for (i = 1 - idx_offset; i < ndirs; i++)
10091     dw2_asm_output_nstring (dirs[i].path,
10092                             dirs[i].length
10093                              - !DWARF2_DIR_SHOULD_END_WITH_SEPARATOR,
10094                             "Directory Entry: %#x", i + idx_offset);
10095
10096   dw2_asm_output_data (1, 0, "End directory table");
10097
10098   /* We have to emit them in the order of emitted_number since that's
10099      used in the debug info generation.  To do this efficiently we
10100      generate a back-mapping of the indices first.  */
10101   backmap = XALLOCAVEC (int, numfiles);
10102   for (i = 0; i < numfiles; i++)
10103     backmap[files[i].file_idx->emitted_number - 1] = i;
10104
10105   /* Now write all the file names.  */
10106   for (i = 0; i < numfiles; i++)
10107     {
10108       int file_idx = backmap[i];
10109       int dir_idx = dirs[files[file_idx].dir_idx].dir_idx;
10110
10111 #ifdef VMS_DEBUGGING_INFO
10112 #define MAX_VMS_VERSION_LEN 6 /* ";32768" */
10113
10114       /* Setting these fields can lead to debugger miscomparisons,
10115          but VMS Debug requires them to be set correctly.  */
10116
10117       int ver;
10118       long long cdt;
10119       long siz;
10120       int maxfilelen = strlen (files[file_idx].path)
10121                                + dirs[dir_idx].length
10122                                + MAX_VMS_VERSION_LEN + 1;
10123       char *filebuf = XALLOCAVEC (char, maxfilelen);
10124
10125       vms_file_stats_name (files[file_idx].path, 0, 0, 0, &ver);
10126       snprintf (filebuf, maxfilelen, "%s;%d",
10127                 files[file_idx].path + dirs[dir_idx].length, ver);
10128
10129       dw2_asm_output_nstring
10130         (filebuf, -1, "File Entry: %#x", (unsigned) i + 1);
10131
10132       /* Include directory index.  */
10133       dw2_asm_output_data_uleb128 (dir_idx + idx_offset, NULL);
10134
10135       /* Modification time.  */
10136       dw2_asm_output_data_uleb128
10137         ((vms_file_stats_name (files[file_idx].path, &cdt, 0, 0, 0) == 0)
10138           ? cdt : 0,
10139          NULL);
10140
10141       /* File length in bytes.  */
10142       dw2_asm_output_data_uleb128
10143         ((vms_file_stats_name (files[file_idx].path, 0, &siz, 0, 0) == 0)
10144           ? siz : 0,
10145          NULL);
10146 #else
10147       dw2_asm_output_nstring (files[file_idx].path + dirs[dir_idx].length, -1,
10148                               "File Entry: %#x", (unsigned) i + 1);
10149
10150       /* Include directory index.  */
10151       dw2_asm_output_data_uleb128 (dir_idx + idx_offset, NULL);
10152
10153       /* Modification time.  */
10154       dw2_asm_output_data_uleb128 (0, NULL);
10155
10156       /* File length in bytes.  */
10157       dw2_asm_output_data_uleb128 (0, NULL);
10158 #endif /* VMS_DEBUGGING_INFO */
10159     }
10160
10161   dw2_asm_output_data (1, 0, "End file name table");
10162 }
10163
10164
10165 /* Output one line number table into the .debug_line section.  */
10166
10167 static void
10168 output_one_line_info_table (dw_line_info_table *table)
10169 {
10170   char line_label[MAX_ARTIFICIAL_LABEL_BYTES];
10171   unsigned int current_line = 1;
10172   bool current_is_stmt = DWARF_LINE_DEFAULT_IS_STMT_START;
10173   dw_line_info_entry *ent;
10174   size_t i;
10175
10176   FOR_EACH_VEC_SAFE_ELT (table->entries, i, ent)
10177     {
10178       switch (ent->opcode)
10179         {
10180         case LI_set_address:
10181           /* ??? Unfortunately, we have little choice here currently, and
10182              must always use the most general form.  GCC does not know the
10183              address delta itself, so we can't use DW_LNS_advance_pc.  Many
10184              ports do have length attributes which will give an upper bound
10185              on the address range.  We could perhaps use length attributes
10186              to determine when it is safe to use DW_LNS_fixed_advance_pc.  */
10187           ASM_GENERATE_INTERNAL_LABEL (line_label, LINE_CODE_LABEL, ent->val);
10188
10189           /* This can handle any delta.  This takes
10190              4+DWARF2_ADDR_SIZE bytes.  */
10191           dw2_asm_output_data (1, 0, "set address %s", line_label);
10192           dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
10193           dw2_asm_output_data (1, DW_LNE_set_address, NULL);
10194           dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
10195           break;
10196
10197         case LI_set_line:
10198           if (ent->val == current_line)
10199             {
10200               /* We still need to start a new row, so output a copy insn.  */
10201               dw2_asm_output_data (1, DW_LNS_copy,
10202                                    "copy line %u", current_line);
10203             }
10204           else
10205             {
10206               int line_offset = ent->val - current_line;
10207               int line_delta = line_offset - DWARF_LINE_BASE;
10208
10209               current_line = ent->val;
10210               if (line_delta >= 0 && line_delta < (DWARF_LINE_RANGE - 1))
10211                 {
10212                   /* This can handle deltas from -10 to 234, using the current
10213                      definitions of DWARF_LINE_BASE and DWARF_LINE_RANGE.
10214                      This takes 1 byte.  */
10215                   dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE + line_delta,
10216                                        "line %u", current_line);
10217                 }
10218               else
10219                 {
10220                   /* This can handle any delta.  This takes at least 4 bytes,
10221                      depending on the value being encoded.  */
10222                   dw2_asm_output_data (1, DW_LNS_advance_line,
10223                                        "advance to line %u", current_line);
10224                   dw2_asm_output_data_sleb128 (line_offset, NULL);
10225                   dw2_asm_output_data (1, DW_LNS_copy, NULL);
10226                 }
10227             }
10228           break;
10229
10230         case LI_set_file:
10231           dw2_asm_output_data (1, DW_LNS_set_file, "set file %u", ent->val);
10232           dw2_asm_output_data_uleb128 (ent->val, "%u", ent->val);
10233           break;
10234
10235         case LI_set_column:
10236           dw2_asm_output_data (1, DW_LNS_set_column, "column %u", ent->val);
10237           dw2_asm_output_data_uleb128 (ent->val, "%u", ent->val);
10238           break;
10239
10240         case LI_negate_stmt:
10241           current_is_stmt = !current_is_stmt;
10242           dw2_asm_output_data (1, DW_LNS_negate_stmt,
10243                                "is_stmt %d", current_is_stmt);
10244           break;
10245
10246         case LI_set_prologue_end:
10247           dw2_asm_output_data (1, DW_LNS_set_prologue_end,
10248                                "set prologue end");
10249           break;
10250           
10251         case LI_set_epilogue_begin:
10252           dw2_asm_output_data (1, DW_LNS_set_epilogue_begin,
10253                                "set epilogue begin");
10254           break;
10255
10256         case LI_set_discriminator:
10257           dw2_asm_output_data (1, 0, "discriminator %u", ent->val);
10258           dw2_asm_output_data_uleb128 (1 + size_of_uleb128 (ent->val), NULL);
10259           dw2_asm_output_data (1, DW_LNE_set_discriminator, NULL);
10260           dw2_asm_output_data_uleb128 (ent->val, NULL);
10261           break;
10262         }
10263     }
10264
10265   /* Emit debug info for the address of the end of the table.  */
10266   dw2_asm_output_data (1, 0, "set address %s", table->end_label);
10267   dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
10268   dw2_asm_output_data (1, DW_LNE_set_address, NULL);
10269   dw2_asm_output_addr (DWARF2_ADDR_SIZE, table->end_label, NULL);
10270
10271   dw2_asm_output_data (1, 0, "end sequence");
10272   dw2_asm_output_data_uleb128 (1, NULL);
10273   dw2_asm_output_data (1, DW_LNE_end_sequence, NULL);
10274 }
10275
10276 /* Output the source line number correspondence information.  This
10277    information goes into the .debug_line section.  */
10278
10279 static void
10280 output_line_info (bool prologue_only)
10281 {
10282   char l1[20], l2[20], p1[20], p2[20];
10283   /* We don't support DWARFv5 line tables yet.  */
10284   int ver = dwarf_version < 5 ? dwarf_version : 4;
10285   bool saw_one = false;
10286   int opc;
10287
10288   ASM_GENERATE_INTERNAL_LABEL (l1, LINE_NUMBER_BEGIN_LABEL, 0);
10289   ASM_GENERATE_INTERNAL_LABEL (l2, LINE_NUMBER_END_LABEL, 0);
10290   ASM_GENERATE_INTERNAL_LABEL (p1, LN_PROLOG_AS_LABEL, 0);
10291   ASM_GENERATE_INTERNAL_LABEL (p2, LN_PROLOG_END_LABEL, 0);
10292
10293   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
10294     dw2_asm_output_data (4, 0xffffffff,
10295       "Initial length escape value indicating 64-bit DWARF extension");
10296   dw2_asm_output_delta (DWARF_OFFSET_SIZE, l2, l1,
10297                         "Length of Source Line Info");
10298   ASM_OUTPUT_LABEL (asm_out_file, l1);
10299
10300   dw2_asm_output_data (2, ver, "DWARF Version");
10301   dw2_asm_output_delta (DWARF_OFFSET_SIZE, p2, p1, "Prolog Length");
10302   ASM_OUTPUT_LABEL (asm_out_file, p1);
10303
10304   /* Define the architecture-dependent minimum instruction length (in bytes).
10305      In this implementation of DWARF, this field is used for information
10306      purposes only.  Since GCC generates assembly language, we have no
10307      a priori knowledge of how many instruction bytes are generated for each
10308      source line, and therefore can use only the DW_LNE_set_address and
10309      DW_LNS_fixed_advance_pc line information commands.  Accordingly, we fix
10310      this as '1', which is "correct enough" for all architectures,
10311      and don't let the target override.  */
10312   dw2_asm_output_data (1, 1, "Minimum Instruction Length");
10313
10314   if (ver >= 4)
10315     dw2_asm_output_data (1, DWARF_LINE_DEFAULT_MAX_OPS_PER_INSN,
10316                          "Maximum Operations Per Instruction");
10317   dw2_asm_output_data (1, DWARF_LINE_DEFAULT_IS_STMT_START,
10318                        "Default is_stmt_start flag");
10319   dw2_asm_output_data (1, DWARF_LINE_BASE,
10320                        "Line Base Value (Special Opcodes)");
10321   dw2_asm_output_data (1, DWARF_LINE_RANGE,
10322                        "Line Range Value (Special Opcodes)");
10323   dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE,
10324                        "Special Opcode Base");
10325
10326   for (opc = 1; opc < DWARF_LINE_OPCODE_BASE; opc++)
10327     {
10328       int n_op_args;
10329       switch (opc)
10330         {
10331         case DW_LNS_advance_pc:
10332         case DW_LNS_advance_line:
10333         case DW_LNS_set_file:
10334         case DW_LNS_set_column:
10335         case DW_LNS_fixed_advance_pc:
10336         case DW_LNS_set_isa:
10337           n_op_args = 1;
10338           break;
10339         default:
10340           n_op_args = 0;
10341           break;
10342         }
10343
10344       dw2_asm_output_data (1, n_op_args, "opcode: %#x has %d args",
10345                            opc, n_op_args);
10346     }
10347
10348   /* Write out the information about the files we use.  */
10349   output_file_names ();
10350   ASM_OUTPUT_LABEL (asm_out_file, p2);
10351   if (prologue_only)
10352     {
10353       /* Output the marker for the end of the line number info.  */
10354       ASM_OUTPUT_LABEL (asm_out_file, l2);
10355       return;
10356     }
10357
10358   if (separate_line_info)
10359     {
10360       dw_line_info_table *table;
10361       size_t i;
10362
10363       FOR_EACH_VEC_ELT (*separate_line_info, i, table)
10364         if (table->in_use)
10365           {
10366             output_one_line_info_table (table);
10367             saw_one = true;
10368           }
10369     }
10370   if (cold_text_section_line_info && cold_text_section_line_info->in_use)
10371     {
10372       output_one_line_info_table (cold_text_section_line_info);
10373       saw_one = true;
10374     }
10375
10376   /* ??? Some Darwin linkers crash on a .debug_line section with no
10377      sequences.  Further, merely a DW_LNE_end_sequence entry is not
10378      sufficient -- the address column must also be initialized.
10379      Make sure to output at least one set_address/end_sequence pair,
10380      choosing .text since that section is always present.  */
10381   if (text_section_line_info->in_use || !saw_one)
10382     output_one_line_info_table (text_section_line_info);
10383
10384   /* Output the marker for the end of the line number info.  */
10385   ASM_OUTPUT_LABEL (asm_out_file, l2);
10386 }
10387 \f
10388 /* Given a pointer to a tree node for some base type, return a pointer to
10389    a DIE that describes the given type.
10390
10391    This routine must only be called for GCC type nodes that correspond to
10392    Dwarf base (fundamental) types.  */
10393
10394 static dw_die_ref
10395 base_type_die (tree type)
10396 {
10397   dw_die_ref base_type_result;
10398   enum dwarf_type encoding;
10399
10400   if (TREE_CODE (type) == ERROR_MARK || TREE_CODE (type) == VOID_TYPE)
10401     return 0;
10402
10403   /* If this is a subtype that should not be emitted as a subrange type,
10404      use the base type.  See subrange_type_for_debug_p.  */
10405   if (TREE_CODE (type) == INTEGER_TYPE && TREE_TYPE (type) != NULL_TREE)
10406     type = TREE_TYPE (type);
10407
10408   switch (TREE_CODE (type))
10409     {
10410     case INTEGER_TYPE:
10411       if ((dwarf_version >= 4 || !dwarf_strict)
10412           && TYPE_NAME (type)
10413           && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
10414           && DECL_IS_BUILTIN (TYPE_NAME (type))
10415           && DECL_NAME (TYPE_NAME (type)))
10416         {
10417           const char *name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type)));
10418           if (strcmp (name, "char16_t") == 0
10419               || strcmp (name, "char32_t") == 0)
10420             {
10421               encoding = DW_ATE_UTF;
10422               break;
10423             }
10424         }
10425       if (TYPE_STRING_FLAG (type))
10426         {
10427           if (TYPE_UNSIGNED (type))
10428             encoding = DW_ATE_unsigned_char;
10429           else
10430             encoding = DW_ATE_signed_char;
10431         }
10432       else if (TYPE_UNSIGNED (type))
10433         encoding = DW_ATE_unsigned;
10434       else
10435         encoding = DW_ATE_signed;
10436       break;
10437
10438     case REAL_TYPE:
10439       if (DECIMAL_FLOAT_MODE_P (TYPE_MODE (type)))
10440         {
10441           if (dwarf_version >= 3 || !dwarf_strict)
10442             encoding = DW_ATE_decimal_float;
10443           else
10444             encoding = DW_ATE_lo_user;
10445         }
10446       else
10447         encoding = DW_ATE_float;
10448       break;
10449
10450     case FIXED_POINT_TYPE:
10451       if (!(dwarf_version >= 3 || !dwarf_strict))
10452         encoding = DW_ATE_lo_user;
10453       else if (TYPE_UNSIGNED (type))
10454         encoding = DW_ATE_unsigned_fixed;
10455       else
10456         encoding = DW_ATE_signed_fixed;
10457       break;
10458
10459       /* Dwarf2 doesn't know anything about complex ints, so use
10460          a user defined type for it.  */
10461     case COMPLEX_TYPE:
10462       if (TREE_CODE (TREE_TYPE (type)) == REAL_TYPE)
10463         encoding = DW_ATE_complex_float;
10464       else
10465         encoding = DW_ATE_lo_user;
10466       break;
10467
10468     case BOOLEAN_TYPE:
10469       /* GNU FORTRAN/Ada/C++ BOOLEAN type.  */
10470       encoding = DW_ATE_boolean;
10471       break;
10472
10473     default:
10474       /* No other TREE_CODEs are Dwarf fundamental types.  */
10475       gcc_unreachable ();
10476     }
10477
10478   base_type_result = new_die (DW_TAG_base_type, comp_unit_die (), type);
10479
10480   add_AT_unsigned (base_type_result, DW_AT_byte_size,
10481                    int_size_in_bytes (type));
10482   add_AT_unsigned (base_type_result, DW_AT_encoding, encoding);
10483   add_pubtype (type, base_type_result);
10484
10485   return base_type_result;
10486 }
10487
10488 /* A C++ function with deduced return type can have a TEMPLATE_TYPE_PARM
10489    named 'auto' in its type: return true for it, false otherwise.  */
10490
10491 static inline bool
10492 is_cxx_auto (tree type)
10493 {
10494   if (is_cxx ())
10495     {
10496       tree name = TYPE_IDENTIFIER (type);
10497       if (name == get_identifier ("auto")
10498           || name == get_identifier ("decltype(auto)"))
10499         return true;
10500     }
10501   return false;
10502 }
10503
10504 /* Given a pointer to an arbitrary ..._TYPE tree node, return nonzero if the
10505    given input type is a Dwarf "fundamental" type.  Otherwise return null.  */
10506
10507 static inline int
10508 is_base_type (tree type)
10509 {
10510   switch (TREE_CODE (type))
10511     {
10512     case ERROR_MARK:
10513     case VOID_TYPE:
10514     case INTEGER_TYPE:
10515     case REAL_TYPE:
10516     case FIXED_POINT_TYPE:
10517     case COMPLEX_TYPE:
10518     case BOOLEAN_TYPE:
10519     case POINTER_BOUNDS_TYPE:
10520       return 1;
10521
10522     case ARRAY_TYPE:
10523     case RECORD_TYPE:
10524     case UNION_TYPE:
10525     case QUAL_UNION_TYPE:
10526     case ENUMERAL_TYPE:
10527     case FUNCTION_TYPE:
10528     case METHOD_TYPE:
10529     case POINTER_TYPE:
10530     case REFERENCE_TYPE:
10531     case NULLPTR_TYPE:
10532     case OFFSET_TYPE:
10533     case LANG_TYPE:
10534     case VECTOR_TYPE:
10535       return 0;
10536
10537     default:
10538       if (is_cxx_auto (type))
10539         return 0;
10540       gcc_unreachable ();
10541     }
10542
10543   return 0;
10544 }
10545
10546 /* Given a pointer to a tree node, assumed to be some kind of a ..._TYPE
10547    node, return the size in bits for the type if it is a constant, or else
10548    return the alignment for the type if the type's size is not constant, or
10549    else return BITS_PER_WORD if the type actually turns out to be an
10550    ERROR_MARK node.  */
10551
10552 static inline unsigned HOST_WIDE_INT
10553 simple_type_size_in_bits (const_tree type)
10554 {
10555   if (TREE_CODE (type) == ERROR_MARK)
10556     return BITS_PER_WORD;
10557   else if (TYPE_SIZE (type) == NULL_TREE)
10558     return 0;
10559   else if (tree_fits_uhwi_p (TYPE_SIZE (type)))
10560     return tree_to_uhwi (TYPE_SIZE (type));
10561   else
10562     return TYPE_ALIGN (type);
10563 }
10564
10565 /* Similarly, but return an offset_int instead of UHWI.  */
10566
10567 static inline offset_int
10568 offset_int_type_size_in_bits (const_tree type)
10569 {
10570   if (TREE_CODE (type) == ERROR_MARK)
10571     return BITS_PER_WORD;
10572   else if (TYPE_SIZE (type) == NULL_TREE)
10573     return 0;
10574   else if (TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST)
10575     return wi::to_offset (TYPE_SIZE (type));
10576   else
10577     return TYPE_ALIGN (type);
10578 }
10579
10580 /*  Given a pointer to a tree node for a subrange type, return a pointer
10581     to a DIE that describes the given type.  */
10582
10583 static dw_die_ref
10584 subrange_type_die (tree type, tree low, tree high, dw_die_ref context_die)
10585 {
10586   dw_die_ref subrange_die;
10587   const HOST_WIDE_INT size_in_bytes = int_size_in_bytes (type);
10588
10589   if (context_die == NULL)
10590     context_die = comp_unit_die ();
10591
10592   subrange_die = new_die (DW_TAG_subrange_type, context_die, type);
10593
10594   if (int_size_in_bytes (TREE_TYPE (type)) != size_in_bytes)
10595     {
10596       /* The size of the subrange type and its base type do not match,
10597          so we need to generate a size attribute for the subrange type.  */
10598       add_AT_unsigned (subrange_die, DW_AT_byte_size, size_in_bytes);
10599     }
10600
10601   if (low)
10602     add_bound_info (subrange_die, DW_AT_lower_bound, low, NULL);
10603   if (high)
10604     add_bound_info (subrange_die, DW_AT_upper_bound, high, NULL);
10605
10606   return subrange_die;
10607 }
10608
10609 /* Returns the (const and/or volatile) cv_qualifiers associated with
10610    the decl node.  This will normally be augmented with the
10611    cv_qualifiers of the underlying type in add_type_attribute.  */
10612
10613 static int
10614 decl_quals (const_tree decl)
10615 {
10616   return ((TREE_READONLY (decl)
10617            ? TYPE_QUAL_CONST : TYPE_UNQUALIFIED)
10618           | (TREE_THIS_VOLATILE (decl)
10619              ? TYPE_QUAL_VOLATILE : TYPE_UNQUALIFIED));
10620 }
10621
10622 /* Determine the TYPE whose qualifiers match the largest strict subset
10623    of the given TYPE_QUALS, and return its qualifiers.  Ignore all
10624    qualifiers outside QUAL_MASK.  */
10625
10626 static int
10627 get_nearest_type_subqualifiers (tree type, int type_quals, int qual_mask)
10628 {
10629   tree t;
10630   int best_rank = 0, best_qual = 0, max_rank;
10631
10632   type_quals &= qual_mask;
10633   max_rank = popcount_hwi (type_quals) - 1;
10634
10635   for (t = TYPE_MAIN_VARIANT (type); t && best_rank < max_rank;
10636        t = TYPE_NEXT_VARIANT (t))
10637     {
10638       int q = TYPE_QUALS (t) & qual_mask;
10639
10640       if ((q & type_quals) == q && q != type_quals
10641           && check_base_type (t, type))
10642         {
10643           int rank = popcount_hwi (q);
10644
10645           if (rank > best_rank)
10646             {
10647               best_rank = rank;
10648               best_qual = q;
10649             }
10650         }
10651     }
10652
10653   return best_qual;
10654 }
10655
10656 /* Given a pointer to an arbitrary ..._TYPE tree node, return a debugging
10657    entry that chains various modifiers in front of the given type.  */
10658
10659 static dw_die_ref
10660 modified_type_die (tree type, int cv_quals, dw_die_ref context_die)
10661 {
10662   enum tree_code code = TREE_CODE (type);
10663   dw_die_ref mod_type_die;
10664   dw_die_ref sub_die = NULL;
10665   tree item_type = NULL;
10666   tree qualified_type;
10667   tree name, low, high;
10668   dw_die_ref mod_scope;
10669   /* Only these cv-qualifiers are currently handled.  */
10670   const int cv_qual_mask = (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE
10671                             | TYPE_QUAL_RESTRICT | TYPE_QUAL_ATOMIC);
10672
10673   if (code == ERROR_MARK)
10674     return NULL;
10675
10676   cv_quals &= cv_qual_mask;
10677
10678   /* Don't emit DW_TAG_restrict_type for DWARFv2, since it is a type
10679      tag modifier (and not an attribute) old consumers won't be able
10680      to handle it.  */
10681   if (dwarf_version < 3)
10682     cv_quals &= ~TYPE_QUAL_RESTRICT;
10683
10684   /* Likewise for DW_TAG_atomic_type for DWARFv5.  */
10685   if (dwarf_version < 5)
10686     cv_quals &= ~TYPE_QUAL_ATOMIC;
10687
10688   /* See if we already have the appropriately qualified variant of
10689      this type.  */
10690   qualified_type = get_qualified_type (type, cv_quals);
10691
10692   if (qualified_type == sizetype
10693       && TYPE_NAME (qualified_type)
10694       && TREE_CODE (TYPE_NAME (qualified_type)) == TYPE_DECL)
10695     {
10696       tree t = TREE_TYPE (TYPE_NAME (qualified_type));
10697
10698       gcc_checking_assert (TREE_CODE (t) == INTEGER_TYPE
10699                            && TYPE_PRECISION (t)
10700                            == TYPE_PRECISION (qualified_type)
10701                            && TYPE_UNSIGNED (t)
10702                            == TYPE_UNSIGNED (qualified_type));
10703       qualified_type = t;
10704     }
10705
10706   /* If we do, then we can just use its DIE, if it exists.  */
10707   if (qualified_type)
10708     {
10709       mod_type_die = lookup_type_die (qualified_type);
10710       if (mod_type_die)
10711         return mod_type_die;
10712     }
10713
10714   name = qualified_type ? TYPE_NAME (qualified_type) : NULL;
10715
10716   /* Handle C typedef types.  */
10717   if (name && TREE_CODE (name) == TYPE_DECL && DECL_ORIGINAL_TYPE (name)
10718       && !DECL_ARTIFICIAL (name))
10719     {
10720       tree dtype = TREE_TYPE (name);
10721
10722       if (qualified_type == dtype)
10723         {
10724           /* For a named type, use the typedef.  */
10725           gen_type_die (qualified_type, context_die);
10726           return lookup_type_die (qualified_type);
10727         }
10728       else
10729         {
10730           int dquals = TYPE_QUALS_NO_ADDR_SPACE (dtype);
10731           dquals &= cv_qual_mask;
10732           if ((dquals & ~cv_quals) != TYPE_UNQUALIFIED
10733               || (cv_quals == dquals && DECL_ORIGINAL_TYPE (name) != type))
10734             /* cv-unqualified version of named type.  Just use
10735                the unnamed type to which it refers.  */
10736             return modified_type_die (DECL_ORIGINAL_TYPE (name),
10737                                       cv_quals, context_die);
10738           /* Else cv-qualified version of named type; fall through.  */
10739         }
10740     }
10741
10742   mod_scope = scope_die_for (type, context_die);
10743
10744   if (cv_quals)
10745     {
10746       struct qual_info { int q; enum dwarf_tag t; };
10747       static const struct qual_info qual_info[] =
10748         {
10749           { TYPE_QUAL_ATOMIC, DW_TAG_atomic_type },
10750           { TYPE_QUAL_RESTRICT, DW_TAG_restrict_type },
10751           { TYPE_QUAL_VOLATILE, DW_TAG_volatile_type },
10752           { TYPE_QUAL_CONST, DW_TAG_const_type },
10753         };
10754       int sub_quals;
10755       unsigned i;
10756
10757       /* Determine a lesser qualified type that most closely matches
10758          this one.  Then generate DW_TAG_* entries for the remaining
10759          qualifiers.  */
10760       sub_quals = get_nearest_type_subqualifiers (type, cv_quals,
10761                                                   cv_qual_mask);
10762       mod_type_die = modified_type_die (type, sub_quals, context_die);
10763
10764       for (i = 0; i < sizeof (qual_info) / sizeof (qual_info[0]); i++)
10765         if (qual_info[i].q & cv_quals & ~sub_quals)
10766           {
10767             dw_die_ref d = new_die (qual_info[i].t, mod_scope, type);
10768             if (mod_type_die)
10769               add_AT_die_ref (d, DW_AT_type, mod_type_die);
10770             mod_type_die = d;
10771           }
10772     }
10773   else if (code == POINTER_TYPE)
10774     {
10775       mod_type_die = new_die (DW_TAG_pointer_type, mod_scope, type);
10776       add_AT_unsigned (mod_type_die, DW_AT_byte_size,
10777                        simple_type_size_in_bits (type) / BITS_PER_UNIT);
10778       item_type = TREE_TYPE (type);
10779       if (!ADDR_SPACE_GENERIC_P (TYPE_ADDR_SPACE (item_type)))
10780         add_AT_unsigned (mod_type_die, DW_AT_address_class,
10781                          TYPE_ADDR_SPACE (item_type));
10782     }
10783   else if (code == REFERENCE_TYPE)
10784     {
10785       if (TYPE_REF_IS_RVALUE (type) && dwarf_version >= 4)
10786         mod_type_die = new_die (DW_TAG_rvalue_reference_type, mod_scope,
10787                                 type);
10788       else
10789         mod_type_die = new_die (DW_TAG_reference_type, mod_scope, type);
10790       add_AT_unsigned (mod_type_die, DW_AT_byte_size,
10791                        simple_type_size_in_bits (type) / BITS_PER_UNIT);
10792       item_type = TREE_TYPE (type);
10793       if (!ADDR_SPACE_GENERIC_P (TYPE_ADDR_SPACE (item_type)))
10794         add_AT_unsigned (mod_type_die, DW_AT_address_class,
10795                          TYPE_ADDR_SPACE (item_type));
10796     }
10797   else if (code == INTEGER_TYPE
10798            && TREE_TYPE (type) != NULL_TREE
10799            && subrange_type_for_debug_p (type, &low, &high))
10800     {
10801       mod_type_die = subrange_type_die (type, low, high, context_die);
10802       item_type = TREE_TYPE (type);
10803     }
10804   else if (is_base_type (type))
10805     mod_type_die = base_type_die (type);
10806   else
10807     {
10808       gen_type_die (type, context_die);
10809
10810       /* We have to get the type_main_variant here (and pass that to the
10811          `lookup_type_die' routine) because the ..._TYPE node we have
10812          might simply be a *copy* of some original type node (where the
10813          copy was created to help us keep track of typedef names) and
10814          that copy might have a different TYPE_UID from the original
10815          ..._TYPE node.  */
10816       if (TREE_CODE (type) != VECTOR_TYPE)
10817         return lookup_type_die (type_main_variant (type));
10818       else
10819         /* Vectors have the debugging information in the type,
10820            not the main variant.  */
10821         return lookup_type_die (type);
10822     }
10823
10824   /* Builtin types don't have a DECL_ORIGINAL_TYPE.  For those,
10825      don't output a DW_TAG_typedef, since there isn't one in the
10826      user's program; just attach a DW_AT_name to the type.
10827      Don't attach a DW_AT_name to DW_TAG_const_type or DW_TAG_volatile_type
10828      if the base type already has the same name.  */
10829   if (name
10830       && ((TREE_CODE (name) != TYPE_DECL
10831            && (qualified_type == TYPE_MAIN_VARIANT (type)
10832                || (cv_quals == TYPE_UNQUALIFIED)))
10833           || (TREE_CODE (name) == TYPE_DECL
10834               && TREE_TYPE (name) == qualified_type
10835               && DECL_NAME (name))))
10836     {
10837       if (TREE_CODE (name) == TYPE_DECL)
10838         /* Could just call add_name_and_src_coords_attributes here,
10839            but since this is a builtin type it doesn't have any
10840            useful source coordinates anyway.  */
10841         name = DECL_NAME (name);
10842       add_name_attribute (mod_type_die, IDENTIFIER_POINTER (name));
10843     }
10844   /* This probably indicates a bug.  */
10845   else if (mod_type_die && mod_type_die->die_tag == DW_TAG_base_type)
10846     {
10847       name = TYPE_IDENTIFIER (type);
10848       add_name_attribute (mod_type_die,
10849                           name ? IDENTIFIER_POINTER (name) : "__unknown__");
10850     }
10851
10852   if (qualified_type)
10853     equate_type_number_to_die (qualified_type, mod_type_die);
10854
10855   if (item_type)
10856     /* We must do this after the equate_type_number_to_die call, in case
10857        this is a recursive type.  This ensures that the modified_type_die
10858        recursion will terminate even if the type is recursive.  Recursive
10859        types are possible in Ada.  */
10860     sub_die = modified_type_die (item_type,
10861                                  TYPE_QUALS_NO_ADDR_SPACE (item_type),
10862                                  context_die);
10863
10864   if (sub_die != NULL)
10865     add_AT_die_ref (mod_type_die, DW_AT_type, sub_die);
10866
10867   add_gnat_descriptive_type_attribute (mod_type_die, type, context_die);
10868   if (TYPE_ARTIFICIAL (type))
10869     add_AT_flag (mod_type_die, DW_AT_artificial, 1);
10870
10871   return mod_type_die;
10872 }
10873
10874 /* Generate DIEs for the generic parameters of T.
10875    T must be either a generic type or a generic function.
10876    See http://gcc.gnu.org/wiki/TemplateParmsDwarf for more.  */
10877
10878 static void
10879 gen_generic_params_dies (tree t)
10880 {
10881   tree parms, args;
10882   int parms_num, i;
10883   dw_die_ref die = NULL;
10884   int non_default;
10885
10886   if (!t || (TYPE_P (t) && !COMPLETE_TYPE_P (t)))
10887     return;
10888
10889   if (TYPE_P (t))
10890     die = lookup_type_die (t);
10891   else if (DECL_P (t))
10892     die = lookup_decl_die (t);
10893
10894   gcc_assert (die);
10895
10896   parms = lang_hooks.get_innermost_generic_parms (t);
10897   if (!parms)
10898     /* T has no generic parameter. It means T is neither a generic type
10899        or function. End of story.  */
10900     return;
10901
10902   parms_num = TREE_VEC_LENGTH (parms);
10903   args = lang_hooks.get_innermost_generic_args (t);
10904   if (TREE_CHAIN (args) && TREE_CODE (TREE_CHAIN (args)) == INTEGER_CST)
10905     non_default = int_cst_value (TREE_CHAIN (args));
10906   else
10907     non_default = TREE_VEC_LENGTH (args);
10908   for (i = 0; i < parms_num; i++)
10909     {
10910       tree parm, arg, arg_pack_elems;
10911       dw_die_ref parm_die;
10912
10913       parm = TREE_VEC_ELT (parms, i);
10914       arg = TREE_VEC_ELT (args, i);
10915       arg_pack_elems = lang_hooks.types.get_argument_pack_elems (arg);
10916       gcc_assert (parm && TREE_VALUE (parm) && arg);
10917
10918       if (parm && TREE_VALUE (parm) && arg)
10919         {
10920           /* If PARM represents a template parameter pack,
10921              emit a DW_TAG_GNU_template_parameter_pack DIE, followed
10922              by DW_TAG_template_*_parameter DIEs for the argument
10923              pack elements of ARG. Note that ARG would then be
10924              an argument pack.  */
10925           if (arg_pack_elems)
10926             parm_die = template_parameter_pack_die (TREE_VALUE (parm),
10927                                                     arg_pack_elems,
10928                                                     die);
10929           else
10930             parm_die = generic_parameter_die (TREE_VALUE (parm), arg,
10931                                               true /* emit name */, die);
10932           if (i >= non_default)
10933             add_AT_flag (parm_die, DW_AT_default_value, 1);
10934         }
10935     }
10936 }
10937
10938 /* Create and return a DIE for PARM which should be
10939    the representation of a generic type parameter.
10940    For instance, in the C++ front end, PARM would be a template parameter.
10941    ARG is the argument to PARM.
10942    EMIT_NAME_P if tree, the DIE will have DW_AT_name attribute set to the
10943    name of the PARM.
10944    PARENT_DIE is the parent DIE which the new created DIE should be added to,
10945    as a child node.  */
10946
10947 static dw_die_ref
10948 generic_parameter_die (tree parm, tree arg,
10949                        bool emit_name_p,
10950                        dw_die_ref parent_die)
10951 {
10952   dw_die_ref tmpl_die = NULL;
10953   const char *name = NULL;
10954
10955   if (!parm || !DECL_NAME (parm) || !arg)
10956     return NULL;
10957
10958   /* We support non-type generic parameters and arguments,
10959      type generic parameters and arguments, as well as
10960      generic generic parameters (a.k.a. template template parameters in C++)
10961      and arguments.  */
10962   if (TREE_CODE (parm) == PARM_DECL)
10963     /* PARM is a nontype generic parameter  */
10964     tmpl_die = new_die (DW_TAG_template_value_param, parent_die, parm);
10965   else if (TREE_CODE (parm) == TYPE_DECL)
10966     /* PARM is a type generic parameter.  */
10967     tmpl_die = new_die (DW_TAG_template_type_param, parent_die, parm);
10968   else if (lang_hooks.decls.generic_generic_parameter_decl_p (parm))
10969     /* PARM is a generic generic parameter.
10970        Its DIE is a GNU extension. It shall have a
10971        DW_AT_name attribute to represent the name of the template template
10972        parameter, and a DW_AT_GNU_template_name attribute to represent the
10973        name of the template template argument.  */
10974     tmpl_die = new_die (DW_TAG_GNU_template_template_param,
10975                         parent_die, parm);
10976   else
10977     gcc_unreachable ();
10978
10979   if (tmpl_die)
10980     {
10981       tree tmpl_type;
10982
10983       /* If PARM is a generic parameter pack, it means we are
10984          emitting debug info for a template argument pack element.
10985          In other terms, ARG is a template argument pack element.
10986          In that case, we don't emit any DW_AT_name attribute for
10987          the die.  */
10988       if (emit_name_p)
10989         {
10990           name = IDENTIFIER_POINTER (DECL_NAME (parm));
10991           gcc_assert (name);
10992           add_AT_string (tmpl_die, DW_AT_name, name);
10993         }
10994
10995       if (!lang_hooks.decls.generic_generic_parameter_decl_p (parm))
10996         {
10997           /* DWARF3, 5.6.8 says if PARM is a non-type generic parameter
10998              TMPL_DIE should have a child DW_AT_type attribute that is set
10999              to the type of the argument to PARM, which is ARG.
11000              If PARM is a type generic parameter, TMPL_DIE should have a
11001              child DW_AT_type that is set to ARG.  */
11002           tmpl_type = TYPE_P (arg) ? arg : TREE_TYPE (arg);
11003           add_type_attribute (tmpl_die, tmpl_type,
11004                               (TREE_THIS_VOLATILE (tmpl_type)
11005                                ? TYPE_QUAL_VOLATILE : TYPE_UNQUALIFIED),
11006                               parent_die);
11007         }
11008       else
11009         {
11010           /* So TMPL_DIE is a DIE representing a
11011              a generic generic template parameter, a.k.a template template
11012              parameter in C++ and arg is a template.  */
11013
11014           /* The DW_AT_GNU_template_name attribute of the DIE must be set
11015              to the name of the argument.  */
11016           name = dwarf2_name (TYPE_P (arg) ? TYPE_NAME (arg) : arg, 1);
11017           if (name)
11018             add_AT_string (tmpl_die, DW_AT_GNU_template_name, name);
11019         }
11020
11021       if (TREE_CODE (parm) == PARM_DECL)
11022         /* So PARM is a non-type generic parameter.
11023            DWARF3 5.6.8 says we must set a DW_AT_const_value child
11024            attribute of TMPL_DIE which value represents the value
11025            of ARG.
11026            We must be careful here:
11027            The value of ARG might reference some function decls.
11028            We might currently be emitting debug info for a generic
11029            type and types are emitted before function decls, we don't
11030            know if the function decls referenced by ARG will actually be
11031            emitted after cgraph computations.
11032            So must defer the generation of the DW_AT_const_value to
11033            after cgraph is ready.  */
11034         append_entry_to_tmpl_value_parm_die_table (tmpl_die, arg);
11035     }
11036
11037   return tmpl_die;
11038 }
11039
11040 /* Generate and return a  DW_TAG_GNU_template_parameter_pack DIE representing.
11041    PARM_PACK must be a template parameter pack. The returned DIE
11042    will be child DIE of PARENT_DIE.  */
11043
11044 static dw_die_ref
11045 template_parameter_pack_die (tree parm_pack,
11046                              tree parm_pack_args,
11047                              dw_die_ref parent_die)
11048 {
11049   dw_die_ref die;
11050   int j;
11051
11052   gcc_assert (parent_die && parm_pack);
11053
11054   die = new_die (DW_TAG_GNU_template_parameter_pack, parent_die, parm_pack);
11055   add_name_and_src_coords_attributes (die, parm_pack);
11056   for (j = 0; j < TREE_VEC_LENGTH (parm_pack_args); j++)
11057     generic_parameter_die (parm_pack,
11058                            TREE_VEC_ELT (parm_pack_args, j),
11059                            false /* Don't emit DW_AT_name */,
11060                            die);
11061   return die;
11062 }
11063
11064 /* Given a pointer to an arbitrary ..._TYPE tree node, return true if it is
11065    an enumerated type.  */
11066
11067 static inline int
11068 type_is_enum (const_tree type)
11069 {
11070   return TREE_CODE (type) == ENUMERAL_TYPE;
11071 }
11072
11073 /* Return the DBX register number described by a given RTL node.  */
11074
11075 static unsigned int
11076 dbx_reg_number (const_rtx rtl)
11077 {
11078   unsigned regno = REGNO (rtl);
11079
11080   gcc_assert (regno < FIRST_PSEUDO_REGISTER);
11081
11082 #ifdef LEAF_REG_REMAP
11083   if (crtl->uses_only_leaf_regs)
11084     {
11085       int leaf_reg = LEAF_REG_REMAP (regno);
11086       if (leaf_reg != -1)
11087         regno = (unsigned) leaf_reg;
11088     }
11089 #endif
11090
11091   regno = DBX_REGISTER_NUMBER (regno);
11092   gcc_assert (regno != INVALID_REGNUM);
11093   return regno;
11094 }
11095
11096 /* Optionally add a DW_OP_piece term to a location description expression.
11097    DW_OP_piece is only added if the location description expression already
11098    doesn't end with DW_OP_piece.  */
11099
11100 static void
11101 add_loc_descr_op_piece (dw_loc_descr_ref *list_head, int size)
11102 {
11103   dw_loc_descr_ref loc;
11104
11105   if (*list_head != NULL)
11106     {
11107       /* Find the end of the chain.  */
11108       for (loc = *list_head; loc->dw_loc_next != NULL; loc = loc->dw_loc_next)
11109         ;
11110
11111       if (loc->dw_loc_opc != DW_OP_piece)
11112         loc->dw_loc_next = new_loc_descr (DW_OP_piece, size, 0);
11113     }
11114 }
11115
11116 /* Return a location descriptor that designates a machine register or
11117    zero if there is none.  */
11118
11119 static dw_loc_descr_ref
11120 reg_loc_descriptor (rtx rtl, enum var_init_status initialized)
11121 {
11122   rtx regs;
11123
11124   if (REGNO (rtl) >= FIRST_PSEUDO_REGISTER)
11125     return 0;
11126
11127   /* We only use "frame base" when we're sure we're talking about the
11128      post-prologue local stack frame.  We do this by *not* running
11129      register elimination until this point, and recognizing the special
11130      argument pointer and soft frame pointer rtx's.
11131      Use DW_OP_fbreg offset DW_OP_stack_value in this case.  */
11132   if ((rtl == arg_pointer_rtx || rtl == frame_pointer_rtx)
11133       && eliminate_regs (rtl, VOIDmode, NULL_RTX) != rtl)
11134     {
11135       dw_loc_descr_ref result = NULL;
11136
11137       if (dwarf_version >= 4 || !dwarf_strict)
11138         {
11139           result = mem_loc_descriptor (rtl, GET_MODE (rtl), VOIDmode,
11140                                        initialized);
11141           if (result)
11142             add_loc_descr (&result,
11143                            new_loc_descr (DW_OP_stack_value, 0, 0));
11144         }
11145       return result;
11146     }
11147
11148   regs = targetm.dwarf_register_span (rtl);
11149
11150   if (hard_regno_nregs[REGNO (rtl)][GET_MODE (rtl)] > 1 || regs)
11151     return multiple_reg_loc_descriptor (rtl, regs, initialized);
11152   else
11153     {
11154       unsigned int dbx_regnum = dbx_reg_number (rtl);
11155       if (dbx_regnum == IGNORED_DWARF_REGNUM)
11156         return 0;
11157       return one_reg_loc_descriptor (dbx_regnum, initialized);
11158     }
11159 }
11160
11161 /* Return a location descriptor that designates a machine register for
11162    a given hard register number.  */
11163
11164 static dw_loc_descr_ref
11165 one_reg_loc_descriptor (unsigned int regno, enum var_init_status initialized)
11166 {
11167   dw_loc_descr_ref reg_loc_descr;
11168
11169   if (regno <= 31)
11170     reg_loc_descr
11171       = new_loc_descr ((enum dwarf_location_atom) (DW_OP_reg0 + regno), 0, 0);
11172   else
11173     reg_loc_descr = new_loc_descr (DW_OP_regx, regno, 0);
11174
11175   if (initialized == VAR_INIT_STATUS_UNINITIALIZED)
11176     add_loc_descr (&reg_loc_descr, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
11177
11178   return reg_loc_descr;
11179 }
11180
11181 /* Given an RTL of a register, return a location descriptor that
11182    designates a value that spans more than one register.  */
11183
11184 static dw_loc_descr_ref
11185 multiple_reg_loc_descriptor (rtx rtl, rtx regs,
11186                              enum var_init_status initialized)
11187 {
11188   int size, i;
11189   dw_loc_descr_ref loc_result = NULL;
11190
11191   /* Simple, contiguous registers.  */
11192   if (regs == NULL_RTX)
11193     {
11194       unsigned reg = REGNO (rtl);
11195       int nregs;
11196
11197 #ifdef LEAF_REG_REMAP
11198       if (crtl->uses_only_leaf_regs)
11199         {
11200           int leaf_reg = LEAF_REG_REMAP (reg);
11201           if (leaf_reg != -1)
11202             reg = (unsigned) leaf_reg;
11203         }
11204 #endif
11205
11206       gcc_assert ((unsigned) DBX_REGISTER_NUMBER (reg) == dbx_reg_number (rtl));
11207       nregs = hard_regno_nregs[REGNO (rtl)][GET_MODE (rtl)];
11208
11209       size = GET_MODE_SIZE (GET_MODE (rtl)) / nregs;
11210
11211       loc_result = NULL;
11212       while (nregs--)
11213         {
11214           dw_loc_descr_ref t;
11215
11216           t = one_reg_loc_descriptor (DBX_REGISTER_NUMBER (reg),
11217                                       VAR_INIT_STATUS_INITIALIZED);
11218           add_loc_descr (&loc_result, t);
11219           add_loc_descr_op_piece (&loc_result, size);
11220           ++reg;
11221         }
11222       return loc_result;
11223     }
11224
11225   /* Now onto stupid register sets in non contiguous locations.  */
11226
11227   gcc_assert (GET_CODE (regs) == PARALLEL);
11228
11229   size = GET_MODE_SIZE (GET_MODE (XVECEXP (regs, 0, 0)));
11230   loc_result = NULL;
11231
11232   for (i = 0; i < XVECLEN (regs, 0); ++i)
11233     {
11234       dw_loc_descr_ref t;
11235
11236       t = one_reg_loc_descriptor (dbx_reg_number (XVECEXP (regs, 0, i)),
11237                                   VAR_INIT_STATUS_INITIALIZED);
11238       add_loc_descr (&loc_result, t);
11239       add_loc_descr_op_piece (&loc_result, size);
11240     }
11241
11242   if (loc_result && initialized == VAR_INIT_STATUS_UNINITIALIZED)
11243     add_loc_descr (&loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
11244   return loc_result;
11245 }
11246
11247 static unsigned long size_of_int_loc_descriptor (HOST_WIDE_INT);
11248
11249 /* Return a location descriptor that designates a constant i,
11250    as a compound operation from constant (i >> shift), constant shift
11251    and DW_OP_shl.  */
11252
11253 static dw_loc_descr_ref
11254 int_shift_loc_descriptor (HOST_WIDE_INT i, int shift)
11255 {
11256   dw_loc_descr_ref ret = int_loc_descriptor (i >> shift);
11257   add_loc_descr (&ret, int_loc_descriptor (shift));
11258   add_loc_descr (&ret, new_loc_descr (DW_OP_shl, 0, 0));
11259   return ret;
11260 }
11261
11262 /* Return a location descriptor that designates a constant.  */
11263
11264 static dw_loc_descr_ref
11265 int_loc_descriptor (HOST_WIDE_INT i)
11266 {
11267   enum dwarf_location_atom op;
11268
11269   /* Pick the smallest representation of a constant, rather than just
11270      defaulting to the LEB encoding.  */
11271   if (i >= 0)
11272     {
11273       int clz = clz_hwi (i);
11274       int ctz = ctz_hwi (i);
11275       if (i <= 31)
11276         op = (enum dwarf_location_atom) (DW_OP_lit0 + i);
11277       else if (i <= 0xff)
11278         op = DW_OP_const1u;
11279       else if (i <= 0xffff)
11280         op = DW_OP_const2u;
11281       else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 5
11282                && clz + 5 + 255 >= HOST_BITS_PER_WIDE_INT)
11283         /* DW_OP_litX DW_OP_litY DW_OP_shl takes just 3 bytes and
11284            DW_OP_litX DW_OP_const1u Y DW_OP_shl takes just 4 bytes,
11285            while DW_OP_const4u is 5 bytes.  */
11286         return int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT - clz - 5);
11287       else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 8
11288                && clz + 8 + 31 >= HOST_BITS_PER_WIDE_INT)
11289         /* DW_OP_const1u X DW_OP_litY DW_OP_shl takes just 4 bytes,
11290            while DW_OP_const4u is 5 bytes.  */
11291         return int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT - clz - 8);
11292       else if (HOST_BITS_PER_WIDE_INT == 32 || i <= 0xffffffff)
11293         op = DW_OP_const4u;
11294       else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 8
11295                && clz + 8 + 255 >= HOST_BITS_PER_WIDE_INT)
11296         /* DW_OP_const1u X DW_OP_const1u Y DW_OP_shl takes just 5 bytes,
11297            while DW_OP_constu of constant >= 0x100000000 takes at least
11298            6 bytes.  */
11299         return int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT - clz - 8);
11300       else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 16
11301                && clz + 16 + (size_of_uleb128 (i) > 5 ? 255 : 31)
11302                   >= HOST_BITS_PER_WIDE_INT)
11303         /* DW_OP_const2u X DW_OP_litY DW_OP_shl takes just 5 bytes,
11304            DW_OP_const2u X DW_OP_const1u Y DW_OP_shl takes 6 bytes,
11305            while DW_OP_constu takes in this case at least 6 bytes.  */
11306         return int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT - clz - 16);
11307       else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 32
11308                && clz + 32 + 31 >= HOST_BITS_PER_WIDE_INT
11309                && size_of_uleb128 (i) > 6)
11310         /* DW_OP_const4u X DW_OP_litY DW_OP_shl takes just 7 bytes.  */
11311         return int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT - clz - 32);
11312       else
11313         op = DW_OP_constu;
11314     }
11315   else
11316     {
11317       if (i >= -0x80)
11318         op = DW_OP_const1s;
11319       else if (i >= -0x8000)
11320         op = DW_OP_const2s;
11321       else if (HOST_BITS_PER_WIDE_INT == 32 || i >= -0x80000000)
11322         {
11323           if (size_of_int_loc_descriptor (i) < 5)
11324             {
11325               dw_loc_descr_ref ret = int_loc_descriptor (-i);
11326               add_loc_descr (&ret, new_loc_descr (DW_OP_neg, 0, 0));
11327               return ret;
11328             }
11329           op = DW_OP_const4s;
11330         }
11331       else
11332         {
11333           if (size_of_int_loc_descriptor (i)
11334               < (unsigned long) 1 + size_of_sleb128 (i))
11335             {
11336               dw_loc_descr_ref ret = int_loc_descriptor (-i);
11337               add_loc_descr (&ret, new_loc_descr (DW_OP_neg, 0, 0));
11338               return ret;
11339             }
11340           op = DW_OP_consts;
11341         }
11342     }
11343
11344   return new_loc_descr (op, i, 0);
11345 }
11346
11347 /* Return size_of_locs (int_shift_loc_descriptor (i, shift))
11348    without actually allocating it.  */
11349
11350 static unsigned long
11351 size_of_int_shift_loc_descriptor (HOST_WIDE_INT i, int shift)
11352 {
11353   return size_of_int_loc_descriptor (i >> shift)
11354          + size_of_int_loc_descriptor (shift)
11355          + 1;
11356 }
11357
11358 /* Return size_of_locs (int_loc_descriptor (i)) without
11359    actually allocating it.  */
11360
11361 static unsigned long
11362 size_of_int_loc_descriptor (HOST_WIDE_INT i)
11363 {
11364   unsigned long s;
11365
11366   if (i >= 0)
11367     {
11368       int clz, ctz;
11369       if (i <= 31)
11370         return 1;
11371       else if (i <= 0xff)
11372         return 2;
11373       else if (i <= 0xffff)
11374         return 3;
11375       clz = clz_hwi (i);
11376       ctz = ctz_hwi (i);
11377       if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 5
11378           && clz + 5 + 255 >= HOST_BITS_PER_WIDE_INT)
11379         return size_of_int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT
11380                                                     - clz - 5);
11381       else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 8
11382                && clz + 8 + 31 >= HOST_BITS_PER_WIDE_INT)
11383         return size_of_int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT
11384                                                     - clz - 8);
11385       else if (HOST_BITS_PER_WIDE_INT == 32 || i <= 0xffffffff)
11386         return 5;
11387       s = size_of_uleb128 ((unsigned HOST_WIDE_INT) i);
11388       if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 8
11389           && clz + 8 + 255 >= HOST_BITS_PER_WIDE_INT)
11390         return size_of_int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT
11391                                                     - clz - 8);
11392       else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 16
11393                && clz + 16 + (s > 5 ? 255 : 31) >= HOST_BITS_PER_WIDE_INT)
11394         return size_of_int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT
11395                                                     - clz - 16);
11396       else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 32
11397                && clz + 32 + 31 >= HOST_BITS_PER_WIDE_INT
11398                && s > 6)
11399         return size_of_int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT
11400                                                     - clz - 32);
11401       else
11402         return 1 + s;
11403     }
11404   else
11405     {
11406       if (i >= -0x80)
11407         return 2;
11408       else if (i >= -0x8000)
11409         return 3;
11410       else if (HOST_BITS_PER_WIDE_INT == 32 || i >= -0x80000000)
11411         {
11412           if (-(unsigned HOST_WIDE_INT) i != (unsigned HOST_WIDE_INT) i)
11413             {
11414               s = size_of_int_loc_descriptor (-i) + 1;
11415               if (s < 5)
11416                 return s;
11417             }
11418           return 5;
11419         }
11420       else
11421         {
11422           unsigned long r = 1 + size_of_sleb128 (i);
11423           if (-(unsigned HOST_WIDE_INT) i != (unsigned HOST_WIDE_INT) i)
11424             {
11425               s = size_of_int_loc_descriptor (-i) + 1;
11426               if (s < r)
11427                 return s;
11428             }
11429           return r;
11430         }
11431     }
11432 }
11433
11434 /* Return loc description representing "address" of integer value.
11435    This can appear only as toplevel expression.  */
11436
11437 static dw_loc_descr_ref
11438 address_of_int_loc_descriptor (int size, HOST_WIDE_INT i)
11439 {
11440   int litsize;
11441   dw_loc_descr_ref loc_result = NULL;
11442
11443   if (!(dwarf_version >= 4 || !dwarf_strict))
11444     return NULL;
11445
11446   litsize = size_of_int_loc_descriptor (i);
11447   /* Determine if DW_OP_stack_value or DW_OP_implicit_value
11448      is more compact.  For DW_OP_stack_value we need:
11449      litsize + 1 (DW_OP_stack_value)
11450      and for DW_OP_implicit_value:
11451      1 (DW_OP_implicit_value) + 1 (length) + size.  */
11452   if ((int) DWARF2_ADDR_SIZE >= size && litsize + 1 <= 1 + 1 + size)
11453     {
11454       loc_result = int_loc_descriptor (i);
11455       add_loc_descr (&loc_result,
11456                      new_loc_descr (DW_OP_stack_value, 0, 0));
11457       return loc_result;
11458     }
11459
11460   loc_result = new_loc_descr (DW_OP_implicit_value,
11461                               size, 0);
11462   loc_result->dw_loc_oprnd2.val_class = dw_val_class_const;
11463   loc_result->dw_loc_oprnd2.v.val_int = i;
11464   return loc_result;
11465 }
11466
11467 /* Return a location descriptor that designates a base+offset location.  */
11468
11469 static dw_loc_descr_ref
11470 based_loc_descr (rtx reg, HOST_WIDE_INT offset,
11471                  enum var_init_status initialized)
11472 {
11473   unsigned int regno;
11474   dw_loc_descr_ref result;
11475   dw_fde_ref fde = cfun->fde;
11476
11477   /* We only use "frame base" when we're sure we're talking about the
11478      post-prologue local stack frame.  We do this by *not* running
11479      register elimination until this point, and recognizing the special
11480      argument pointer and soft frame pointer rtx's.  */
11481   if (reg == arg_pointer_rtx || reg == frame_pointer_rtx)
11482     {
11483       rtx elim = (ira_use_lra_p
11484                   ? lra_eliminate_regs (reg, VOIDmode, NULL_RTX)
11485                   : eliminate_regs (reg, VOIDmode, NULL_RTX));
11486
11487       if (elim != reg)
11488         {
11489           if (GET_CODE (elim) == PLUS)
11490             {
11491               offset += INTVAL (XEXP (elim, 1));
11492               elim = XEXP (elim, 0);
11493             }
11494           gcc_assert ((SUPPORTS_STACK_ALIGNMENT
11495                        && (elim == hard_frame_pointer_rtx
11496                            || elim == stack_pointer_rtx))
11497                       || elim == (frame_pointer_needed
11498                                   ? hard_frame_pointer_rtx
11499                                   : stack_pointer_rtx));
11500
11501           /* If drap register is used to align stack, use frame
11502              pointer + offset to access stack variables.  If stack
11503              is aligned without drap, use stack pointer + offset to
11504              access stack variables.  */
11505           if (crtl->stack_realign_tried
11506               && reg == frame_pointer_rtx)
11507             {
11508               int base_reg
11509                 = DWARF_FRAME_REGNUM ((fde && fde->drap_reg != INVALID_REGNUM)
11510                                       ? HARD_FRAME_POINTER_REGNUM
11511                                       : REGNO (elim));
11512               return new_reg_loc_descr (base_reg, offset);
11513             }
11514
11515           gcc_assert (frame_pointer_fb_offset_valid);
11516           offset += frame_pointer_fb_offset;
11517           return new_loc_descr (DW_OP_fbreg, offset, 0);
11518         }
11519     }
11520
11521   regno = REGNO (reg);
11522 #ifdef LEAF_REG_REMAP
11523   if (crtl->uses_only_leaf_regs)
11524     {
11525       int leaf_reg = LEAF_REG_REMAP (regno);
11526       if (leaf_reg != -1)
11527         regno = (unsigned) leaf_reg;
11528     }
11529 #endif
11530   regno = DWARF_FRAME_REGNUM (regno);
11531
11532   if (!optimize && fde
11533       && (fde->drap_reg == regno || fde->vdrap_reg == regno))
11534     {
11535       /* Use cfa+offset to represent the location of arguments passed
11536          on the stack when drap is used to align stack.
11537          Only do this when not optimizing, for optimized code var-tracking
11538          is supposed to track where the arguments live and the register
11539          used as vdrap or drap in some spot might be used for something
11540          else in other part of the routine.  */
11541       return new_loc_descr (DW_OP_fbreg, offset, 0);
11542     }
11543
11544   if (regno <= 31)
11545     result = new_loc_descr ((enum dwarf_location_atom) (DW_OP_breg0 + regno),
11546                             offset, 0);
11547   else
11548     result = new_loc_descr (DW_OP_bregx, regno, offset);
11549
11550   if (initialized == VAR_INIT_STATUS_UNINITIALIZED)
11551     add_loc_descr (&result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
11552
11553   return result;
11554 }
11555
11556 /* Return true if this RTL expression describes a base+offset calculation.  */
11557
11558 static inline int
11559 is_based_loc (const_rtx rtl)
11560 {
11561   return (GET_CODE (rtl) == PLUS
11562           && ((REG_P (XEXP (rtl, 0))
11563                && REGNO (XEXP (rtl, 0)) < FIRST_PSEUDO_REGISTER
11564                && CONST_INT_P (XEXP (rtl, 1)))));
11565 }
11566
11567 /* Try to handle TLS MEMs, for which mem_loc_descriptor on XEXP (mem, 0)
11568    failed.  */
11569
11570 static dw_loc_descr_ref
11571 tls_mem_loc_descriptor (rtx mem)
11572 {
11573   tree base;
11574   dw_loc_descr_ref loc_result;
11575
11576   if (MEM_EXPR (mem) == NULL_TREE || !MEM_OFFSET_KNOWN_P (mem))
11577     return NULL;
11578
11579   base = get_base_address (MEM_EXPR (mem));
11580   if (base == NULL
11581       || TREE_CODE (base) != VAR_DECL
11582       || !DECL_THREAD_LOCAL_P (base))
11583     return NULL;
11584
11585   loc_result = loc_descriptor_from_tree (MEM_EXPR (mem), 1, NULL);
11586   if (loc_result == NULL)
11587     return NULL;
11588
11589   if (MEM_OFFSET (mem))
11590     loc_descr_plus_const (&loc_result, MEM_OFFSET (mem));
11591
11592   return loc_result;
11593 }
11594
11595 /* Output debug info about reason why we failed to expand expression as dwarf
11596    expression.  */
11597
11598 static void
11599 expansion_failed (tree expr, rtx rtl, char const *reason)
11600 {
11601   if (dump_file && (dump_flags & TDF_DETAILS))
11602     {
11603       fprintf (dump_file, "Failed to expand as dwarf: ");
11604       if (expr)
11605         print_generic_expr (dump_file, expr, dump_flags);
11606       if (rtl)
11607         {
11608           fprintf (dump_file, "\n");
11609           print_rtl (dump_file, rtl);
11610         }
11611       fprintf (dump_file, "\nReason: %s\n", reason);
11612     }
11613 }
11614
11615 /* Helper function for const_ok_for_output.  */
11616
11617 static bool
11618 const_ok_for_output_1 (rtx rtl)
11619 {
11620   if (GET_CODE (rtl) == UNSPEC)
11621     {
11622       /* If delegitimize_address couldn't do anything with the UNSPEC, assume
11623          we can't express it in the debug info.  */
11624 #ifdef ENABLE_CHECKING
11625       /* Don't complain about TLS UNSPECs, those are just too hard to
11626          delegitimize.  Note this could be a non-decl SYMBOL_REF such as
11627          one in a constant pool entry, so testing SYMBOL_REF_TLS_MODEL
11628          rather than DECL_THREAD_LOCAL_P is not just an optimization.  */
11629       if (XVECLEN (rtl, 0) == 0
11630           || GET_CODE (XVECEXP (rtl, 0, 0)) != SYMBOL_REF
11631           || SYMBOL_REF_TLS_MODEL (XVECEXP (rtl, 0, 0)) == TLS_MODEL_NONE)
11632         inform (current_function_decl
11633                 ? DECL_SOURCE_LOCATION (current_function_decl)
11634                 : UNKNOWN_LOCATION,
11635 #if NUM_UNSPEC_VALUES > 0
11636                 "non-delegitimized UNSPEC %s (%d) found in variable location",
11637                 ((XINT (rtl, 1) >= 0 && XINT (rtl, 1) < NUM_UNSPEC_VALUES)
11638                  ? unspec_strings[XINT (rtl, 1)] : "unknown"),
11639                 XINT (rtl, 1));
11640 #else
11641                 "non-delegitimized UNSPEC %d found in variable location",
11642                 XINT (rtl, 1));
11643 #endif
11644 #endif
11645       expansion_failed (NULL_TREE, rtl,
11646                         "UNSPEC hasn't been delegitimized.\n");
11647       return false;
11648     }
11649
11650   if (targetm.const_not_ok_for_debug_p (rtl))
11651     {
11652       expansion_failed (NULL_TREE, rtl,
11653                         "Expression rejected for debug by the backend.\n");
11654       return false;
11655     }
11656
11657   /* FIXME: Refer to PR60655. It is possible for simplification
11658      of rtl expressions in var tracking to produce such expressions.
11659      We should really identify / validate expressions
11660      enclosed in CONST that can be handled by assemblers on various
11661      targets and only handle legitimate cases here.  */
11662   if (GET_CODE (rtl) != SYMBOL_REF)
11663     {
11664       if (GET_CODE (rtl) == NOT)
11665         return false;
11666       return true;
11667     }
11668
11669   if (CONSTANT_POOL_ADDRESS_P (rtl))
11670     {
11671       bool marked;
11672       get_pool_constant_mark (rtl, &marked);
11673       /* If all references to this pool constant were optimized away,
11674          it was not output and thus we can't represent it.  */
11675       if (!marked)
11676         {
11677           expansion_failed (NULL_TREE, rtl,
11678                             "Constant was removed from constant pool.\n");
11679           return false;
11680         }
11681     }
11682
11683   if (SYMBOL_REF_TLS_MODEL (rtl) != TLS_MODEL_NONE)
11684     return false;
11685
11686   /* Avoid references to external symbols in debug info, on several targets
11687      the linker might even refuse to link when linking a shared library,
11688      and in many other cases the relocations for .debug_info/.debug_loc are
11689      dropped, so the address becomes zero anyway.  Hidden symbols, guaranteed
11690      to be defined within the same shared library or executable are fine.  */
11691   if (SYMBOL_REF_EXTERNAL_P (rtl))
11692     {
11693       tree decl = SYMBOL_REF_DECL (rtl);
11694
11695       if (decl == NULL || !targetm.binds_local_p (decl))
11696         {
11697           expansion_failed (NULL_TREE, rtl,
11698                             "Symbol not defined in current TU.\n");
11699           return false;
11700         }
11701     }
11702
11703   return true;
11704 }
11705
11706 /* Return true if constant RTL can be emitted in DW_OP_addr or
11707    DW_AT_const_value.  TLS SYMBOL_REFs, external SYMBOL_REFs or
11708    non-marked constant pool SYMBOL_REFs can't be referenced in it.  */
11709
11710 static bool
11711 const_ok_for_output (rtx rtl)
11712 {
11713   if (GET_CODE (rtl) == SYMBOL_REF)
11714     return const_ok_for_output_1 (rtl);
11715
11716   if (GET_CODE (rtl) == CONST)
11717     {
11718       subrtx_var_iterator::array_type array;
11719       FOR_EACH_SUBRTX_VAR (iter, array, XEXP (rtl, 0), ALL)
11720         if (!const_ok_for_output_1 (*iter))
11721           return false;
11722       return true;
11723     }
11724
11725   return true;
11726 }
11727
11728 /* Return a reference to DW_TAG_base_type corresponding to MODE and UNSIGNEDP
11729    if possible, NULL otherwise.  */
11730
11731 static dw_die_ref
11732 base_type_for_mode (machine_mode mode, bool unsignedp)
11733 {
11734   dw_die_ref type_die;
11735   tree type = lang_hooks.types.type_for_mode (mode, unsignedp);
11736
11737   if (type == NULL)
11738     return NULL;
11739   switch (TREE_CODE (type))
11740     {
11741     case INTEGER_TYPE:
11742     case REAL_TYPE:
11743       break;
11744     default:
11745       return NULL;
11746     }
11747   type_die = lookup_type_die (type);
11748   if (!type_die)
11749     type_die = modified_type_die (type, TYPE_UNQUALIFIED, comp_unit_die ());
11750   if (type_die == NULL || type_die->die_tag != DW_TAG_base_type)
11751     return NULL;
11752   return type_die;
11753 }
11754
11755 /* For OP descriptor assumed to be in unsigned MODE, convert it to a unsigned
11756    type matching MODE, or, if MODE is narrower than or as wide as
11757    DWARF2_ADDR_SIZE, untyped.  Return NULL if the conversion is not
11758    possible.  */
11759
11760 static dw_loc_descr_ref
11761 convert_descriptor_to_mode (machine_mode mode, dw_loc_descr_ref op)
11762 {
11763   machine_mode outer_mode = mode;
11764   dw_die_ref type_die;
11765   dw_loc_descr_ref cvt;
11766
11767   if (GET_MODE_SIZE (mode) <= DWARF2_ADDR_SIZE)
11768     {
11769       add_loc_descr (&op, new_loc_descr (DW_OP_GNU_convert, 0, 0));
11770       return op;
11771     }
11772   type_die = base_type_for_mode (outer_mode, 1);
11773   if (type_die == NULL)
11774     return NULL;
11775   cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
11776   cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
11777   cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
11778   cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
11779   add_loc_descr (&op, cvt);
11780   return op;
11781 }
11782
11783 /* Return location descriptor for comparison OP with operands OP0 and OP1.  */
11784
11785 static dw_loc_descr_ref
11786 compare_loc_descriptor (enum dwarf_location_atom op, dw_loc_descr_ref op0,
11787                         dw_loc_descr_ref op1)
11788 {
11789   dw_loc_descr_ref ret = op0;
11790   add_loc_descr (&ret, op1);
11791   add_loc_descr (&ret, new_loc_descr (op, 0, 0));
11792   if (STORE_FLAG_VALUE != 1)
11793     {
11794       add_loc_descr (&ret, int_loc_descriptor (STORE_FLAG_VALUE));
11795       add_loc_descr (&ret, new_loc_descr (DW_OP_mul, 0, 0));
11796     }
11797   return ret;
11798 }
11799
11800 /* Return location descriptor for signed comparison OP RTL.  */
11801
11802 static dw_loc_descr_ref
11803 scompare_loc_descriptor (enum dwarf_location_atom op, rtx rtl,
11804                          machine_mode mem_mode)
11805 {
11806   machine_mode op_mode = GET_MODE (XEXP (rtl, 0));
11807   dw_loc_descr_ref op0, op1;
11808   int shift;
11809
11810   if (op_mode == VOIDmode)
11811     op_mode = GET_MODE (XEXP (rtl, 1));
11812   if (op_mode == VOIDmode)
11813     return NULL;
11814
11815   if (dwarf_strict
11816       && (GET_MODE_CLASS (op_mode) != MODE_INT
11817           || GET_MODE_SIZE (op_mode) > DWARF2_ADDR_SIZE))
11818     return NULL;
11819
11820   op0 = mem_loc_descriptor (XEXP (rtl, 0), op_mode, mem_mode,
11821                             VAR_INIT_STATUS_INITIALIZED);
11822   op1 = mem_loc_descriptor (XEXP (rtl, 1), op_mode, mem_mode,
11823                             VAR_INIT_STATUS_INITIALIZED);
11824
11825   if (op0 == NULL || op1 == NULL)
11826     return NULL;
11827
11828   if (GET_MODE_CLASS (op_mode) != MODE_INT
11829       || GET_MODE_SIZE (op_mode) == DWARF2_ADDR_SIZE)
11830     return compare_loc_descriptor (op, op0, op1);
11831
11832   if (GET_MODE_SIZE (op_mode) > DWARF2_ADDR_SIZE)
11833     {
11834       dw_die_ref type_die = base_type_for_mode (op_mode, 0);
11835       dw_loc_descr_ref cvt;
11836
11837       if (type_die == NULL)
11838         return NULL;
11839       cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
11840       cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
11841       cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
11842       cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
11843       add_loc_descr (&op0, cvt);
11844       cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
11845       cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
11846       cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
11847       cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
11848       add_loc_descr (&op1, cvt);
11849       return compare_loc_descriptor (op, op0, op1);
11850     }
11851
11852   shift = (DWARF2_ADDR_SIZE - GET_MODE_SIZE (op_mode)) * BITS_PER_UNIT;
11853   /* For eq/ne, if the operands are known to be zero-extended,
11854      there is no need to do the fancy shifting up.  */
11855   if (op == DW_OP_eq || op == DW_OP_ne)
11856     {
11857       dw_loc_descr_ref last0, last1;
11858       for (last0 = op0; last0->dw_loc_next != NULL; last0 = last0->dw_loc_next)
11859         ;
11860       for (last1 = op1; last1->dw_loc_next != NULL; last1 = last1->dw_loc_next)
11861         ;
11862       /* deref_size zero extends, and for constants we can check
11863          whether they are zero extended or not.  */
11864       if (((last0->dw_loc_opc == DW_OP_deref_size
11865             && last0->dw_loc_oprnd1.v.val_int <= GET_MODE_SIZE (op_mode))
11866            || (CONST_INT_P (XEXP (rtl, 0))
11867                && (unsigned HOST_WIDE_INT) INTVAL (XEXP (rtl, 0))
11868                   == (INTVAL (XEXP (rtl, 0)) & GET_MODE_MASK (op_mode))))
11869           && ((last1->dw_loc_opc == DW_OP_deref_size
11870                && last1->dw_loc_oprnd1.v.val_int <= GET_MODE_SIZE (op_mode))
11871               || (CONST_INT_P (XEXP (rtl, 1))
11872                   && (unsigned HOST_WIDE_INT) INTVAL (XEXP (rtl, 1))
11873                      == (INTVAL (XEXP (rtl, 1)) & GET_MODE_MASK (op_mode)))))
11874         return compare_loc_descriptor (op, op0, op1);
11875
11876       /* EQ/NE comparison against constant in narrower type than
11877          DWARF2_ADDR_SIZE can be performed either as
11878          DW_OP_const1u <shift> DW_OP_shl DW_OP_const* <cst << shift>
11879          DW_OP_{eq,ne}
11880          or
11881          DW_OP_const*u <mode_mask> DW_OP_and DW_OP_const* <cst & mode_mask>
11882          DW_OP_{eq,ne}.  Pick whatever is shorter.  */
11883       if (CONST_INT_P (XEXP (rtl, 1))
11884           && GET_MODE_BITSIZE (op_mode) < HOST_BITS_PER_WIDE_INT
11885           && (size_of_int_loc_descriptor (shift) + 1
11886               + size_of_int_loc_descriptor (INTVAL (XEXP (rtl, 1)) << shift)
11887               >= size_of_int_loc_descriptor (GET_MODE_MASK (op_mode)) + 1
11888                  + size_of_int_loc_descriptor (INTVAL (XEXP (rtl, 1))
11889                                                & GET_MODE_MASK (op_mode))))
11890         {
11891           add_loc_descr (&op0, int_loc_descriptor (GET_MODE_MASK (op_mode)));
11892           add_loc_descr (&op0, new_loc_descr (DW_OP_and, 0, 0));
11893           op1 = int_loc_descriptor (INTVAL (XEXP (rtl, 1))
11894                                     & GET_MODE_MASK (op_mode));
11895           return compare_loc_descriptor (op, op0, op1);
11896         }
11897     }
11898   add_loc_descr (&op0, int_loc_descriptor (shift));
11899   add_loc_descr (&op0, new_loc_descr (DW_OP_shl, 0, 0));
11900   if (CONST_INT_P (XEXP (rtl, 1)))
11901     op1 = int_loc_descriptor (INTVAL (XEXP (rtl, 1)) << shift);
11902   else
11903     {
11904       add_loc_descr (&op1, int_loc_descriptor (shift));
11905       add_loc_descr (&op1, new_loc_descr (DW_OP_shl, 0, 0));
11906     }
11907   return compare_loc_descriptor (op, op0, op1);
11908 }
11909
11910 /* Return location descriptor for unsigned comparison OP RTL.  */
11911
11912 static dw_loc_descr_ref
11913 ucompare_loc_descriptor (enum dwarf_location_atom op, rtx rtl,
11914                          machine_mode mem_mode)
11915 {
11916   machine_mode op_mode = GET_MODE (XEXP (rtl, 0));
11917   dw_loc_descr_ref op0, op1;
11918
11919   if (op_mode == VOIDmode)
11920     op_mode = GET_MODE (XEXP (rtl, 1));
11921   if (op_mode == VOIDmode)
11922     return NULL;
11923   if (GET_MODE_CLASS (op_mode) != MODE_INT)
11924     return NULL;
11925
11926   if (dwarf_strict && GET_MODE_SIZE (op_mode) > DWARF2_ADDR_SIZE)
11927     return NULL;
11928
11929   op0 = mem_loc_descriptor (XEXP (rtl, 0), op_mode, mem_mode,
11930                             VAR_INIT_STATUS_INITIALIZED);
11931   op1 = mem_loc_descriptor (XEXP (rtl, 1), op_mode, mem_mode,
11932                             VAR_INIT_STATUS_INITIALIZED);
11933
11934   if (op0 == NULL || op1 == NULL)
11935     return NULL;
11936
11937   if (GET_MODE_SIZE (op_mode) < DWARF2_ADDR_SIZE)
11938     {
11939       HOST_WIDE_INT mask = GET_MODE_MASK (op_mode);
11940       dw_loc_descr_ref last0, last1;
11941       for (last0 = op0; last0->dw_loc_next != NULL; last0 = last0->dw_loc_next)
11942         ;
11943       for (last1 = op1; last1->dw_loc_next != NULL; last1 = last1->dw_loc_next)
11944         ;
11945       if (CONST_INT_P (XEXP (rtl, 0)))
11946         op0 = int_loc_descriptor (INTVAL (XEXP (rtl, 0)) & mask);
11947       /* deref_size zero extends, so no need to mask it again.  */
11948       else if (last0->dw_loc_opc != DW_OP_deref_size
11949                || last0->dw_loc_oprnd1.v.val_int > GET_MODE_SIZE (op_mode))
11950         {
11951           add_loc_descr (&op0, int_loc_descriptor (mask));
11952           add_loc_descr (&op0, new_loc_descr (DW_OP_and, 0, 0));
11953         }
11954       if (CONST_INT_P (XEXP (rtl, 1)))
11955         op1 = int_loc_descriptor (INTVAL (XEXP (rtl, 1)) & mask);
11956       /* deref_size zero extends, so no need to mask it again.  */
11957       else if (last1->dw_loc_opc != DW_OP_deref_size
11958                || last1->dw_loc_oprnd1.v.val_int > GET_MODE_SIZE (op_mode))
11959         {
11960           add_loc_descr (&op1, int_loc_descriptor (mask));
11961           add_loc_descr (&op1, new_loc_descr (DW_OP_and, 0, 0));
11962         }
11963     }
11964   else if (GET_MODE_SIZE (op_mode) == DWARF2_ADDR_SIZE)
11965     {
11966       HOST_WIDE_INT bias = 1;
11967       bias <<= (DWARF2_ADDR_SIZE * BITS_PER_UNIT - 1);
11968       add_loc_descr (&op0, new_loc_descr (DW_OP_plus_uconst, bias, 0));
11969       if (CONST_INT_P (XEXP (rtl, 1)))
11970         op1 = int_loc_descriptor ((unsigned HOST_WIDE_INT) bias
11971                                   + INTVAL (XEXP (rtl, 1)));
11972       else
11973         add_loc_descr (&op1, new_loc_descr (DW_OP_plus_uconst,
11974                                             bias, 0));
11975     }
11976   return compare_loc_descriptor (op, op0, op1);
11977 }
11978
11979 /* Return location descriptor for {U,S}{MIN,MAX}.  */
11980
11981 static dw_loc_descr_ref
11982 minmax_loc_descriptor (rtx rtl, machine_mode mode,
11983                        machine_mode mem_mode)
11984 {
11985   enum dwarf_location_atom op;
11986   dw_loc_descr_ref op0, op1, ret;
11987   dw_loc_descr_ref bra_node, drop_node;
11988
11989   if (dwarf_strict
11990       && (GET_MODE_CLASS (mode) != MODE_INT
11991           || GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE))
11992     return NULL;
11993
11994   op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
11995                             VAR_INIT_STATUS_INITIALIZED);
11996   op1 = mem_loc_descriptor (XEXP (rtl, 1), mode, mem_mode,
11997                             VAR_INIT_STATUS_INITIALIZED);
11998
11999   if (op0 == NULL || op1 == NULL)
12000     return NULL;
12001
12002   add_loc_descr (&op0, new_loc_descr (DW_OP_dup, 0, 0));
12003   add_loc_descr (&op1, new_loc_descr (DW_OP_swap, 0, 0));
12004   add_loc_descr (&op1, new_loc_descr (DW_OP_over, 0, 0));
12005   if (GET_CODE (rtl) == UMIN || GET_CODE (rtl) == UMAX)
12006     {
12007       if (GET_MODE_SIZE (mode) < DWARF2_ADDR_SIZE)
12008         {
12009           HOST_WIDE_INT mask = GET_MODE_MASK (mode);
12010           add_loc_descr (&op0, int_loc_descriptor (mask));
12011           add_loc_descr (&op0, new_loc_descr (DW_OP_and, 0, 0));
12012           add_loc_descr (&op1, int_loc_descriptor (mask));
12013           add_loc_descr (&op1, new_loc_descr (DW_OP_and, 0, 0));
12014         }
12015       else if (GET_MODE_SIZE (mode) == DWARF2_ADDR_SIZE)
12016         {
12017           HOST_WIDE_INT bias = 1;
12018           bias <<= (DWARF2_ADDR_SIZE * BITS_PER_UNIT - 1);
12019           add_loc_descr (&op0, new_loc_descr (DW_OP_plus_uconst, bias, 0));
12020           add_loc_descr (&op1, new_loc_descr (DW_OP_plus_uconst, bias, 0));
12021         }
12022     }
12023   else if (GET_MODE_CLASS (mode) == MODE_INT
12024            && GET_MODE_SIZE (mode) < DWARF2_ADDR_SIZE)
12025     {
12026       int shift = (DWARF2_ADDR_SIZE - GET_MODE_SIZE (mode)) * BITS_PER_UNIT;
12027       add_loc_descr (&op0, int_loc_descriptor (shift));
12028       add_loc_descr (&op0, new_loc_descr (DW_OP_shl, 0, 0));
12029       add_loc_descr (&op1, int_loc_descriptor (shift));
12030       add_loc_descr (&op1, new_loc_descr (DW_OP_shl, 0, 0));
12031     }
12032   else if (GET_MODE_CLASS (mode) == MODE_INT
12033            && GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE)
12034     {
12035       dw_die_ref type_die = base_type_for_mode (mode, 0);
12036       dw_loc_descr_ref cvt;
12037       if (type_die == NULL)
12038         return NULL;
12039       cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
12040       cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
12041       cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
12042       cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
12043       add_loc_descr (&op0, cvt);
12044       cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
12045       cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
12046       cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
12047       cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
12048       add_loc_descr (&op1, cvt);
12049     }
12050
12051   if (GET_CODE (rtl) == SMIN || GET_CODE (rtl) == UMIN)
12052     op = DW_OP_lt;
12053   else
12054     op = DW_OP_gt;
12055   ret = op0;
12056   add_loc_descr (&ret, op1);
12057   add_loc_descr (&ret, new_loc_descr (op, 0, 0));
12058   bra_node = new_loc_descr (DW_OP_bra, 0, 0);
12059   add_loc_descr (&ret, bra_node);
12060   add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
12061   drop_node = new_loc_descr (DW_OP_drop, 0, 0);
12062   add_loc_descr (&ret, drop_node);
12063   bra_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
12064   bra_node->dw_loc_oprnd1.v.val_loc = drop_node;
12065   if ((GET_CODE (rtl) == SMIN || GET_CODE (rtl) == SMAX)
12066       && GET_MODE_CLASS (mode) == MODE_INT
12067       && GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE)
12068     ret = convert_descriptor_to_mode (mode, ret);
12069   return ret;
12070 }
12071
12072 /* Helper function for mem_loc_descriptor.  Perform OP binary op,
12073    but after converting arguments to type_die, afterwards
12074    convert back to unsigned.  */
12075
12076 static dw_loc_descr_ref
12077 typed_binop (enum dwarf_location_atom op, rtx rtl, dw_die_ref type_die,
12078              machine_mode mode, machine_mode mem_mode)
12079 {
12080   dw_loc_descr_ref cvt, op0, op1;
12081
12082   if (type_die == NULL)
12083     return NULL;
12084   op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
12085                             VAR_INIT_STATUS_INITIALIZED);
12086   op1 = mem_loc_descriptor (XEXP (rtl, 1), mode, mem_mode,
12087                             VAR_INIT_STATUS_INITIALIZED);
12088   if (op0 == NULL || op1 == NULL)
12089     return NULL;
12090   cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
12091   cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
12092   cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
12093   cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
12094   add_loc_descr (&op0, cvt);
12095   cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
12096   cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
12097   cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
12098   cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
12099   add_loc_descr (&op1, cvt);
12100   add_loc_descr (&op0, op1);
12101   add_loc_descr (&op0, new_loc_descr (op, 0, 0));
12102   return convert_descriptor_to_mode (mode, op0);
12103 }
12104
12105 /* CLZ (where constV is CLZ_DEFINED_VALUE_AT_ZERO computed value,
12106    const0 is DW_OP_lit0 or corresponding typed constant,
12107    const1 is DW_OP_lit1 or corresponding typed constant
12108    and constMSB is constant with just the MSB bit set
12109    for the mode):
12110        DW_OP_dup DW_OP_bra <L1> DW_OP_drop constV DW_OP_skip <L4>
12111    L1: const0 DW_OP_swap
12112    L2: DW_OP_dup constMSB DW_OP_and DW_OP_bra <L3> const1 DW_OP_shl
12113        DW_OP_swap DW_OP_plus_uconst <1> DW_OP_swap DW_OP_skip <L2>
12114    L3: DW_OP_drop
12115    L4: DW_OP_nop
12116
12117    CTZ is similar:
12118        DW_OP_dup DW_OP_bra <L1> DW_OP_drop constV DW_OP_skip <L4>
12119    L1: const0 DW_OP_swap
12120    L2: DW_OP_dup const1 DW_OP_and DW_OP_bra <L3> const1 DW_OP_shr
12121        DW_OP_swap DW_OP_plus_uconst <1> DW_OP_swap DW_OP_skip <L2>
12122    L3: DW_OP_drop
12123    L4: DW_OP_nop
12124
12125    FFS is similar:
12126        DW_OP_dup DW_OP_bra <L1> DW_OP_drop const0 DW_OP_skip <L4>
12127    L1: const1 DW_OP_swap
12128    L2: DW_OP_dup const1 DW_OP_and DW_OP_bra <L3> const1 DW_OP_shr
12129        DW_OP_swap DW_OP_plus_uconst <1> DW_OP_swap DW_OP_skip <L2>
12130    L3: DW_OP_drop
12131    L4: DW_OP_nop  */
12132
12133 static dw_loc_descr_ref
12134 clz_loc_descriptor (rtx rtl, machine_mode mode,
12135                     machine_mode mem_mode)
12136 {
12137   dw_loc_descr_ref op0, ret, tmp;
12138   HOST_WIDE_INT valv;
12139   dw_loc_descr_ref l1jump, l1label;
12140   dw_loc_descr_ref l2jump, l2label;
12141   dw_loc_descr_ref l3jump, l3label;
12142   dw_loc_descr_ref l4jump, l4label;
12143   rtx msb;
12144
12145   if (GET_MODE_CLASS (mode) != MODE_INT
12146       || GET_MODE (XEXP (rtl, 0)) != mode)
12147     return NULL;
12148
12149   op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
12150                             VAR_INIT_STATUS_INITIALIZED);
12151   if (op0 == NULL)
12152     return NULL;
12153   ret = op0;
12154   if (GET_CODE (rtl) == CLZ)
12155     {
12156       if (!CLZ_DEFINED_VALUE_AT_ZERO (mode, valv))
12157         valv = GET_MODE_BITSIZE (mode);
12158     }
12159   else if (GET_CODE (rtl) == FFS)
12160     valv = 0;
12161   else if (!CTZ_DEFINED_VALUE_AT_ZERO (mode, valv))
12162     valv = GET_MODE_BITSIZE (mode);
12163   add_loc_descr (&ret, new_loc_descr (DW_OP_dup, 0, 0));
12164   l1jump = new_loc_descr (DW_OP_bra, 0, 0);
12165   add_loc_descr (&ret, l1jump);
12166   add_loc_descr (&ret, new_loc_descr (DW_OP_drop, 0, 0));
12167   tmp = mem_loc_descriptor (GEN_INT (valv), mode, mem_mode,
12168                             VAR_INIT_STATUS_INITIALIZED);
12169   if (tmp == NULL)
12170     return NULL;
12171   add_loc_descr (&ret, tmp);
12172   l4jump = new_loc_descr (DW_OP_skip, 0, 0);
12173   add_loc_descr (&ret, l4jump);
12174   l1label = mem_loc_descriptor (GET_CODE (rtl) == FFS
12175                                 ? const1_rtx : const0_rtx,
12176                                 mode, mem_mode,
12177                                 VAR_INIT_STATUS_INITIALIZED);
12178   if (l1label == NULL)
12179     return NULL;
12180   add_loc_descr (&ret, l1label);
12181   add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
12182   l2label = new_loc_descr (DW_OP_dup, 0, 0);
12183   add_loc_descr (&ret, l2label);
12184   if (GET_CODE (rtl) != CLZ)
12185     msb = const1_rtx;
12186   else if (GET_MODE_BITSIZE (mode) <= HOST_BITS_PER_WIDE_INT)
12187     msb = GEN_INT ((unsigned HOST_WIDE_INT) 1
12188                    << (GET_MODE_BITSIZE (mode) - 1));
12189   else
12190     msb = immed_wide_int_const
12191       (wi::set_bit_in_zero (GET_MODE_PRECISION (mode) - 1,
12192                             GET_MODE_PRECISION (mode)), mode);
12193   if (GET_CODE (msb) == CONST_INT && INTVAL (msb) < 0)
12194     tmp = new_loc_descr (HOST_BITS_PER_WIDE_INT == 32
12195                          ? DW_OP_const4u : HOST_BITS_PER_WIDE_INT == 64
12196                          ? DW_OP_const8u : DW_OP_constu, INTVAL (msb), 0);
12197   else
12198     tmp = mem_loc_descriptor (msb, mode, mem_mode,
12199                               VAR_INIT_STATUS_INITIALIZED);
12200   if (tmp == NULL)
12201     return NULL;
12202   add_loc_descr (&ret, tmp);
12203   add_loc_descr (&ret, new_loc_descr (DW_OP_and, 0, 0));
12204   l3jump = new_loc_descr (DW_OP_bra, 0, 0);
12205   add_loc_descr (&ret, l3jump);
12206   tmp = mem_loc_descriptor (const1_rtx, mode, mem_mode,
12207                             VAR_INIT_STATUS_INITIALIZED);
12208   if (tmp == NULL)
12209     return NULL;
12210   add_loc_descr (&ret, tmp);
12211   add_loc_descr (&ret, new_loc_descr (GET_CODE (rtl) == CLZ
12212                                       ? DW_OP_shl : DW_OP_shr, 0, 0));
12213   add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
12214   add_loc_descr (&ret, new_loc_descr (DW_OP_plus_uconst, 1, 0));
12215   add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
12216   l2jump = new_loc_descr (DW_OP_skip, 0, 0);
12217   add_loc_descr (&ret, l2jump);
12218   l3label = new_loc_descr (DW_OP_drop, 0, 0);
12219   add_loc_descr (&ret, l3label);
12220   l4label = new_loc_descr (DW_OP_nop, 0, 0);
12221   add_loc_descr (&ret, l4label);
12222   l1jump->dw_loc_oprnd1.val_class = dw_val_class_loc;
12223   l1jump->dw_loc_oprnd1.v.val_loc = l1label;
12224   l2jump->dw_loc_oprnd1.val_class = dw_val_class_loc;
12225   l2jump->dw_loc_oprnd1.v.val_loc = l2label;
12226   l3jump->dw_loc_oprnd1.val_class = dw_val_class_loc;
12227   l3jump->dw_loc_oprnd1.v.val_loc = l3label;
12228   l4jump->dw_loc_oprnd1.val_class = dw_val_class_loc;
12229   l4jump->dw_loc_oprnd1.v.val_loc = l4label;
12230   return ret;
12231 }
12232
12233 /* POPCOUNT (const0 is DW_OP_lit0 or corresponding typed constant,
12234    const1 is DW_OP_lit1 or corresponding typed constant):
12235        const0 DW_OP_swap
12236    L1: DW_OP_dup DW_OP_bra <L2> DW_OP_dup DW_OP_rot const1 DW_OP_and
12237        DW_OP_plus DW_OP_swap const1 DW_OP_shr DW_OP_skip <L1>
12238    L2: DW_OP_drop
12239
12240    PARITY is similar:
12241    L1: DW_OP_dup DW_OP_bra <L2> DW_OP_dup DW_OP_rot const1 DW_OP_and
12242        DW_OP_xor DW_OP_swap const1 DW_OP_shr DW_OP_skip <L1>
12243    L2: DW_OP_drop  */
12244
12245 static dw_loc_descr_ref
12246 popcount_loc_descriptor (rtx rtl, machine_mode mode,
12247                          machine_mode mem_mode)
12248 {
12249   dw_loc_descr_ref op0, ret, tmp;
12250   dw_loc_descr_ref l1jump, l1label;
12251   dw_loc_descr_ref l2jump, l2label;
12252
12253   if (GET_MODE_CLASS (mode) != MODE_INT
12254       || GET_MODE (XEXP (rtl, 0)) != mode)
12255     return NULL;
12256
12257   op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
12258                             VAR_INIT_STATUS_INITIALIZED);
12259   if (op0 == NULL)
12260     return NULL;
12261   ret = op0;
12262   tmp = mem_loc_descriptor (const0_rtx, mode, mem_mode,
12263                             VAR_INIT_STATUS_INITIALIZED);
12264   if (tmp == NULL)
12265     return NULL;
12266   add_loc_descr (&ret, tmp);
12267   add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
12268   l1label = new_loc_descr (DW_OP_dup, 0, 0);
12269   add_loc_descr (&ret, l1label);
12270   l2jump = new_loc_descr (DW_OP_bra, 0, 0);
12271   add_loc_descr (&ret, l2jump);
12272   add_loc_descr (&ret, new_loc_descr (DW_OP_dup, 0, 0));
12273   add_loc_descr (&ret, new_loc_descr (DW_OP_rot, 0, 0));
12274   tmp = mem_loc_descriptor (const1_rtx, mode, mem_mode,
12275                             VAR_INIT_STATUS_INITIALIZED);
12276   if (tmp == NULL)
12277     return NULL;
12278   add_loc_descr (&ret, tmp);
12279   add_loc_descr (&ret, new_loc_descr (DW_OP_and, 0, 0));
12280   add_loc_descr (&ret, new_loc_descr (GET_CODE (rtl) == POPCOUNT
12281                                       ? DW_OP_plus : DW_OP_xor, 0, 0));
12282   add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
12283   tmp = mem_loc_descriptor (const1_rtx, mode, mem_mode,
12284                             VAR_INIT_STATUS_INITIALIZED);
12285   add_loc_descr (&ret, tmp);
12286   add_loc_descr (&ret, new_loc_descr (DW_OP_shr, 0, 0));
12287   l1jump = new_loc_descr (DW_OP_skip, 0, 0);
12288   add_loc_descr (&ret, l1jump);
12289   l2label = new_loc_descr (DW_OP_drop, 0, 0);
12290   add_loc_descr (&ret, l2label);
12291   l1jump->dw_loc_oprnd1.val_class = dw_val_class_loc;
12292   l1jump->dw_loc_oprnd1.v.val_loc = l1label;
12293   l2jump->dw_loc_oprnd1.val_class = dw_val_class_loc;
12294   l2jump->dw_loc_oprnd1.v.val_loc = l2label;
12295   return ret;
12296 }
12297
12298 /* BSWAP (constS is initial shift count, either 56 or 24):
12299        constS const0
12300    L1: DW_OP_pick <2> constS DW_OP_pick <3> DW_OP_minus DW_OP_shr
12301        const255 DW_OP_and DW_OP_pick <2> DW_OP_shl DW_OP_or
12302        DW_OP_swap DW_OP_dup const0 DW_OP_eq DW_OP_bra <L2> const8
12303        DW_OP_minus DW_OP_swap DW_OP_skip <L1>
12304    L2: DW_OP_drop DW_OP_swap DW_OP_drop  */
12305
12306 static dw_loc_descr_ref
12307 bswap_loc_descriptor (rtx rtl, machine_mode mode,
12308                       machine_mode mem_mode)
12309 {
12310   dw_loc_descr_ref op0, ret, tmp;
12311   dw_loc_descr_ref l1jump, l1label;
12312   dw_loc_descr_ref l2jump, l2label;
12313
12314   if (GET_MODE_CLASS (mode) != MODE_INT
12315       || BITS_PER_UNIT != 8
12316       || (GET_MODE_BITSIZE (mode) != 32
12317           &&  GET_MODE_BITSIZE (mode) != 64))
12318     return NULL;
12319
12320   op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
12321                             VAR_INIT_STATUS_INITIALIZED);
12322   if (op0 == NULL)
12323     return NULL;
12324
12325   ret = op0;
12326   tmp = mem_loc_descriptor (GEN_INT (GET_MODE_BITSIZE (mode) - 8),
12327                             mode, mem_mode,
12328                             VAR_INIT_STATUS_INITIALIZED);
12329   if (tmp == NULL)
12330     return NULL;
12331   add_loc_descr (&ret, tmp);
12332   tmp = mem_loc_descriptor (const0_rtx, mode, mem_mode,
12333                             VAR_INIT_STATUS_INITIALIZED);
12334   if (tmp == NULL)
12335     return NULL;
12336   add_loc_descr (&ret, tmp);
12337   l1label = new_loc_descr (DW_OP_pick, 2, 0);
12338   add_loc_descr (&ret, l1label);
12339   tmp = mem_loc_descriptor (GEN_INT (GET_MODE_BITSIZE (mode) - 8),
12340                             mode, mem_mode,
12341                             VAR_INIT_STATUS_INITIALIZED);
12342   add_loc_descr (&ret, tmp);
12343   add_loc_descr (&ret, new_loc_descr (DW_OP_pick, 3, 0));
12344   add_loc_descr (&ret, new_loc_descr (DW_OP_minus, 0, 0));
12345   add_loc_descr (&ret, new_loc_descr (DW_OP_shr, 0, 0));
12346   tmp = mem_loc_descriptor (GEN_INT (255), mode, mem_mode,
12347                             VAR_INIT_STATUS_INITIALIZED);
12348   if (tmp == NULL)
12349     return NULL;
12350   add_loc_descr (&ret, tmp);
12351   add_loc_descr (&ret, new_loc_descr (DW_OP_and, 0, 0));
12352   add_loc_descr (&ret, new_loc_descr (DW_OP_pick, 2, 0));
12353   add_loc_descr (&ret, new_loc_descr (DW_OP_shl, 0, 0));
12354   add_loc_descr (&ret, new_loc_descr (DW_OP_or, 0, 0));
12355   add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
12356   add_loc_descr (&ret, new_loc_descr (DW_OP_dup, 0, 0));
12357   tmp = mem_loc_descriptor (const0_rtx, mode, mem_mode,
12358                             VAR_INIT_STATUS_INITIALIZED);
12359   add_loc_descr (&ret, tmp);
12360   add_loc_descr (&ret, new_loc_descr (DW_OP_eq, 0, 0));
12361   l2jump = new_loc_descr (DW_OP_bra, 0, 0);
12362   add_loc_descr (&ret, l2jump);
12363   tmp = mem_loc_descriptor (GEN_INT (8), mode, mem_mode,
12364                             VAR_INIT_STATUS_INITIALIZED);
12365   add_loc_descr (&ret, tmp);
12366   add_loc_descr (&ret, new_loc_descr (DW_OP_minus, 0, 0));
12367   add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
12368   l1jump = new_loc_descr (DW_OP_skip, 0, 0);
12369   add_loc_descr (&ret, l1jump);
12370   l2label = new_loc_descr (DW_OP_drop, 0, 0);
12371   add_loc_descr (&ret, l2label);
12372   add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
12373   add_loc_descr (&ret, new_loc_descr (DW_OP_drop, 0, 0));
12374   l1jump->dw_loc_oprnd1.val_class = dw_val_class_loc;
12375   l1jump->dw_loc_oprnd1.v.val_loc = l1label;
12376   l2jump->dw_loc_oprnd1.val_class = dw_val_class_loc;
12377   l2jump->dw_loc_oprnd1.v.val_loc = l2label;
12378   return ret;
12379 }
12380
12381 /* ROTATE (constMASK is mode mask, BITSIZE is bitsize of mode):
12382    DW_OP_over DW_OP_over DW_OP_shl [ constMASK DW_OP_and ] DW_OP_rot
12383    [ DW_OP_swap constMASK DW_OP_and DW_OP_swap ] DW_OP_neg
12384    DW_OP_plus_uconst <BITSIZE> DW_OP_shr DW_OP_or
12385
12386    ROTATERT is similar:
12387    DW_OP_over DW_OP_over DW_OP_neg DW_OP_plus_uconst <BITSIZE>
12388    DW_OP_shl [ constMASK DW_OP_and ] DW_OP_rot
12389    [ DW_OP_swap constMASK DW_OP_and DW_OP_swap ] DW_OP_shr DW_OP_or  */
12390
12391 static dw_loc_descr_ref
12392 rotate_loc_descriptor (rtx rtl, machine_mode mode,
12393                        machine_mode mem_mode)
12394 {
12395   rtx rtlop1 = XEXP (rtl, 1);
12396   dw_loc_descr_ref op0, op1, ret, mask[2] = { NULL, NULL };
12397   int i;
12398
12399   if (GET_MODE_CLASS (mode) != MODE_INT)
12400     return NULL;
12401
12402   if (GET_MODE (rtlop1) != VOIDmode
12403       && GET_MODE_BITSIZE (GET_MODE (rtlop1)) < GET_MODE_BITSIZE (mode))
12404     rtlop1 = gen_rtx_ZERO_EXTEND (mode, rtlop1);
12405   op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
12406                             VAR_INIT_STATUS_INITIALIZED);
12407   op1 = mem_loc_descriptor (rtlop1, mode, mem_mode,
12408                             VAR_INIT_STATUS_INITIALIZED);
12409   if (op0 == NULL || op1 == NULL)
12410     return NULL;
12411   if (GET_MODE_SIZE (mode) < DWARF2_ADDR_SIZE)
12412     for (i = 0; i < 2; i++)
12413       {
12414         if (GET_MODE_BITSIZE (mode) < HOST_BITS_PER_WIDE_INT)
12415           mask[i] = mem_loc_descriptor (GEN_INT (GET_MODE_MASK (mode)),
12416                                         mode, mem_mode,
12417                                         VAR_INIT_STATUS_INITIALIZED);
12418         else if (GET_MODE_BITSIZE (mode) == HOST_BITS_PER_WIDE_INT)
12419           mask[i] = new_loc_descr (HOST_BITS_PER_WIDE_INT == 32
12420                                    ? DW_OP_const4u
12421                                    : HOST_BITS_PER_WIDE_INT == 64
12422                                    ? DW_OP_const8u : DW_OP_constu,
12423                                    GET_MODE_MASK (mode), 0);
12424         else
12425           mask[i] = NULL;
12426         if (mask[i] == NULL)
12427           return NULL;
12428         add_loc_descr (&mask[i], new_loc_descr (DW_OP_and, 0, 0));
12429       }
12430   ret = op0;
12431   add_loc_descr (&ret, op1);
12432   add_loc_descr (&ret, new_loc_descr (DW_OP_over, 0, 0));
12433   add_loc_descr (&ret, new_loc_descr (DW_OP_over, 0, 0));
12434   if (GET_CODE (rtl) == ROTATERT)
12435     {
12436       add_loc_descr (&ret, new_loc_descr (DW_OP_neg, 0, 0));
12437       add_loc_descr (&ret, new_loc_descr (DW_OP_plus_uconst,
12438                                           GET_MODE_BITSIZE (mode), 0));
12439     }
12440   add_loc_descr (&ret, new_loc_descr (DW_OP_shl, 0, 0));
12441   if (mask[0] != NULL)
12442     add_loc_descr (&ret, mask[0]);
12443   add_loc_descr (&ret, new_loc_descr (DW_OP_rot, 0, 0));
12444   if (mask[1] != NULL)
12445     {
12446       add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
12447       add_loc_descr (&ret, mask[1]);
12448       add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
12449     }
12450   if (GET_CODE (rtl) == ROTATE)
12451     {
12452       add_loc_descr (&ret, new_loc_descr (DW_OP_neg, 0, 0));
12453       add_loc_descr (&ret, new_loc_descr (DW_OP_plus_uconst,
12454                                           GET_MODE_BITSIZE (mode), 0));
12455     }
12456   add_loc_descr (&ret, new_loc_descr (DW_OP_shr, 0, 0));
12457   add_loc_descr (&ret, new_loc_descr (DW_OP_or, 0, 0));
12458   return ret;
12459 }
12460
12461 /* Helper function for mem_loc_descriptor.  Return DW_OP_GNU_parameter_ref
12462    for DEBUG_PARAMETER_REF RTL.  */
12463
12464 static dw_loc_descr_ref
12465 parameter_ref_descriptor (rtx rtl)
12466 {
12467   dw_loc_descr_ref ret;
12468   dw_die_ref ref;
12469
12470   if (dwarf_strict)
12471     return NULL;
12472   gcc_assert (TREE_CODE (DEBUG_PARAMETER_REF_DECL (rtl)) == PARM_DECL);
12473   ref = lookup_decl_die (DEBUG_PARAMETER_REF_DECL (rtl));
12474   ret = new_loc_descr (DW_OP_GNU_parameter_ref, 0, 0);
12475   if (ref)
12476     {
12477       ret->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
12478       ret->dw_loc_oprnd1.v.val_die_ref.die = ref;
12479       ret->dw_loc_oprnd1.v.val_die_ref.external = 0;
12480     }
12481   else
12482     {
12483       ret->dw_loc_oprnd1.val_class = dw_val_class_decl_ref;
12484       ret->dw_loc_oprnd1.v.val_decl_ref = DEBUG_PARAMETER_REF_DECL (rtl);
12485     }
12486   return ret;
12487 }
12488
12489 /* The following routine converts the RTL for a variable or parameter
12490    (resident in memory) into an equivalent Dwarf representation of a
12491    mechanism for getting the address of that same variable onto the top of a
12492    hypothetical "address evaluation" stack.
12493
12494    When creating memory location descriptors, we are effectively transforming
12495    the RTL for a memory-resident object into its Dwarf postfix expression
12496    equivalent.  This routine recursively descends an RTL tree, turning
12497    it into Dwarf postfix code as it goes.
12498
12499    MODE is the mode that should be assumed for the rtl if it is VOIDmode.
12500
12501    MEM_MODE is the mode of the memory reference, needed to handle some
12502    autoincrement addressing modes.
12503
12504    Return 0 if we can't represent the location.  */
12505
12506 dw_loc_descr_ref
12507 mem_loc_descriptor (rtx rtl, machine_mode mode,
12508                     machine_mode mem_mode,
12509                     enum var_init_status initialized)
12510 {
12511   dw_loc_descr_ref mem_loc_result = NULL;
12512   enum dwarf_location_atom op;
12513   dw_loc_descr_ref op0, op1;
12514   rtx inner = NULL_RTX;
12515
12516   if (mode == VOIDmode)
12517     mode = GET_MODE (rtl);
12518
12519   /* Note that for a dynamically sized array, the location we will generate a
12520      description of here will be the lowest numbered location which is
12521      actually within the array.  That's *not* necessarily the same as the
12522      zeroth element of the array.  */
12523
12524   rtl = targetm.delegitimize_address (rtl);
12525
12526   if (mode != GET_MODE (rtl) && GET_MODE (rtl) != VOIDmode)
12527     return NULL;
12528
12529   switch (GET_CODE (rtl))
12530     {
12531     case POST_INC:
12532     case POST_DEC:
12533     case POST_MODIFY:
12534       return mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode, initialized);
12535
12536     case SUBREG:
12537       /* The case of a subreg may arise when we have a local (register)
12538          variable or a formal (register) parameter which doesn't quite fill
12539          up an entire register.  For now, just assume that it is
12540          legitimate to make the Dwarf info refer to the whole register which
12541          contains the given subreg.  */
12542       if (!subreg_lowpart_p (rtl))
12543         break;
12544       inner = SUBREG_REG (rtl);
12545     case TRUNCATE:
12546       if (inner == NULL_RTX)
12547         inner = XEXP (rtl, 0);
12548       if (GET_MODE_CLASS (mode) == MODE_INT
12549           && GET_MODE_CLASS (GET_MODE (inner)) == MODE_INT
12550           && (GET_MODE_SIZE (mode) <= DWARF2_ADDR_SIZE
12551 #ifdef POINTERS_EXTEND_UNSIGNED
12552               || (mode == Pmode && mem_mode != VOIDmode)
12553 #endif
12554              )
12555           && GET_MODE_SIZE (GET_MODE (inner)) <= DWARF2_ADDR_SIZE)
12556         {
12557           mem_loc_result = mem_loc_descriptor (inner,
12558                                                GET_MODE (inner),
12559                                                mem_mode, initialized);
12560           break;
12561         }
12562       if (dwarf_strict)
12563         break;
12564       if (GET_MODE_SIZE (mode) > GET_MODE_SIZE (GET_MODE (inner)))
12565         break;
12566       if (GET_MODE_SIZE (mode) != GET_MODE_SIZE (GET_MODE (inner))
12567           && (GET_MODE_CLASS (mode) != MODE_INT
12568               || GET_MODE_CLASS (GET_MODE (inner)) != MODE_INT))
12569         break;
12570       else
12571         {
12572           dw_die_ref type_die;
12573           dw_loc_descr_ref cvt;
12574
12575           mem_loc_result = mem_loc_descriptor (inner,
12576                                                GET_MODE (inner),
12577                                                mem_mode, initialized);
12578           if (mem_loc_result == NULL)
12579             break;
12580           type_die = base_type_for_mode (mode,
12581                                          GET_MODE_CLASS (mode) == MODE_INT);
12582           if (type_die == NULL)
12583             {
12584               mem_loc_result = NULL;
12585               break;
12586             }
12587           if (GET_MODE_SIZE (mode)
12588               != GET_MODE_SIZE (GET_MODE (inner)))
12589             cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
12590           else
12591             cvt = new_loc_descr (DW_OP_GNU_reinterpret, 0, 0);
12592           cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
12593           cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
12594           cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
12595           add_loc_descr (&mem_loc_result, cvt);
12596         }
12597       break;
12598
12599     case REG:
12600       if (GET_MODE_CLASS (mode) != MODE_INT
12601           || (GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE
12602               && rtl != arg_pointer_rtx
12603               && rtl != frame_pointer_rtx
12604 #ifdef POINTERS_EXTEND_UNSIGNED
12605               && (mode != Pmode || mem_mode == VOIDmode)
12606 #endif
12607               ))
12608         {
12609           dw_die_ref type_die;
12610           unsigned int dbx_regnum;
12611
12612           if (dwarf_strict)
12613             break;
12614           if (REGNO (rtl) > FIRST_PSEUDO_REGISTER)
12615             break;
12616           type_die = base_type_for_mode (mode,
12617                                          GET_MODE_CLASS (mode) == MODE_INT);
12618           if (type_die == NULL)
12619             break;
12620
12621           dbx_regnum = dbx_reg_number (rtl);
12622           if (dbx_regnum == IGNORED_DWARF_REGNUM)
12623             break;
12624           mem_loc_result = new_loc_descr (DW_OP_GNU_regval_type,
12625                                           dbx_regnum, 0);
12626           mem_loc_result->dw_loc_oprnd2.val_class = dw_val_class_die_ref;
12627           mem_loc_result->dw_loc_oprnd2.v.val_die_ref.die = type_die;
12628           mem_loc_result->dw_loc_oprnd2.v.val_die_ref.external = 0;
12629           break;
12630         }
12631       /* Whenever a register number forms a part of the description of the
12632          method for calculating the (dynamic) address of a memory resident
12633          object, DWARF rules require the register number be referred to as
12634          a "base register".  This distinction is not based in any way upon
12635          what category of register the hardware believes the given register
12636          belongs to.  This is strictly DWARF terminology we're dealing with
12637          here. Note that in cases where the location of a memory-resident
12638          data object could be expressed as: OP_ADD (OP_BASEREG (basereg),
12639          OP_CONST (0)) the actual DWARF location descriptor that we generate
12640          may just be OP_BASEREG (basereg).  This may look deceptively like
12641          the object in question was allocated to a register (rather than in
12642          memory) so DWARF consumers need to be aware of the subtle
12643          distinction between OP_REG and OP_BASEREG.  */
12644       if (REGNO (rtl) < FIRST_PSEUDO_REGISTER)
12645         mem_loc_result = based_loc_descr (rtl, 0, VAR_INIT_STATUS_INITIALIZED);
12646       else if (stack_realign_drap
12647                && crtl->drap_reg
12648                && crtl->args.internal_arg_pointer == rtl
12649                && REGNO (crtl->drap_reg) < FIRST_PSEUDO_REGISTER)
12650         {
12651           /* If RTL is internal_arg_pointer, which has been optimized
12652              out, use DRAP instead.  */
12653           mem_loc_result = based_loc_descr (crtl->drap_reg, 0,
12654                                             VAR_INIT_STATUS_INITIALIZED);
12655         }
12656       break;
12657
12658     case SIGN_EXTEND:
12659     case ZERO_EXTEND:
12660       if (GET_MODE_CLASS (mode) != MODE_INT)
12661         break;
12662       op0 = mem_loc_descriptor (XEXP (rtl, 0), GET_MODE (XEXP (rtl, 0)),
12663                                 mem_mode, VAR_INIT_STATUS_INITIALIZED);
12664       if (op0 == 0)
12665         break;
12666       else if (GET_CODE (rtl) == ZERO_EXTEND
12667                && GET_MODE_SIZE (mode) <= DWARF2_ADDR_SIZE
12668                && GET_MODE_BITSIZE (GET_MODE (XEXP (rtl, 0)))
12669                   < HOST_BITS_PER_WIDE_INT
12670                /* If DW_OP_const{1,2,4}u won't be used, it is shorter
12671                   to expand zero extend as two shifts instead of
12672                   masking.  */
12673                && GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0))) <= 4)
12674         {
12675           machine_mode imode = GET_MODE (XEXP (rtl, 0));
12676           mem_loc_result = op0;
12677           add_loc_descr (&mem_loc_result,
12678                          int_loc_descriptor (GET_MODE_MASK (imode)));
12679           add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_and, 0, 0));
12680         }
12681       else if (GET_MODE_SIZE (mode) <= DWARF2_ADDR_SIZE)
12682         {
12683           int shift = DWARF2_ADDR_SIZE
12684                       - GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0)));
12685           shift *= BITS_PER_UNIT;
12686           if (GET_CODE (rtl) == SIGN_EXTEND)
12687             op = DW_OP_shra;
12688           else
12689             op = DW_OP_shr;
12690           mem_loc_result = op0;
12691           add_loc_descr (&mem_loc_result, int_loc_descriptor (shift));
12692           add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_shl, 0, 0));
12693           add_loc_descr (&mem_loc_result, int_loc_descriptor (shift));
12694           add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
12695         }
12696       else if (!dwarf_strict)
12697         {
12698           dw_die_ref type_die1, type_die2;
12699           dw_loc_descr_ref cvt;
12700
12701           type_die1 = base_type_for_mode (GET_MODE (XEXP (rtl, 0)),
12702                                           GET_CODE (rtl) == ZERO_EXTEND);
12703           if (type_die1 == NULL)
12704             break;
12705           type_die2 = base_type_for_mode (mode, 1);
12706           if (type_die2 == NULL)
12707             break;
12708           mem_loc_result = op0;
12709           cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
12710           cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
12711           cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die1;
12712           cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
12713           add_loc_descr (&mem_loc_result, cvt);
12714           cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
12715           cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
12716           cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die2;
12717           cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
12718           add_loc_descr (&mem_loc_result, cvt);
12719         }
12720       break;
12721
12722     case MEM:
12723       {
12724         rtx new_rtl = avoid_constant_pool_reference (rtl);
12725         if (new_rtl != rtl)
12726           {
12727             mem_loc_result = mem_loc_descriptor (new_rtl, mode, mem_mode,
12728                                                  initialized);
12729             if (mem_loc_result != NULL)
12730               return mem_loc_result;
12731           }
12732       }
12733       mem_loc_result = mem_loc_descriptor (XEXP (rtl, 0),
12734                                            get_address_mode (rtl), mode,
12735                                            VAR_INIT_STATUS_INITIALIZED);
12736       if (mem_loc_result == NULL)
12737         mem_loc_result = tls_mem_loc_descriptor (rtl);
12738       if (mem_loc_result != NULL)
12739         {
12740           if (GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE
12741               || GET_MODE_CLASS (mode) != MODE_INT)
12742             {
12743               dw_die_ref type_die;
12744               dw_loc_descr_ref deref;
12745
12746               if (dwarf_strict)
12747                 return NULL;
12748               type_die
12749                 = base_type_for_mode (mode, GET_MODE_CLASS (mode) == MODE_INT);
12750               if (type_die == NULL)
12751                 return NULL;
12752               deref = new_loc_descr (DW_OP_GNU_deref_type,
12753                                      GET_MODE_SIZE (mode), 0);
12754               deref->dw_loc_oprnd2.val_class = dw_val_class_die_ref;
12755               deref->dw_loc_oprnd2.v.val_die_ref.die = type_die;
12756               deref->dw_loc_oprnd2.v.val_die_ref.external = 0;
12757               add_loc_descr (&mem_loc_result, deref);
12758             }
12759           else if (GET_MODE_SIZE (mode) == DWARF2_ADDR_SIZE)
12760             add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_deref, 0, 0));
12761           else
12762             add_loc_descr (&mem_loc_result,
12763                            new_loc_descr (DW_OP_deref_size,
12764                                           GET_MODE_SIZE (mode), 0));
12765         }
12766       break;
12767
12768     case LO_SUM:
12769       return mem_loc_descriptor (XEXP (rtl, 1), mode, mem_mode, initialized);
12770
12771     case LABEL_REF:
12772       /* Some ports can transform a symbol ref into a label ref, because
12773          the symbol ref is too far away and has to be dumped into a constant
12774          pool.  */
12775     case CONST:
12776     case SYMBOL_REF:
12777       if ((GET_MODE_CLASS (mode) != MODE_INT
12778            && GET_MODE_CLASS (mode) != MODE_PARTIAL_INT)
12779           || (GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE
12780 #ifdef POINTERS_EXTEND_UNSIGNED
12781               && (mode != Pmode || mem_mode == VOIDmode)
12782 #endif
12783               ))
12784         break;
12785       if (GET_CODE (rtl) == SYMBOL_REF
12786           && SYMBOL_REF_TLS_MODEL (rtl) != TLS_MODEL_NONE)
12787         {
12788           dw_loc_descr_ref temp;
12789
12790           /* If this is not defined, we have no way to emit the data.  */
12791           if (!targetm.have_tls || !targetm.asm_out.output_dwarf_dtprel)
12792             break;
12793
12794           temp = new_addr_loc_descr (rtl, dtprel_true);
12795
12796           mem_loc_result = new_loc_descr (DW_OP_GNU_push_tls_address, 0, 0);
12797           add_loc_descr (&mem_loc_result, temp);
12798
12799           break;
12800         }
12801
12802       if (!const_ok_for_output (rtl))
12803         break;
12804
12805     symref:
12806       mem_loc_result = new_addr_loc_descr (rtl, dtprel_false);
12807       vec_safe_push (used_rtx_array, rtl);
12808       break;
12809
12810     case CONCAT:
12811     case CONCATN:
12812     case VAR_LOCATION:
12813     case DEBUG_IMPLICIT_PTR:
12814       expansion_failed (NULL_TREE, rtl,
12815                         "CONCAT/CONCATN/VAR_LOCATION is handled only by loc_descriptor");
12816       return 0;
12817
12818     case ENTRY_VALUE:
12819       if (dwarf_strict)
12820         return NULL;
12821       if (REG_P (ENTRY_VALUE_EXP (rtl)))
12822         {
12823           if (GET_MODE_CLASS (mode) != MODE_INT
12824               || GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE)
12825             op0 = mem_loc_descriptor (ENTRY_VALUE_EXP (rtl), mode,
12826                                       VOIDmode, VAR_INIT_STATUS_INITIALIZED);
12827           else
12828             {
12829               unsigned int dbx_regnum = dbx_reg_number (ENTRY_VALUE_EXP (rtl));
12830               if (dbx_regnum == IGNORED_DWARF_REGNUM)
12831                 return NULL;
12832               op0 = one_reg_loc_descriptor (dbx_regnum,
12833                                             VAR_INIT_STATUS_INITIALIZED);
12834             }
12835         }
12836       else if (MEM_P (ENTRY_VALUE_EXP (rtl))
12837                && REG_P (XEXP (ENTRY_VALUE_EXP (rtl), 0)))
12838         {
12839           op0 = mem_loc_descriptor (ENTRY_VALUE_EXP (rtl), mode,
12840                                     VOIDmode, VAR_INIT_STATUS_INITIALIZED);
12841           if (op0 && op0->dw_loc_opc == DW_OP_fbreg)
12842             return NULL;
12843         }
12844       else
12845         gcc_unreachable ();
12846       if (op0 == NULL)
12847         return NULL;
12848       mem_loc_result = new_loc_descr (DW_OP_GNU_entry_value, 0, 0);
12849       mem_loc_result->dw_loc_oprnd1.val_class = dw_val_class_loc;
12850       mem_loc_result->dw_loc_oprnd1.v.val_loc = op0;
12851       break;
12852
12853     case DEBUG_PARAMETER_REF:
12854       mem_loc_result = parameter_ref_descriptor (rtl);
12855       break;
12856
12857     case PRE_MODIFY:
12858       /* Extract the PLUS expression nested inside and fall into
12859          PLUS code below.  */
12860       rtl = XEXP (rtl, 1);
12861       goto plus;
12862
12863     case PRE_INC:
12864     case PRE_DEC:
12865       /* Turn these into a PLUS expression and fall into the PLUS code
12866          below.  */
12867       rtl = gen_rtx_PLUS (mode, XEXP (rtl, 0),
12868                           gen_int_mode (GET_CODE (rtl) == PRE_INC
12869                                         ? GET_MODE_UNIT_SIZE (mem_mode)
12870                                         : -GET_MODE_UNIT_SIZE (mem_mode),
12871                                         mode));
12872
12873       /* ... fall through ...  */
12874
12875     case PLUS:
12876     plus:
12877       if (is_based_loc (rtl)
12878           && (GET_MODE_SIZE (mode) <= DWARF2_ADDR_SIZE
12879               || XEXP (rtl, 0) == arg_pointer_rtx
12880               || XEXP (rtl, 0) == frame_pointer_rtx)
12881           && GET_MODE_CLASS (mode) == MODE_INT)
12882         mem_loc_result = based_loc_descr (XEXP (rtl, 0),
12883                                           INTVAL (XEXP (rtl, 1)),
12884                                           VAR_INIT_STATUS_INITIALIZED);
12885       else
12886         {
12887           mem_loc_result = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
12888                                                VAR_INIT_STATUS_INITIALIZED);
12889           if (mem_loc_result == 0)
12890             break;
12891
12892           if (CONST_INT_P (XEXP (rtl, 1))
12893               && GET_MODE_SIZE (mode) <= DWARF2_ADDR_SIZE)
12894             loc_descr_plus_const (&mem_loc_result, INTVAL (XEXP (rtl, 1)));
12895           else
12896             {
12897               op1 = mem_loc_descriptor (XEXP (rtl, 1), mode, mem_mode,
12898                                         VAR_INIT_STATUS_INITIALIZED);
12899               if (op1 == 0)
12900                 return NULL;
12901               add_loc_descr (&mem_loc_result, op1);
12902               add_loc_descr (&mem_loc_result,
12903                              new_loc_descr (DW_OP_plus, 0, 0));
12904             }
12905         }
12906       break;
12907
12908     /* If a pseudo-reg is optimized away, it is possible for it to
12909        be replaced with a MEM containing a multiply or shift.  */
12910     case MINUS:
12911       op = DW_OP_minus;
12912       goto do_binop;
12913
12914     case MULT:
12915       op = DW_OP_mul;
12916       goto do_binop;
12917
12918     case DIV:
12919       if (!dwarf_strict
12920           && GET_MODE_CLASS (mode) == MODE_INT
12921           && GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE)
12922         {
12923           mem_loc_result = typed_binop (DW_OP_div, rtl,
12924                                         base_type_for_mode (mode, 0),
12925                                         mode, mem_mode);
12926           break;
12927         }
12928       op = DW_OP_div;
12929       goto do_binop;
12930
12931     case UMOD:
12932       op = DW_OP_mod;
12933       goto do_binop;
12934
12935     case ASHIFT:
12936       op = DW_OP_shl;
12937       goto do_shift;
12938
12939     case ASHIFTRT:
12940       op = DW_OP_shra;
12941       goto do_shift;
12942
12943     case LSHIFTRT:
12944       op = DW_OP_shr;
12945       goto do_shift;
12946
12947     do_shift:
12948       if (GET_MODE_CLASS (mode) != MODE_INT)
12949         break;
12950       op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
12951                                 VAR_INIT_STATUS_INITIALIZED);
12952       {
12953         rtx rtlop1 = XEXP (rtl, 1);
12954         if (GET_MODE (rtlop1) != VOIDmode
12955             && GET_MODE_BITSIZE (GET_MODE (rtlop1))
12956                < GET_MODE_BITSIZE (mode))
12957           rtlop1 = gen_rtx_ZERO_EXTEND (mode, rtlop1);
12958         op1 = mem_loc_descriptor (rtlop1, mode, mem_mode,
12959                                   VAR_INIT_STATUS_INITIALIZED);
12960       }
12961
12962       if (op0 == 0 || op1 == 0)
12963         break;
12964
12965       mem_loc_result = op0;
12966       add_loc_descr (&mem_loc_result, op1);
12967       add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
12968       break;
12969
12970     case AND:
12971       op = DW_OP_and;
12972       goto do_binop;
12973
12974     case IOR:
12975       op = DW_OP_or;
12976       goto do_binop;
12977
12978     case XOR:
12979       op = DW_OP_xor;
12980       goto do_binop;
12981
12982     do_binop:
12983       op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
12984                                 VAR_INIT_STATUS_INITIALIZED);
12985       op1 = mem_loc_descriptor (XEXP (rtl, 1), mode, mem_mode,
12986                                 VAR_INIT_STATUS_INITIALIZED);
12987
12988       if (op0 == 0 || op1 == 0)
12989         break;
12990
12991       mem_loc_result = op0;
12992       add_loc_descr (&mem_loc_result, op1);
12993       add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
12994       break;
12995
12996     case MOD:
12997       if (GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE && !dwarf_strict)
12998         {
12999           mem_loc_result = typed_binop (DW_OP_mod, rtl,
13000                                         base_type_for_mode (mode, 0),
13001                                         mode, mem_mode);
13002           break;
13003         }
13004
13005       op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
13006                                 VAR_INIT_STATUS_INITIALIZED);
13007       op1 = mem_loc_descriptor (XEXP (rtl, 1), mode, mem_mode,
13008                                 VAR_INIT_STATUS_INITIALIZED);
13009
13010       if (op0 == 0 || op1 == 0)
13011         break;
13012
13013       mem_loc_result = op0;
13014       add_loc_descr (&mem_loc_result, op1);
13015       add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_over, 0, 0));
13016       add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_over, 0, 0));
13017       add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_div, 0, 0));
13018       add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_mul, 0, 0));
13019       add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_minus, 0, 0));
13020       break;
13021
13022     case UDIV:
13023       if (!dwarf_strict && GET_MODE_CLASS (mode) == MODE_INT)
13024         {
13025           if (GET_MODE_CLASS (mode) > DWARF2_ADDR_SIZE)
13026             {
13027               op = DW_OP_div;
13028               goto do_binop;
13029             }
13030           mem_loc_result = typed_binop (DW_OP_div, rtl,
13031                                         base_type_for_mode (mode, 1),
13032                                         mode, mem_mode);
13033         }
13034       break;
13035
13036     case NOT:
13037       op = DW_OP_not;
13038       goto do_unop;
13039
13040     case ABS:
13041       op = DW_OP_abs;
13042       goto do_unop;
13043
13044     case NEG:
13045       op = DW_OP_neg;
13046       goto do_unop;
13047
13048     do_unop:
13049       op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
13050                                 VAR_INIT_STATUS_INITIALIZED);
13051
13052       if (op0 == 0)
13053         break;
13054
13055       mem_loc_result = op0;
13056       add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
13057       break;
13058
13059     case CONST_INT:
13060       if (GET_MODE_SIZE (mode) <= DWARF2_ADDR_SIZE
13061 #ifdef POINTERS_EXTEND_UNSIGNED
13062           || (mode == Pmode
13063               && mem_mode != VOIDmode
13064               && trunc_int_for_mode (INTVAL (rtl), ptr_mode) == INTVAL (rtl))
13065 #endif
13066           )
13067         {
13068           mem_loc_result = int_loc_descriptor (INTVAL (rtl));
13069           break;
13070         }
13071       if (!dwarf_strict
13072           && (GET_MODE_BITSIZE (mode) == HOST_BITS_PER_WIDE_INT
13073               || GET_MODE_BITSIZE (mode) == HOST_BITS_PER_DOUBLE_INT))
13074         {
13075           dw_die_ref type_die = base_type_for_mode (mode, 1);
13076           machine_mode amode;
13077           if (type_die == NULL)
13078             return NULL;
13079           amode = mode_for_size (DWARF2_ADDR_SIZE * BITS_PER_UNIT,
13080                                  MODE_INT, 0);
13081           if (INTVAL (rtl) >= 0
13082               && amode != BLKmode
13083               && trunc_int_for_mode (INTVAL (rtl), amode) == INTVAL (rtl)
13084               /* const DW_OP_GNU_convert <XXX> vs.
13085                  DW_OP_GNU_const_type <XXX, 1, const>.  */
13086               && size_of_int_loc_descriptor (INTVAL (rtl)) + 1 + 1
13087                  < (unsigned long) 1 + 1 + 1 + GET_MODE_SIZE (mode))
13088             {
13089               mem_loc_result = int_loc_descriptor (INTVAL (rtl));
13090               op0 = new_loc_descr (DW_OP_GNU_convert, 0, 0);
13091               op0->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
13092               op0->dw_loc_oprnd1.v.val_die_ref.die = type_die;
13093               op0->dw_loc_oprnd1.v.val_die_ref.external = 0;
13094               add_loc_descr (&mem_loc_result, op0);
13095               return mem_loc_result;
13096             }
13097           mem_loc_result = new_loc_descr (DW_OP_GNU_const_type, 0,
13098                                           INTVAL (rtl));
13099           mem_loc_result->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
13100           mem_loc_result->dw_loc_oprnd1.v.val_die_ref.die = type_die;
13101           mem_loc_result->dw_loc_oprnd1.v.val_die_ref.external = 0;
13102           if (GET_MODE_BITSIZE (mode) == HOST_BITS_PER_WIDE_INT)
13103             mem_loc_result->dw_loc_oprnd2.val_class = dw_val_class_const;
13104           else
13105             {
13106               mem_loc_result->dw_loc_oprnd2.val_class
13107                 = dw_val_class_const_double;
13108               mem_loc_result->dw_loc_oprnd2.v.val_double
13109                 = double_int::from_shwi (INTVAL (rtl));
13110             }
13111         }
13112       break;
13113
13114     case CONST_DOUBLE:
13115       if (!dwarf_strict)
13116         {
13117           dw_die_ref type_die;
13118
13119           /* Note that if TARGET_SUPPORTS_WIDE_INT == 0, a
13120              CONST_DOUBLE rtx could represent either a large integer
13121              or a floating-point constant.  If TARGET_SUPPORTS_WIDE_INT != 0,
13122              the value is always a floating point constant.
13123
13124              When it is an integer, a CONST_DOUBLE is used whenever
13125              the constant requires 2 HWIs to be adequately represented.
13126              We output CONST_DOUBLEs as blocks.  */
13127           if (mode == VOIDmode
13128               || (GET_MODE (rtl) == VOIDmode
13129                   && GET_MODE_BITSIZE (mode) != HOST_BITS_PER_DOUBLE_INT))
13130             break;
13131           type_die = base_type_for_mode (mode,
13132                                          GET_MODE_CLASS (mode) == MODE_INT);
13133           if (type_die == NULL)
13134             return NULL;
13135           mem_loc_result = new_loc_descr (DW_OP_GNU_const_type, 0, 0);
13136           mem_loc_result->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
13137           mem_loc_result->dw_loc_oprnd1.v.val_die_ref.die = type_die;
13138           mem_loc_result->dw_loc_oprnd1.v.val_die_ref.external = 0;
13139 #if TARGET_SUPPORTS_WIDE_INT == 0
13140           if (!SCALAR_FLOAT_MODE_P (mode))
13141             {
13142               mem_loc_result->dw_loc_oprnd2.val_class
13143                 = dw_val_class_const_double;
13144               mem_loc_result->dw_loc_oprnd2.v.val_double
13145                 = rtx_to_double_int (rtl);
13146             }
13147           else
13148 #endif
13149             {
13150               unsigned int length = GET_MODE_SIZE (mode);
13151               unsigned char *array = ggc_vec_alloc<unsigned char> (length);
13152
13153               insert_float (rtl, array);
13154               mem_loc_result->dw_loc_oprnd2.val_class = dw_val_class_vec;
13155               mem_loc_result->dw_loc_oprnd2.v.val_vec.length = length / 4;
13156               mem_loc_result->dw_loc_oprnd2.v.val_vec.elt_size = 4;
13157               mem_loc_result->dw_loc_oprnd2.v.val_vec.array = array;
13158             }
13159         }
13160       break;
13161
13162     case CONST_WIDE_INT:
13163       if (!dwarf_strict)
13164         {
13165           dw_die_ref type_die;
13166
13167           type_die = base_type_for_mode (mode,
13168                                          GET_MODE_CLASS (mode) == MODE_INT);
13169           if (type_die == NULL)
13170             return NULL;
13171           mem_loc_result = new_loc_descr (DW_OP_GNU_const_type, 0, 0);
13172           mem_loc_result->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
13173           mem_loc_result->dw_loc_oprnd1.v.val_die_ref.die = type_die;
13174           mem_loc_result->dw_loc_oprnd1.v.val_die_ref.external = 0;
13175           mem_loc_result->dw_loc_oprnd2.val_class
13176             = dw_val_class_wide_int;
13177           mem_loc_result->dw_loc_oprnd2.v.val_wide = ggc_alloc<wide_int> ();
13178           *mem_loc_result->dw_loc_oprnd2.v.val_wide = std::make_pair (rtl, mode);
13179         }
13180       break;
13181
13182     case EQ:
13183       mem_loc_result = scompare_loc_descriptor (DW_OP_eq, rtl, mem_mode);
13184       break;
13185
13186     case GE:
13187       mem_loc_result = scompare_loc_descriptor (DW_OP_ge, rtl, mem_mode);
13188       break;
13189
13190     case GT:
13191       mem_loc_result = scompare_loc_descriptor (DW_OP_gt, rtl, mem_mode);
13192       break;
13193
13194     case LE:
13195       mem_loc_result = scompare_loc_descriptor (DW_OP_le, rtl, mem_mode);
13196       break;
13197
13198     case LT:
13199       mem_loc_result = scompare_loc_descriptor (DW_OP_lt, rtl, mem_mode);
13200       break;
13201
13202     case NE:
13203       mem_loc_result = scompare_loc_descriptor (DW_OP_ne, rtl, mem_mode);
13204       break;
13205
13206     case GEU:
13207       mem_loc_result = ucompare_loc_descriptor (DW_OP_ge, rtl, mem_mode);
13208       break;
13209
13210     case GTU:
13211       mem_loc_result = ucompare_loc_descriptor (DW_OP_gt, rtl, mem_mode);
13212       break;
13213
13214     case LEU:
13215       mem_loc_result = ucompare_loc_descriptor (DW_OP_le, rtl, mem_mode);
13216       break;
13217
13218     case LTU:
13219       mem_loc_result = ucompare_loc_descriptor (DW_OP_lt, rtl, mem_mode);
13220       break;
13221
13222     case UMIN:
13223     case UMAX:
13224       if (GET_MODE_CLASS (mode) != MODE_INT)
13225         break;
13226       /* FALLTHRU */
13227     case SMIN:
13228     case SMAX:
13229       mem_loc_result = minmax_loc_descriptor (rtl, mode, mem_mode);
13230       break;
13231
13232     case ZERO_EXTRACT:
13233     case SIGN_EXTRACT:
13234       if (CONST_INT_P (XEXP (rtl, 1))
13235           && CONST_INT_P (XEXP (rtl, 2))
13236           && ((unsigned) INTVAL (XEXP (rtl, 1))
13237               + (unsigned) INTVAL (XEXP (rtl, 2))
13238               <= GET_MODE_BITSIZE (mode))
13239           && GET_MODE_CLASS (mode) == MODE_INT
13240           && GET_MODE_SIZE (mode) <= DWARF2_ADDR_SIZE
13241           && GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0))) <= DWARF2_ADDR_SIZE)
13242         {
13243           int shift, size;
13244           op0 = mem_loc_descriptor (XEXP (rtl, 0), GET_MODE (XEXP (rtl, 0)),
13245                                     mem_mode, VAR_INIT_STATUS_INITIALIZED);
13246           if (op0 == 0)
13247             break;
13248           if (GET_CODE (rtl) == SIGN_EXTRACT)
13249             op = DW_OP_shra;
13250           else
13251             op = DW_OP_shr;
13252           mem_loc_result = op0;
13253           size = INTVAL (XEXP (rtl, 1));
13254           shift = INTVAL (XEXP (rtl, 2));
13255           if (BITS_BIG_ENDIAN)
13256             shift = GET_MODE_BITSIZE (GET_MODE (XEXP (rtl, 0)))
13257                     - shift - size;
13258           if (shift + size != (int) DWARF2_ADDR_SIZE)
13259             {
13260               add_loc_descr (&mem_loc_result,
13261                              int_loc_descriptor (DWARF2_ADDR_SIZE
13262                                                  - shift - size));
13263               add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_shl, 0, 0));
13264             }
13265           if (size != (int) DWARF2_ADDR_SIZE)
13266             {
13267               add_loc_descr (&mem_loc_result,
13268                              int_loc_descriptor (DWARF2_ADDR_SIZE - size));
13269               add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
13270             }
13271         }
13272       break;
13273
13274     case IF_THEN_ELSE:
13275       {
13276         dw_loc_descr_ref op2, bra_node, drop_node;
13277         op0 = mem_loc_descriptor (XEXP (rtl, 0),
13278                                   GET_MODE (XEXP (rtl, 0)) == VOIDmode
13279                                   ? word_mode : GET_MODE (XEXP (rtl, 0)),
13280                                   mem_mode, VAR_INIT_STATUS_INITIALIZED);
13281         op1 = mem_loc_descriptor (XEXP (rtl, 1), mode, mem_mode,
13282                                   VAR_INIT_STATUS_INITIALIZED);
13283         op2 = mem_loc_descriptor (XEXP (rtl, 2), mode, mem_mode,
13284                                   VAR_INIT_STATUS_INITIALIZED);
13285         if (op0 == NULL || op1 == NULL || op2 == NULL)
13286           break;
13287
13288         mem_loc_result = op1;
13289         add_loc_descr (&mem_loc_result, op2);
13290         add_loc_descr (&mem_loc_result, op0);
13291         bra_node = new_loc_descr (DW_OP_bra, 0, 0);
13292         add_loc_descr (&mem_loc_result, bra_node);
13293         add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_swap, 0, 0));
13294         drop_node = new_loc_descr (DW_OP_drop, 0, 0);
13295         add_loc_descr (&mem_loc_result, drop_node);
13296         bra_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
13297         bra_node->dw_loc_oprnd1.v.val_loc = drop_node;
13298       }
13299       break;
13300
13301     case FLOAT_EXTEND:
13302     case FLOAT_TRUNCATE:
13303     case FLOAT:
13304     case UNSIGNED_FLOAT:
13305     case FIX:
13306     case UNSIGNED_FIX:
13307       if (!dwarf_strict)
13308         {
13309           dw_die_ref type_die;
13310           dw_loc_descr_ref cvt;
13311
13312           op0 = mem_loc_descriptor (XEXP (rtl, 0), GET_MODE (XEXP (rtl, 0)),
13313                                     mem_mode, VAR_INIT_STATUS_INITIALIZED);
13314           if (op0 == NULL)
13315             break;
13316           if (GET_MODE_CLASS (GET_MODE (XEXP (rtl, 0))) == MODE_INT
13317               && (GET_CODE (rtl) == FLOAT
13318                   || GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0)))
13319                      <= DWARF2_ADDR_SIZE))
13320             {
13321               type_die = base_type_for_mode (GET_MODE (XEXP (rtl, 0)),
13322                                              GET_CODE (rtl) == UNSIGNED_FLOAT);
13323               if (type_die == NULL)
13324                 break;
13325               cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
13326               cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
13327               cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
13328               cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
13329               add_loc_descr (&op0, cvt);
13330             }
13331           type_die = base_type_for_mode (mode, GET_CODE (rtl) == UNSIGNED_FIX);
13332           if (type_die == NULL)
13333             break;
13334           cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
13335           cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
13336           cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
13337           cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
13338           add_loc_descr (&op0, cvt);
13339           if (GET_MODE_CLASS (mode) == MODE_INT
13340               && (GET_CODE (rtl) == FIX
13341                   || GET_MODE_SIZE (mode) < DWARF2_ADDR_SIZE))
13342             {
13343               op0 = convert_descriptor_to_mode (mode, op0);
13344               if (op0 == NULL)
13345                 break;
13346             }
13347           mem_loc_result = op0;
13348         }
13349       break;
13350
13351     case CLZ:
13352     case CTZ:
13353     case FFS:
13354       mem_loc_result = clz_loc_descriptor (rtl, mode, mem_mode);
13355       break;
13356
13357     case POPCOUNT:
13358     case PARITY:
13359       mem_loc_result = popcount_loc_descriptor (rtl, mode, mem_mode);
13360       break;
13361
13362     case BSWAP:
13363       mem_loc_result = bswap_loc_descriptor (rtl, mode, mem_mode);
13364       break;
13365
13366     case ROTATE:
13367     case ROTATERT:
13368       mem_loc_result = rotate_loc_descriptor (rtl, mode, mem_mode);
13369       break;
13370
13371     case COMPARE:
13372       /* In theory, we could implement the above.  */
13373       /* DWARF cannot represent the unsigned compare operations
13374          natively.  */
13375     case SS_MULT:
13376     case US_MULT:
13377     case SS_DIV:
13378     case US_DIV:
13379     case SS_PLUS:
13380     case US_PLUS:
13381     case SS_MINUS:
13382     case US_MINUS:
13383     case SS_NEG:
13384     case US_NEG:
13385     case SS_ABS:
13386     case SS_ASHIFT:
13387     case US_ASHIFT:
13388     case SS_TRUNCATE:
13389     case US_TRUNCATE:
13390     case UNORDERED:
13391     case ORDERED:
13392     case UNEQ:
13393     case UNGE:
13394     case UNGT:
13395     case UNLE:
13396     case UNLT:
13397     case LTGT:
13398     case FRACT_CONVERT:
13399     case UNSIGNED_FRACT_CONVERT:
13400     case SAT_FRACT:
13401     case UNSIGNED_SAT_FRACT:
13402     case SQRT:
13403     case ASM_OPERANDS:
13404     case VEC_MERGE:
13405     case VEC_SELECT:
13406     case VEC_CONCAT:
13407     case VEC_DUPLICATE:
13408     case UNSPEC:
13409     case HIGH:
13410     case FMA:
13411     case STRICT_LOW_PART:
13412     case CONST_VECTOR:
13413     case CONST_FIXED:
13414     case CLRSB:
13415     case CLOBBER:
13416       /* If delegitimize_address couldn't do anything with the UNSPEC, we
13417          can't express it in the debug info.  This can happen e.g. with some
13418          TLS UNSPECs.  */
13419       break;
13420
13421     case CONST_STRING:
13422       resolve_one_addr (&rtl);
13423       goto symref;
13424
13425     default:
13426 #ifdef ENABLE_CHECKING
13427       print_rtl (stderr, rtl);
13428       gcc_unreachable ();
13429 #else
13430       break;
13431 #endif
13432     }
13433
13434   if (mem_loc_result && initialized == VAR_INIT_STATUS_UNINITIALIZED)
13435     add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
13436
13437   return mem_loc_result;
13438 }
13439
13440 /* Return a descriptor that describes the concatenation of two locations.
13441    This is typically a complex variable.  */
13442
13443 static dw_loc_descr_ref
13444 concat_loc_descriptor (rtx x0, rtx x1, enum var_init_status initialized)
13445 {
13446   dw_loc_descr_ref cc_loc_result = NULL;
13447   dw_loc_descr_ref x0_ref
13448     = loc_descriptor (x0, VOIDmode, VAR_INIT_STATUS_INITIALIZED);
13449   dw_loc_descr_ref x1_ref
13450     = loc_descriptor (x1, VOIDmode, VAR_INIT_STATUS_INITIALIZED);
13451
13452   if (x0_ref == 0 || x1_ref == 0)
13453     return 0;
13454
13455   cc_loc_result = x0_ref;
13456   add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x0)));
13457
13458   add_loc_descr (&cc_loc_result, x1_ref);
13459   add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x1)));
13460
13461   if (initialized == VAR_INIT_STATUS_UNINITIALIZED)
13462     add_loc_descr (&cc_loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
13463
13464   return cc_loc_result;
13465 }
13466
13467 /* Return a descriptor that describes the concatenation of N
13468    locations.  */
13469
13470 static dw_loc_descr_ref
13471 concatn_loc_descriptor (rtx concatn, enum var_init_status initialized)
13472 {
13473   unsigned int i;
13474   dw_loc_descr_ref cc_loc_result = NULL;
13475   unsigned int n = XVECLEN (concatn, 0);
13476
13477   for (i = 0; i < n; ++i)
13478     {
13479       dw_loc_descr_ref ref;
13480       rtx x = XVECEXP (concatn, 0, i);
13481
13482       ref = loc_descriptor (x, VOIDmode, VAR_INIT_STATUS_INITIALIZED);
13483       if (ref == NULL)
13484         return NULL;
13485
13486       add_loc_descr (&cc_loc_result, ref);
13487       add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x)));
13488     }
13489
13490   if (cc_loc_result && initialized == VAR_INIT_STATUS_UNINITIALIZED)
13491     add_loc_descr (&cc_loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
13492
13493   return cc_loc_result;
13494 }
13495
13496 /* Helper function for loc_descriptor.  Return DW_OP_GNU_implicit_pointer
13497    for DEBUG_IMPLICIT_PTR RTL.  */
13498
13499 static dw_loc_descr_ref
13500 implicit_ptr_descriptor (rtx rtl, HOST_WIDE_INT offset)
13501 {
13502   dw_loc_descr_ref ret;
13503   dw_die_ref ref;
13504
13505   if (dwarf_strict)
13506     return NULL;
13507   gcc_assert (TREE_CODE (DEBUG_IMPLICIT_PTR_DECL (rtl)) == VAR_DECL
13508               || TREE_CODE (DEBUG_IMPLICIT_PTR_DECL (rtl)) == PARM_DECL
13509               || TREE_CODE (DEBUG_IMPLICIT_PTR_DECL (rtl)) == RESULT_DECL);
13510   ref = lookup_decl_die (DEBUG_IMPLICIT_PTR_DECL (rtl));
13511   ret = new_loc_descr (DW_OP_GNU_implicit_pointer, 0, offset);
13512   ret->dw_loc_oprnd2.val_class = dw_val_class_const;
13513   if (ref)
13514     {
13515       ret->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
13516       ret->dw_loc_oprnd1.v.val_die_ref.die = ref;
13517       ret->dw_loc_oprnd1.v.val_die_ref.external = 0;
13518     }
13519   else
13520     {
13521       ret->dw_loc_oprnd1.val_class = dw_val_class_decl_ref;
13522       ret->dw_loc_oprnd1.v.val_decl_ref = DEBUG_IMPLICIT_PTR_DECL (rtl);
13523     }
13524   return ret;
13525 }
13526
13527 /* Output a proper Dwarf location descriptor for a variable or parameter
13528    which is either allocated in a register or in a memory location.  For a
13529    register, we just generate an OP_REG and the register number.  For a
13530    memory location we provide a Dwarf postfix expression describing how to
13531    generate the (dynamic) address of the object onto the address stack.
13532
13533    MODE is mode of the decl if this loc_descriptor is going to be used in
13534    .debug_loc section where DW_OP_stack_value and DW_OP_implicit_value are
13535    allowed, VOIDmode otherwise.
13536
13537    If we don't know how to describe it, return 0.  */
13538
13539 static dw_loc_descr_ref
13540 loc_descriptor (rtx rtl, machine_mode mode,
13541                 enum var_init_status initialized)
13542 {
13543   dw_loc_descr_ref loc_result = NULL;
13544
13545   switch (GET_CODE (rtl))
13546     {
13547     case SUBREG:
13548       /* The case of a subreg may arise when we have a local (register)
13549          variable or a formal (register) parameter which doesn't quite fill
13550          up an entire register.  For now, just assume that it is
13551          legitimate to make the Dwarf info refer to the whole register which
13552          contains the given subreg.  */
13553       if (REG_P (SUBREG_REG (rtl)) && subreg_lowpart_p (rtl))
13554         loc_result = loc_descriptor (SUBREG_REG (rtl),
13555                                      GET_MODE (SUBREG_REG (rtl)), initialized);
13556       else
13557         goto do_default;
13558       break;
13559
13560     case REG:
13561       loc_result = reg_loc_descriptor (rtl, initialized);
13562       break;
13563
13564     case MEM:
13565       loc_result = mem_loc_descriptor (XEXP (rtl, 0), get_address_mode (rtl),
13566                                        GET_MODE (rtl), initialized);
13567       if (loc_result == NULL)
13568         loc_result = tls_mem_loc_descriptor (rtl);
13569       if (loc_result == NULL)
13570         {
13571           rtx new_rtl = avoid_constant_pool_reference (rtl);
13572           if (new_rtl != rtl)
13573             loc_result = loc_descriptor (new_rtl, mode, initialized);
13574         }
13575       break;
13576
13577     case CONCAT:
13578       loc_result = concat_loc_descriptor (XEXP (rtl, 0), XEXP (rtl, 1),
13579                                           initialized);
13580       break;
13581
13582     case CONCATN:
13583       loc_result = concatn_loc_descriptor (rtl, initialized);
13584       break;
13585
13586     case VAR_LOCATION:
13587       /* Single part.  */
13588       if (GET_CODE (PAT_VAR_LOCATION_LOC (rtl)) != PARALLEL)
13589         {
13590           rtx loc = PAT_VAR_LOCATION_LOC (rtl);
13591           if (GET_CODE (loc) == EXPR_LIST)
13592             loc = XEXP (loc, 0);
13593           loc_result = loc_descriptor (loc, mode, initialized);
13594           break;
13595         }
13596
13597       rtl = XEXP (rtl, 1);
13598       /* FALLTHRU */
13599
13600     case PARALLEL:
13601       {
13602         rtvec par_elems = XVEC (rtl, 0);
13603         int num_elem = GET_NUM_ELEM (par_elems);
13604         machine_mode mode;
13605         int i;
13606
13607         /* Create the first one, so we have something to add to.  */
13608         loc_result = loc_descriptor (XEXP (RTVEC_ELT (par_elems, 0), 0),
13609                                      VOIDmode, initialized);
13610         if (loc_result == NULL)
13611           return NULL;
13612         mode = GET_MODE (XEXP (RTVEC_ELT (par_elems, 0), 0));
13613         add_loc_descr_op_piece (&loc_result, GET_MODE_SIZE (mode));
13614         for (i = 1; i < num_elem; i++)
13615           {
13616             dw_loc_descr_ref temp;
13617
13618             temp = loc_descriptor (XEXP (RTVEC_ELT (par_elems, i), 0),
13619                                    VOIDmode, initialized);
13620             if (temp == NULL)
13621               return NULL;
13622             add_loc_descr (&loc_result, temp);
13623             mode = GET_MODE (XEXP (RTVEC_ELT (par_elems, i), 0));
13624             add_loc_descr_op_piece (&loc_result, GET_MODE_SIZE (mode));
13625           }
13626       }
13627       break;
13628
13629     case CONST_INT:
13630       if (mode != VOIDmode && mode != BLKmode)
13631         loc_result = address_of_int_loc_descriptor (GET_MODE_SIZE (mode),
13632                                                     INTVAL (rtl));
13633       break;
13634
13635     case CONST_DOUBLE:
13636       if (mode == VOIDmode)
13637         mode = GET_MODE (rtl);
13638
13639       if (mode != VOIDmode && (dwarf_version >= 4 || !dwarf_strict))
13640         {
13641           gcc_assert (mode == GET_MODE (rtl) || VOIDmode == GET_MODE (rtl));
13642
13643           /* Note that a CONST_DOUBLE rtx could represent either an integer
13644              or a floating-point constant.  A CONST_DOUBLE is used whenever
13645              the constant requires more than one word in order to be
13646              adequately represented.  We output CONST_DOUBLEs as blocks.  */
13647           loc_result = new_loc_descr (DW_OP_implicit_value,
13648                                       GET_MODE_SIZE (mode), 0);
13649 #if TARGET_SUPPORTS_WIDE_INT == 0
13650           if (!SCALAR_FLOAT_MODE_P (mode))
13651             {
13652               loc_result->dw_loc_oprnd2.val_class = dw_val_class_const_double;
13653               loc_result->dw_loc_oprnd2.v.val_double
13654                 = rtx_to_double_int (rtl);
13655             }
13656           else
13657 #endif
13658             {
13659               unsigned int length = GET_MODE_SIZE (mode);
13660               unsigned char *array = ggc_vec_alloc<unsigned char> (length);
13661
13662               insert_float (rtl, array);
13663               loc_result->dw_loc_oprnd2.val_class = dw_val_class_vec;
13664               loc_result->dw_loc_oprnd2.v.val_vec.length = length / 4;
13665               loc_result->dw_loc_oprnd2.v.val_vec.elt_size = 4;
13666               loc_result->dw_loc_oprnd2.v.val_vec.array = array;
13667             }
13668         }
13669       break;
13670
13671     case CONST_WIDE_INT:
13672       if (mode == VOIDmode)
13673         mode = GET_MODE (rtl);
13674
13675       if (mode != VOIDmode && (dwarf_version >= 4 || !dwarf_strict))
13676         {
13677           loc_result = new_loc_descr (DW_OP_implicit_value,
13678                                       GET_MODE_SIZE (mode), 0);
13679           loc_result->dw_loc_oprnd2.val_class = dw_val_class_wide_int;
13680           loc_result->dw_loc_oprnd2.v.val_wide = ggc_alloc<wide_int> ();
13681           *loc_result->dw_loc_oprnd2.v.val_wide = std::make_pair (rtl, mode);
13682         }
13683       break;
13684
13685     case CONST_VECTOR:
13686       if (mode == VOIDmode)
13687         mode = GET_MODE (rtl);
13688
13689       if (mode != VOIDmode && (dwarf_version >= 4 || !dwarf_strict))
13690         {
13691           unsigned int elt_size = GET_MODE_UNIT_SIZE (GET_MODE (rtl));
13692           unsigned int length = CONST_VECTOR_NUNITS (rtl);
13693           unsigned char *array
13694             = ggc_vec_alloc<unsigned char> (length * elt_size);
13695           unsigned int i;
13696           unsigned char *p;
13697           machine_mode imode = GET_MODE_INNER (mode);
13698
13699           gcc_assert (mode == GET_MODE (rtl) || VOIDmode == GET_MODE (rtl));
13700           switch (GET_MODE_CLASS (mode))
13701             {
13702             case MODE_VECTOR_INT:
13703               for (i = 0, p = array; i < length; i++, p += elt_size)
13704                 {
13705                   rtx elt = CONST_VECTOR_ELT (rtl, i);
13706                   insert_wide_int (std::make_pair (elt, imode), p, elt_size);
13707                 }
13708               break;
13709
13710             case MODE_VECTOR_FLOAT:
13711               for (i = 0, p = array; i < length; i++, p += elt_size)
13712                 {
13713                   rtx elt = CONST_VECTOR_ELT (rtl, i);
13714                   insert_float (elt, p);
13715                 }
13716               break;
13717
13718             default:
13719               gcc_unreachable ();
13720             }
13721
13722           loc_result = new_loc_descr (DW_OP_implicit_value,
13723                                       length * elt_size, 0);
13724           loc_result->dw_loc_oprnd2.val_class = dw_val_class_vec;
13725           loc_result->dw_loc_oprnd2.v.val_vec.length = length;
13726           loc_result->dw_loc_oprnd2.v.val_vec.elt_size = elt_size;
13727           loc_result->dw_loc_oprnd2.v.val_vec.array = array;
13728         }
13729       break;
13730
13731     case CONST:
13732       if (mode == VOIDmode
13733           || CONST_SCALAR_INT_P (XEXP (rtl, 0))
13734           || CONST_DOUBLE_AS_FLOAT_P (XEXP (rtl, 0))
13735           || GET_CODE (XEXP (rtl, 0)) == CONST_VECTOR)
13736         {
13737           loc_result = loc_descriptor (XEXP (rtl, 0), mode, initialized);
13738           break;
13739         }
13740       /* FALLTHROUGH */
13741     case SYMBOL_REF:
13742       if (!const_ok_for_output (rtl))
13743         break;
13744     case LABEL_REF:
13745       if (mode != VOIDmode && GET_MODE_SIZE (mode) == DWARF2_ADDR_SIZE
13746           && (dwarf_version >= 4 || !dwarf_strict))
13747         {
13748          loc_result = new_addr_loc_descr (rtl, dtprel_false);
13749           add_loc_descr (&loc_result, new_loc_descr (DW_OP_stack_value, 0, 0));
13750           vec_safe_push (used_rtx_array, rtl);
13751         }
13752       break;
13753
13754     case DEBUG_IMPLICIT_PTR:
13755       loc_result = implicit_ptr_descriptor (rtl, 0);
13756       break;
13757
13758     case PLUS:
13759       if (GET_CODE (XEXP (rtl, 0)) == DEBUG_IMPLICIT_PTR
13760           && CONST_INT_P (XEXP (rtl, 1)))
13761         {
13762           loc_result
13763             = implicit_ptr_descriptor (XEXP (rtl, 0), INTVAL (XEXP (rtl, 1)));
13764           break;
13765         }
13766       /* FALLTHRU */
13767     do_default:
13768     default:
13769       if ((GET_MODE_CLASS (mode) == MODE_INT && GET_MODE (rtl) == mode
13770            && GET_MODE_SIZE (GET_MODE (rtl)) <= DWARF2_ADDR_SIZE
13771            && dwarf_version >= 4)
13772           || (!dwarf_strict && mode != VOIDmode && mode != BLKmode))
13773         {
13774           /* Value expression.  */
13775           loc_result = mem_loc_descriptor (rtl, mode, VOIDmode, initialized);
13776           if (loc_result)
13777             add_loc_descr (&loc_result,
13778                            new_loc_descr (DW_OP_stack_value, 0, 0));
13779         }
13780       break;
13781     }
13782
13783   return loc_result;
13784 }
13785
13786 /* We need to figure out what section we should use as the base for the
13787    address ranges where a given location is valid.
13788    1. If this particular DECL has a section associated with it, use that.
13789    2. If this function has a section associated with it, use that.
13790    3. Otherwise, use the text section.
13791    XXX: If you split a variable across multiple sections, we won't notice.  */
13792
13793 static const char *
13794 secname_for_decl (const_tree decl)
13795 {
13796   const char *secname;
13797
13798   if (VAR_OR_FUNCTION_DECL_P (decl)
13799       && (DECL_EXTERNAL (decl) || TREE_PUBLIC (decl) || TREE_STATIC (decl))
13800       && DECL_SECTION_NAME (decl))
13801     secname = DECL_SECTION_NAME (decl);
13802   else if (current_function_decl && DECL_SECTION_NAME (current_function_decl))
13803     secname = DECL_SECTION_NAME (current_function_decl);
13804   else if (cfun && in_cold_section_p)
13805     secname = crtl->subsections.cold_section_label;
13806   else
13807     secname = text_section_label;
13808
13809   return secname;
13810 }
13811
13812 /* Return true when DECL_BY_REFERENCE is defined and set for DECL.  */
13813
13814 static bool
13815 decl_by_reference_p (tree decl)
13816 {
13817   return ((TREE_CODE (decl) == PARM_DECL || TREE_CODE (decl) == RESULT_DECL
13818            || TREE_CODE (decl) == VAR_DECL)
13819           && DECL_BY_REFERENCE (decl));
13820 }
13821
13822 /* Helper function for dw_loc_list.  Compute proper Dwarf location descriptor
13823    for VARLOC.  */
13824
13825 static dw_loc_descr_ref
13826 dw_loc_list_1 (tree loc, rtx varloc, int want_address,
13827                enum var_init_status initialized)
13828 {
13829   int have_address = 0;
13830   dw_loc_descr_ref descr;
13831   machine_mode mode;
13832
13833   if (want_address != 2)
13834     {
13835       gcc_assert (GET_CODE (varloc) == VAR_LOCATION);
13836       /* Single part.  */
13837       if (GET_CODE (PAT_VAR_LOCATION_LOC (varloc)) != PARALLEL)
13838         {
13839           varloc = PAT_VAR_LOCATION_LOC (varloc);
13840           if (GET_CODE (varloc) == EXPR_LIST)
13841             varloc = XEXP (varloc, 0);
13842           mode = GET_MODE (varloc);
13843           if (MEM_P (varloc))
13844             {
13845               rtx addr = XEXP (varloc, 0);
13846               descr = mem_loc_descriptor (addr, get_address_mode (varloc),
13847                                           mode, initialized);
13848               if (descr)
13849                 have_address = 1;
13850               else
13851                 {
13852                   rtx x = avoid_constant_pool_reference (varloc);
13853                   if (x != varloc)
13854                     descr = mem_loc_descriptor (x, mode, VOIDmode,
13855                                                 initialized);
13856                 }
13857             }
13858           else
13859             descr = mem_loc_descriptor (varloc, mode, VOIDmode, initialized);
13860         }
13861       else
13862         return 0;
13863     }
13864   else
13865     {
13866       if (GET_CODE (varloc) == VAR_LOCATION)
13867         mode = DECL_MODE (PAT_VAR_LOCATION_DECL (varloc));
13868       else
13869         mode = DECL_MODE (loc);
13870       descr = loc_descriptor (varloc, mode, initialized);
13871       have_address = 1;
13872     }
13873
13874   if (!descr)
13875     return 0;
13876
13877   if (want_address == 2 && !have_address
13878       && (dwarf_version >= 4 || !dwarf_strict))
13879     {
13880       if (int_size_in_bytes (TREE_TYPE (loc)) > DWARF2_ADDR_SIZE)
13881         {
13882           expansion_failed (loc, NULL_RTX,
13883                             "DWARF address size mismatch");
13884           return 0;
13885         }
13886       add_loc_descr (&descr, new_loc_descr (DW_OP_stack_value, 0, 0));
13887       have_address = 1;
13888     }
13889   /* Show if we can't fill the request for an address.  */
13890   if (want_address && !have_address)
13891     {
13892       expansion_failed (loc, NULL_RTX,
13893                         "Want address and only have value");
13894       return 0;
13895     }
13896
13897   /* If we've got an address and don't want one, dereference.  */
13898   if (!want_address && have_address)
13899     {
13900       HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (loc));
13901       enum dwarf_location_atom op;
13902
13903       if (size > DWARF2_ADDR_SIZE || size == -1)
13904         {
13905           expansion_failed (loc, NULL_RTX,
13906                             "DWARF address size mismatch");
13907           return 0;
13908         }
13909       else if (size == DWARF2_ADDR_SIZE)
13910         op = DW_OP_deref;
13911       else
13912         op = DW_OP_deref_size;
13913
13914       add_loc_descr (&descr, new_loc_descr (op, size, 0));
13915     }
13916
13917   return descr;
13918 }
13919
13920 /* Create a DW_OP_piece or DW_OP_bit_piece for bitsize, or return NULL
13921    if it is not possible.  */
13922
13923 static dw_loc_descr_ref
13924 new_loc_descr_op_bit_piece (HOST_WIDE_INT bitsize, HOST_WIDE_INT offset)
13925 {
13926   if ((bitsize % BITS_PER_UNIT) == 0 && offset == 0)
13927     return new_loc_descr (DW_OP_piece, bitsize / BITS_PER_UNIT, 0);
13928   else if (dwarf_version >= 3 || !dwarf_strict)
13929     return new_loc_descr (DW_OP_bit_piece, bitsize, offset);
13930   else
13931     return NULL;
13932 }
13933
13934 /* Helper function for dw_loc_list.  Compute proper Dwarf location descriptor
13935    for VAR_LOC_NOTE for variable DECL that has been optimized by SRA.  */
13936
13937 static dw_loc_descr_ref
13938 dw_sra_loc_expr (tree decl, rtx loc)
13939 {
13940   rtx p;
13941   unsigned HOST_WIDE_INT padsize = 0;
13942   dw_loc_descr_ref descr, *descr_tail;
13943   unsigned HOST_WIDE_INT decl_size;
13944   rtx varloc;
13945   enum var_init_status initialized;
13946
13947   if (DECL_SIZE (decl) == NULL
13948       || !tree_fits_uhwi_p (DECL_SIZE (decl)))
13949     return NULL;
13950
13951   decl_size = tree_to_uhwi (DECL_SIZE (decl));
13952   descr = NULL;
13953   descr_tail = &descr;
13954
13955   for (p = loc; p; p = XEXP (p, 1))
13956     {
13957       unsigned HOST_WIDE_INT bitsize = decl_piece_bitsize (p);
13958       rtx loc_note = *decl_piece_varloc_ptr (p);
13959       dw_loc_descr_ref cur_descr;
13960       dw_loc_descr_ref *tail, last = NULL;
13961       unsigned HOST_WIDE_INT opsize = 0;
13962
13963       if (loc_note == NULL_RTX
13964           || NOTE_VAR_LOCATION_LOC (loc_note) == NULL_RTX)
13965         {
13966           padsize += bitsize;
13967           continue;
13968         }
13969       initialized = NOTE_VAR_LOCATION_STATUS (loc_note);
13970       varloc = NOTE_VAR_LOCATION (loc_note);
13971       cur_descr = dw_loc_list_1 (decl, varloc, 2, initialized);
13972       if (cur_descr == NULL)
13973         {
13974           padsize += bitsize;
13975           continue;
13976         }
13977
13978       /* Check that cur_descr either doesn't use
13979          DW_OP_*piece operations, or their sum is equal
13980          to bitsize.  Otherwise we can't embed it.  */
13981       for (tail = &cur_descr; *tail != NULL;
13982            tail = &(*tail)->dw_loc_next)
13983         if ((*tail)->dw_loc_opc == DW_OP_piece)
13984           {
13985             opsize += (*tail)->dw_loc_oprnd1.v.val_unsigned
13986                       * BITS_PER_UNIT;
13987             last = *tail;
13988           }
13989         else if ((*tail)->dw_loc_opc == DW_OP_bit_piece)
13990           {
13991             opsize += (*tail)->dw_loc_oprnd1.v.val_unsigned;
13992             last = *tail;
13993           }
13994
13995       if (last != NULL && opsize != bitsize)
13996         {
13997           padsize += bitsize;
13998           /* Discard the current piece of the descriptor and release any
13999              addr_table entries it uses.  */
14000           remove_loc_list_addr_table_entries (cur_descr);
14001           continue;
14002         }
14003
14004       /* If there is a hole, add DW_OP_*piece after empty DWARF
14005          expression, which means that those bits are optimized out.  */
14006       if (padsize)
14007         {
14008           if (padsize > decl_size)
14009             {
14010               remove_loc_list_addr_table_entries (cur_descr);
14011               goto discard_descr;
14012             }
14013           decl_size -= padsize;
14014           *descr_tail = new_loc_descr_op_bit_piece (padsize, 0);
14015           if (*descr_tail == NULL)
14016             {
14017               remove_loc_list_addr_table_entries (cur_descr);
14018               goto discard_descr;
14019             }
14020           descr_tail = &(*descr_tail)->dw_loc_next;
14021           padsize = 0;
14022         }
14023       *descr_tail = cur_descr;
14024       descr_tail = tail;
14025       if (bitsize > decl_size)
14026         goto discard_descr;
14027       decl_size -= bitsize;
14028       if (last == NULL)
14029         {
14030           HOST_WIDE_INT offset = 0;
14031           if (GET_CODE (varloc) == VAR_LOCATION
14032               && GET_CODE (PAT_VAR_LOCATION_LOC (varloc)) != PARALLEL)
14033             {
14034               varloc = PAT_VAR_LOCATION_LOC (varloc);
14035               if (GET_CODE (varloc) == EXPR_LIST)
14036                 varloc = XEXP (varloc, 0);
14037             }
14038           do 
14039             {
14040               if (GET_CODE (varloc) == CONST
14041                   || GET_CODE (varloc) == SIGN_EXTEND
14042                   || GET_CODE (varloc) == ZERO_EXTEND)
14043                 varloc = XEXP (varloc, 0);
14044               else if (GET_CODE (varloc) == SUBREG)
14045                 varloc = SUBREG_REG (varloc);
14046               else
14047                 break;
14048             }
14049           while (1);
14050           /* DW_OP_bit_size offset should be zero for register
14051              or implicit location descriptions and empty location
14052              descriptions, but for memory addresses needs big endian
14053              adjustment.  */
14054           if (MEM_P (varloc))
14055             {
14056               unsigned HOST_WIDE_INT memsize
14057                 = MEM_SIZE (varloc) * BITS_PER_UNIT;
14058               if (memsize != bitsize)
14059                 {
14060                   if (BYTES_BIG_ENDIAN != WORDS_BIG_ENDIAN
14061                       && (memsize > BITS_PER_WORD || bitsize > BITS_PER_WORD))
14062                     goto discard_descr;
14063                   if (memsize < bitsize)
14064                     goto discard_descr;
14065                   if (BITS_BIG_ENDIAN)
14066                     offset = memsize - bitsize;
14067                 }
14068             }
14069
14070           *descr_tail = new_loc_descr_op_bit_piece (bitsize, offset);
14071           if (*descr_tail == NULL)
14072             goto discard_descr;
14073           descr_tail = &(*descr_tail)->dw_loc_next;
14074         }
14075     }
14076
14077   /* If there were any non-empty expressions, add padding till the end of
14078      the decl.  */
14079   if (descr != NULL && decl_size != 0)
14080     {
14081       *descr_tail = new_loc_descr_op_bit_piece (decl_size, 0);
14082       if (*descr_tail == NULL)
14083         goto discard_descr;
14084     }
14085   return descr;
14086
14087 discard_descr:
14088   /* Discard the descriptor and release any addr_table entries it uses.  */
14089   remove_loc_list_addr_table_entries (descr);
14090   return NULL;
14091 }
14092
14093 /* Return the dwarf representation of the location list LOC_LIST of
14094    DECL.  WANT_ADDRESS has the same meaning as in loc_list_from_tree
14095    function.  */
14096
14097 static dw_loc_list_ref
14098 dw_loc_list (var_loc_list *loc_list, tree decl, int want_address)
14099 {
14100   const char *endname, *secname;
14101   rtx varloc;
14102   enum var_init_status initialized;
14103   struct var_loc_node *node;
14104   dw_loc_descr_ref descr;
14105   char label_id[MAX_ARTIFICIAL_LABEL_BYTES];
14106   dw_loc_list_ref list = NULL;
14107   dw_loc_list_ref *listp = &list;
14108
14109   /* Now that we know what section we are using for a base,
14110      actually construct the list of locations.
14111      The first location information is what is passed to the
14112      function that creates the location list, and the remaining
14113      locations just get added on to that list.
14114      Note that we only know the start address for a location
14115      (IE location changes), so to build the range, we use
14116      the range [current location start, next location start].
14117      This means we have to special case the last node, and generate
14118      a range of [last location start, end of function label].  */
14119
14120   secname = secname_for_decl (decl);
14121
14122   for (node = loc_list->first; node; node = node->next)
14123     if (GET_CODE (node->loc) == EXPR_LIST
14124         || NOTE_VAR_LOCATION_LOC (node->loc) != NULL_RTX)
14125       {
14126         if (GET_CODE (node->loc) == EXPR_LIST)
14127           {
14128             /* This requires DW_OP_{,bit_}piece, which is not usable
14129                inside DWARF expressions.  */
14130             if (want_address != 2)
14131               continue;
14132             descr = dw_sra_loc_expr (decl, node->loc);
14133             if (descr == NULL)
14134               continue;
14135           }
14136         else
14137           {
14138             initialized = NOTE_VAR_LOCATION_STATUS (node->loc);
14139             varloc = NOTE_VAR_LOCATION (node->loc);
14140             descr = dw_loc_list_1 (decl, varloc, want_address, initialized);
14141           }
14142         if (descr)
14143           {
14144             bool range_across_switch = false;
14145             /* If section switch happens in between node->label
14146                and node->next->label (or end of function) and
14147                we can't emit it as a single entry list,
14148                emit two ranges, first one ending at the end
14149                of first partition and second one starting at the
14150                beginning of second partition.  */
14151             if (node == loc_list->last_before_switch
14152                 && (node != loc_list->first || loc_list->first->next)
14153                 && current_function_decl)
14154               {
14155                 endname = cfun->fde->dw_fde_end;
14156                 range_across_switch = true;
14157               }
14158             /* The variable has a location between NODE->LABEL and
14159                NODE->NEXT->LABEL.  */
14160             else if (node->next)
14161               endname = node->next->label;
14162             /* If the variable has a location at the last label
14163                it keeps its location until the end of function.  */
14164             else if (!current_function_decl)
14165               endname = text_end_label;
14166             else
14167               {
14168                 ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_END_LABEL,
14169                                              current_function_funcdef_no);
14170                 endname = ggc_strdup (label_id);
14171               }
14172
14173             *listp = new_loc_list (descr, node->label, endname, secname);
14174             if (TREE_CODE (decl) == PARM_DECL
14175                 && node == loc_list->first
14176                 && NOTE_P (node->loc)
14177                 && strcmp (node->label, endname) == 0)
14178               (*listp)->force = true;
14179             listp = &(*listp)->dw_loc_next;
14180
14181             if (range_across_switch)
14182               {
14183                 if (GET_CODE (node->loc) == EXPR_LIST)
14184                   descr = dw_sra_loc_expr (decl, node->loc);
14185                 else
14186                   {
14187                     initialized = NOTE_VAR_LOCATION_STATUS (node->loc);
14188                     varloc = NOTE_VAR_LOCATION (node->loc);
14189                     descr = dw_loc_list_1 (decl, varloc, want_address,
14190                                            initialized);
14191                   }
14192                 gcc_assert (descr);
14193                 /* The variable has a location between NODE->LABEL and
14194                    NODE->NEXT->LABEL.  */
14195                 if (node->next)
14196                   endname = node->next->label;
14197                 else
14198                   endname = cfun->fde->dw_fde_second_end;
14199                 *listp = new_loc_list (descr,
14200                                        cfun->fde->dw_fde_second_begin,
14201                                        endname, secname);
14202                 listp = &(*listp)->dw_loc_next;
14203               }
14204           }
14205       }
14206
14207   /* Try to avoid the overhead of a location list emitting a location
14208      expression instead, but only if we didn't have more than one
14209      location entry in the first place.  If some entries were not
14210      representable, we don't want to pretend a single entry that was
14211      applies to the entire scope in which the variable is
14212      available.  */
14213   if (list && loc_list->first->next)
14214     gen_llsym (list);
14215
14216   return list;
14217 }
14218
14219 /* Return if the loc_list has only single element and thus can be represented
14220    as location description.   */
14221
14222 static bool
14223 single_element_loc_list_p (dw_loc_list_ref list)
14224 {
14225   gcc_assert (!list->dw_loc_next || list->ll_symbol);
14226   return !list->ll_symbol;
14227 }
14228
14229 /* To each location in list LIST add loc descr REF.  */
14230
14231 static void
14232 add_loc_descr_to_each (dw_loc_list_ref list, dw_loc_descr_ref ref)
14233 {
14234   dw_loc_descr_ref copy;
14235   add_loc_descr (&list->expr, ref);
14236   list = list->dw_loc_next;
14237   while (list)
14238     {
14239       copy = ggc_alloc<dw_loc_descr_node> ();
14240       memcpy (copy, ref, sizeof (dw_loc_descr_node));
14241       add_loc_descr (&list->expr, copy);
14242       while (copy->dw_loc_next)
14243         {
14244           dw_loc_descr_ref new_copy = ggc_alloc<dw_loc_descr_node> ();
14245           memcpy (new_copy, copy->dw_loc_next, sizeof (dw_loc_descr_node));
14246           copy->dw_loc_next = new_copy;
14247           copy = new_copy;
14248         }
14249       list = list->dw_loc_next;
14250     }
14251 }
14252
14253 /* Given two lists RET and LIST
14254    produce location list that is result of adding expression in LIST
14255    to expression in RET on each position in program.
14256    Might be destructive on both RET and LIST.
14257
14258    TODO: We handle only simple cases of RET or LIST having at most one
14259    element. General case would inolve sorting the lists in program order
14260    and merging them that will need some additional work.
14261    Adding that will improve quality of debug info especially for SRA-ed
14262    structures.  */
14263
14264 static void
14265 add_loc_list (dw_loc_list_ref *ret, dw_loc_list_ref list)
14266 {
14267   if (!list)
14268     return;
14269   if (!*ret)
14270     {
14271       *ret = list;
14272       return;
14273     }
14274   if (!list->dw_loc_next)
14275     {
14276       add_loc_descr_to_each (*ret, list->expr);
14277       return;
14278     }
14279   if (!(*ret)->dw_loc_next)
14280     {
14281       add_loc_descr_to_each (list, (*ret)->expr);
14282       *ret = list;
14283       return;
14284     }
14285   expansion_failed (NULL_TREE, NULL_RTX,
14286                     "Don't know how to merge two non-trivial"
14287                     " location lists.\n");
14288   *ret = NULL;
14289   return;
14290 }
14291
14292 /* LOC is constant expression.  Try a luck, look it up in constant
14293    pool and return its loc_descr of its address.  */
14294
14295 static dw_loc_descr_ref
14296 cst_pool_loc_descr (tree loc)
14297 {
14298   /* Get an RTL for this, if something has been emitted.  */
14299   rtx rtl = lookup_constant_def (loc);
14300
14301   if (!rtl || !MEM_P (rtl))
14302     {
14303       gcc_assert (!rtl);
14304       return 0;
14305     }
14306   gcc_assert (GET_CODE (XEXP (rtl, 0)) == SYMBOL_REF);
14307
14308   /* TODO: We might get more coverage if we was actually delaying expansion
14309      of all expressions till end of compilation when constant pools are fully
14310      populated.  */
14311   if (!TREE_ASM_WRITTEN (SYMBOL_REF_DECL (XEXP (rtl, 0))))
14312     {
14313       expansion_failed (loc, NULL_RTX,
14314                         "CST value in contant pool but not marked.");
14315       return 0;
14316     }
14317   return mem_loc_descriptor (XEXP (rtl, 0), get_address_mode (rtl),
14318                              GET_MODE (rtl), VAR_INIT_STATUS_INITIALIZED);
14319 }
14320
14321 /* Return dw_loc_list representing address of addr_expr LOC
14322    by looking for inner INDIRECT_REF expression and turning
14323    it into simple arithmetics.
14324
14325    See loc_list_from_tree for the meaning of CONTEXT.  */
14326
14327 static dw_loc_list_ref
14328 loc_list_for_address_of_addr_expr_of_indirect_ref (tree loc, bool toplev,
14329                                                    const loc_descr_context *context)
14330 {
14331   tree obj, offset;
14332   HOST_WIDE_INT bitsize, bitpos, bytepos;
14333   machine_mode mode;
14334   int unsignedp, volatilep = 0;
14335   dw_loc_list_ref list_ret = NULL, list_ret1 = NULL;
14336
14337   obj = get_inner_reference (TREE_OPERAND (loc, 0),
14338                              &bitsize, &bitpos, &offset, &mode,
14339                              &unsignedp, &volatilep, false);
14340   STRIP_NOPS (obj);
14341   if (bitpos % BITS_PER_UNIT)
14342     {
14343       expansion_failed (loc, NULL_RTX, "bitfield access");
14344       return 0;
14345     }
14346   if (!INDIRECT_REF_P (obj))
14347     {
14348       expansion_failed (obj,
14349                         NULL_RTX, "no indirect ref in inner refrence");
14350       return 0;
14351     }
14352   if (!offset && !bitpos)
14353     list_ret = loc_list_from_tree (TREE_OPERAND (obj, 0), toplev ? 2 : 1,
14354                                    context);
14355   else if (toplev
14356            && int_size_in_bytes (TREE_TYPE (loc)) <= DWARF2_ADDR_SIZE
14357            && (dwarf_version >= 4 || !dwarf_strict))
14358     {
14359       list_ret = loc_list_from_tree (TREE_OPERAND (obj, 0), 0, context);
14360       if (!list_ret)
14361         return 0;
14362       if (offset)
14363         {
14364           /* Variable offset.  */
14365           list_ret1 = loc_list_from_tree (offset, 0, context);
14366           if (list_ret1 == 0)
14367             return 0;
14368           add_loc_list (&list_ret, list_ret1);
14369           if (!list_ret)
14370             return 0;
14371           add_loc_descr_to_each (list_ret,
14372                                  new_loc_descr (DW_OP_plus, 0, 0));
14373         }
14374       bytepos = bitpos / BITS_PER_UNIT;
14375       if (bytepos > 0)
14376         add_loc_descr_to_each (list_ret,
14377                                new_loc_descr (DW_OP_plus_uconst,
14378                                               bytepos, 0));
14379       else if (bytepos < 0)
14380         loc_list_plus_const (list_ret, bytepos);
14381       add_loc_descr_to_each (list_ret,
14382                              new_loc_descr (DW_OP_stack_value, 0, 0));
14383     }
14384   return list_ret;
14385 }
14386
14387
14388 /* Helper structure for location descriptions generation.  */
14389 struct loc_descr_context
14390 {
14391   /* The type that is implicitly referenced by DW_OP_push_object_address, or
14392      NULL_TREE if DW_OP_push_object_address in invalid for this location
14393      description.  This is used when processing PLACEHOLDER_EXPR nodes.  */
14394   tree context_type;
14395   /* The ..._DECL node that should be translated as a
14396      DW_OP_push_object_address operation.  */
14397   tree base_decl;
14398 };
14399
14400 /* Generate Dwarf location list representing LOC.
14401    If WANT_ADDRESS is false, expression computing LOC will be computed
14402    If WANT_ADDRESS is 1, expression computing address of LOC will be returned
14403    if WANT_ADDRESS is 2, expression computing address useable in location
14404      will be returned (i.e. DW_OP_reg can be used
14405      to refer to register values).
14406
14407    CONTEXT provides information to customize the location descriptions
14408    generation.  Its context_type field specifies what type is implicitly
14409    referenced by DW_OP_push_object_address.  If it is NULL_TREE, this operation
14410    will not be generated.
14411
14412    If CONTEXT is NULL, the behavior is the same as if both context_type and
14413    base_decl fields were NULL_TREE.  */
14414
14415 static dw_loc_list_ref
14416 loc_list_from_tree (tree loc, int want_address,
14417                     const struct loc_descr_context *context)
14418 {
14419   dw_loc_descr_ref ret = NULL, ret1 = NULL;
14420   dw_loc_list_ref list_ret = NULL, list_ret1 = NULL;
14421   int have_address = 0;
14422   enum dwarf_location_atom op;
14423
14424   /* ??? Most of the time we do not take proper care for sign/zero
14425      extending the values properly.  Hopefully this won't be a real
14426      problem...  */
14427
14428   if (context != NULL
14429       && context->base_decl == loc
14430       && want_address == 0)
14431     {
14432       if (dwarf_version >= 3 || !dwarf_strict)
14433         return new_loc_list (new_loc_descr (DW_OP_push_object_address, 0, 0),
14434                              NULL, NULL, NULL);
14435       else
14436         return NULL;
14437     }
14438
14439   switch (TREE_CODE (loc))
14440     {
14441     case ERROR_MARK:
14442       expansion_failed (loc, NULL_RTX, "ERROR_MARK");
14443       return 0;
14444
14445     case PLACEHOLDER_EXPR:
14446       /* This case involves extracting fields from an object to determine the
14447          position of other fields. It is supposed to appear only as the first
14448          operand of COMPONENT_REF nodes and to reference precisely the type
14449          that the context allows.  */
14450       if (context != NULL
14451           && TREE_TYPE (loc) == context->context_type
14452           && want_address >= 1)
14453         {
14454           if (dwarf_version >= 3 || !dwarf_strict)
14455             {
14456               ret = new_loc_descr (DW_OP_push_object_address, 0, 0);
14457               have_address = 1;
14458               break;
14459             }
14460           else
14461             return NULL;
14462         }
14463       else
14464         expansion_failed (loc, NULL_RTX,
14465                           "PLACEHOLDER_EXPR for an unexpected type");
14466       break;
14467
14468     case CALL_EXPR:
14469       expansion_failed (loc, NULL_RTX, "CALL_EXPR");
14470       /* There are no opcodes for these operations.  */
14471       return 0;
14472
14473     case PREINCREMENT_EXPR:
14474     case PREDECREMENT_EXPR:
14475     case POSTINCREMENT_EXPR:
14476     case POSTDECREMENT_EXPR:
14477       expansion_failed (loc, NULL_RTX, "PRE/POST INDCREMENT/DECREMENT");
14478       /* There are no opcodes for these operations.  */
14479       return 0;
14480
14481     case ADDR_EXPR:
14482       /* If we already want an address, see if there is INDIRECT_REF inside
14483          e.g. for &this->field.  */
14484       if (want_address)
14485         {
14486           list_ret = loc_list_for_address_of_addr_expr_of_indirect_ref
14487                        (loc, want_address == 2, context);
14488           if (list_ret)
14489             have_address = 1;
14490           else if (decl_address_ip_invariant_p (TREE_OPERAND (loc, 0))
14491                    && (ret = cst_pool_loc_descr (loc)))
14492             have_address = 1;
14493         }
14494         /* Otherwise, process the argument and look for the address.  */
14495       if (!list_ret && !ret)
14496         list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 1, context);
14497       else
14498         {
14499           if (want_address)
14500             expansion_failed (loc, NULL_RTX, "need address of ADDR_EXPR");
14501           return NULL;
14502         }
14503       break;
14504
14505     case VAR_DECL:
14506       if (DECL_THREAD_LOCAL_P (loc))
14507         {
14508           rtx rtl;
14509          enum dwarf_location_atom tls_op;
14510          enum dtprel_bool dtprel = dtprel_false;
14511
14512           if (targetm.have_tls)
14513             {
14514               /* If this is not defined, we have no way to emit the
14515                  data.  */
14516               if (!targetm.asm_out.output_dwarf_dtprel)
14517                 return 0;
14518
14519                /* The way DW_OP_GNU_push_tls_address is specified, we
14520                   can only look up addresses of objects in the current
14521                   module.  We used DW_OP_addr as first op, but that's
14522                   wrong, because DW_OP_addr is relocated by the debug
14523                   info consumer, while DW_OP_GNU_push_tls_address
14524                   operand shouldn't be.  */
14525               if (DECL_EXTERNAL (loc) && !targetm.binds_local_p (loc))
14526                 return 0;
14527              dtprel = dtprel_true;
14528              tls_op = DW_OP_GNU_push_tls_address;
14529             }
14530           else
14531             {
14532               if (!targetm.emutls.debug_form_tls_address
14533                   || !(dwarf_version >= 3 || !dwarf_strict))
14534                 return 0;
14535               /* We stuffed the control variable into the DECL_VALUE_EXPR
14536                  to signal (via DECL_HAS_VALUE_EXPR_P) that the decl should
14537                  no longer appear in gimple code.  We used the control
14538                  variable in specific so that we could pick it up here.  */
14539               loc = DECL_VALUE_EXPR (loc);
14540               tls_op = DW_OP_form_tls_address;
14541             }
14542
14543           rtl = rtl_for_decl_location (loc);
14544           if (rtl == NULL_RTX)
14545             return 0;
14546
14547           if (!MEM_P (rtl))
14548             return 0;
14549           rtl = XEXP (rtl, 0);
14550           if (! CONSTANT_P (rtl))
14551             return 0;
14552
14553           ret = new_addr_loc_descr (rtl, dtprel);
14554           ret1 = new_loc_descr (tls_op, 0, 0);
14555           add_loc_descr (&ret, ret1);
14556
14557           have_address = 1;
14558           break;
14559         }
14560       /* FALLTHRU */
14561
14562     case PARM_DECL:
14563     case RESULT_DECL:
14564       if (DECL_HAS_VALUE_EXPR_P (loc))
14565         return loc_list_from_tree (DECL_VALUE_EXPR (loc),
14566                                    want_address, context);
14567       /* FALLTHRU */
14568
14569     case FUNCTION_DECL:
14570       {
14571         rtx rtl;
14572         var_loc_list *loc_list = lookup_decl_loc (loc);
14573
14574         if (loc_list && loc_list->first)
14575           {
14576             list_ret = dw_loc_list (loc_list, loc, want_address);
14577             have_address = want_address != 0;
14578             break;
14579           }
14580         rtl = rtl_for_decl_location (loc);
14581         if (rtl == NULL_RTX)
14582           {
14583             expansion_failed (loc, NULL_RTX, "DECL has no RTL");
14584             return 0;
14585           }
14586         else if (CONST_INT_P (rtl))
14587           {
14588             HOST_WIDE_INT val = INTVAL (rtl);
14589             if (TYPE_UNSIGNED (TREE_TYPE (loc)))
14590               val &= GET_MODE_MASK (DECL_MODE (loc));
14591             ret = int_loc_descriptor (val);
14592           }
14593         else if (GET_CODE (rtl) == CONST_STRING)
14594           {
14595             expansion_failed (loc, NULL_RTX, "CONST_STRING");
14596             return 0;
14597           }
14598         else if (CONSTANT_P (rtl) && const_ok_for_output (rtl))
14599           ret = new_addr_loc_descr (rtl, dtprel_false);
14600         else
14601           {
14602             machine_mode mode, mem_mode;
14603
14604             /* Certain constructs can only be represented at top-level.  */
14605             if (want_address == 2)
14606               {
14607                 ret = loc_descriptor (rtl, VOIDmode,
14608                                       VAR_INIT_STATUS_INITIALIZED);
14609                 have_address = 1;
14610               }
14611             else
14612               {
14613                 mode = GET_MODE (rtl);
14614                 mem_mode = VOIDmode;
14615                 if (MEM_P (rtl))
14616                   {
14617                     mem_mode = mode;
14618                     mode = get_address_mode (rtl);
14619                     rtl = XEXP (rtl, 0);
14620                     have_address = 1;
14621                   }
14622                 ret = mem_loc_descriptor (rtl, mode, mem_mode,
14623                                           VAR_INIT_STATUS_INITIALIZED);
14624               }
14625             if (!ret)
14626               expansion_failed (loc, rtl,
14627                                 "failed to produce loc descriptor for rtl");
14628           }
14629       }
14630       break;
14631
14632     case MEM_REF:
14633       if (!integer_zerop (TREE_OPERAND (loc, 1)))
14634         {
14635           have_address = 1;
14636           goto do_plus;
14637         }
14638       /* Fallthru.  */
14639     case INDIRECT_REF:
14640       list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0, context);
14641       have_address = 1;
14642       break;
14643
14644     case TARGET_MEM_REF:
14645     case SSA_NAME:
14646     case DEBUG_EXPR_DECL:
14647       return NULL;
14648
14649     case COMPOUND_EXPR:
14650       return loc_list_from_tree (TREE_OPERAND (loc, 1), want_address, context);
14651
14652     CASE_CONVERT:
14653     case VIEW_CONVERT_EXPR:
14654     case SAVE_EXPR:
14655     case MODIFY_EXPR:
14656       return loc_list_from_tree (TREE_OPERAND (loc, 0), want_address, context);
14657
14658     case COMPONENT_REF:
14659     case BIT_FIELD_REF:
14660     case ARRAY_REF:
14661     case ARRAY_RANGE_REF:
14662     case REALPART_EXPR:
14663     case IMAGPART_EXPR:
14664       {
14665         tree obj, offset;
14666         HOST_WIDE_INT bitsize, bitpos, bytepos;
14667         machine_mode mode;
14668         int unsignedp, volatilep = 0;
14669
14670         obj = get_inner_reference (loc, &bitsize, &bitpos, &offset, &mode,
14671                                    &unsignedp, &volatilep, false);
14672
14673         gcc_assert (obj != loc);
14674
14675         list_ret = loc_list_from_tree (obj,
14676                                        want_address == 2
14677                                        && !bitpos && !offset ? 2 : 1,
14678                                        context);
14679         /* TODO: We can extract value of the small expression via shifting even
14680            for nonzero bitpos.  */
14681         if (list_ret == 0)
14682           return 0;
14683         if (bitpos % BITS_PER_UNIT != 0 || bitsize % BITS_PER_UNIT != 0)
14684           {
14685             expansion_failed (loc, NULL_RTX,
14686                               "bitfield access");
14687             return 0;
14688           }
14689
14690         if (offset != NULL_TREE)
14691           {
14692             /* Variable offset.  */
14693             list_ret1 = loc_list_from_tree (offset, 0, context);
14694             if (list_ret1 == 0)
14695               return 0;
14696             add_loc_list (&list_ret, list_ret1);
14697             if (!list_ret)
14698               return 0;
14699             add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_plus, 0, 0));
14700           }
14701
14702         bytepos = bitpos / BITS_PER_UNIT;
14703         if (bytepos > 0)
14704           add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_plus_uconst, bytepos, 0));
14705         else if (bytepos < 0)
14706           loc_list_plus_const (list_ret, bytepos);
14707
14708         have_address = 1;
14709         break;
14710       }
14711
14712     case INTEGER_CST:
14713       if ((want_address || !tree_fits_shwi_p (loc))
14714           && (ret = cst_pool_loc_descr (loc)))
14715         have_address = 1;
14716       else if (want_address == 2
14717                && tree_fits_shwi_p (loc)
14718                && (ret = address_of_int_loc_descriptor
14719                            (int_size_in_bytes (TREE_TYPE (loc)),
14720                             tree_to_shwi (loc))))
14721         have_address = 1;
14722       else if (tree_fits_shwi_p (loc))
14723         ret = int_loc_descriptor (tree_to_shwi (loc));
14724       else
14725         {
14726           expansion_failed (loc, NULL_RTX,
14727                             "Integer operand is not host integer");
14728           return 0;
14729         }
14730       break;
14731
14732     case CONSTRUCTOR:
14733     case REAL_CST:
14734     case STRING_CST:
14735     case COMPLEX_CST:
14736       if ((ret = cst_pool_loc_descr (loc)))
14737         have_address = 1;
14738       else
14739       /* We can construct small constants here using int_loc_descriptor.  */
14740         expansion_failed (loc, NULL_RTX,
14741                           "constructor or constant not in constant pool");
14742       break;
14743
14744     case TRUTH_AND_EXPR:
14745     case TRUTH_ANDIF_EXPR:
14746     case BIT_AND_EXPR:
14747       op = DW_OP_and;
14748       goto do_binop;
14749
14750     case TRUTH_XOR_EXPR:
14751     case BIT_XOR_EXPR:
14752       op = DW_OP_xor;
14753       goto do_binop;
14754
14755     case TRUTH_OR_EXPR:
14756     case TRUTH_ORIF_EXPR:
14757     case BIT_IOR_EXPR:
14758       op = DW_OP_or;
14759       goto do_binop;
14760
14761     case FLOOR_DIV_EXPR:
14762     case CEIL_DIV_EXPR:
14763     case ROUND_DIV_EXPR:
14764     case TRUNC_DIV_EXPR:
14765       if (TYPE_UNSIGNED (TREE_TYPE (loc)))
14766         return 0;
14767       op = DW_OP_div;
14768       goto do_binop;
14769
14770     case MINUS_EXPR:
14771       op = DW_OP_minus;
14772       goto do_binop;
14773
14774     case FLOOR_MOD_EXPR:
14775     case CEIL_MOD_EXPR:
14776     case ROUND_MOD_EXPR:
14777     case TRUNC_MOD_EXPR:
14778       if (TYPE_UNSIGNED (TREE_TYPE (loc)))
14779         {
14780           op = DW_OP_mod;
14781           goto do_binop;
14782         }
14783       list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0, context);
14784       list_ret1 = loc_list_from_tree (TREE_OPERAND (loc, 1), 0, context);
14785       if (list_ret == 0 || list_ret1 == 0)
14786         return 0;
14787
14788       add_loc_list (&list_ret, list_ret1);
14789       if (list_ret == 0)
14790         return 0;
14791       add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_over, 0, 0));
14792       add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_over, 0, 0));
14793       add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_div, 0, 0));
14794       add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_mul, 0, 0));
14795       add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_minus, 0, 0));
14796       break;
14797
14798     case MULT_EXPR:
14799       op = DW_OP_mul;
14800       goto do_binop;
14801
14802     case LSHIFT_EXPR:
14803       op = DW_OP_shl;
14804       goto do_binop;
14805
14806     case RSHIFT_EXPR:
14807       op = (TYPE_UNSIGNED (TREE_TYPE (loc)) ? DW_OP_shr : DW_OP_shra);
14808       goto do_binop;
14809
14810     case POINTER_PLUS_EXPR:
14811     case PLUS_EXPR:
14812     do_plus:
14813       if (tree_fits_shwi_p (TREE_OPERAND (loc, 1)))
14814         {
14815           list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0, context);
14816           if (list_ret == 0)
14817             return 0;
14818
14819           loc_list_plus_const (list_ret, tree_to_shwi (TREE_OPERAND (loc, 1)));
14820           break;
14821         }
14822
14823       op = DW_OP_plus;
14824       goto do_binop;
14825
14826     case LE_EXPR:
14827       if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
14828         return 0;
14829
14830       op = DW_OP_le;
14831       goto do_binop;
14832
14833     case GE_EXPR:
14834       if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
14835         return 0;
14836
14837       op = DW_OP_ge;
14838       goto do_binop;
14839
14840     case LT_EXPR:
14841       if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
14842         return 0;
14843
14844       op = DW_OP_lt;
14845       goto do_binop;
14846
14847     case GT_EXPR:
14848       if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
14849         return 0;
14850
14851       op = DW_OP_gt;
14852       goto do_binop;
14853
14854     case EQ_EXPR:
14855       op = DW_OP_eq;
14856       goto do_binop;
14857
14858     case NE_EXPR:
14859       op = DW_OP_ne;
14860       goto do_binop;
14861
14862     do_binop:
14863       list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0, context);
14864       list_ret1 = loc_list_from_tree (TREE_OPERAND (loc, 1), 0, context);
14865       if (list_ret == 0 || list_ret1 == 0)
14866         return 0;
14867
14868       add_loc_list (&list_ret, list_ret1);
14869       if (list_ret == 0)
14870         return 0;
14871       add_loc_descr_to_each (list_ret, new_loc_descr (op, 0, 0));
14872       break;
14873
14874     case TRUTH_NOT_EXPR:
14875     case BIT_NOT_EXPR:
14876       op = DW_OP_not;
14877       goto do_unop;
14878
14879     case ABS_EXPR:
14880       op = DW_OP_abs;
14881       goto do_unop;
14882
14883     case NEGATE_EXPR:
14884       op = DW_OP_neg;
14885       goto do_unop;
14886
14887     do_unop:
14888       list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0, context);
14889       if (list_ret == 0)
14890         return 0;
14891
14892       add_loc_descr_to_each (list_ret, new_loc_descr (op, 0, 0));
14893       break;
14894
14895     case MIN_EXPR:
14896     case MAX_EXPR:
14897       {
14898         const enum tree_code code =
14899           TREE_CODE (loc) == MIN_EXPR ? GT_EXPR : LT_EXPR;
14900
14901         loc = build3 (COND_EXPR, TREE_TYPE (loc),
14902                       build2 (code, integer_type_node,
14903                               TREE_OPERAND (loc, 0), TREE_OPERAND (loc, 1)),
14904                       TREE_OPERAND (loc, 1), TREE_OPERAND (loc, 0));
14905       }
14906
14907       /* ... fall through ...  */
14908
14909     case COND_EXPR:
14910       {
14911         dw_loc_descr_ref lhs
14912           = loc_descriptor_from_tree (TREE_OPERAND (loc, 1), 0, context);
14913         dw_loc_list_ref rhs
14914           = loc_list_from_tree (TREE_OPERAND (loc, 2), 0, context);
14915         dw_loc_descr_ref bra_node, jump_node, tmp;
14916
14917         list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0, context);
14918         if (list_ret == 0 || lhs == 0 || rhs == 0)
14919           return 0;
14920
14921         bra_node = new_loc_descr (DW_OP_bra, 0, 0);
14922         add_loc_descr_to_each (list_ret, bra_node);
14923
14924         add_loc_list (&list_ret, rhs);
14925         jump_node = new_loc_descr (DW_OP_skip, 0, 0);
14926         add_loc_descr_to_each (list_ret, jump_node);
14927
14928         add_loc_descr_to_each (list_ret, lhs);
14929         bra_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
14930         bra_node->dw_loc_oprnd1.v.val_loc = lhs;
14931
14932         /* ??? Need a node to point the skip at.  Use a nop.  */
14933         tmp = new_loc_descr (DW_OP_nop, 0, 0);
14934         add_loc_descr_to_each (list_ret, tmp);
14935         jump_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
14936         jump_node->dw_loc_oprnd1.v.val_loc = tmp;
14937       }
14938       break;
14939
14940     case FIX_TRUNC_EXPR:
14941       return 0;
14942
14943     default:
14944       /* Leave front-end specific codes as simply unknown.  This comes
14945          up, for instance, with the C STMT_EXPR.  */
14946       if ((unsigned int) TREE_CODE (loc)
14947           >= (unsigned int) LAST_AND_UNUSED_TREE_CODE)
14948         {
14949           expansion_failed (loc, NULL_RTX,
14950                             "language specific tree node");
14951           return 0;
14952         }
14953
14954 #ifdef ENABLE_CHECKING
14955       /* Otherwise this is a generic code; we should just lists all of
14956          these explicitly.  We forgot one.  */
14957       gcc_unreachable ();
14958 #else
14959       /* In a release build, we want to degrade gracefully: better to
14960          generate incomplete debugging information than to crash.  */
14961       return NULL;
14962 #endif
14963     }
14964
14965   if (!ret && !list_ret)
14966     return 0;
14967
14968   if (want_address == 2 && !have_address
14969       && (dwarf_version >= 4 || !dwarf_strict))
14970     {
14971       if (int_size_in_bytes (TREE_TYPE (loc)) > DWARF2_ADDR_SIZE)
14972         {
14973           expansion_failed (loc, NULL_RTX,
14974                             "DWARF address size mismatch");
14975           return 0;
14976         }
14977       if (ret)
14978         add_loc_descr (&ret, new_loc_descr (DW_OP_stack_value, 0, 0));
14979       else
14980         add_loc_descr_to_each (list_ret,
14981                                new_loc_descr (DW_OP_stack_value, 0, 0));
14982       have_address = 1;
14983     }
14984   /* Show if we can't fill the request for an address.  */
14985   if (want_address && !have_address)
14986     {
14987       expansion_failed (loc, NULL_RTX,
14988                         "Want address and only have value");
14989       return 0;
14990     }
14991
14992   gcc_assert (!ret || !list_ret);
14993
14994   /* If we've got an address and don't want one, dereference.  */
14995   if (!want_address && have_address)
14996     {
14997       HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (loc));
14998
14999       if (size > DWARF2_ADDR_SIZE || size == -1)
15000         {
15001           expansion_failed (loc, NULL_RTX,
15002                             "DWARF address size mismatch");
15003           return 0;
15004         }
15005       else if (size == DWARF2_ADDR_SIZE)
15006         op = DW_OP_deref;
15007       else
15008         op = DW_OP_deref_size;
15009
15010       if (ret)
15011         add_loc_descr (&ret, new_loc_descr (op, size, 0));
15012       else
15013         add_loc_descr_to_each (list_ret, new_loc_descr (op, size, 0));
15014     }
15015   if (ret)
15016     list_ret = new_loc_list (ret, NULL, NULL, NULL);
15017
15018   return list_ret;
15019 }
15020
15021 /* Same as above but return only single location expression.  */
15022 static dw_loc_descr_ref
15023 loc_descriptor_from_tree (tree loc, int want_address,
15024                           const struct loc_descr_context *context)
15025 {
15026   dw_loc_list_ref ret = loc_list_from_tree (loc, want_address, context);
15027   if (!ret)
15028     return NULL;
15029   if (ret->dw_loc_next)
15030     {
15031       expansion_failed (loc, NULL_RTX,
15032                         "Location list where only loc descriptor needed");
15033       return NULL;
15034     }
15035   return ret->expr;
15036 }
15037
15038 /* Given a value, round it up to the lowest multiple of `boundary'
15039    which is not less than the value itself.  */
15040
15041 static inline HOST_WIDE_INT
15042 ceiling (HOST_WIDE_INT value, unsigned int boundary)
15043 {
15044   return (((value + boundary - 1) / boundary) * boundary);
15045 }
15046
15047 /* Given a pointer to what is assumed to be a FIELD_DECL node, return a
15048    pointer to the declared type for the relevant field variable, or return
15049    `integer_type_node' if the given node turns out to be an
15050    ERROR_MARK node.  */
15051
15052 static inline tree
15053 field_type (const_tree decl)
15054 {
15055   tree type;
15056
15057   if (TREE_CODE (decl) == ERROR_MARK)
15058     return integer_type_node;
15059
15060   type = DECL_BIT_FIELD_TYPE (decl);
15061   if (type == NULL_TREE)
15062     type = TREE_TYPE (decl);
15063
15064   return type;
15065 }
15066
15067 /* Given a pointer to a tree node, return the alignment in bits for
15068    it, or else return BITS_PER_WORD if the node actually turns out to
15069    be an ERROR_MARK node.  */
15070
15071 static inline unsigned
15072 simple_type_align_in_bits (const_tree type)
15073 {
15074   return (TREE_CODE (type) != ERROR_MARK) ? TYPE_ALIGN (type) : BITS_PER_WORD;
15075 }
15076
15077 static inline unsigned
15078 simple_decl_align_in_bits (const_tree decl)
15079 {
15080   return (TREE_CODE (decl) != ERROR_MARK) ? DECL_ALIGN (decl) : BITS_PER_WORD;
15081 }
15082
15083 /* Return the result of rounding T up to ALIGN.  */
15084
15085 static inline offset_int
15086 round_up_to_align (const offset_int &t, unsigned int align)
15087 {
15088   return wi::udiv_trunc (t + align - 1, align) * align;
15089 }
15090
15091 /* Given a pointer to a FIELD_DECL, compute and return the byte offset of the
15092    lowest addressed byte of the "containing object" for the given FIELD_DECL,
15093    or return 0 if we are unable to determine what that offset is, either
15094    because the argument turns out to be a pointer to an ERROR_MARK node, or
15095    because the offset is actually variable.  (We can't handle the latter case
15096    just yet).  */
15097
15098 static HOST_WIDE_INT
15099 field_byte_offset (const_tree decl)
15100 {
15101   offset_int object_offset_in_bits;
15102   offset_int object_offset_in_bytes;
15103   offset_int bitpos_int;
15104
15105   if (TREE_CODE (decl) == ERROR_MARK)
15106     return 0;
15107
15108   gcc_assert (TREE_CODE (decl) == FIELD_DECL);
15109
15110   /* We cannot yet cope with fields whose positions are variable, so
15111      for now, when we see such things, we simply return 0.  Someday, we may
15112      be able to handle such cases, but it will be damn difficult.  */
15113   if (TREE_CODE (bit_position (decl)) != INTEGER_CST)
15114     return 0;
15115
15116   bitpos_int = wi::to_offset (bit_position (decl));
15117
15118 #ifdef PCC_BITFIELD_TYPE_MATTERS
15119   if (PCC_BITFIELD_TYPE_MATTERS)
15120     {
15121       tree type;
15122       tree field_size_tree;
15123       offset_int deepest_bitpos;
15124       offset_int field_size_in_bits;
15125       unsigned int type_align_in_bits;
15126       unsigned int decl_align_in_bits;
15127       offset_int type_size_in_bits;
15128
15129       type = field_type (decl);
15130       type_size_in_bits = offset_int_type_size_in_bits (type);
15131       type_align_in_bits = simple_type_align_in_bits (type);
15132
15133       field_size_tree = DECL_SIZE (decl);
15134
15135       /* The size could be unspecified if there was an error, or for
15136          a flexible array member.  */
15137       if (!field_size_tree)
15138         field_size_tree = bitsize_zero_node;
15139
15140       /* If the size of the field is not constant, use the type size.  */
15141       if (TREE_CODE (field_size_tree) == INTEGER_CST)
15142         field_size_in_bits = wi::to_offset (field_size_tree);
15143       else
15144         field_size_in_bits = type_size_in_bits;
15145
15146       decl_align_in_bits = simple_decl_align_in_bits (decl);
15147
15148       /* The GCC front-end doesn't make any attempt to keep track of the
15149          starting bit offset (relative to the start of the containing
15150          structure type) of the hypothetical "containing object" for a
15151          bit-field.  Thus, when computing the byte offset value for the
15152          start of the "containing object" of a bit-field, we must deduce
15153          this information on our own. This can be rather tricky to do in
15154          some cases.  For example, handling the following structure type
15155          definition when compiling for an i386/i486 target (which only
15156          aligns long long's to 32-bit boundaries) can be very tricky:
15157
15158          struct S { int field1; long long field2:31; };
15159
15160          Fortunately, there is a simple rule-of-thumb which can be used
15161          in such cases.  When compiling for an i386/i486, GCC will
15162          allocate 8 bytes for the structure shown above.  It decides to
15163          do this based upon one simple rule for bit-field allocation.
15164          GCC allocates each "containing object" for each bit-field at
15165          the first (i.e. lowest addressed) legitimate alignment boundary
15166          (based upon the required minimum alignment for the declared
15167          type of the field) which it can possibly use, subject to the
15168          condition that there is still enough available space remaining
15169          in the containing object (when allocated at the selected point)
15170          to fully accommodate all of the bits of the bit-field itself.
15171
15172          This simple rule makes it obvious why GCC allocates 8 bytes for
15173          each object of the structure type shown above.  When looking
15174          for a place to allocate the "containing object" for `field2',
15175          the compiler simply tries to allocate a 64-bit "containing
15176          object" at each successive 32-bit boundary (starting at zero)
15177          until it finds a place to allocate that 64- bit field such that
15178          at least 31 contiguous (and previously unallocated) bits remain
15179          within that selected 64 bit field.  (As it turns out, for the
15180          example above, the compiler finds it is OK to allocate the
15181          "containing object" 64-bit field at bit-offset zero within the
15182          structure type.)
15183
15184          Here we attempt to work backwards from the limited set of facts
15185          we're given, and we try to deduce from those facts, where GCC
15186          must have believed that the containing object started (within
15187          the structure type). The value we deduce is then used (by the
15188          callers of this routine) to generate DW_AT_location and
15189          DW_AT_bit_offset attributes for fields (both bit-fields and, in
15190          the case of DW_AT_location, regular fields as well).  */
15191
15192       /* Figure out the bit-distance from the start of the structure to
15193          the "deepest" bit of the bit-field.  */
15194       deepest_bitpos = bitpos_int + field_size_in_bits;
15195
15196       /* This is the tricky part.  Use some fancy footwork to deduce
15197          where the lowest addressed bit of the containing object must
15198          be.  */
15199       object_offset_in_bits = deepest_bitpos - type_size_in_bits;
15200
15201       /* Round up to type_align by default.  This works best for
15202          bitfields.  */
15203       object_offset_in_bits
15204         = round_up_to_align (object_offset_in_bits, type_align_in_bits);
15205
15206       if (wi::gtu_p (object_offset_in_bits, bitpos_int))
15207         {
15208           object_offset_in_bits = deepest_bitpos - type_size_in_bits;
15209
15210           /* Round up to decl_align instead.  */
15211           object_offset_in_bits
15212             = round_up_to_align (object_offset_in_bits, decl_align_in_bits);
15213         }
15214     }
15215   else
15216 #endif /* PCC_BITFIELD_TYPE_MATTERS */
15217     object_offset_in_bits = bitpos_int;
15218
15219   object_offset_in_bytes
15220     = wi::lrshift (object_offset_in_bits, LOG2_BITS_PER_UNIT);
15221   return object_offset_in_bytes.to_shwi ();
15222 }
15223 \f
15224 /* The following routines define various Dwarf attributes and any data
15225    associated with them.  */
15226
15227 /* Add a location description attribute value to a DIE.
15228
15229    This emits location attributes suitable for whole variables and
15230    whole parameters.  Note that the location attributes for struct fields are
15231    generated by the routine `data_member_location_attribute' below.  */
15232
15233 static inline void
15234 add_AT_location_description (dw_die_ref die, enum dwarf_attribute attr_kind,
15235                              dw_loc_list_ref descr)
15236 {
15237   if (descr == 0)
15238     return;
15239   if (single_element_loc_list_p (descr))
15240     add_AT_loc (die, attr_kind, descr->expr);
15241   else
15242     add_AT_loc_list (die, attr_kind, descr);
15243 }
15244
15245 /* Add DW_AT_accessibility attribute to DIE if needed.  */
15246
15247 static void
15248 add_accessibility_attribute (dw_die_ref die, tree decl)
15249 {
15250   /* In DWARF3+ the default is DW_ACCESS_private only in DW_TAG_class_type
15251      children, otherwise the default is DW_ACCESS_public.  In DWARF2
15252      the default has always been DW_ACCESS_public.  */
15253   if (TREE_PROTECTED (decl))
15254     add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_protected);
15255   else if (TREE_PRIVATE (decl))
15256     {
15257       if (dwarf_version == 2
15258           || die->die_parent == NULL
15259           || die->die_parent->die_tag != DW_TAG_class_type)
15260         add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_private);
15261     }
15262   else if (dwarf_version > 2
15263            && die->die_parent
15264            && die->die_parent->die_tag == DW_TAG_class_type)
15265     add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_public);
15266 }
15267
15268 /* Attach the specialized form of location attribute used for data members of
15269    struct and union types.  In the special case of a FIELD_DECL node which
15270    represents a bit-field, the "offset" part of this special location
15271    descriptor must indicate the distance in bytes from the lowest-addressed
15272    byte of the containing struct or union type to the lowest-addressed byte of
15273    the "containing object" for the bit-field.  (See the `field_byte_offset'
15274    function above).
15275
15276    For any given bit-field, the "containing object" is a hypothetical object
15277    (of some integral or enum type) within which the given bit-field lives.  The
15278    type of this hypothetical "containing object" is always the same as the
15279    declared type of the individual bit-field itself (for GCC anyway... the
15280    DWARF spec doesn't actually mandate this).  Note that it is the size (in
15281    bytes) of the hypothetical "containing object" which will be given in the
15282    DW_AT_byte_size attribute for this bit-field.  (See the
15283    `byte_size_attribute' function below.)  It is also used when calculating the
15284    value of the DW_AT_bit_offset attribute.  (See the `bit_offset_attribute'
15285    function below.)  */
15286
15287 static void
15288 add_data_member_location_attribute (dw_die_ref die, tree decl)
15289 {
15290   HOST_WIDE_INT offset;
15291   dw_loc_descr_ref loc_descr = 0;
15292
15293   if (TREE_CODE (decl) == TREE_BINFO)
15294     {
15295       /* We're working on the TAG_inheritance for a base class.  */
15296       if (BINFO_VIRTUAL_P (decl) && is_cxx ())
15297         {
15298           /* For C++ virtual bases we can't just use BINFO_OFFSET, as they
15299              aren't at a fixed offset from all (sub)objects of the same
15300              type.  We need to extract the appropriate offset from our
15301              vtable.  The following dwarf expression means
15302
15303                BaseAddr = ObAddr + *((*ObAddr) - Offset)
15304
15305              This is specific to the V3 ABI, of course.  */
15306
15307           dw_loc_descr_ref tmp;
15308
15309           /* Make a copy of the object address.  */
15310           tmp = new_loc_descr (DW_OP_dup, 0, 0);
15311           add_loc_descr (&loc_descr, tmp);
15312
15313           /* Extract the vtable address.  */
15314           tmp = new_loc_descr (DW_OP_deref, 0, 0);
15315           add_loc_descr (&loc_descr, tmp);
15316
15317           /* Calculate the address of the offset.  */
15318           offset = tree_to_shwi (BINFO_VPTR_FIELD (decl));
15319           gcc_assert (offset < 0);
15320
15321           tmp = int_loc_descriptor (-offset);
15322           add_loc_descr (&loc_descr, tmp);
15323           tmp = new_loc_descr (DW_OP_minus, 0, 0);
15324           add_loc_descr (&loc_descr, tmp);
15325
15326           /* Extract the offset.  */
15327           tmp = new_loc_descr (DW_OP_deref, 0, 0);
15328           add_loc_descr (&loc_descr, tmp);
15329
15330           /* Add it to the object address.  */
15331           tmp = new_loc_descr (DW_OP_plus, 0, 0);
15332           add_loc_descr (&loc_descr, tmp);
15333         }
15334       else
15335         offset = tree_to_shwi (BINFO_OFFSET (decl));
15336     }
15337   else
15338     offset = field_byte_offset (decl);
15339
15340   if (! loc_descr)
15341     {
15342       if (dwarf_version > 2)
15343         {
15344           /* Don't need to output a location expression, just the constant. */
15345           if (offset < 0)
15346             add_AT_int (die, DW_AT_data_member_location, offset);
15347           else
15348             add_AT_unsigned (die, DW_AT_data_member_location, offset);
15349           return;
15350         }
15351       else
15352         {
15353           enum dwarf_location_atom op;
15354
15355           /* The DWARF2 standard says that we should assume that the structure
15356              address is already on the stack, so we can specify a structure
15357              field address by using DW_OP_plus_uconst.  */
15358           op = DW_OP_plus_uconst;
15359           loc_descr = new_loc_descr (op, offset, 0);
15360         }
15361     }
15362
15363   add_AT_loc (die, DW_AT_data_member_location, loc_descr);
15364 }
15365
15366 /* Writes integer values to dw_vec_const array.  */
15367
15368 static void
15369 insert_int (HOST_WIDE_INT val, unsigned int size, unsigned char *dest)
15370 {
15371   while (size != 0)
15372     {
15373       *dest++ = val & 0xff;
15374       val >>= 8;
15375       --size;
15376     }
15377 }
15378
15379 /* Reads integers from dw_vec_const array.  Inverse of insert_int.  */
15380
15381 static HOST_WIDE_INT
15382 extract_int (const unsigned char *src, unsigned int size)
15383 {
15384   HOST_WIDE_INT val = 0;
15385
15386   src += size;
15387   while (size != 0)
15388     {
15389       val <<= 8;
15390       val |= *--src & 0xff;
15391       --size;
15392     }
15393   return val;
15394 }
15395
15396 /* Writes wide_int values to dw_vec_const array.  */
15397
15398 static void
15399 insert_wide_int (const wide_int &val, unsigned char *dest, int elt_size)
15400 {
15401   int i;
15402
15403   if (elt_size <= HOST_BITS_PER_WIDE_INT/BITS_PER_UNIT)
15404     {
15405       insert_int ((HOST_WIDE_INT) val.elt (0), elt_size, dest);
15406       return;
15407     }
15408
15409   /* We'd have to extend this code to support odd sizes.  */
15410   gcc_assert (elt_size % (HOST_BITS_PER_WIDE_INT / BITS_PER_UNIT) == 0);
15411
15412   int n = elt_size / (HOST_BITS_PER_WIDE_INT / BITS_PER_UNIT);
15413
15414   if (WORDS_BIG_ENDIAN)
15415     for (i = n - 1; i >= 0; i--)
15416       {
15417         insert_int ((HOST_WIDE_INT) val.elt (i), sizeof (HOST_WIDE_INT), dest);
15418         dest += sizeof (HOST_WIDE_INT);
15419       }
15420   else
15421     for (i = 0; i < n; i++)
15422       {
15423         insert_int ((HOST_WIDE_INT) val.elt (i), sizeof (HOST_WIDE_INT), dest);
15424         dest += sizeof (HOST_WIDE_INT);
15425       }
15426 }
15427
15428 /* Writes floating point values to dw_vec_const array.  */
15429
15430 static void
15431 insert_float (const_rtx rtl, unsigned char *array)
15432 {
15433   REAL_VALUE_TYPE rv;
15434   long val[4];
15435   int i;
15436
15437   REAL_VALUE_FROM_CONST_DOUBLE (rv, rtl);
15438   real_to_target (val, &rv, GET_MODE (rtl));
15439
15440   /* real_to_target puts 32-bit pieces in each long.  Pack them.  */
15441   for (i = 0; i < GET_MODE_SIZE (GET_MODE (rtl)) / 4; i++)
15442     {
15443       insert_int (val[i], 4, array);
15444       array += 4;
15445     }
15446 }
15447
15448 /* Attach a DW_AT_const_value attribute for a variable or a parameter which
15449    does not have a "location" either in memory or in a register.  These
15450    things can arise in GNU C when a constant is passed as an actual parameter
15451    to an inlined function.  They can also arise in C++ where declared
15452    constants do not necessarily get memory "homes".  */
15453
15454 static bool
15455 add_const_value_attribute (dw_die_ref die, rtx rtl)
15456 {
15457   switch (GET_CODE (rtl))
15458     {
15459     case CONST_INT:
15460       {
15461         HOST_WIDE_INT val = INTVAL (rtl);
15462
15463         if (val < 0)
15464           add_AT_int (die, DW_AT_const_value, val);
15465         else
15466           add_AT_unsigned (die, DW_AT_const_value, (unsigned HOST_WIDE_INT) val);
15467       }
15468       return true;
15469
15470     case CONST_WIDE_INT:
15471       add_AT_wide (die, DW_AT_const_value,
15472                    std::make_pair (rtl, GET_MODE (rtl)));
15473       return true;
15474
15475     case CONST_DOUBLE:
15476       /* Note that a CONST_DOUBLE rtx could represent either an integer or a
15477          floating-point constant.  A CONST_DOUBLE is used whenever the
15478          constant requires more than one word in order to be adequately
15479          represented.  */
15480       {
15481         machine_mode mode = GET_MODE (rtl);
15482
15483         if (TARGET_SUPPORTS_WIDE_INT == 0 && !SCALAR_FLOAT_MODE_P (mode))
15484           add_AT_double (die, DW_AT_const_value,
15485                          CONST_DOUBLE_HIGH (rtl), CONST_DOUBLE_LOW (rtl));
15486         else
15487           {
15488             unsigned int length = GET_MODE_SIZE (mode);
15489             unsigned char *array = ggc_vec_alloc<unsigned char> (length);
15490
15491             insert_float (rtl, array);
15492             add_AT_vec (die, DW_AT_const_value, length / 4, 4, array);
15493           }
15494       }
15495       return true;
15496
15497     case CONST_VECTOR:
15498       {
15499         machine_mode mode = GET_MODE (rtl);
15500         unsigned int elt_size = GET_MODE_UNIT_SIZE (mode);
15501         unsigned int length = CONST_VECTOR_NUNITS (rtl);
15502         unsigned char *array
15503           = ggc_vec_alloc<unsigned char> (length * elt_size);
15504         unsigned int i;
15505         unsigned char *p;
15506         machine_mode imode = GET_MODE_INNER (mode);
15507
15508         switch (GET_MODE_CLASS (mode))
15509           {
15510           case MODE_VECTOR_INT:
15511             for (i = 0, p = array; i < length; i++, p += elt_size)
15512               {
15513                 rtx elt = CONST_VECTOR_ELT (rtl, i);
15514                 insert_wide_int (std::make_pair (elt, imode), p, elt_size);
15515               }
15516             break;
15517
15518           case MODE_VECTOR_FLOAT:
15519             for (i = 0, p = array; i < length; i++, p += elt_size)
15520               {
15521                 rtx elt = CONST_VECTOR_ELT (rtl, i);
15522                 insert_float (elt, p);
15523               }
15524             break;
15525
15526           default:
15527             gcc_unreachable ();
15528           }
15529
15530         add_AT_vec (die, DW_AT_const_value, length, elt_size, array);
15531       }
15532       return true;
15533
15534     case CONST_STRING:
15535       if (dwarf_version >= 4 || !dwarf_strict)
15536         {
15537           dw_loc_descr_ref loc_result;
15538           resolve_one_addr (&rtl);
15539         rtl_addr:
15540           loc_result = new_addr_loc_descr (rtl, dtprel_false);
15541           add_loc_descr (&loc_result, new_loc_descr (DW_OP_stack_value, 0, 0));
15542           add_AT_loc (die, DW_AT_location, loc_result);
15543           vec_safe_push (used_rtx_array, rtl);
15544           return true;
15545         }
15546       return false;
15547
15548     case CONST:
15549       if (CONSTANT_P (XEXP (rtl, 0)))
15550         return add_const_value_attribute (die, XEXP (rtl, 0));
15551       /* FALLTHROUGH */
15552     case SYMBOL_REF:
15553       if (!const_ok_for_output (rtl))
15554         return false;
15555     case LABEL_REF:
15556       if (dwarf_version >= 4 || !dwarf_strict)
15557         goto rtl_addr;
15558       return false;
15559
15560     case PLUS:
15561       /* In cases where an inlined instance of an inline function is passed
15562          the address of an `auto' variable (which is local to the caller) we
15563          can get a situation where the DECL_RTL of the artificial local
15564          variable (for the inlining) which acts as a stand-in for the
15565          corresponding formal parameter (of the inline function) will look
15566          like (plus:SI (reg:SI FRAME_PTR) (const_int ...)).  This is not
15567          exactly a compile-time constant expression, but it isn't the address
15568          of the (artificial) local variable either.  Rather, it represents the
15569          *value* which the artificial local variable always has during its
15570          lifetime.  We currently have no way to represent such quasi-constant
15571          values in Dwarf, so for now we just punt and generate nothing.  */
15572       return false;
15573
15574     case HIGH:
15575     case CONST_FIXED:
15576       return false;
15577
15578     case MEM:
15579       if (GET_CODE (XEXP (rtl, 0)) == CONST_STRING
15580           && MEM_READONLY_P (rtl)
15581           && GET_MODE (rtl) == BLKmode)
15582         {
15583           add_AT_string (die, DW_AT_const_value, XSTR (XEXP (rtl, 0), 0));
15584           return true;
15585         }
15586       return false;
15587
15588     default:
15589       /* No other kinds of rtx should be possible here.  */
15590       gcc_unreachable ();
15591     }
15592   return false;
15593 }
15594
15595 /* Determine whether the evaluation of EXPR references any variables
15596    or functions which aren't otherwise used (and therefore may not be
15597    output).  */
15598 static tree
15599 reference_to_unused (tree * tp, int * walk_subtrees,
15600                      void * data ATTRIBUTE_UNUSED)
15601 {
15602   if (! EXPR_P (*tp) && ! CONSTANT_CLASS_P (*tp))
15603     *walk_subtrees = 0;
15604
15605   if (DECL_P (*tp) && ! TREE_PUBLIC (*tp) && ! TREE_USED (*tp)
15606       && ! TREE_ASM_WRITTEN (*tp))
15607     return *tp;
15608   /* ???  The C++ FE emits debug information for using decls, so
15609      putting gcc_unreachable here falls over.  See PR31899.  For now
15610      be conservative.  */
15611   else if (!symtab->global_info_ready
15612            && (TREE_CODE (*tp) == VAR_DECL || TREE_CODE (*tp) == FUNCTION_DECL))
15613     return *tp;
15614   else if (TREE_CODE (*tp) == VAR_DECL)
15615     {
15616       varpool_node *node = varpool_node::get (*tp);
15617       if (!node || !node->definition)
15618         return *tp;
15619     }
15620   else if (TREE_CODE (*tp) == FUNCTION_DECL
15621            && (!DECL_EXTERNAL (*tp) || DECL_DECLARED_INLINE_P (*tp)))
15622     {
15623       /* The call graph machinery must have finished analyzing,
15624          optimizing and gimplifying the CU by now.
15625          So if *TP has no call graph node associated
15626          to it, it means *TP will not be emitted.  */
15627       if (!cgraph_node::get (*tp))
15628         return *tp;
15629     }
15630   else if (TREE_CODE (*tp) == STRING_CST && !TREE_ASM_WRITTEN (*tp))
15631     return *tp;
15632
15633   return NULL_TREE;
15634 }
15635
15636 /* Generate an RTL constant from a decl initializer INIT with decl type TYPE,
15637    for use in a later add_const_value_attribute call.  */
15638
15639 static rtx
15640 rtl_for_decl_init (tree init, tree type)
15641 {
15642   rtx rtl = NULL_RTX;
15643
15644   STRIP_NOPS (init);
15645
15646   /* If a variable is initialized with a string constant without embedded
15647      zeros, build CONST_STRING.  */
15648   if (TREE_CODE (init) == STRING_CST && TREE_CODE (type) == ARRAY_TYPE)
15649     {
15650       tree enttype = TREE_TYPE (type);
15651       tree domain = TYPE_DOMAIN (type);
15652       machine_mode mode = TYPE_MODE (enttype);
15653
15654       if (GET_MODE_CLASS (mode) == MODE_INT && GET_MODE_SIZE (mode) == 1
15655           && domain
15656           && integer_zerop (TYPE_MIN_VALUE (domain))
15657           && compare_tree_int (TYPE_MAX_VALUE (domain),
15658                                TREE_STRING_LENGTH (init) - 1) == 0
15659           && ((size_t) TREE_STRING_LENGTH (init)
15660               == strlen (TREE_STRING_POINTER (init)) + 1))
15661         {
15662           rtl = gen_rtx_CONST_STRING (VOIDmode,
15663                                       ggc_strdup (TREE_STRING_POINTER (init)));
15664           rtl = gen_rtx_MEM (BLKmode, rtl);
15665           MEM_READONLY_P (rtl) = 1;
15666         }
15667     }
15668   /* Other aggregates, and complex values, could be represented using
15669      CONCAT: FIXME!  */
15670   else if (AGGREGATE_TYPE_P (type)
15671            || (TREE_CODE (init) == VIEW_CONVERT_EXPR
15672                && AGGREGATE_TYPE_P (TREE_TYPE (TREE_OPERAND (init, 0))))
15673            || TREE_CODE (type) == COMPLEX_TYPE)
15674     ;
15675   /* Vectors only work if their mode is supported by the target.
15676      FIXME: generic vectors ought to work too.  */
15677   else if (TREE_CODE (type) == VECTOR_TYPE
15678            && !VECTOR_MODE_P (TYPE_MODE (type)))
15679     ;
15680   /* If the initializer is something that we know will expand into an
15681      immediate RTL constant, expand it now.  We must be careful not to
15682      reference variables which won't be output.  */
15683   else if (initializer_constant_valid_p (init, type)
15684            && ! walk_tree (&init, reference_to_unused, NULL, NULL))
15685     {
15686       /* Convert vector CONSTRUCTOR initializers to VECTOR_CST if
15687          possible.  */
15688       if (TREE_CODE (type) == VECTOR_TYPE)
15689         switch (TREE_CODE (init))
15690           {
15691           case VECTOR_CST:
15692             break;
15693           case CONSTRUCTOR:
15694             if (TREE_CONSTANT (init))
15695               {
15696                 vec<constructor_elt, va_gc> *elts = CONSTRUCTOR_ELTS (init);
15697                 bool constant_p = true;
15698                 tree value;
15699                 unsigned HOST_WIDE_INT ix;
15700
15701                 /* Even when ctor is constant, it might contain non-*_CST
15702                    elements (e.g. { 1.0/0.0 - 1.0/0.0, 0.0 }) and those don't
15703                    belong into VECTOR_CST nodes.  */
15704                 FOR_EACH_CONSTRUCTOR_VALUE (elts, ix, value)
15705                   if (!CONSTANT_CLASS_P (value))
15706                     {
15707                       constant_p = false;
15708                       break;
15709                     }
15710
15711                 if (constant_p)
15712                   {
15713                     init = build_vector_from_ctor (type, elts);
15714                     break;
15715                   }
15716               }
15717             /* FALLTHRU */
15718
15719           default:
15720             return NULL;
15721           }
15722
15723       rtl = expand_expr (init, NULL_RTX, VOIDmode, EXPAND_INITIALIZER);
15724
15725       /* If expand_expr returns a MEM, it wasn't immediate.  */
15726       gcc_assert (!rtl || !MEM_P (rtl));
15727     }
15728
15729   return rtl;
15730 }
15731
15732 /* Generate RTL for the variable DECL to represent its location.  */
15733
15734 static rtx
15735 rtl_for_decl_location (tree decl)
15736 {
15737   rtx rtl;
15738
15739   /* Here we have to decide where we are going to say the parameter "lives"
15740      (as far as the debugger is concerned).  We only have a couple of
15741      choices.  GCC provides us with DECL_RTL and with DECL_INCOMING_RTL.
15742
15743      DECL_RTL normally indicates where the parameter lives during most of the
15744      activation of the function.  If optimization is enabled however, this
15745      could be either NULL or else a pseudo-reg.  Both of those cases indicate
15746      that the parameter doesn't really live anywhere (as far as the code
15747      generation parts of GCC are concerned) during most of the function's
15748      activation.  That will happen (for example) if the parameter is never
15749      referenced within the function.
15750
15751      We could just generate a location descriptor here for all non-NULL
15752      non-pseudo values of DECL_RTL and ignore all of the rest, but we can be
15753      a little nicer than that if we also consider DECL_INCOMING_RTL in cases
15754      where DECL_RTL is NULL or is a pseudo-reg.
15755
15756      Note however that we can only get away with using DECL_INCOMING_RTL as
15757      a backup substitute for DECL_RTL in certain limited cases.  In cases
15758      where DECL_ARG_TYPE (decl) indicates the same type as TREE_TYPE (decl),
15759      we can be sure that the parameter was passed using the same type as it is
15760      declared to have within the function, and that its DECL_INCOMING_RTL
15761      points us to a place where a value of that type is passed.
15762
15763      In cases where DECL_ARG_TYPE (decl) and TREE_TYPE (decl) are different,
15764      we cannot (in general) use DECL_INCOMING_RTL as a substitute for DECL_RTL
15765      because in these cases DECL_INCOMING_RTL points us to a value of some
15766      type which is *different* from the type of the parameter itself.  Thus,
15767      if we tried to use DECL_INCOMING_RTL to generate a location attribute in
15768      such cases, the debugger would end up (for example) trying to fetch a
15769      `float' from a place which actually contains the first part of a
15770      `double'.  That would lead to really incorrect and confusing
15771      output at debug-time.
15772
15773      So, in general, we *do not* use DECL_INCOMING_RTL as a backup for DECL_RTL
15774      in cases where DECL_ARG_TYPE (decl) != TREE_TYPE (decl).  There
15775      are a couple of exceptions however.  On little-endian machines we can
15776      get away with using DECL_INCOMING_RTL even when DECL_ARG_TYPE (decl) is
15777      not the same as TREE_TYPE (decl), but only when DECL_ARG_TYPE (decl) is
15778      an integral type that is smaller than TREE_TYPE (decl). These cases arise
15779      when (on a little-endian machine) a non-prototyped function has a
15780      parameter declared to be of type `short' or `char'.  In such cases,
15781      TREE_TYPE (decl) will be `short' or `char', DECL_ARG_TYPE (decl) will
15782      be `int', and DECL_INCOMING_RTL will point to the lowest-order byte of the
15783      passed `int' value.  If the debugger then uses that address to fetch
15784      a `short' or a `char' (on a little-endian machine) the result will be
15785      the correct data, so we allow for such exceptional cases below.
15786
15787      Note that our goal here is to describe the place where the given formal
15788      parameter lives during most of the function's activation (i.e. between the
15789      end of the prologue and the start of the epilogue).  We'll do that as best
15790      as we can. Note however that if the given formal parameter is modified
15791      sometime during the execution of the function, then a stack backtrace (at
15792      debug-time) will show the function as having been called with the *new*
15793      value rather than the value which was originally passed in.  This happens
15794      rarely enough that it is not a major problem, but it *is* a problem, and
15795      I'd like to fix it.
15796
15797      A future version of dwarf2out.c may generate two additional attributes for
15798      any given DW_TAG_formal_parameter DIE which will describe the "passed
15799      type" and the "passed location" for the given formal parameter in addition
15800      to the attributes we now generate to indicate the "declared type" and the
15801      "active location" for each parameter.  This additional set of attributes
15802      could be used by debuggers for stack backtraces. Separately, note that
15803      sometimes DECL_RTL can be NULL and DECL_INCOMING_RTL can be NULL also.
15804      This happens (for example) for inlined-instances of inline function formal
15805      parameters which are never referenced.  This really shouldn't be
15806      happening.  All PARM_DECL nodes should get valid non-NULL
15807      DECL_INCOMING_RTL values.  FIXME.  */
15808
15809   /* Use DECL_RTL as the "location" unless we find something better.  */
15810   rtl = DECL_RTL_IF_SET (decl);
15811
15812   /* When generating abstract instances, ignore everything except
15813      constants, symbols living in memory, and symbols living in
15814      fixed registers.  */
15815   if (! reload_completed)
15816     {
15817       if (rtl
15818           && (CONSTANT_P (rtl)
15819               || (MEM_P (rtl)
15820                   && CONSTANT_P (XEXP (rtl, 0)))
15821               || (REG_P (rtl)
15822                   && TREE_CODE (decl) == VAR_DECL
15823                   && TREE_STATIC (decl))))
15824         {
15825           rtl = targetm.delegitimize_address (rtl);
15826           return rtl;
15827         }
15828       rtl = NULL_RTX;
15829     }
15830   else if (TREE_CODE (decl) == PARM_DECL)
15831     {
15832       if (rtl == NULL_RTX
15833           || is_pseudo_reg (rtl)
15834           || (MEM_P (rtl)
15835               && is_pseudo_reg (XEXP (rtl, 0))
15836               && DECL_INCOMING_RTL (decl)
15837               && MEM_P (DECL_INCOMING_RTL (decl))
15838               && GET_MODE (rtl) == GET_MODE (DECL_INCOMING_RTL (decl))))
15839         {
15840           tree declared_type = TREE_TYPE (decl);
15841           tree passed_type = DECL_ARG_TYPE (decl);
15842           machine_mode dmode = TYPE_MODE (declared_type);
15843           machine_mode pmode = TYPE_MODE (passed_type);
15844
15845           /* This decl represents a formal parameter which was optimized out.
15846              Note that DECL_INCOMING_RTL may be NULL in here, but we handle
15847              all cases where (rtl == NULL_RTX) just below.  */
15848           if (dmode == pmode)
15849             rtl = DECL_INCOMING_RTL (decl);
15850           else if ((rtl == NULL_RTX || is_pseudo_reg (rtl))
15851                    && SCALAR_INT_MODE_P (dmode)
15852                    && GET_MODE_SIZE (dmode) <= GET_MODE_SIZE (pmode)
15853                    && DECL_INCOMING_RTL (decl))
15854             {
15855               rtx inc = DECL_INCOMING_RTL (decl);
15856               if (REG_P (inc))
15857                 rtl = inc;
15858               else if (MEM_P (inc))
15859                 {
15860                   if (BYTES_BIG_ENDIAN)
15861                     rtl = adjust_address_nv (inc, dmode,
15862                                              GET_MODE_SIZE (pmode)
15863                                              - GET_MODE_SIZE (dmode));
15864                   else
15865                     rtl = inc;
15866                 }
15867             }
15868         }
15869
15870       /* If the parm was passed in registers, but lives on the stack, then
15871          make a big endian correction if the mode of the type of the
15872          parameter is not the same as the mode of the rtl.  */
15873       /* ??? This is the same series of checks that are made in dbxout.c before
15874          we reach the big endian correction code there.  It isn't clear if all
15875          of these checks are necessary here, but keeping them all is the safe
15876          thing to do.  */
15877       else if (MEM_P (rtl)
15878                && XEXP (rtl, 0) != const0_rtx
15879                && ! CONSTANT_P (XEXP (rtl, 0))
15880                /* Not passed in memory.  */
15881                && !MEM_P (DECL_INCOMING_RTL (decl))
15882                /* Not passed by invisible reference.  */
15883                && (!REG_P (XEXP (rtl, 0))
15884                    || REGNO (XEXP (rtl, 0)) == HARD_FRAME_POINTER_REGNUM
15885                    || REGNO (XEXP (rtl, 0)) == STACK_POINTER_REGNUM
15886 #if !HARD_FRAME_POINTER_IS_ARG_POINTER
15887                    || REGNO (XEXP (rtl, 0)) == ARG_POINTER_REGNUM
15888 #endif
15889                      )
15890                /* Big endian correction check.  */
15891                && BYTES_BIG_ENDIAN
15892                && TYPE_MODE (TREE_TYPE (decl)) != GET_MODE (rtl)
15893                && (GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl)))
15894                    < UNITS_PER_WORD))
15895         {
15896           machine_mode addr_mode = get_address_mode (rtl);
15897           int offset = (UNITS_PER_WORD
15898                         - GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl))));
15899
15900           rtl = gen_rtx_MEM (TYPE_MODE (TREE_TYPE (decl)),
15901                              plus_constant (addr_mode, XEXP (rtl, 0), offset));
15902         }
15903     }
15904   else if (TREE_CODE (decl) == VAR_DECL
15905            && rtl
15906            && MEM_P (rtl)
15907            && GET_MODE (rtl) != TYPE_MODE (TREE_TYPE (decl))
15908            && BYTES_BIG_ENDIAN)
15909     {
15910       machine_mode addr_mode = get_address_mode (rtl);
15911       int rsize = GET_MODE_SIZE (GET_MODE (rtl));
15912       int dsize = GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl)));
15913
15914       /* If a variable is declared "register" yet is smaller than
15915          a register, then if we store the variable to memory, it
15916          looks like we're storing a register-sized value, when in
15917          fact we are not.  We need to adjust the offset of the
15918          storage location to reflect the actual value's bytes,
15919          else gdb will not be able to display it.  */
15920       if (rsize > dsize)
15921         rtl = gen_rtx_MEM (TYPE_MODE (TREE_TYPE (decl)),
15922                            plus_constant (addr_mode, XEXP (rtl, 0),
15923                                           rsize - dsize));
15924     }
15925
15926   /* A variable with no DECL_RTL but a DECL_INITIAL is a compile-time constant,
15927      and will have been substituted directly into all expressions that use it.
15928      C does not have such a concept, but C++ and other languages do.  */
15929   if (!rtl && TREE_CODE (decl) == VAR_DECL && DECL_INITIAL (decl))
15930     rtl = rtl_for_decl_init (DECL_INITIAL (decl), TREE_TYPE (decl));
15931
15932   if (rtl)
15933     rtl = targetm.delegitimize_address (rtl);
15934
15935   /* If we don't look past the constant pool, we risk emitting a
15936      reference to a constant pool entry that isn't referenced from
15937      code, and thus is not emitted.  */
15938   if (rtl)
15939     rtl = avoid_constant_pool_reference (rtl);
15940
15941   /* Try harder to get a rtl.  If this symbol ends up not being emitted
15942      in the current CU, resolve_addr will remove the expression referencing
15943      it.  */
15944   if (rtl == NULL_RTX
15945       && TREE_CODE (decl) == VAR_DECL
15946       && !DECL_EXTERNAL (decl)
15947       && TREE_STATIC (decl)
15948       && DECL_NAME (decl)
15949       && !DECL_HARD_REGISTER (decl)
15950       && DECL_MODE (decl) != VOIDmode)
15951     {
15952       rtl = make_decl_rtl_for_debug (decl);
15953       if (!MEM_P (rtl)
15954           || GET_CODE (XEXP (rtl, 0)) != SYMBOL_REF
15955           || SYMBOL_REF_DECL (XEXP (rtl, 0)) != decl)
15956         rtl = NULL_RTX;
15957     }
15958
15959   return rtl;
15960 }
15961
15962 /* Check whether decl is a Fortran COMMON symbol.  If not, NULL_TREE is
15963    returned.  If so, the decl for the COMMON block is returned, and the
15964    value is the offset into the common block for the symbol.  */
15965
15966 static tree
15967 fortran_common (tree decl, HOST_WIDE_INT *value)
15968 {
15969   tree val_expr, cvar;
15970   machine_mode mode;
15971   HOST_WIDE_INT bitsize, bitpos;
15972   tree offset;
15973   int unsignedp, volatilep = 0;
15974
15975   /* If the decl isn't a VAR_DECL, or if it isn't static, or if
15976      it does not have a value (the offset into the common area), or if it
15977      is thread local (as opposed to global) then it isn't common, and shouldn't
15978      be handled as such.  */
15979   if (TREE_CODE (decl) != VAR_DECL
15980       || !TREE_STATIC (decl)
15981       || !DECL_HAS_VALUE_EXPR_P (decl)
15982       || !is_fortran ())
15983     return NULL_TREE;
15984
15985   val_expr = DECL_VALUE_EXPR (decl);
15986   if (TREE_CODE (val_expr) != COMPONENT_REF)
15987     return NULL_TREE;
15988
15989   cvar = get_inner_reference (val_expr, &bitsize, &bitpos, &offset,
15990                               &mode, &unsignedp, &volatilep, true);
15991
15992   if (cvar == NULL_TREE
15993       || TREE_CODE (cvar) != VAR_DECL
15994       || DECL_ARTIFICIAL (cvar)
15995       || !TREE_PUBLIC (cvar))
15996     return NULL_TREE;
15997
15998   *value = 0;
15999   if (offset != NULL)
16000     {
16001       if (!tree_fits_shwi_p (offset))
16002         return NULL_TREE;
16003       *value = tree_to_shwi (offset);
16004     }
16005   if (bitpos != 0)
16006     *value += bitpos / BITS_PER_UNIT;
16007
16008   return cvar;
16009 }
16010
16011 /* Generate *either* a DW_AT_location attribute or else a DW_AT_const_value
16012    data attribute for a variable or a parameter.  We generate the
16013    DW_AT_const_value attribute only in those cases where the given variable
16014    or parameter does not have a true "location" either in memory or in a
16015    register.  This can happen (for example) when a constant is passed as an
16016    actual argument in a call to an inline function.  (It's possible that
16017    these things can crop up in other ways also.)  Note that one type of
16018    constant value which can be passed into an inlined function is a constant
16019    pointer.  This can happen for example if an actual argument in an inlined
16020    function call evaluates to a compile-time constant address.
16021
16022    CACHE_P is true if it is worth caching the location list for DECL,
16023    so that future calls can reuse it rather than regenerate it from scratch.
16024    This is true for BLOCK_NONLOCALIZED_VARS in inlined subroutines,
16025    since we will need to refer to them each time the function is inlined.  */
16026
16027 static bool
16028 add_location_or_const_value_attribute (dw_die_ref die, tree decl, bool cache_p,
16029                                        enum dwarf_attribute attr)
16030 {
16031   rtx rtl;
16032   dw_loc_list_ref list;
16033   var_loc_list *loc_list;
16034   cached_dw_loc_list *cache;
16035
16036   if (TREE_CODE (decl) == ERROR_MARK)
16037     return false;
16038
16039   gcc_assert (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == PARM_DECL
16040               || TREE_CODE (decl) == RESULT_DECL);
16041
16042   /* Try to get some constant RTL for this decl, and use that as the value of
16043      the location.  */
16044
16045   rtl = rtl_for_decl_location (decl);
16046   if (rtl && (CONSTANT_P (rtl) || GET_CODE (rtl) == CONST_STRING)
16047       && add_const_value_attribute (die, rtl))
16048     return true;
16049
16050   /* See if we have single element location list that is equivalent to
16051      a constant value.  That way we are better to use add_const_value_attribute
16052      rather than expanding constant value equivalent.  */
16053   loc_list = lookup_decl_loc (decl);
16054   if (loc_list
16055       && loc_list->first
16056       && loc_list->first->next == NULL
16057       && NOTE_P (loc_list->first->loc)
16058       && NOTE_VAR_LOCATION (loc_list->first->loc)
16059       && NOTE_VAR_LOCATION_LOC (loc_list->first->loc))
16060     {
16061       struct var_loc_node *node;
16062
16063       node = loc_list->first;
16064       rtl = NOTE_VAR_LOCATION_LOC (node->loc);
16065       if (GET_CODE (rtl) == EXPR_LIST)
16066         rtl = XEXP (rtl, 0);
16067       if ((CONSTANT_P (rtl) || GET_CODE (rtl) == CONST_STRING)
16068           && add_const_value_attribute (die, rtl))
16069          return true;
16070     }
16071   /* If this decl is from BLOCK_NONLOCALIZED_VARS, we might need its
16072      list several times.  See if we've already cached the contents.  */
16073   list = NULL;
16074   if (loc_list == NULL || cached_dw_loc_list_table == NULL)
16075     cache_p = false;
16076   if (cache_p)
16077     {
16078       cache = cached_dw_loc_list_table->find_with_hash (decl, DECL_UID (decl));
16079       if (cache)
16080         list = cache->loc_list;
16081     }
16082   if (list == NULL)
16083     {
16084       list = loc_list_from_tree (decl, decl_by_reference_p (decl) ? 0 : 2,
16085                                  NULL);
16086       /* It is usually worth caching this result if the decl is from
16087          BLOCK_NONLOCALIZED_VARS and if the list has at least two elements.  */
16088       if (cache_p && list && list->dw_loc_next)
16089         {
16090           cached_dw_loc_list **slot
16091             = cached_dw_loc_list_table->find_slot_with_hash (decl,
16092                                                              DECL_UID (decl),
16093                                                              INSERT);
16094           cache = ggc_cleared_alloc<cached_dw_loc_list> ();
16095           cache->decl_id = DECL_UID (decl);
16096           cache->loc_list = list;
16097           *slot = cache;
16098         }
16099     }
16100   if (list)
16101     {
16102       add_AT_location_description (die, attr, list);
16103       return true;
16104     }
16105   /* None of that worked, so it must not really have a location;
16106      try adding a constant value attribute from the DECL_INITIAL.  */
16107   return tree_add_const_value_attribute_for_decl (die, decl);
16108 }
16109
16110 /* Add VARIABLE and DIE into deferred locations list.  */
16111
16112 static void
16113 defer_location (tree variable, dw_die_ref die)
16114 {
16115   deferred_locations entry;
16116   entry.variable = variable;
16117   entry.die = die;
16118   vec_safe_push (deferred_locations_list, entry);
16119 }
16120
16121 /* Helper function for tree_add_const_value_attribute.  Natively encode
16122    initializer INIT into an array.  Return true if successful.  */
16123
16124 static bool
16125 native_encode_initializer (tree init, unsigned char *array, int size)
16126 {
16127   tree type;
16128
16129   if (init == NULL_TREE)
16130     return false;
16131
16132   STRIP_NOPS (init);
16133   switch (TREE_CODE (init))
16134     {
16135     case STRING_CST:
16136       type = TREE_TYPE (init);
16137       if (TREE_CODE (type) == ARRAY_TYPE)
16138         {
16139           tree enttype = TREE_TYPE (type);
16140           machine_mode mode = TYPE_MODE (enttype);
16141
16142           if (GET_MODE_CLASS (mode) != MODE_INT || GET_MODE_SIZE (mode) != 1)
16143             return false;
16144           if (int_size_in_bytes (type) != size)
16145             return false;
16146           if (size > TREE_STRING_LENGTH (init))
16147             {
16148               memcpy (array, TREE_STRING_POINTER (init),
16149                       TREE_STRING_LENGTH (init));
16150               memset (array + TREE_STRING_LENGTH (init),
16151                       '\0', size - TREE_STRING_LENGTH (init));
16152             }
16153           else
16154             memcpy (array, TREE_STRING_POINTER (init), size);
16155           return true;
16156         }
16157       return false;
16158     case CONSTRUCTOR:
16159       type = TREE_TYPE (init);
16160       if (int_size_in_bytes (type) != size)
16161         return false;
16162       if (TREE_CODE (type) == ARRAY_TYPE)
16163         {
16164           HOST_WIDE_INT min_index;
16165           unsigned HOST_WIDE_INT cnt;
16166           int curpos = 0, fieldsize;
16167           constructor_elt *ce;
16168
16169           if (TYPE_DOMAIN (type) == NULL_TREE
16170               || !tree_fits_shwi_p (TYPE_MIN_VALUE (TYPE_DOMAIN (type))))
16171             return false;
16172
16173           fieldsize = int_size_in_bytes (TREE_TYPE (type));
16174           if (fieldsize <= 0)
16175             return false;
16176
16177           min_index = tree_to_shwi (TYPE_MIN_VALUE (TYPE_DOMAIN (type)));
16178           memset (array, '\0', size);
16179           FOR_EACH_VEC_SAFE_ELT (CONSTRUCTOR_ELTS (init), cnt, ce)
16180             {
16181               tree val = ce->value;
16182               tree index = ce->index;
16183               int pos = curpos;
16184               if (index && TREE_CODE (index) == RANGE_EXPR)
16185                 pos = (tree_to_shwi (TREE_OPERAND (index, 0)) - min_index)
16186                       * fieldsize;
16187               else if (index)
16188                 pos = (tree_to_shwi (index) - min_index) * fieldsize;
16189
16190               if (val)
16191                 {
16192                   STRIP_NOPS (val);
16193                   if (!native_encode_initializer (val, array + pos, fieldsize))
16194                     return false;
16195                 }
16196               curpos = pos + fieldsize;
16197               if (index && TREE_CODE (index) == RANGE_EXPR)
16198                 {
16199                   int count = tree_to_shwi (TREE_OPERAND (index, 1))
16200                               - tree_to_shwi (TREE_OPERAND (index, 0));
16201                   while (count-- > 0)
16202                     {
16203                       if (val)
16204                         memcpy (array + curpos, array + pos, fieldsize);
16205                       curpos += fieldsize;
16206                     }
16207                 }
16208               gcc_assert (curpos <= size);
16209             }
16210           return true;
16211         }
16212       else if (TREE_CODE (type) == RECORD_TYPE
16213                || TREE_CODE (type) == UNION_TYPE)
16214         {
16215           tree field = NULL_TREE;
16216           unsigned HOST_WIDE_INT cnt;
16217           constructor_elt *ce;
16218
16219           if (int_size_in_bytes (type) != size)
16220             return false;
16221
16222           if (TREE_CODE (type) == RECORD_TYPE)
16223             field = TYPE_FIELDS (type);
16224
16225           FOR_EACH_VEC_SAFE_ELT (CONSTRUCTOR_ELTS (init), cnt, ce)
16226             {
16227               tree val = ce->value;
16228               int pos, fieldsize;
16229
16230               if (ce->index != 0)
16231                 field = ce->index;
16232
16233               if (val)
16234                 STRIP_NOPS (val);
16235
16236               if (field == NULL_TREE || DECL_BIT_FIELD (field))
16237                 return false;
16238
16239               if (TREE_CODE (TREE_TYPE (field)) == ARRAY_TYPE
16240                   && TYPE_DOMAIN (TREE_TYPE (field))
16241                   && ! TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (field))))
16242                 return false;
16243               else if (DECL_SIZE_UNIT (field) == NULL_TREE
16244                        || !tree_fits_shwi_p (DECL_SIZE_UNIT (field)))
16245                 return false;
16246               fieldsize = tree_to_shwi (DECL_SIZE_UNIT (field));
16247               pos = int_byte_position (field);
16248               gcc_assert (pos + fieldsize <= size);
16249               if (val
16250                   && !native_encode_initializer (val, array + pos, fieldsize))
16251                 return false;
16252             }
16253           return true;
16254         }
16255       return false;
16256     case VIEW_CONVERT_EXPR:
16257     case NON_LVALUE_EXPR:
16258       return native_encode_initializer (TREE_OPERAND (init, 0), array, size);
16259     default:
16260       return native_encode_expr (init, array, size) == size;
16261     }
16262 }
16263
16264 /* Attach a DW_AT_const_value attribute to DIE. The value of the
16265    attribute is the const value T.  */
16266
16267 static bool
16268 tree_add_const_value_attribute (dw_die_ref die, tree t)
16269 {
16270   tree init;
16271   tree type = TREE_TYPE (t);
16272   rtx rtl;
16273
16274   if (!t || !TREE_TYPE (t) || TREE_TYPE (t) == error_mark_node)
16275     return false;
16276
16277   init = t;
16278   gcc_assert (!DECL_P (init));
16279
16280   rtl = rtl_for_decl_init (init, type);
16281   if (rtl)
16282     return add_const_value_attribute (die, rtl);
16283   /* If the host and target are sane, try harder.  */
16284   else if (CHAR_BIT == 8 && BITS_PER_UNIT == 8
16285            && initializer_constant_valid_p (init, type))
16286     {
16287       HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (init));
16288       if (size > 0 && (int) size == size)
16289         {
16290           unsigned char *array = ggc_cleared_vec_alloc<unsigned char> (size);
16291
16292           if (native_encode_initializer (init, array, size))
16293             {
16294               add_AT_vec (die, DW_AT_const_value, size, 1, array);
16295               return true;
16296             }
16297           ggc_free (array);
16298         }
16299     }
16300   return false;
16301 }
16302
16303 /* Attach a DW_AT_const_value attribute to VAR_DIE. The value of the
16304    attribute is the const value of T, where T is an integral constant
16305    variable with static storage duration
16306    (so it can't be a PARM_DECL or a RESULT_DECL).  */
16307
16308 static bool
16309 tree_add_const_value_attribute_for_decl (dw_die_ref var_die, tree decl)
16310 {
16311
16312   if (!decl
16313       || (TREE_CODE (decl) != VAR_DECL
16314           && TREE_CODE (decl) != CONST_DECL)
16315       || (TREE_CODE (decl) == VAR_DECL
16316           && !TREE_STATIC (decl)))
16317     return false;
16318
16319     if (TREE_READONLY (decl)
16320         && ! TREE_THIS_VOLATILE (decl)
16321         && DECL_INITIAL (decl))
16322       /* OK */;
16323     else
16324       return false;
16325
16326   /* Don't add DW_AT_const_value if abstract origin already has one.  */
16327   if (get_AT (var_die, DW_AT_const_value))
16328     return false;
16329
16330   return tree_add_const_value_attribute (var_die, DECL_INITIAL (decl));
16331 }
16332
16333 /* Convert the CFI instructions for the current function into a
16334    location list.  This is used for DW_AT_frame_base when we targeting
16335    a dwarf2 consumer that does not support the dwarf3
16336    DW_OP_call_frame_cfa.  OFFSET is a constant to be added to all CFA
16337    expressions.  */
16338
16339 static dw_loc_list_ref
16340 convert_cfa_to_fb_loc_list (HOST_WIDE_INT offset)
16341 {
16342   int ix;
16343   dw_fde_ref fde;
16344   dw_loc_list_ref list, *list_tail;
16345   dw_cfi_ref cfi;
16346   dw_cfa_location last_cfa, next_cfa;
16347   const char *start_label, *last_label, *section;
16348   dw_cfa_location remember;
16349
16350   fde = cfun->fde;
16351   gcc_assert (fde != NULL);
16352
16353   section = secname_for_decl (current_function_decl);
16354   list_tail = &list;
16355   list = NULL;
16356
16357   memset (&next_cfa, 0, sizeof (next_cfa));
16358   next_cfa.reg = INVALID_REGNUM;
16359   remember = next_cfa;
16360
16361   start_label = fde->dw_fde_begin;
16362
16363   /* ??? Bald assumption that the CIE opcode list does not contain
16364      advance opcodes.  */
16365   FOR_EACH_VEC_ELT (*cie_cfi_vec, ix, cfi)
16366     lookup_cfa_1 (cfi, &next_cfa, &remember);
16367
16368   last_cfa = next_cfa;
16369   last_label = start_label;
16370
16371   if (fde->dw_fde_second_begin && fde->dw_fde_switch_cfi_index == 0)
16372     {
16373       /* If the first partition contained no CFI adjustments, the
16374          CIE opcodes apply to the whole first partition.  */
16375       *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset),
16376                                  fde->dw_fde_begin, fde->dw_fde_end, section);
16377       list_tail =&(*list_tail)->dw_loc_next;
16378       start_label = last_label = fde->dw_fde_second_begin;
16379     }
16380
16381   FOR_EACH_VEC_SAFE_ELT (fde->dw_fde_cfi, ix, cfi)
16382     {
16383       switch (cfi->dw_cfi_opc)
16384         {
16385         case DW_CFA_set_loc:
16386         case DW_CFA_advance_loc1:
16387         case DW_CFA_advance_loc2:
16388         case DW_CFA_advance_loc4:
16389           if (!cfa_equal_p (&last_cfa, &next_cfa))
16390             {
16391               *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset),
16392                                          start_label, last_label, section);
16393
16394               list_tail = &(*list_tail)->dw_loc_next;
16395               last_cfa = next_cfa;
16396               start_label = last_label;
16397             }
16398           last_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
16399           break;
16400
16401         case DW_CFA_advance_loc:
16402           /* The encoding is complex enough that we should never emit this.  */
16403           gcc_unreachable ();
16404
16405         default:
16406           lookup_cfa_1 (cfi, &next_cfa, &remember);
16407           break;
16408         }
16409       if (ix + 1 == fde->dw_fde_switch_cfi_index)
16410         {
16411           if (!cfa_equal_p (&last_cfa, &next_cfa))
16412             {
16413               *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset),
16414                                          start_label, last_label, section);
16415
16416               list_tail = &(*list_tail)->dw_loc_next;
16417               last_cfa = next_cfa;
16418               start_label = last_label;
16419             }
16420           *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset),
16421                                      start_label, fde->dw_fde_end, section);
16422           list_tail = &(*list_tail)->dw_loc_next;
16423           start_label = last_label = fde->dw_fde_second_begin;
16424         }
16425     }
16426
16427   if (!cfa_equal_p (&last_cfa, &next_cfa))
16428     {
16429       *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset),
16430                                  start_label, last_label, section);
16431       list_tail = &(*list_tail)->dw_loc_next;
16432       start_label = last_label;
16433     }
16434
16435   *list_tail = new_loc_list (build_cfa_loc (&next_cfa, offset),
16436                              start_label,
16437                              fde->dw_fde_second_begin
16438                              ? fde->dw_fde_second_end : fde->dw_fde_end,
16439                              section);
16440
16441   if (list && list->dw_loc_next)
16442     gen_llsym (list);
16443
16444   return list;
16445 }
16446
16447 /* Compute a displacement from the "steady-state frame pointer" to the
16448    frame base (often the same as the CFA), and store it in
16449    frame_pointer_fb_offset.  OFFSET is added to the displacement
16450    before the latter is negated.  */
16451
16452 static void
16453 compute_frame_pointer_to_fb_displacement (HOST_WIDE_INT offset)
16454 {
16455   rtx reg, elim;
16456
16457 #ifdef FRAME_POINTER_CFA_OFFSET
16458   reg = frame_pointer_rtx;
16459   offset += FRAME_POINTER_CFA_OFFSET (current_function_decl);
16460 #else
16461   reg = arg_pointer_rtx;
16462   offset += ARG_POINTER_CFA_OFFSET (current_function_decl);
16463 #endif
16464
16465   elim = (ira_use_lra_p
16466           ? lra_eliminate_regs (reg, VOIDmode, NULL_RTX)
16467           : eliminate_regs (reg, VOIDmode, NULL_RTX));
16468   if (GET_CODE (elim) == PLUS)
16469     {
16470       offset += INTVAL (XEXP (elim, 1));
16471       elim = XEXP (elim, 0);
16472     }
16473
16474   frame_pointer_fb_offset = -offset;
16475
16476   /* ??? AVR doesn't set up valid eliminations when there is no stack frame
16477      in which to eliminate.  This is because it's stack pointer isn't 
16478      directly accessible as a register within the ISA.  To work around
16479      this, assume that while we cannot provide a proper value for
16480      frame_pointer_fb_offset, we won't need one either.  */
16481   frame_pointer_fb_offset_valid
16482     = ((SUPPORTS_STACK_ALIGNMENT
16483         && (elim == hard_frame_pointer_rtx
16484             || elim == stack_pointer_rtx))
16485        || elim == (frame_pointer_needed
16486                    ? hard_frame_pointer_rtx
16487                    : stack_pointer_rtx));
16488 }
16489
16490 /* Generate a DW_AT_name attribute given some string value to be included as
16491    the value of the attribute.  */
16492
16493 static void
16494 add_name_attribute (dw_die_ref die, const char *name_string)
16495 {
16496   if (name_string != NULL && *name_string != 0)
16497     {
16498       if (demangle_name_func)
16499         name_string = (*demangle_name_func) (name_string);
16500
16501       add_AT_string (die, DW_AT_name, name_string);
16502     }
16503 }
16504
16505 /* Retrieve the descriptive type of TYPE, if any, make sure it has a
16506    DIE and attach a DW_AT_GNAT_descriptive_type attribute to the DIE
16507    of TYPE accordingly.
16508
16509    ??? This is a temporary measure until after we're able to generate
16510    regular DWARF for the complex Ada type system.  */
16511
16512 static void 
16513 add_gnat_descriptive_type_attribute (dw_die_ref die, tree type,
16514                                      dw_die_ref context_die)
16515 {
16516   tree dtype;
16517   dw_die_ref dtype_die;
16518
16519   if (!lang_hooks.types.descriptive_type)
16520     return;
16521
16522   dtype = lang_hooks.types.descriptive_type (type);
16523   if (!dtype)
16524     return;
16525
16526   dtype_die = lookup_type_die (dtype);
16527   if (!dtype_die)
16528     {
16529       gen_type_die (dtype, context_die);
16530       dtype_die = lookup_type_die (dtype);
16531       gcc_assert (dtype_die);
16532     }
16533
16534   add_AT_die_ref (die, DW_AT_GNAT_descriptive_type, dtype_die);
16535 }
16536
16537 /* Retrieve the comp_dir string suitable for use with DW_AT_comp_dir.  */
16538
16539 static const char *
16540 comp_dir_string (void)
16541 {
16542   const char *wd;
16543   char *wd1;
16544   static const char *cached_wd = NULL;
16545
16546   if (cached_wd != NULL)
16547     return cached_wd;
16548
16549   wd = get_src_pwd ();
16550   if (wd == NULL)
16551     return NULL;
16552
16553   if (DWARF2_DIR_SHOULD_END_WITH_SEPARATOR)
16554     {
16555       int wdlen;
16556
16557       wdlen = strlen (wd);
16558       wd1 = ggc_vec_alloc<char> (wdlen + 2);
16559       strcpy (wd1, wd);
16560       wd1 [wdlen] = DIR_SEPARATOR;
16561       wd1 [wdlen + 1] = 0;
16562       wd = wd1;
16563     }
16564
16565   cached_wd = remap_debug_filename (wd);
16566   return cached_wd;
16567 }
16568
16569 /* Generate a DW_AT_comp_dir attribute for DIE.  */
16570
16571 static void
16572 add_comp_dir_attribute (dw_die_ref die)
16573 {
16574   const char * wd = comp_dir_string ();
16575   if (wd != NULL)
16576     add_AT_string (die, DW_AT_comp_dir, wd);
16577 }
16578
16579 /* Given a tree node VALUE describing a scalar attribute ATTR (i.e. a bound, a
16580    pointer computation, ...), output a representation for that bound according
16581    to the accepted FORMS (see enum dw_scalar_form) and add it to DIE.  See
16582    loc_list_from_tree for the meaning of CONTEXT.  */
16583
16584 static void
16585 add_scalar_info (dw_die_ref die, enum dwarf_attribute attr, tree value,
16586                  int forms, const struct loc_descr_context *context)
16587 {
16588   dw_die_ref ctx, decl_die;
16589   dw_loc_list_ref list;
16590
16591   bool strip_conversions = true;
16592
16593   while (strip_conversions)
16594     switch (TREE_CODE (value))
16595       {
16596       case ERROR_MARK:
16597       case SAVE_EXPR:
16598         return;
16599
16600       CASE_CONVERT:
16601       case VIEW_CONVERT_EXPR:
16602         value = TREE_OPERAND (value, 0);
16603         break;
16604
16605       default:
16606         strip_conversions = false;
16607         break;
16608       }
16609
16610   /* If possible and permitted, output the attribute as a constant.  */
16611   if ((forms & dw_scalar_form_constant) != 0
16612       && TREE_CODE (value) == INTEGER_CST)
16613     {
16614       unsigned int prec = simple_type_size_in_bits (TREE_TYPE (value));
16615
16616       /* If HOST_WIDE_INT is big enough then represent the bound as
16617          a constant value.  We need to choose a form based on
16618          whether the type is signed or unsigned.  We cannot just
16619          call add_AT_unsigned if the value itself is positive
16620          (add_AT_unsigned might add the unsigned value encoded as
16621          DW_FORM_data[1248]).  Some DWARF consumers will lookup the
16622          bounds type and then sign extend any unsigned values found
16623          for signed types.  This is needed only for
16624          DW_AT_{lower,upper}_bound, since for most other attributes,
16625          consumers will treat DW_FORM_data[1248] as unsigned values,
16626          regardless of the underlying type.  */
16627       if (prec <= HOST_BITS_PER_WIDE_INT
16628           || tree_fits_uhwi_p (value))
16629         {
16630           if (TYPE_UNSIGNED (TREE_TYPE (value)))
16631             add_AT_unsigned (die, attr, TREE_INT_CST_LOW (value));
16632           else
16633             add_AT_int (die, attr, TREE_INT_CST_LOW (value));
16634         }
16635       else
16636         /* Otherwise represent the bound as an unsigned value with
16637            the precision of its type.  The precision and signedness
16638            of the type will be necessary to re-interpret it
16639            unambiguously.  */
16640         add_AT_wide (die, attr, value);
16641       return;
16642     }
16643
16644   /* Otherwise, if it's possible and permitted too, output a reference to
16645      another DIE.  */
16646   if ((forms & dw_scalar_form_reference) != 0)
16647     {
16648       tree decl = NULL_TREE;
16649
16650       /* Some type attributes reference an outer type.  For instance, the upper
16651          bound of an array may reference an embedding record (this happens in
16652          Ada).  */
16653       if (TREE_CODE (value) == COMPONENT_REF
16654           && TREE_CODE (TREE_OPERAND (value, 0)) == PLACEHOLDER_EXPR
16655           && TREE_CODE (TREE_OPERAND (value, 1)) == FIELD_DECL)
16656         decl = TREE_OPERAND (value, 1);
16657
16658       else if (TREE_CODE (value) == VAR_DECL
16659                || TREE_CODE (value) == PARM_DECL
16660                || TREE_CODE (value) == RESULT_DECL)
16661         decl = value;
16662
16663       if (decl != NULL_TREE)
16664         {
16665           dw_die_ref decl_die = lookup_decl_die (decl);
16666
16667           /* ??? Can this happen, or should the variable have been bound
16668              first?  Probably it can, since I imagine that we try to create
16669              the types of parameters in the order in which they exist in
16670              the list, and won't have created a forward reference to a
16671              later parameter.  */
16672           if (decl_die != NULL)
16673             {
16674               add_AT_die_ref (die, attr, decl_die);
16675               return;
16676             }
16677         }
16678     }
16679
16680   /* Last chance: try to create a stack operation procedure to evaluate the
16681      value.  Do nothing if even that is not possible or permitted.  */
16682   if ((forms & dw_scalar_form_exprloc) == 0)
16683     return;
16684
16685   list = loc_list_from_tree (value, 2, context);
16686   if (list == NULL || single_element_loc_list_p (list))
16687     {
16688       /* If this attribute is not a reference nor constant, it is
16689          a DWARF expression rather than location description.  For that
16690          loc_list_from_tree (value, 0, &context) is needed.  */
16691       dw_loc_list_ref list2 = loc_list_from_tree (value, 0, context);
16692       if (list2 && single_element_loc_list_p (list2))
16693         {
16694           add_AT_loc (die, attr, list2->expr);
16695           return;
16696         }
16697     }
16698
16699   /* If that failed to give a single element location list, fall back to
16700      outputting this as a reference... still if permitted.  */
16701   if (list == NULL || (forms & dw_scalar_form_reference) == 0)
16702     return;
16703
16704   if (current_function_decl == 0)
16705     ctx = comp_unit_die ();
16706   else
16707     ctx = lookup_decl_die (current_function_decl);
16708
16709   decl_die = new_die (DW_TAG_variable, ctx, value);
16710   add_AT_flag (decl_die, DW_AT_artificial, 1);
16711   add_type_attribute (decl_die, TREE_TYPE (value), TYPE_QUAL_CONST, ctx);
16712   add_AT_location_description (decl_die, DW_AT_location, list);
16713   add_AT_die_ref (die, attr, decl_die);
16714 }
16715
16716 /* Return the default for DW_AT_lower_bound, or -1 if there is not any
16717    default.  */
16718
16719 static int
16720 lower_bound_default (void)
16721 {
16722   switch (get_AT_unsigned (comp_unit_die (), DW_AT_language))
16723     {
16724     case DW_LANG_C:
16725     case DW_LANG_C89:
16726     case DW_LANG_C99:
16727     case DW_LANG_C11:
16728     case DW_LANG_C_plus_plus:
16729     case DW_LANG_C_plus_plus_11:
16730     case DW_LANG_C_plus_plus_14:
16731     case DW_LANG_ObjC:
16732     case DW_LANG_ObjC_plus_plus:
16733     case DW_LANG_Java:
16734       return 0;
16735     case DW_LANG_Fortran77:
16736     case DW_LANG_Fortran90:
16737     case DW_LANG_Fortran95:
16738     case DW_LANG_Fortran03:
16739     case DW_LANG_Fortran08:
16740       return 1;
16741     case DW_LANG_UPC:
16742     case DW_LANG_D:
16743     case DW_LANG_Python:
16744       return dwarf_version >= 4 ? 0 : -1;
16745     case DW_LANG_Ada95:
16746     case DW_LANG_Ada83:
16747     case DW_LANG_Cobol74:
16748     case DW_LANG_Cobol85:
16749     case DW_LANG_Pascal83:
16750     case DW_LANG_Modula2:
16751     case DW_LANG_PLI:
16752       return dwarf_version >= 4 ? 1 : -1;
16753     default:
16754       return -1;
16755     }
16756 }
16757
16758 /* Given a tree node describing an array bound (either lower or upper) output
16759    a representation for that bound.  */
16760
16761 static void
16762 add_bound_info (dw_die_ref subrange_die, enum dwarf_attribute bound_attr,
16763                 tree bound, const struct loc_descr_context *context)
16764 {
16765   int dflt;
16766
16767   while (1)
16768     switch (TREE_CODE (bound))
16769       {
16770       /* Strip all conversions.  */
16771       CASE_CONVERT:
16772       case VIEW_CONVERT_EXPR:
16773         bound = TREE_OPERAND (bound, 0);
16774         break;
16775
16776       /* All fixed-bounds are represented by INTEGER_CST nodes.  Lower bounds
16777          are even omitted when they are the default.  */
16778       case INTEGER_CST:
16779         /* If the value for this bound is the default one, we can even omit the
16780            attribute.  */
16781         if (bound_attr == DW_AT_lower_bound
16782             && tree_fits_shwi_p (bound)
16783             && (dflt = lower_bound_default ()) != -1
16784             && tree_to_shwi (bound) == dflt)
16785           return;
16786
16787         /* FALLTHRU */
16788
16789       default:
16790         add_scalar_info (subrange_die, bound_attr, bound,
16791                          dw_scalar_form_constant
16792                          | dw_scalar_form_exprloc
16793                          | dw_scalar_form_reference,
16794                          context);
16795         return;
16796       }
16797 }
16798
16799 /* Add subscript info to TYPE_DIE, describing an array TYPE, collapsing
16800    possibly nested array subscripts in a flat sequence if COLLAPSE_P is true.
16801    Note that the block of subscript information for an array type also
16802    includes information about the element type of the given array type.  */
16803
16804 static void
16805 add_subscript_info (dw_die_ref type_die, tree type, bool collapse_p)
16806 {
16807   unsigned dimension_number;
16808   tree lower, upper;
16809   dw_die_ref subrange_die;
16810
16811   for (dimension_number = 0;
16812        TREE_CODE (type) == ARRAY_TYPE && (dimension_number == 0 || collapse_p);
16813        type = TREE_TYPE (type), dimension_number++)
16814     {
16815       tree domain = TYPE_DOMAIN (type);
16816
16817       if (TYPE_STRING_FLAG (type) && is_fortran () && dimension_number > 0)
16818         break;
16819
16820       /* Arrays come in three flavors: Unspecified bounds, fixed bounds,
16821          and (in GNU C only) variable bounds.  Handle all three forms
16822          here.  */
16823       subrange_die = new_die (DW_TAG_subrange_type, type_die, NULL);
16824       if (domain)
16825         {
16826           /* We have an array type with specified bounds.  */
16827           lower = TYPE_MIN_VALUE (domain);
16828           upper = TYPE_MAX_VALUE (domain);
16829
16830           /* Define the index type.  */
16831           if (TREE_TYPE (domain))
16832             {
16833               /* ??? This is probably an Ada unnamed subrange type.  Ignore the
16834                  TREE_TYPE field.  We can't emit debug info for this
16835                  because it is an unnamed integral type.  */
16836               if (TREE_CODE (domain) == INTEGER_TYPE
16837                   && TYPE_NAME (domain) == NULL_TREE
16838                   && TREE_CODE (TREE_TYPE (domain)) == INTEGER_TYPE
16839                   && TYPE_NAME (TREE_TYPE (domain)) == NULL_TREE)
16840                 ;
16841               else
16842                 add_type_attribute (subrange_die, TREE_TYPE (domain),
16843                                     TYPE_UNQUALIFIED, type_die);
16844             }
16845
16846           /* ??? If upper is NULL, the array has unspecified length,
16847              but it does have a lower bound.  This happens with Fortran
16848                dimension arr(N:*)
16849              Since the debugger is definitely going to need to know N
16850              to produce useful results, go ahead and output the lower
16851              bound solo, and hope the debugger can cope.  */
16852
16853           add_bound_info (subrange_die, DW_AT_lower_bound, lower, NULL);
16854           if (upper)
16855             add_bound_info (subrange_die, DW_AT_upper_bound, upper, NULL);
16856         }
16857
16858       /* Otherwise we have an array type with an unspecified length.  The
16859          DWARF-2 spec does not say how to handle this; let's just leave out the
16860          bounds.  */
16861     }
16862 }
16863
16864 /* Add a DW_AT_byte_size attribute to DIE with TREE_NODE's size.  */
16865
16866 static void
16867 add_byte_size_attribute (dw_die_ref die, tree tree_node)
16868 {
16869   dw_die_ref decl_die;
16870   HOST_WIDE_INT size;
16871
16872   switch (TREE_CODE (tree_node))
16873     {
16874     case ERROR_MARK:
16875       size = 0;
16876       break;
16877     case ENUMERAL_TYPE:
16878     case RECORD_TYPE:
16879     case UNION_TYPE:
16880     case QUAL_UNION_TYPE:
16881       if (TREE_CODE (TYPE_SIZE_UNIT (tree_node)) == VAR_DECL
16882           && (decl_die = lookup_decl_die (TYPE_SIZE_UNIT (tree_node))))
16883         {
16884           add_AT_die_ref (die, DW_AT_byte_size, decl_die);
16885           return;
16886         }
16887       size = int_size_in_bytes (tree_node);
16888       break;
16889     case FIELD_DECL:
16890       /* For a data member of a struct or union, the DW_AT_byte_size is
16891          generally given as the number of bytes normally allocated for an
16892          object of the *declared* type of the member itself.  This is true
16893          even for bit-fields.  */
16894       size = int_size_in_bytes (field_type (tree_node));
16895       break;
16896     default:
16897       gcc_unreachable ();
16898     }
16899
16900   /* Note that `size' might be -1 when we get to this point.  If it is, that
16901      indicates that the byte size of the entity in question is variable.  We
16902      have no good way of expressing this fact in Dwarf at the present time,
16903      when location description was not used by the caller code instead.  */
16904   if (size >= 0)
16905     add_AT_unsigned (die, DW_AT_byte_size, size);
16906 }
16907
16908 /* For a FIELD_DECL node which represents a bit-field, output an attribute
16909    which specifies the distance in bits from the highest order bit of the
16910    "containing object" for the bit-field to the highest order bit of the
16911    bit-field itself.
16912
16913    For any given bit-field, the "containing object" is a hypothetical object
16914    (of some integral or enum type) within which the given bit-field lives.  The
16915    type of this hypothetical "containing object" is always the same as the
16916    declared type of the individual bit-field itself.  The determination of the
16917    exact location of the "containing object" for a bit-field is rather
16918    complicated.  It's handled by the `field_byte_offset' function (above).
16919
16920    Note that it is the size (in bytes) of the hypothetical "containing object"
16921    which will be given in the DW_AT_byte_size attribute for this bit-field.
16922    (See `byte_size_attribute' above).  */
16923
16924 static inline void
16925 add_bit_offset_attribute (dw_die_ref die, tree decl)
16926 {
16927   HOST_WIDE_INT object_offset_in_bytes = field_byte_offset (decl);
16928   tree type = DECL_BIT_FIELD_TYPE (decl);
16929   HOST_WIDE_INT bitpos_int;
16930   HOST_WIDE_INT highest_order_object_bit_offset;
16931   HOST_WIDE_INT highest_order_field_bit_offset;
16932   HOST_WIDE_INT bit_offset;
16933
16934   /* Must be a field and a bit field.  */
16935   gcc_assert (type && TREE_CODE (decl) == FIELD_DECL);
16936
16937   /* We can't yet handle bit-fields whose offsets are variable, so if we
16938      encounter such things, just return without generating any attribute
16939      whatsoever.  Likewise for variable or too large size.  */
16940   if (! tree_fits_shwi_p (bit_position (decl))
16941       || ! tree_fits_uhwi_p (DECL_SIZE (decl)))
16942     return;
16943
16944   bitpos_int = int_bit_position (decl);
16945
16946   /* Note that the bit offset is always the distance (in bits) from the
16947      highest-order bit of the "containing object" to the highest-order bit of
16948      the bit-field itself.  Since the "high-order end" of any object or field
16949      is different on big-endian and little-endian machines, the computation
16950      below must take account of these differences.  */
16951   highest_order_object_bit_offset = object_offset_in_bytes * BITS_PER_UNIT;
16952   highest_order_field_bit_offset = bitpos_int;
16953
16954   if (! BYTES_BIG_ENDIAN)
16955     {
16956       highest_order_field_bit_offset += tree_to_shwi (DECL_SIZE (decl));
16957       highest_order_object_bit_offset += simple_type_size_in_bits (type);
16958     }
16959
16960   bit_offset
16961     = (! BYTES_BIG_ENDIAN
16962        ? highest_order_object_bit_offset - highest_order_field_bit_offset
16963        : highest_order_field_bit_offset - highest_order_object_bit_offset);
16964
16965   if (bit_offset < 0)
16966     add_AT_int (die, DW_AT_bit_offset, bit_offset);
16967   else
16968     add_AT_unsigned (die, DW_AT_bit_offset, (unsigned HOST_WIDE_INT) bit_offset);
16969 }
16970
16971 /* For a FIELD_DECL node which represents a bit field, output an attribute
16972    which specifies the length in bits of the given field.  */
16973
16974 static inline void
16975 add_bit_size_attribute (dw_die_ref die, tree decl)
16976 {
16977   /* Must be a field and a bit field.  */
16978   gcc_assert (TREE_CODE (decl) == FIELD_DECL
16979               && DECL_BIT_FIELD_TYPE (decl));
16980
16981   if (tree_fits_uhwi_p (DECL_SIZE (decl)))
16982     add_AT_unsigned (die, DW_AT_bit_size, tree_to_uhwi (DECL_SIZE (decl)));
16983 }
16984
16985 /* If the compiled language is ANSI C, then add a 'prototyped'
16986    attribute, if arg types are given for the parameters of a function.  */
16987
16988 static inline void
16989 add_prototyped_attribute (dw_die_ref die, tree func_type)
16990 {
16991   switch (get_AT_unsigned (comp_unit_die (), DW_AT_language))
16992     {
16993     case DW_LANG_C:
16994     case DW_LANG_C89:
16995     case DW_LANG_C99:
16996     case DW_LANG_C11:
16997     case DW_LANG_ObjC:
16998       if (prototype_p (func_type))
16999         add_AT_flag (die, DW_AT_prototyped, 1);
17000       break;
17001     default:
17002       break;
17003     }
17004 }
17005
17006 /* Add an 'abstract_origin' attribute below a given DIE.  The DIE is found
17007    by looking in either the type declaration or object declaration
17008    equate table.  */
17009
17010 static inline dw_die_ref
17011 add_abstract_origin_attribute (dw_die_ref die, tree origin)
17012 {
17013   dw_die_ref origin_die = NULL;
17014
17015   if (TREE_CODE (origin) != FUNCTION_DECL)
17016     {
17017       /* We may have gotten separated from the block for the inlined
17018          function, if we're in an exception handler or some such; make
17019          sure that the abstract function has been written out.
17020
17021          Doing this for nested functions is wrong, however; functions are
17022          distinct units, and our context might not even be inline.  */
17023       tree fn = origin;
17024
17025       if (TYPE_P (fn))
17026         fn = TYPE_STUB_DECL (fn);
17027
17028       fn = decl_function_context (fn);
17029       if (fn)
17030         dwarf2out_abstract_function (fn);
17031     }
17032
17033   if (DECL_P (origin))
17034     origin_die = lookup_decl_die (origin);
17035   else if (TYPE_P (origin))
17036     origin_die = lookup_type_die (origin);
17037
17038   /* XXX: Functions that are never lowered don't always have correct block
17039      trees (in the case of java, they simply have no block tree, in some other
17040      languages).  For these functions, there is nothing we can really do to
17041      output correct debug info for inlined functions in all cases.  Rather
17042      than die, we'll just produce deficient debug info now, in that we will
17043      have variables without a proper abstract origin.  In the future, when all
17044      functions are lowered, we should re-add a gcc_assert (origin_die)
17045      here.  */
17046
17047   if (origin_die)
17048     add_AT_die_ref (die, DW_AT_abstract_origin, origin_die);
17049   return origin_die;
17050 }
17051
17052 /* We do not currently support the pure_virtual attribute.  */
17053
17054 static inline void
17055 add_pure_or_virtual_attribute (dw_die_ref die, tree func_decl)
17056 {
17057   if (DECL_VINDEX (func_decl))
17058     {
17059       add_AT_unsigned (die, DW_AT_virtuality, DW_VIRTUALITY_virtual);
17060
17061       if (tree_fits_shwi_p (DECL_VINDEX (func_decl)))
17062         add_AT_loc (die, DW_AT_vtable_elem_location,
17063                     new_loc_descr (DW_OP_constu,
17064                                    tree_to_shwi (DECL_VINDEX (func_decl)),
17065                                    0));
17066
17067       /* GNU extension: Record what type this method came from originally.  */
17068       if (debug_info_level > DINFO_LEVEL_TERSE
17069           && DECL_CONTEXT (func_decl))
17070         add_AT_die_ref (die, DW_AT_containing_type,
17071                         lookup_type_die (DECL_CONTEXT (func_decl)));
17072     }
17073 }
17074 \f
17075 /* Add a DW_AT_linkage_name or DW_AT_MIPS_linkage_name attribute for the
17076    given decl.  This used to be a vendor extension until after DWARF 4
17077    standardized it.  */
17078
17079 static void
17080 add_linkage_attr (dw_die_ref die, tree decl)
17081 {
17082   const char *name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
17083
17084   /* Mimic what assemble_name_raw does with a leading '*'.  */
17085   if (name[0] == '*')
17086     name = &name[1];
17087
17088   if (dwarf_version >= 4)
17089     add_AT_string (die, DW_AT_linkage_name, name);
17090   else
17091     add_AT_string (die, DW_AT_MIPS_linkage_name, name);
17092 }
17093
17094 /* Add source coordinate attributes for the given decl.  */
17095
17096 static void
17097 add_src_coords_attributes (dw_die_ref die, tree decl)
17098 {
17099   expanded_location s;
17100
17101   if (LOCATION_LOCUS (DECL_SOURCE_LOCATION (decl)) == UNKNOWN_LOCATION)
17102     return;
17103   s = expand_location (DECL_SOURCE_LOCATION (decl));
17104   add_AT_file (die, DW_AT_decl_file, lookup_filename (s.file));
17105   add_AT_unsigned (die, DW_AT_decl_line, s.line);
17106 }
17107
17108 /* Add DW_AT_{,MIPS_}linkage_name attribute for the given decl.  */
17109
17110 static void
17111 add_linkage_name (dw_die_ref die, tree decl)
17112 {
17113   if (debug_info_level > DINFO_LEVEL_NONE
17114       && (TREE_CODE (decl) == FUNCTION_DECL || TREE_CODE (decl) == VAR_DECL)
17115       && TREE_PUBLIC (decl)
17116       && !(TREE_CODE (decl) == VAR_DECL && DECL_REGISTER (decl))
17117       && die->die_tag != DW_TAG_member)
17118     {
17119       /* Defer until we have an assembler name set.  */
17120       if (!DECL_ASSEMBLER_NAME_SET_P (decl))
17121         {
17122           limbo_die_node *asm_name;
17123
17124           asm_name = ggc_cleared_alloc<limbo_die_node> ();
17125           asm_name->die = die;
17126           asm_name->created_for = decl;
17127           asm_name->next = deferred_asm_name;
17128           deferred_asm_name = asm_name;
17129         }
17130       else if (DECL_ASSEMBLER_NAME (decl) != DECL_NAME (decl))
17131         add_linkage_attr (die, decl);
17132     }
17133 }
17134
17135 /* Add a DW_AT_name attribute and source coordinate attribute for the
17136    given decl, but only if it actually has a name.  */
17137
17138 static void
17139 add_name_and_src_coords_attributes (dw_die_ref die, tree decl)
17140 {
17141   tree decl_name;
17142
17143   decl_name = DECL_NAME (decl);
17144   if (decl_name != NULL && IDENTIFIER_POINTER (decl_name) != NULL)
17145     {
17146       const char *name = dwarf2_name (decl, 0);
17147       if (name)
17148         add_name_attribute (die, name);
17149       if (! DECL_ARTIFICIAL (decl))
17150         add_src_coords_attributes (die, decl);
17151
17152       add_linkage_name (die, decl);
17153     }
17154
17155 #ifdef VMS_DEBUGGING_INFO
17156   /* Get the function's name, as described by its RTL.  This may be different
17157      from the DECL_NAME name used in the source file.  */
17158   if (TREE_CODE (decl) == FUNCTION_DECL && TREE_ASM_WRITTEN (decl))
17159     {
17160       add_AT_addr (die, DW_AT_VMS_rtnbeg_pd_address,
17161                   XEXP (DECL_RTL (decl), 0), false);
17162       vec_safe_push (used_rtx_array, XEXP (DECL_RTL (decl), 0));
17163     }
17164 #endif /* VMS_DEBUGGING_INFO */
17165 }
17166
17167 #ifdef VMS_DEBUGGING_INFO
17168 /* Output the debug main pointer die for VMS */
17169
17170 void
17171 dwarf2out_vms_debug_main_pointer (void)
17172 {
17173   char label[MAX_ARTIFICIAL_LABEL_BYTES];
17174   dw_die_ref die;
17175
17176   /* Allocate the VMS debug main subprogram die.  */
17177   die = ggc_cleared_alloc<die_node> ();
17178   die->die_tag = DW_TAG_subprogram;
17179   add_name_attribute (die, VMS_DEBUG_MAIN_POINTER);
17180   ASM_GENERATE_INTERNAL_LABEL (label, PROLOGUE_END_LABEL,
17181                                current_function_funcdef_no);
17182   add_AT_lbl_id (die, DW_AT_entry_pc, label);
17183
17184   /* Make it the first child of comp_unit_die ().  */
17185   die->die_parent = comp_unit_die ();
17186   if (comp_unit_die ()->die_child)
17187     {
17188       die->die_sib = comp_unit_die ()->die_child->die_sib;
17189       comp_unit_die ()->die_child->die_sib = die;
17190     }
17191   else
17192     {
17193       die->die_sib = die;
17194       comp_unit_die ()->die_child = die;
17195     }
17196 }
17197 #endif /* VMS_DEBUGGING_INFO */
17198
17199 /* Push a new declaration scope.  */
17200
17201 static void
17202 push_decl_scope (tree scope)
17203 {
17204   vec_safe_push (decl_scope_table, scope);
17205 }
17206
17207 /* Pop a declaration scope.  */
17208
17209 static inline void
17210 pop_decl_scope (void)
17211 {
17212   decl_scope_table->pop ();
17213 }
17214
17215 /* walk_tree helper function for uses_local_type, below.  */
17216
17217 static tree
17218 uses_local_type_r (tree *tp, int *walk_subtrees, void *data ATTRIBUTE_UNUSED)
17219 {
17220   if (!TYPE_P (*tp))
17221     *walk_subtrees = 0;
17222   else
17223     {
17224       tree name = TYPE_NAME (*tp);
17225       if (name && DECL_P (name) && decl_function_context (name))
17226         return *tp;
17227     }
17228   return NULL_TREE;
17229 }
17230
17231 /* If TYPE involves a function-local type (including a local typedef to a
17232    non-local type), returns that type; otherwise returns NULL_TREE.  */
17233
17234 static tree
17235 uses_local_type (tree type)
17236 {
17237   tree used = walk_tree_without_duplicates (&type, uses_local_type_r, NULL);
17238   return used;
17239 }
17240
17241 /* Return the DIE for the scope that immediately contains this type.
17242    Non-named types that do not involve a function-local type get global
17243    scope.  Named types nested in namespaces or other types get their
17244    containing scope.  All other types (i.e. function-local named types) get
17245    the current active scope.  */
17246
17247 static dw_die_ref
17248 scope_die_for (tree t, dw_die_ref context_die)
17249 {
17250   dw_die_ref scope_die = NULL;
17251   tree containing_scope;
17252
17253   /* Non-types always go in the current scope.  */
17254   gcc_assert (TYPE_P (t));
17255
17256   /* Use the scope of the typedef, rather than the scope of the type
17257      it refers to.  */
17258   if (TYPE_NAME (t) && DECL_P (TYPE_NAME (t)))
17259     containing_scope = DECL_CONTEXT (TYPE_NAME (t));
17260   else
17261     containing_scope = TYPE_CONTEXT (t);
17262
17263   /* Use the containing namespace if there is one.  */
17264   if (containing_scope && TREE_CODE (containing_scope) == NAMESPACE_DECL)
17265     {
17266       if (context_die == lookup_decl_die (containing_scope))
17267         /* OK */;
17268       else if (debug_info_level > DINFO_LEVEL_TERSE)
17269         context_die = get_context_die (containing_scope);
17270       else
17271         containing_scope = NULL_TREE;
17272     }
17273
17274   /* Ignore function type "scopes" from the C frontend.  They mean that
17275      a tagged type is local to a parmlist of a function declarator, but
17276      that isn't useful to DWARF.  */
17277   if (containing_scope && TREE_CODE (containing_scope) == FUNCTION_TYPE)
17278     containing_scope = NULL_TREE;
17279
17280   if (SCOPE_FILE_SCOPE_P (containing_scope))
17281     {
17282       /* If T uses a local type keep it local as well, to avoid references
17283          to function-local DIEs from outside the function.  */
17284       if (current_function_decl && uses_local_type (t))
17285         scope_die = context_die;
17286       else
17287         scope_die = comp_unit_die ();
17288     }
17289   else if (TYPE_P (containing_scope))
17290     {
17291       /* For types, we can just look up the appropriate DIE.  */
17292       if (debug_info_level > DINFO_LEVEL_TERSE)
17293         scope_die = get_context_die (containing_scope);
17294       else
17295         {
17296           scope_die = lookup_type_die_strip_naming_typedef (containing_scope);
17297           if (scope_die == NULL)
17298             scope_die = comp_unit_die ();
17299         }
17300     }
17301   else
17302     scope_die = context_die;
17303
17304   return scope_die;
17305 }
17306
17307 /* Returns nonzero if CONTEXT_DIE is internal to a function.  */
17308
17309 static inline int
17310 local_scope_p (dw_die_ref context_die)
17311 {
17312   for (; context_die; context_die = context_die->die_parent)
17313     if (context_die->die_tag == DW_TAG_inlined_subroutine
17314         || context_die->die_tag == DW_TAG_subprogram)
17315       return 1;
17316
17317   return 0;
17318 }
17319
17320 /* Returns nonzero if CONTEXT_DIE is a class.  */
17321
17322 static inline int
17323 class_scope_p (dw_die_ref context_die)
17324 {
17325   return (context_die
17326           && (context_die->die_tag == DW_TAG_structure_type
17327               || context_die->die_tag == DW_TAG_class_type
17328               || context_die->die_tag == DW_TAG_interface_type
17329               || context_die->die_tag == DW_TAG_union_type));
17330 }
17331
17332 /* Returns nonzero if CONTEXT_DIE is a class or namespace, for deciding
17333    whether or not to treat a DIE in this context as a declaration.  */
17334
17335 static inline int
17336 class_or_namespace_scope_p (dw_die_ref context_die)
17337 {
17338   return (class_scope_p (context_die)
17339           || (context_die && context_die->die_tag == DW_TAG_namespace));
17340 }
17341
17342 /* Many forms of DIEs require a "type description" attribute.  This
17343    routine locates the proper "type descriptor" die for the type given
17344    by 'type' plus any additional qualifiers given by 'cv_quals', and
17345    adds a DW_AT_type attribute below the given die.  */
17346
17347 static void
17348 add_type_attribute (dw_die_ref object_die, tree type, int cv_quals,
17349                     dw_die_ref context_die)
17350 {
17351   enum tree_code code  = TREE_CODE (type);
17352   dw_die_ref type_die  = NULL;
17353
17354   /* ??? If this type is an unnamed subrange type of an integral, floating-point
17355      or fixed-point type, use the inner type.  This is because we have no
17356      support for unnamed types in base_type_die.  This can happen if this is
17357      an Ada subrange type.  Correct solution is emit a subrange type die.  */
17358   if ((code == INTEGER_TYPE || code == REAL_TYPE || code == FIXED_POINT_TYPE)
17359       && TREE_TYPE (type) != 0 && TYPE_NAME (type) == 0)
17360     type = TREE_TYPE (type), code = TREE_CODE (type);
17361
17362   if (code == ERROR_MARK
17363       /* Handle a special case.  For functions whose return type is void, we
17364          generate *no* type attribute.  (Note that no object may have type
17365          `void', so this only applies to function return types).  */
17366       || code == VOID_TYPE)
17367     return;
17368
17369   type_die = modified_type_die (type,
17370                                 cv_quals | TYPE_QUALS_NO_ADDR_SPACE (type),
17371                                 context_die);
17372
17373   if (type_die != NULL)
17374     add_AT_die_ref (object_die, DW_AT_type, type_die);
17375 }
17376
17377 /* Given an object die, add the calling convention attribute for the
17378    function call type.  */
17379 static void
17380 add_calling_convention_attribute (dw_die_ref subr_die, tree decl)
17381 {
17382   enum dwarf_calling_convention value = DW_CC_normal;
17383
17384   value = ((enum dwarf_calling_convention)
17385            targetm.dwarf_calling_convention (TREE_TYPE (decl)));
17386
17387   if (is_fortran ()
17388       && !strcmp (IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)), "MAIN__"))
17389     {
17390       /* DWARF 2 doesn't provide a way to identify a program's source-level
17391         entry point.  DW_AT_calling_convention attributes are only meant
17392         to describe functions' calling conventions.  However, lacking a
17393         better way to signal the Fortran main program, we used this for 
17394         a long time, following existing custom.  Now, DWARF 4 has 
17395         DW_AT_main_subprogram, which we add below, but some tools still
17396         rely on the old way, which we thus keep.  */
17397       value = DW_CC_program;
17398
17399       if (dwarf_version >= 4 || !dwarf_strict)
17400         add_AT_flag (subr_die, DW_AT_main_subprogram, 1);
17401     }
17402
17403   /* Only add the attribute if the backend requests it, and
17404      is not DW_CC_normal.  */
17405   if (value && (value != DW_CC_normal))
17406     add_AT_unsigned (subr_die, DW_AT_calling_convention, value);
17407 }
17408
17409 /* Given a tree pointer to a struct, class, union, or enum type node, return
17410    a pointer to the (string) tag name for the given type, or zero if the type
17411    was declared without a tag.  */
17412
17413 static const char *
17414 type_tag (const_tree type)
17415 {
17416   const char *name = 0;
17417
17418   if (TYPE_NAME (type) != 0)
17419     {
17420       tree t = 0;
17421
17422       /* Find the IDENTIFIER_NODE for the type name.  */
17423       if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE
17424           && !TYPE_NAMELESS (type))
17425         t = TYPE_NAME (type);
17426
17427       /* The g++ front end makes the TYPE_NAME of *each* tagged type point to
17428          a TYPE_DECL node, regardless of whether or not a `typedef' was
17429          involved.  */
17430       else if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
17431                && ! DECL_IGNORED_P (TYPE_NAME (type)))
17432         {
17433           /* We want to be extra verbose.  Don't call dwarf_name if
17434              DECL_NAME isn't set.  The default hook for decl_printable_name
17435              doesn't like that, and in this context it's correct to return
17436              0, instead of "<anonymous>" or the like.  */
17437           if (DECL_NAME (TYPE_NAME (type))
17438               && !DECL_NAMELESS (TYPE_NAME (type)))
17439             name = lang_hooks.dwarf_name (TYPE_NAME (type), 2);
17440         }
17441
17442       /* Now get the name as a string, or invent one.  */
17443       if (!name && t != 0)
17444         name = IDENTIFIER_POINTER (t);
17445     }
17446
17447   return (name == 0 || *name == '\0') ? 0 : name;
17448 }
17449
17450 /* Return the type associated with a data member, make a special check
17451    for bit field types.  */
17452
17453 static inline tree
17454 member_declared_type (const_tree member)
17455 {
17456   return (DECL_BIT_FIELD_TYPE (member)
17457           ? DECL_BIT_FIELD_TYPE (member) : TREE_TYPE (member));
17458 }
17459
17460 /* Get the decl's label, as described by its RTL. This may be different
17461    from the DECL_NAME name used in the source file.  */
17462
17463 #if 0
17464 static const char *
17465 decl_start_label (tree decl)
17466 {
17467   rtx x;
17468   const char *fnname;
17469
17470   x = DECL_RTL (decl);
17471   gcc_assert (MEM_P (x));
17472
17473   x = XEXP (x, 0);
17474   gcc_assert (GET_CODE (x) == SYMBOL_REF);
17475
17476   fnname = XSTR (x, 0);
17477   return fnname;
17478 }
17479 #endif
17480 \f
17481 /* These routines generate the internal representation of the DIE's for
17482    the compilation unit.  Debugging information is collected by walking
17483    the declaration trees passed in from dwarf2out_decl().  */
17484
17485 static void
17486 gen_array_type_die (tree type, dw_die_ref context_die)
17487 {
17488   dw_die_ref scope_die = scope_die_for (type, context_die);
17489   dw_die_ref array_die;
17490
17491   /* GNU compilers represent multidimensional array types as sequences of one
17492      dimensional array types whose element types are themselves array types.
17493      We sometimes squish that down to a single array_type DIE with multiple
17494      subscripts in the Dwarf debugging info.  The draft Dwarf specification
17495      say that we are allowed to do this kind of compression in C, because
17496      there is no difference between an array of arrays and a multidimensional
17497      array.  We don't do this for Ada to remain as close as possible to the
17498      actual representation, which is especially important against the language
17499      flexibilty wrt arrays of variable size.  */
17500
17501   bool collapse_nested_arrays = !is_ada ();
17502   tree element_type;
17503
17504   /* Emit DW_TAG_string_type for Fortran character types (with kind 1 only, as
17505      DW_TAG_string_type doesn't have DW_AT_type attribute).  */
17506   if (TYPE_STRING_FLAG (type)
17507       && TREE_CODE (type) == ARRAY_TYPE
17508       && is_fortran ()
17509       && TYPE_MODE (TREE_TYPE (type)) == TYPE_MODE (char_type_node))
17510     {
17511       HOST_WIDE_INT size;
17512
17513       array_die = new_die (DW_TAG_string_type, scope_die, type);
17514       add_name_attribute (array_die, type_tag (type));
17515       equate_type_number_to_die (type, array_die);
17516       size = int_size_in_bytes (type);
17517       if (size >= 0)
17518         add_AT_unsigned (array_die, DW_AT_byte_size, size);
17519       else if (TYPE_DOMAIN (type) != NULL_TREE
17520                && TYPE_MAX_VALUE (TYPE_DOMAIN (type)) != NULL_TREE
17521                && DECL_P (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))
17522         {
17523           tree szdecl = TYPE_MAX_VALUE (TYPE_DOMAIN (type));
17524           dw_loc_list_ref loc = loc_list_from_tree (szdecl, 2, NULL);
17525
17526           size = int_size_in_bytes (TREE_TYPE (szdecl));
17527           if (loc && size > 0)
17528             {
17529               add_AT_location_description (array_die, DW_AT_string_length, loc);
17530               if (size != DWARF2_ADDR_SIZE)
17531                 add_AT_unsigned (array_die, DW_AT_byte_size, size);
17532             }
17533         }
17534       return;
17535     }
17536
17537   array_die = new_die (DW_TAG_array_type, scope_die, type);
17538   add_name_attribute (array_die, type_tag (type));
17539   equate_type_number_to_die (type, array_die);
17540
17541   if (TREE_CODE (type) == VECTOR_TYPE)
17542     add_AT_flag (array_die, DW_AT_GNU_vector, 1);
17543
17544   /* For Fortran multidimensional arrays use DW_ORD_col_major ordering.  */
17545   if (is_fortran ()
17546       && TREE_CODE (type) == ARRAY_TYPE
17547       && TREE_CODE (TREE_TYPE (type)) == ARRAY_TYPE
17548       && !TYPE_STRING_FLAG (TREE_TYPE (type)))
17549     add_AT_unsigned (array_die, DW_AT_ordering, DW_ORD_col_major);
17550
17551 #if 0
17552   /* We default the array ordering.  SDB will probably do
17553      the right things even if DW_AT_ordering is not present.  It's not even
17554      an issue until we start to get into multidimensional arrays anyway.  If
17555      SDB is ever caught doing the Wrong Thing for multi-dimensional arrays,
17556      then we'll have to put the DW_AT_ordering attribute back in.  (But if
17557      and when we find out that we need to put these in, we will only do so
17558      for multidimensional arrays.  */
17559   add_AT_unsigned (array_die, DW_AT_ordering, DW_ORD_row_major);
17560 #endif
17561
17562   if (TREE_CODE (type) == VECTOR_TYPE)
17563     {
17564       /* For VECTOR_TYPEs we use an array die with appropriate bounds.  */
17565       dw_die_ref subrange_die = new_die (DW_TAG_subrange_type, array_die, NULL);
17566       add_bound_info (subrange_die, DW_AT_lower_bound, size_zero_node, NULL);
17567       add_bound_info (subrange_die, DW_AT_upper_bound,
17568                       size_int (TYPE_VECTOR_SUBPARTS (type) - 1), NULL);
17569     }
17570   else
17571     add_subscript_info (array_die, type, collapse_nested_arrays);
17572
17573   /* Add representation of the type of the elements of this array type and
17574      emit the corresponding DIE if we haven't done it already.  */
17575   element_type = TREE_TYPE (type);
17576   if (collapse_nested_arrays)
17577     while (TREE_CODE (element_type) == ARRAY_TYPE)
17578       {
17579         if (TYPE_STRING_FLAG (element_type) && is_fortran ())
17580           break;
17581         element_type = TREE_TYPE (element_type);
17582       }
17583
17584   add_type_attribute (array_die, element_type, TYPE_UNQUALIFIED, context_die);
17585
17586   add_gnat_descriptive_type_attribute (array_die, type, context_die);
17587   if (TYPE_ARTIFICIAL (type))
17588     add_AT_flag (array_die, DW_AT_artificial, 1);
17589
17590   if (get_AT (array_die, DW_AT_name))
17591     add_pubtype (type, array_die);
17592 }
17593
17594 /* This routine generates DIE for array with hidden descriptor, details
17595    are filled into *info by a langhook.  */
17596
17597 static void
17598 gen_descr_array_type_die (tree type, struct array_descr_info *info,
17599                           dw_die_ref context_die)
17600 {
17601   const dw_die_ref scope_die = scope_die_for (type, context_die);
17602   const dw_die_ref array_die = new_die (DW_TAG_array_type, scope_die, type);
17603   const struct loc_descr_context context = { type, info->base_decl };
17604   int dim;
17605
17606   add_name_attribute (array_die, type_tag (type));
17607   equate_type_number_to_die (type, array_die);
17608
17609   if (info->ndimensions > 1)
17610     switch (info->ordering)
17611       {
17612       case array_descr_ordering_row_major:
17613         add_AT_unsigned (array_die, DW_AT_ordering, DW_ORD_row_major);
17614         break;
17615       case array_descr_ordering_column_major:
17616         add_AT_unsigned (array_die, DW_AT_ordering, DW_ORD_col_major);
17617         break;
17618       default:
17619         break;
17620       }
17621
17622   if (dwarf_version >= 3 || !dwarf_strict)
17623     {
17624       if (info->data_location)
17625         add_scalar_info (array_die, DW_AT_data_location, info->data_location,
17626                          dw_scalar_form_exprloc, &context);
17627       if (info->associated)
17628         add_scalar_info (array_die, DW_AT_associated, info->associated,
17629                          dw_scalar_form_constant
17630                          | dw_scalar_form_exprloc
17631                          | dw_scalar_form_reference, &context);
17632       if (info->allocated)
17633         add_scalar_info (array_die, DW_AT_allocated, info->allocated,
17634                          dw_scalar_form_constant
17635                          | dw_scalar_form_exprloc
17636                          | dw_scalar_form_reference, &context);
17637     }
17638
17639   add_gnat_descriptive_type_attribute (array_die, type, context_die);
17640
17641   for (dim = 0; dim < info->ndimensions; dim++)
17642     {
17643       dw_die_ref subrange_die
17644         = new_die (DW_TAG_subrange_type, array_die, NULL);
17645
17646       if (info->dimen[dim].bounds_type)
17647         add_type_attribute (subrange_die,
17648                             info->dimen[dim].bounds_type, 0,
17649                             context_die);
17650       if (info->dimen[dim].lower_bound)
17651         add_bound_info (subrange_die, DW_AT_lower_bound,
17652                         info->dimen[dim].lower_bound, &context);
17653       if (info->dimen[dim].upper_bound)
17654         add_bound_info (subrange_die, DW_AT_upper_bound,
17655                         info->dimen[dim].upper_bound, &context);
17656       if ((dwarf_version >= 3 || !dwarf_strict) && info->dimen[dim].stride)
17657         add_scalar_info (subrange_die, DW_AT_byte_stride,
17658                          info->dimen[dim].stride,
17659                          dw_scalar_form_constant
17660                          | dw_scalar_form_exprloc
17661                          | dw_scalar_form_reference,
17662                          &context);
17663     }
17664
17665   gen_type_die (info->element_type, context_die);
17666   add_type_attribute (array_die, info->element_type, TYPE_UNQUALIFIED,
17667                       context_die);
17668
17669   if (get_AT (array_die, DW_AT_name))
17670     add_pubtype (type, array_die);
17671 }
17672
17673 #if 0
17674 static void
17675 gen_entry_point_die (tree decl, dw_die_ref context_die)
17676 {
17677   tree origin = decl_ultimate_origin (decl);
17678   dw_die_ref decl_die = new_die (DW_TAG_entry_point, context_die, decl);
17679
17680   if (origin != NULL)
17681     add_abstract_origin_attribute (decl_die, origin);
17682   else
17683     {
17684       add_name_and_src_coords_attributes (decl_die, decl);
17685       add_type_attribute (decl_die, TREE_TYPE (TREE_TYPE (decl)),
17686                           TYPE_UNQUALIFIED, context_die);
17687     }
17688
17689   if (DECL_ABSTRACT_P (decl))
17690     equate_decl_number_to_die (decl, decl_die);
17691   else
17692     add_AT_lbl_id (decl_die, DW_AT_low_pc, decl_start_label (decl));
17693 }
17694 #endif
17695
17696 /* Walk through the list of incomplete types again, trying once more to
17697    emit full debugging info for them.  */
17698
17699 static void
17700 retry_incomplete_types (void)
17701 {
17702   int i;
17703
17704   for (i = vec_safe_length (incomplete_types) - 1; i >= 0; i--)
17705     if (should_emit_struct_debug ((*incomplete_types)[i], DINFO_USAGE_DIR_USE))
17706       gen_type_die ((*incomplete_types)[i], comp_unit_die ());
17707 }
17708
17709 /* Determine what tag to use for a record type.  */
17710
17711 static enum dwarf_tag
17712 record_type_tag (tree type)
17713 {
17714   if (! lang_hooks.types.classify_record)
17715     return DW_TAG_structure_type;
17716
17717   switch (lang_hooks.types.classify_record (type))
17718     {
17719     case RECORD_IS_STRUCT:
17720       return DW_TAG_structure_type;
17721
17722     case RECORD_IS_CLASS:
17723       return DW_TAG_class_type;
17724
17725     case RECORD_IS_INTERFACE:
17726       if (dwarf_version >= 3 || !dwarf_strict)
17727         return DW_TAG_interface_type;
17728       return DW_TAG_structure_type;
17729
17730     default:
17731       gcc_unreachable ();
17732     }
17733 }
17734
17735 /* Generate a DIE to represent an enumeration type.  Note that these DIEs
17736    include all of the information about the enumeration values also. Each
17737    enumerated type name/value is listed as a child of the enumerated type
17738    DIE.  */
17739
17740 static dw_die_ref
17741 gen_enumeration_type_die (tree type, dw_die_ref context_die)
17742 {
17743   dw_die_ref type_die = lookup_type_die (type);
17744
17745   if (type_die == NULL)
17746     {
17747       type_die = new_die (DW_TAG_enumeration_type,
17748                           scope_die_for (type, context_die), type);
17749       equate_type_number_to_die (type, type_die);
17750       add_name_attribute (type_die, type_tag (type));
17751       if (dwarf_version >= 4 || !dwarf_strict)
17752         {
17753           if (ENUM_IS_SCOPED (type))
17754             add_AT_flag (type_die, DW_AT_enum_class, 1);
17755           if (ENUM_IS_OPAQUE (type))
17756             add_AT_flag (type_die, DW_AT_declaration, 1);
17757         }
17758     }
17759   else if (! TYPE_SIZE (type))
17760     return type_die;
17761   else
17762     remove_AT (type_die, DW_AT_declaration);
17763
17764   /* Handle a GNU C/C++ extension, i.e. incomplete enum types.  If the
17765      given enum type is incomplete, do not generate the DW_AT_byte_size
17766      attribute or the DW_AT_element_list attribute.  */
17767   if (TYPE_SIZE (type))
17768     {
17769       tree link;
17770
17771       TREE_ASM_WRITTEN (type) = 1;
17772       add_byte_size_attribute (type_die, type);
17773       if (dwarf_version >= 3 || !dwarf_strict)
17774         {
17775           tree underlying = lang_hooks.types.enum_underlying_base_type (type);
17776           add_type_attribute (type_die, underlying, TYPE_UNQUALIFIED,
17777                               context_die);
17778         }
17779       if (TYPE_STUB_DECL (type) != NULL_TREE)
17780         {
17781           add_src_coords_attributes (type_die, TYPE_STUB_DECL (type));
17782           add_accessibility_attribute (type_die, TYPE_STUB_DECL (type));
17783         }
17784
17785       /* If the first reference to this type was as the return type of an
17786          inline function, then it may not have a parent.  Fix this now.  */
17787       if (type_die->die_parent == NULL)
17788         add_child_die (scope_die_for (type, context_die), type_die);
17789
17790       for (link = TYPE_VALUES (type);
17791            link != NULL; link = TREE_CHAIN (link))
17792         {
17793           dw_die_ref enum_die = new_die (DW_TAG_enumerator, type_die, link);
17794           tree value = TREE_VALUE (link);
17795
17796           add_name_attribute (enum_die,
17797                               IDENTIFIER_POINTER (TREE_PURPOSE (link)));
17798
17799           if (TREE_CODE (value) == CONST_DECL)
17800             value = DECL_INITIAL (value);
17801
17802           if (simple_type_size_in_bits (TREE_TYPE (value))
17803               <= HOST_BITS_PER_WIDE_INT || tree_fits_shwi_p (value))
17804             {
17805               /* For constant forms created by add_AT_unsigned DWARF
17806                  consumers (GDB, elfutils, etc.) always zero extend
17807                  the value.  Only when the actual value is negative
17808                  do we need to use add_AT_int to generate a constant
17809                  form that can represent negative values.  */
17810               HOST_WIDE_INT val = TREE_INT_CST_LOW (value);
17811               if (TYPE_UNSIGNED (TREE_TYPE (value)) || val >= 0)
17812                 add_AT_unsigned (enum_die, DW_AT_const_value,
17813                                  (unsigned HOST_WIDE_INT) val);
17814               else
17815                 add_AT_int (enum_die, DW_AT_const_value, val);
17816             }
17817           else
17818             /* Enumeration constants may be wider than HOST_WIDE_INT.  Handle
17819                that here.  TODO: This should be re-worked to use correct
17820                signed/unsigned double tags for all cases.  */
17821             add_AT_wide (enum_die, DW_AT_const_value, value);
17822         }
17823
17824       add_gnat_descriptive_type_attribute (type_die, type, context_die);
17825       if (TYPE_ARTIFICIAL (type))
17826         add_AT_flag (type_die, DW_AT_artificial, 1);
17827     }
17828   else
17829     add_AT_flag (type_die, DW_AT_declaration, 1);
17830
17831   add_pubtype (type, type_die);
17832
17833   return type_die;
17834 }
17835
17836 /* Generate a DIE to represent either a real live formal parameter decl or to
17837    represent just the type of some formal parameter position in some function
17838    type.
17839
17840    Note that this routine is a bit unusual because its argument may be a
17841    ..._DECL node (i.e. either a PARM_DECL or perhaps a VAR_DECL which
17842    represents an inlining of some PARM_DECL) or else some sort of a ..._TYPE
17843    node.  If it's the former then this function is being called to output a
17844    DIE to represent a formal parameter object (or some inlining thereof).  If
17845    it's the latter, then this function is only being called to output a
17846    DW_TAG_formal_parameter DIE to stand as a placeholder for some formal
17847    argument type of some subprogram type.
17848    If EMIT_NAME_P is true, name and source coordinate attributes
17849    are emitted.  */
17850
17851 static dw_die_ref
17852 gen_formal_parameter_die (tree node, tree origin, bool emit_name_p,
17853                           dw_die_ref context_die)
17854 {
17855   tree node_or_origin = node ? node : origin;
17856   tree ultimate_origin;
17857   dw_die_ref parm_die
17858     = new_die (DW_TAG_formal_parameter, context_die, node);
17859
17860   switch (TREE_CODE_CLASS (TREE_CODE (node_or_origin)))
17861     {
17862     case tcc_declaration:
17863       ultimate_origin = decl_ultimate_origin (node_or_origin);
17864       if (node || ultimate_origin)
17865         origin = ultimate_origin;
17866       if (origin != NULL)
17867         add_abstract_origin_attribute (parm_die, origin);
17868       else if (emit_name_p)
17869         add_name_and_src_coords_attributes (parm_die, node);
17870       if (origin == NULL
17871           || (! DECL_ABSTRACT_P (node_or_origin)
17872               && variably_modified_type_p (TREE_TYPE (node_or_origin),
17873                                            decl_function_context
17874                                                             (node_or_origin))))
17875         {
17876           tree type = TREE_TYPE (node_or_origin);
17877           if (decl_by_reference_p (node_or_origin))
17878             add_type_attribute (parm_die, TREE_TYPE (type),
17879                                 TYPE_UNQUALIFIED, context_die);
17880           else
17881             add_type_attribute (parm_die, type,
17882                                 decl_quals (node_or_origin),
17883                                 context_die);
17884         }
17885       if (origin == NULL && DECL_ARTIFICIAL (node))
17886         add_AT_flag (parm_die, DW_AT_artificial, 1);
17887
17888       if (node && node != origin)
17889         equate_decl_number_to_die (node, parm_die);
17890       if (! DECL_ABSTRACT_P (node_or_origin))
17891         add_location_or_const_value_attribute (parm_die, node_or_origin,
17892                                                node == NULL, DW_AT_location);
17893
17894       break;
17895
17896     case tcc_type:
17897       /* We were called with some kind of a ..._TYPE node.  */
17898       add_type_attribute (parm_die, node_or_origin, TYPE_UNQUALIFIED,
17899                           context_die);
17900       break;
17901
17902     default:
17903       gcc_unreachable ();
17904     }
17905
17906   return parm_die;
17907 }
17908
17909 /* Generate and return a DW_TAG_GNU_formal_parameter_pack. Also generate
17910    children DW_TAG_formal_parameter DIEs representing the arguments of the
17911    parameter pack.
17912
17913    PARM_PACK must be a function parameter pack.
17914    PACK_ARG is the first argument of the parameter pack. Its TREE_CHAIN
17915    must point to the subsequent arguments of the function PACK_ARG belongs to.
17916    SUBR_DIE is the DIE of the function PACK_ARG belongs to.
17917    If NEXT_ARG is non NULL, *NEXT_ARG is set to the function argument
17918    following the last one for which a DIE was generated.  */
17919
17920 static dw_die_ref
17921 gen_formal_parameter_pack_die  (tree parm_pack,
17922                                 tree pack_arg,
17923                                 dw_die_ref subr_die,
17924                                 tree *next_arg)
17925 {
17926   tree arg;
17927   dw_die_ref parm_pack_die;
17928
17929   gcc_assert (parm_pack
17930               && lang_hooks.function_parameter_pack_p (parm_pack)
17931               && subr_die);
17932
17933   parm_pack_die = new_die (DW_TAG_GNU_formal_parameter_pack, subr_die, parm_pack);
17934   add_src_coords_attributes (parm_pack_die, parm_pack);
17935
17936   for (arg = pack_arg; arg; arg = DECL_CHAIN (arg))
17937     {
17938       if (! lang_hooks.decls.function_parm_expanded_from_pack_p (arg,
17939                                                                  parm_pack))
17940         break;
17941       gen_formal_parameter_die (arg, NULL,
17942                                 false /* Don't emit name attribute.  */,
17943                                 parm_pack_die);
17944     }
17945   if (next_arg)
17946     *next_arg = arg;
17947   return parm_pack_die;
17948 }
17949
17950 /* Generate a special type of DIE used as a stand-in for a trailing ellipsis
17951    at the end of an (ANSI prototyped) formal parameters list.  */
17952
17953 static void
17954 gen_unspecified_parameters_die (tree decl_or_type, dw_die_ref context_die)
17955 {
17956   new_die (DW_TAG_unspecified_parameters, context_die, decl_or_type);
17957 }
17958
17959 /* Generate a list of nameless DW_TAG_formal_parameter DIEs (and perhaps a
17960    DW_TAG_unspecified_parameters DIE) to represent the types of the formal
17961    parameters as specified in some function type specification (except for
17962    those which appear as part of a function *definition*).  */
17963
17964 static void
17965 gen_formal_types_die (tree function_or_method_type, dw_die_ref context_die)
17966 {
17967   tree link;
17968   tree formal_type = NULL;
17969   tree first_parm_type;
17970   tree arg;
17971
17972   if (TREE_CODE (function_or_method_type) == FUNCTION_DECL)
17973     {
17974       arg = DECL_ARGUMENTS (function_or_method_type);
17975       function_or_method_type = TREE_TYPE (function_or_method_type);
17976     }
17977   else
17978     arg = NULL_TREE;
17979
17980   first_parm_type = TYPE_ARG_TYPES (function_or_method_type);
17981
17982   /* Make our first pass over the list of formal parameter types and output a
17983      DW_TAG_formal_parameter DIE for each one.  */
17984   for (link = first_parm_type; link; )
17985     {
17986       dw_die_ref parm_die;
17987
17988       formal_type = TREE_VALUE (link);
17989       if (formal_type == void_type_node)
17990         break;
17991
17992       /* Output a (nameless) DIE to represent the formal parameter itself.  */
17993       if (!POINTER_BOUNDS_TYPE_P (formal_type))
17994         {
17995           parm_die = gen_formal_parameter_die (formal_type, NULL,
17996                                                true /* Emit name attribute.  */,
17997                                                context_die);
17998           if (TREE_CODE (function_or_method_type) == METHOD_TYPE
17999               && link == first_parm_type)
18000             {
18001               add_AT_flag (parm_die, DW_AT_artificial, 1);
18002               if (dwarf_version >= 3 || !dwarf_strict)
18003                 add_AT_die_ref (context_die, DW_AT_object_pointer, parm_die);
18004             }
18005           else if (arg && DECL_ARTIFICIAL (arg))
18006             add_AT_flag (parm_die, DW_AT_artificial, 1);
18007         }
18008
18009       link = TREE_CHAIN (link);
18010       if (arg)
18011         arg = DECL_CHAIN (arg);
18012     }
18013
18014   /* If this function type has an ellipsis, add a
18015      DW_TAG_unspecified_parameters DIE to the end of the parameter list.  */
18016   if (formal_type != void_type_node)
18017     gen_unspecified_parameters_die (function_or_method_type, context_die);
18018
18019   /* Make our second (and final) pass over the list of formal parameter types
18020      and output DIEs to represent those types (as necessary).  */
18021   for (link = TYPE_ARG_TYPES (function_or_method_type);
18022        link && TREE_VALUE (link);
18023        link = TREE_CHAIN (link))
18024     gen_type_die (TREE_VALUE (link), context_die);
18025 }
18026
18027 /* We want to generate the DIE for TYPE so that we can generate the
18028    die for MEMBER, which has been defined; we will need to refer back
18029    to the member declaration nested within TYPE.  If we're trying to
18030    generate minimal debug info for TYPE, processing TYPE won't do the
18031    trick; we need to attach the member declaration by hand.  */
18032
18033 static void
18034 gen_type_die_for_member (tree type, tree member, dw_die_ref context_die)
18035 {
18036   gen_type_die (type, context_die);
18037
18038   /* If we're trying to avoid duplicate debug info, we may not have
18039      emitted the member decl for this function.  Emit it now.  */
18040   if (TYPE_STUB_DECL (type)
18041       && TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type))
18042       && ! lookup_decl_die (member))
18043     {
18044       dw_die_ref type_die;
18045       gcc_assert (!decl_ultimate_origin (member));
18046
18047       push_decl_scope (type);
18048       type_die = lookup_type_die_strip_naming_typedef (type);
18049       if (TREE_CODE (member) == FUNCTION_DECL)
18050         gen_subprogram_die (member, type_die);
18051       else if (TREE_CODE (member) == FIELD_DECL)
18052         {
18053           /* Ignore the nameless fields that are used to skip bits but handle
18054              C++ anonymous unions and structs.  */
18055           if (DECL_NAME (member) != NULL_TREE
18056               || TREE_CODE (TREE_TYPE (member)) == UNION_TYPE
18057               || TREE_CODE (TREE_TYPE (member)) == RECORD_TYPE)
18058             {
18059               gen_type_die (member_declared_type (member), type_die);
18060               gen_field_die (member, type_die);
18061             }
18062         }
18063       else
18064         gen_variable_die (member, NULL_TREE, type_die);
18065
18066       pop_decl_scope ();
18067     }
18068 }
18069 \f
18070 /* Forward declare these functions, because they are mutually recursive
18071   with their set_block_* pairing functions.  */
18072 static void set_decl_origin_self (tree);
18073 static void set_decl_abstract_flags (tree, vec<tree> &);
18074
18075 /* Given a pointer to some BLOCK node, if the BLOCK_ABSTRACT_ORIGIN for the
18076    given BLOCK node is NULL, set the BLOCK_ABSTRACT_ORIGIN for the node so
18077    that it points to the node itself, thus indicating that the node is its
18078    own (abstract) origin.  Additionally, if the BLOCK_ABSTRACT_ORIGIN for
18079    the given node is NULL, recursively descend the decl/block tree which
18080    it is the root of, and for each other ..._DECL or BLOCK node contained
18081    therein whose DECL_ABSTRACT_ORIGINs or BLOCK_ABSTRACT_ORIGINs are also
18082    still NULL, set *their* DECL_ABSTRACT_ORIGIN or BLOCK_ABSTRACT_ORIGIN
18083    values to point to themselves.  */
18084
18085 static void
18086 set_block_origin_self (tree stmt)
18087 {
18088   if (BLOCK_ABSTRACT_ORIGIN (stmt) == NULL_TREE)
18089     {
18090       BLOCK_ABSTRACT_ORIGIN (stmt) = stmt;
18091
18092       {
18093         tree local_decl;
18094
18095         for (local_decl = BLOCK_VARS (stmt);
18096              local_decl != NULL_TREE;
18097              local_decl = DECL_CHAIN (local_decl))
18098           /* Do not recurse on nested functions since the inlining status
18099              of parent and child can be different as per the DWARF spec.  */
18100           if (TREE_CODE (local_decl) != FUNCTION_DECL
18101               && !DECL_EXTERNAL (local_decl))
18102             set_decl_origin_self (local_decl);
18103       }
18104
18105       {
18106         tree subblock;
18107
18108         for (subblock = BLOCK_SUBBLOCKS (stmt);
18109              subblock != NULL_TREE;
18110              subblock = BLOCK_CHAIN (subblock))
18111           set_block_origin_self (subblock);     /* Recurse.  */
18112       }
18113     }
18114 }
18115
18116 /* Given a pointer to some ..._DECL node, if the DECL_ABSTRACT_ORIGIN for
18117    the given ..._DECL node is NULL, set the DECL_ABSTRACT_ORIGIN for the
18118    node to so that it points to the node itself, thus indicating that the
18119    node represents its own (abstract) origin.  Additionally, if the
18120    DECL_ABSTRACT_ORIGIN for the given node is NULL, recursively descend
18121    the decl/block tree of which the given node is the root of, and for
18122    each other ..._DECL or BLOCK node contained therein whose
18123    DECL_ABSTRACT_ORIGINs or BLOCK_ABSTRACT_ORIGINs are also still NULL,
18124    set *their* DECL_ABSTRACT_ORIGIN or BLOCK_ABSTRACT_ORIGIN values to
18125    point to themselves.  */
18126
18127 static void
18128 set_decl_origin_self (tree decl)
18129 {
18130   if (DECL_ABSTRACT_ORIGIN (decl) == NULL_TREE)
18131     {
18132       DECL_ABSTRACT_ORIGIN (decl) = decl;
18133       if (TREE_CODE (decl) == FUNCTION_DECL)
18134         {
18135           tree arg;
18136
18137           for (arg = DECL_ARGUMENTS (decl); arg; arg = DECL_CHAIN (arg))
18138             DECL_ABSTRACT_ORIGIN (arg) = arg;
18139           if (DECL_INITIAL (decl) != NULL_TREE
18140               && DECL_INITIAL (decl) != error_mark_node)
18141             set_block_origin_self (DECL_INITIAL (decl));
18142         }
18143     }
18144 }
18145 \f
18146 /* Given a pointer to some BLOCK node, set the BLOCK_ABSTRACT flag to 1
18147    and if it wasn't 1 before, push it to abstract_vec vector.
18148    For all local decls and all local sub-blocks (recursively) do it
18149    too.  */
18150
18151 static void
18152 set_block_abstract_flags (tree stmt, vec<tree> &abstract_vec)
18153 {
18154   tree local_decl;
18155   tree subblock;
18156   unsigned int i;
18157
18158   if (!BLOCK_ABSTRACT (stmt))
18159     {
18160       abstract_vec.safe_push (stmt);
18161       BLOCK_ABSTRACT (stmt) = 1;
18162     }
18163
18164   for (local_decl = BLOCK_VARS (stmt);
18165        local_decl != NULL_TREE;
18166        local_decl = DECL_CHAIN (local_decl))
18167     if (! DECL_EXTERNAL (local_decl))
18168       set_decl_abstract_flags (local_decl, abstract_vec);
18169
18170   for (i = 0; i < BLOCK_NUM_NONLOCALIZED_VARS (stmt); i++)
18171     {
18172       local_decl = BLOCK_NONLOCALIZED_VAR (stmt, i);
18173       if ((TREE_CODE (local_decl) == VAR_DECL && !TREE_STATIC (local_decl))
18174           || TREE_CODE (local_decl) == PARM_DECL)
18175         set_decl_abstract_flags (local_decl, abstract_vec);
18176     }
18177
18178   for (subblock = BLOCK_SUBBLOCKS (stmt);
18179        subblock != NULL_TREE;
18180        subblock = BLOCK_CHAIN (subblock))
18181     set_block_abstract_flags (subblock, abstract_vec);
18182 }
18183
18184 /* Given a pointer to some ..._DECL node, set DECL_ABSTRACT_P flag on it
18185    to 1 and if it wasn't 1 before, push to abstract_vec vector.
18186    In the case where the decl is a FUNCTION_DECL also set the abstract
18187    flags for all of the parameters, local vars, local
18188    blocks and sub-blocks (recursively).  */
18189
18190 static void
18191 set_decl_abstract_flags (tree decl, vec<tree> &abstract_vec)
18192 {
18193   if (!DECL_ABSTRACT_P (decl))
18194     {
18195       abstract_vec.safe_push (decl);
18196       DECL_ABSTRACT_P (decl) = 1;
18197     }
18198
18199   if (TREE_CODE (decl) == FUNCTION_DECL)
18200     {
18201       tree arg;
18202
18203       for (arg = DECL_ARGUMENTS (decl); arg; arg = DECL_CHAIN (arg))
18204         if (!DECL_ABSTRACT_P (arg))
18205           {
18206             abstract_vec.safe_push (arg);
18207             DECL_ABSTRACT_P (arg) = 1;
18208           }
18209       if (DECL_INITIAL (decl) != NULL_TREE
18210           && DECL_INITIAL (decl) != error_mark_node)
18211         set_block_abstract_flags (DECL_INITIAL (decl), abstract_vec);
18212     }
18213 }
18214
18215 /* Generate the DWARF2 info for the "abstract" instance of a function which we
18216    may later generate inlined and/or out-of-line instances of.  */
18217
18218 static void
18219 dwarf2out_abstract_function (tree decl)
18220 {
18221   dw_die_ref old_die;
18222   tree save_fn;
18223   tree context;
18224   hash_table<decl_loc_hasher> *old_decl_loc_table;
18225   hash_table<dw_loc_list_hasher> *old_cached_dw_loc_list_table;
18226   int old_call_site_count, old_tail_call_site_count;
18227   struct call_arg_loc_node *old_call_arg_locations;
18228
18229   /* Make sure we have the actual abstract inline, not a clone.  */
18230   decl = DECL_ORIGIN (decl);
18231
18232   old_die = lookup_decl_die (decl);
18233   if (old_die && get_AT (old_die, DW_AT_inline))
18234     /* We've already generated the abstract instance.  */
18235     return;
18236
18237   /* We can be called while recursively when seeing block defining inlined subroutine
18238      DIE.  Be sure to not clobber the outer location table nor use it or we would
18239      get locations in abstract instantces.  */
18240   old_decl_loc_table = decl_loc_table;
18241   decl_loc_table = NULL;
18242   old_cached_dw_loc_list_table = cached_dw_loc_list_table;
18243   cached_dw_loc_list_table = NULL;
18244   old_call_arg_locations = call_arg_locations;
18245   call_arg_locations = NULL;
18246   old_call_site_count = call_site_count;
18247   call_site_count = -1;
18248   old_tail_call_site_count = tail_call_site_count;
18249   tail_call_site_count = -1;
18250
18251   /* Be sure we've emitted the in-class declaration DIE (if any) first, so
18252      we don't get confused by DECL_ABSTRACT_P.  */
18253   if (debug_info_level > DINFO_LEVEL_TERSE)
18254     {
18255       context = decl_class_context (decl);
18256       if (context)
18257         gen_type_die_for_member
18258           (context, decl, decl_function_context (decl) ? NULL : comp_unit_die ());
18259     }
18260
18261   /* Pretend we've just finished compiling this function.  */
18262   save_fn = current_function_decl;
18263   current_function_decl = decl;
18264
18265   auto_vec<tree, 64> abstract_vec;
18266   set_decl_abstract_flags (decl, abstract_vec);
18267   dwarf2out_decl (decl);
18268   unsigned int i;
18269   tree t;
18270   FOR_EACH_VEC_ELT (abstract_vec, i, t)
18271     if (TREE_CODE (t) == BLOCK)
18272       BLOCK_ABSTRACT (t) = 0;
18273     else
18274       DECL_ABSTRACT_P (t) = 0;
18275
18276   current_function_decl = save_fn;
18277   decl_loc_table = old_decl_loc_table;
18278   cached_dw_loc_list_table = old_cached_dw_loc_list_table;
18279   call_arg_locations = old_call_arg_locations;
18280   call_site_count = old_call_site_count;
18281   tail_call_site_count = old_tail_call_site_count;
18282 }
18283
18284 /* Helper function of premark_used_types() which gets called through
18285    htab_traverse.
18286
18287    Marks the DIE of a given type in *SLOT as perennial, so it never gets
18288    marked as unused by prune_unused_types.  */
18289
18290 bool
18291 premark_used_types_helper (tree const &type, void *)
18292 {
18293   dw_die_ref die;
18294
18295   die = lookup_type_die (type);
18296   if (die != NULL)
18297     die->die_perennial_p = 1;
18298   return true;
18299 }
18300
18301 /* Helper function of premark_types_used_by_global_vars which gets called
18302    through htab_traverse.
18303
18304    Marks the DIE of a given type in *SLOT as perennial, so it never gets
18305    marked as unused by prune_unused_types. The DIE of the type is marked
18306    only if the global variable using the type will actually be emitted.  */
18307
18308 int
18309 premark_types_used_by_global_vars_helper (types_used_by_vars_entry **slot,
18310                                           void *)
18311 {
18312   struct types_used_by_vars_entry *entry;
18313   dw_die_ref die;
18314
18315   entry = (struct types_used_by_vars_entry *) *slot;
18316   gcc_assert (entry->type != NULL
18317               && entry->var_decl != NULL);
18318   die = lookup_type_die (entry->type);
18319   if (die)
18320     {
18321       /* Ask cgraph if the global variable really is to be emitted.
18322          If yes, then we'll keep the DIE of ENTRY->TYPE.  */
18323       varpool_node *node = varpool_node::get (entry->var_decl);
18324       if (node && node->definition)
18325         {
18326           die->die_perennial_p = 1;
18327           /* Keep the parent DIEs as well.  */
18328           while ((die = die->die_parent) && die->die_perennial_p == 0)
18329             die->die_perennial_p = 1;
18330         }
18331     }
18332   return 1;
18333 }
18334
18335 /* Mark all members of used_types_hash as perennial.  */
18336
18337 static void
18338 premark_used_types (struct function *fun)
18339 {
18340   if (fun && fun->used_types_hash)
18341     fun->used_types_hash->traverse<void *, premark_used_types_helper> (NULL);
18342 }
18343
18344 /* Mark all members of types_used_by_vars_entry as perennial.  */
18345
18346 static void
18347 premark_types_used_by_global_vars (void)
18348 {
18349   if (types_used_by_vars_hash)
18350     types_used_by_vars_hash
18351       ->traverse<void *, premark_types_used_by_global_vars_helper> (NULL);
18352 }
18353
18354 /* Generate a DW_TAG_GNU_call_site DIE in function DECL under SUBR_DIE
18355    for CA_LOC call arg loc node.  */
18356
18357 static dw_die_ref
18358 gen_call_site_die (tree decl, dw_die_ref subr_die,
18359                    struct call_arg_loc_node *ca_loc)
18360 {
18361   dw_die_ref stmt_die = NULL, die;
18362   tree block = ca_loc->block;
18363
18364   while (block
18365          && block != DECL_INITIAL (decl)
18366          && TREE_CODE (block) == BLOCK)
18367     {
18368       if (block_map.length () > BLOCK_NUMBER (block))
18369         stmt_die = block_map[BLOCK_NUMBER (block)];
18370       if (stmt_die)
18371         break;
18372       block = BLOCK_SUPERCONTEXT (block);
18373     }
18374   if (stmt_die == NULL)
18375     stmt_die = subr_die;
18376   die = new_die (DW_TAG_GNU_call_site, stmt_die, NULL_TREE);
18377   add_AT_lbl_id (die, DW_AT_low_pc, ca_loc->label);
18378   if (ca_loc->tail_call_p)
18379     add_AT_flag (die, DW_AT_GNU_tail_call, 1);
18380   if (ca_loc->symbol_ref)
18381     {
18382       dw_die_ref tdie = lookup_decl_die (SYMBOL_REF_DECL (ca_loc->symbol_ref));
18383       if (tdie)
18384         add_AT_die_ref (die, DW_AT_abstract_origin, tdie);
18385       else
18386         add_AT_addr (die, DW_AT_abstract_origin, ca_loc->symbol_ref, false);
18387     }
18388   return die;
18389 }
18390
18391 /* Generate a DIE to represent a declared function (either file-scope or
18392    block-local).  */
18393
18394 static void
18395 gen_subprogram_die (tree decl, dw_die_ref context_die)
18396 {
18397   tree origin = decl_ultimate_origin (decl);
18398   dw_die_ref subr_die;
18399   tree outer_scope;
18400   dw_die_ref old_die = lookup_decl_die (decl);
18401   int declaration = (current_function_decl != decl
18402                      || class_or_namespace_scope_p (context_die));
18403
18404   premark_used_types (DECL_STRUCT_FUNCTION (decl));
18405
18406   /* It is possible to have both DECL_ABSTRACT_P and DECLARATION be true if we
18407      started to generate the abstract instance of an inline, decided to output
18408      its containing class, and proceeded to emit the declaration of the inline
18409      from the member list for the class.  If so, DECLARATION takes priority;
18410      we'll get back to the abstract instance when done with the class.  */
18411
18412   /* The class-scope declaration DIE must be the primary DIE.  */
18413   if (origin && declaration && class_or_namespace_scope_p (context_die))
18414     {
18415       origin = NULL;
18416       gcc_assert (!old_die);
18417     }
18418
18419   /* Now that the C++ front end lazily declares artificial member fns, we
18420      might need to retrofit the declaration into its class.  */
18421   if (!declaration && !origin && !old_die
18422       && DECL_CONTEXT (decl) && TYPE_P (DECL_CONTEXT (decl))
18423       && !class_or_namespace_scope_p (context_die)
18424       && debug_info_level > DINFO_LEVEL_TERSE)
18425     old_die = force_decl_die (decl);
18426
18427   if (origin != NULL)
18428     {
18429       gcc_assert (!declaration || local_scope_p (context_die));
18430
18431       /* Fixup die_parent for the abstract instance of a nested
18432          inline function.  */
18433       if (old_die && old_die->die_parent == NULL)
18434         add_child_die (context_die, old_die);
18435
18436       subr_die = new_die (DW_TAG_subprogram, context_die, decl);
18437       add_abstract_origin_attribute (subr_die, origin);
18438       /*  This is where the actual code for a cloned function is.
18439           Let's emit linkage name attribute for it.  This helps
18440           debuggers to e.g, set breakpoints into
18441           constructors/destructors when the user asks "break
18442           K::K".  */
18443       add_linkage_name (subr_die, decl);
18444     }
18445   else if (old_die)
18446     {
18447       expanded_location s = expand_location (DECL_SOURCE_LOCATION (decl));
18448       struct dwarf_file_data * file_index = lookup_filename (s.file);
18449
18450       if (!get_AT_flag (old_die, DW_AT_declaration)
18451           /* We can have a normal definition following an inline one in the
18452              case of redefinition of GNU C extern inlines.
18453              It seems reasonable to use AT_specification in this case.  */
18454           && !get_AT (old_die, DW_AT_inline))
18455         {
18456           /* Detect and ignore this case, where we are trying to output
18457              something we have already output.  */
18458           return;
18459         }
18460
18461       /* If the definition comes from the same place as the declaration,
18462          maybe use the old DIE.  We always want the DIE for this function
18463          that has the *_pc attributes to be under comp_unit_die so the
18464          debugger can find it.  We also need to do this for abstract
18465          instances of inlines, since the spec requires the out-of-line copy
18466          to have the same parent.  For local class methods, this doesn't
18467          apply; we just use the old DIE.  */
18468       if ((is_cu_die (old_die->die_parent) || context_die == NULL)
18469           && (DECL_ARTIFICIAL (decl)
18470               || (get_AT_file (old_die, DW_AT_decl_file) == file_index
18471                   && (get_AT_unsigned (old_die, DW_AT_decl_line)
18472                       == (unsigned) s.line))))
18473         {
18474           subr_die = old_die;
18475
18476           /* Clear out the declaration attribute and the formal parameters.
18477              Do not remove all children, because it is possible that this
18478              declaration die was forced using force_decl_die(). In such
18479              cases die that forced declaration die (e.g. TAG_imported_module)
18480              is one of the children that we do not want to remove.  */
18481           remove_AT (subr_die, DW_AT_declaration);
18482           remove_AT (subr_die, DW_AT_object_pointer);
18483           remove_child_TAG (subr_die, DW_TAG_formal_parameter);
18484         }
18485       else
18486         {
18487           subr_die = new_die (DW_TAG_subprogram, context_die, decl);
18488           add_AT_specification (subr_die, old_die);
18489           add_pubname (decl, subr_die);
18490           if (get_AT_file (old_die, DW_AT_decl_file) != file_index)
18491             add_AT_file (subr_die, DW_AT_decl_file, file_index);
18492           if (get_AT_unsigned (old_die, DW_AT_decl_line) != (unsigned) s.line)
18493             add_AT_unsigned (subr_die, DW_AT_decl_line, s.line);
18494
18495           /* If the prototype had an 'auto' or 'decltype(auto)' return type,
18496              emit the real type on the definition die.  */
18497           if (is_cxx() && debug_info_level > DINFO_LEVEL_TERSE)
18498             {
18499               dw_die_ref die = get_AT_ref (old_die, DW_AT_type);
18500               if (die == auto_die || die == decltype_auto_die)
18501                 add_type_attribute (subr_die, TREE_TYPE (TREE_TYPE (decl)),
18502                                     TYPE_UNQUALIFIED, context_die);
18503             }
18504         }
18505     }
18506   else
18507     {
18508       subr_die = new_die (DW_TAG_subprogram, context_die, decl);
18509
18510       if (TREE_PUBLIC (decl))
18511         add_AT_flag (subr_die, DW_AT_external, 1);
18512
18513       add_name_and_src_coords_attributes (subr_die, decl);
18514       add_pubname (decl, subr_die);
18515       if (debug_info_level > DINFO_LEVEL_TERSE)
18516         {
18517           add_prototyped_attribute (subr_die, TREE_TYPE (decl));
18518           add_type_attribute (subr_die, TREE_TYPE (TREE_TYPE (decl)),
18519                               TYPE_UNQUALIFIED, context_die);
18520         }
18521
18522       add_pure_or_virtual_attribute (subr_die, decl);
18523       if (DECL_ARTIFICIAL (decl))
18524         add_AT_flag (subr_die, DW_AT_artificial, 1);
18525
18526       if (TREE_THIS_VOLATILE (decl) && (dwarf_version >= 5 || !dwarf_strict))
18527         add_AT_flag (subr_die, DW_AT_noreturn, 1);
18528
18529       add_accessibility_attribute (subr_die, decl);
18530     }
18531
18532   if (declaration)
18533     {
18534       if (!old_die || !get_AT (old_die, DW_AT_inline))
18535         {
18536           add_AT_flag (subr_die, DW_AT_declaration, 1);
18537
18538           /* If this is an explicit function declaration then generate
18539              a DW_AT_explicit attribute.  */
18540           if (lang_hooks.decls.function_decl_explicit_p (decl)
18541               && (dwarf_version >= 3 || !dwarf_strict))
18542             add_AT_flag (subr_die, DW_AT_explicit, 1);
18543
18544           /* If this is a C++11 deleted special function member then generate
18545              a DW_AT_GNU_deleted attribute.  */
18546           if (lang_hooks.decls.function_decl_deleted_p (decl)
18547               && (! dwarf_strict))
18548             add_AT_flag (subr_die, DW_AT_GNU_deleted, 1);
18549
18550           /* The first time we see a member function, it is in the context of
18551              the class to which it belongs.  We make sure of this by emitting
18552              the class first.  The next time is the definition, which is
18553              handled above.  The two may come from the same source text.
18554
18555              Note that force_decl_die() forces function declaration die. It is
18556              later reused to represent definition.  */
18557           equate_decl_number_to_die (decl, subr_die);
18558         }
18559     }
18560   else if (DECL_ABSTRACT_P (decl))
18561     {
18562       if (DECL_DECLARED_INLINE_P (decl))
18563         {
18564           if (cgraph_function_possibly_inlined_p (decl))
18565             add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_declared_inlined);
18566           else
18567             add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_declared_not_inlined);
18568         }
18569       else
18570         {
18571           if (cgraph_function_possibly_inlined_p (decl))
18572             add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_inlined);
18573           else
18574             add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_not_inlined);
18575         }
18576
18577       if (DECL_DECLARED_INLINE_P (decl)
18578           && lookup_attribute ("artificial", DECL_ATTRIBUTES (decl)))
18579         add_AT_flag (subr_die, DW_AT_artificial, 1);
18580
18581       equate_decl_number_to_die (decl, subr_die);
18582     }
18583   else if (!DECL_EXTERNAL (decl))
18584     {
18585       HOST_WIDE_INT cfa_fb_offset;
18586       struct function *fun = DECL_STRUCT_FUNCTION (decl);
18587
18588       if (!old_die || !get_AT (old_die, DW_AT_inline))
18589         equate_decl_number_to_die (decl, subr_die);
18590
18591       gcc_checking_assert (fun);
18592       if (!flag_reorder_blocks_and_partition)
18593         {
18594           dw_fde_ref fde = fun->fde;
18595           if (fde->dw_fde_begin)
18596             {
18597               /* We have already generated the labels.  */
18598              add_AT_low_high_pc (subr_die, fde->dw_fde_begin,
18599                                  fde->dw_fde_end, false);
18600             }
18601           else
18602             {
18603               /* Create start/end labels and add the range.  */
18604               char label_id_low[MAX_ARTIFICIAL_LABEL_BYTES];
18605               char label_id_high[MAX_ARTIFICIAL_LABEL_BYTES];
18606               ASM_GENERATE_INTERNAL_LABEL (label_id_low, FUNC_BEGIN_LABEL,
18607                                            current_function_funcdef_no);
18608               ASM_GENERATE_INTERNAL_LABEL (label_id_high, FUNC_END_LABEL,
18609                                            current_function_funcdef_no);
18610              add_AT_low_high_pc (subr_die, label_id_low, label_id_high,
18611                                  false);
18612             }
18613
18614 #if VMS_DEBUGGING_INFO
18615       /* HP OpenVMS Industry Standard 64: DWARF Extensions
18616          Section 2.3 Prologue and Epilogue Attributes:
18617          When a breakpoint is set on entry to a function, it is generally
18618          desirable for execution to be suspended, not on the very first
18619          instruction of the function, but rather at a point after the
18620          function's frame has been set up, after any language defined local
18621          declaration processing has been completed, and before execution of
18622          the first statement of the function begins. Debuggers generally
18623          cannot properly determine where this point is.  Similarly for a
18624          breakpoint set on exit from a function. The prologue and epilogue
18625          attributes allow a compiler to communicate the location(s) to use.  */
18626
18627       {
18628         if (fde->dw_fde_vms_end_prologue)
18629           add_AT_vms_delta (subr_die, DW_AT_HP_prologue,
18630             fde->dw_fde_begin, fde->dw_fde_vms_end_prologue);
18631
18632         if (fde->dw_fde_vms_begin_epilogue)
18633           add_AT_vms_delta (subr_die, DW_AT_HP_epilogue,
18634             fde->dw_fde_begin, fde->dw_fde_vms_begin_epilogue);
18635       }
18636 #endif
18637
18638         }
18639       else
18640         {
18641           /* Generate pubnames entries for the split function code ranges.  */
18642           dw_fde_ref fde = fun->fde;
18643
18644           if (fde->dw_fde_second_begin)
18645             {
18646               if (dwarf_version >= 3 || !dwarf_strict)
18647                 {
18648                   /* We should use ranges for non-contiguous code section 
18649                      addresses.  Use the actual code range for the initial
18650                      section, since the HOT/COLD labels might precede an 
18651                      alignment offset.  */
18652                   bool range_list_added = false;
18653                   add_ranges_by_labels (subr_die, fde->dw_fde_begin,
18654                                         fde->dw_fde_end, &range_list_added,
18655                                         false);
18656                   add_ranges_by_labels (subr_die, fde->dw_fde_second_begin,
18657                                         fde->dw_fde_second_end,
18658                                        &range_list_added, false);
18659                   if (range_list_added)
18660                     add_ranges (NULL);
18661                 }
18662               else
18663                 {
18664                   /* There is no real support in DW2 for this .. so we make
18665                      a work-around.  First, emit the pub name for the segment
18666                      containing the function label.  Then make and emit a
18667                      simplified subprogram DIE for the second segment with the
18668                      name pre-fixed by __hot/cold_sect_of_.  We use the same
18669                      linkage name for the second die so that gdb will find both
18670                      sections when given "b foo".  */
18671                   const char *name = NULL;
18672                   tree decl_name = DECL_NAME (decl);
18673                   dw_die_ref seg_die;
18674
18675                   /* Do the 'primary' section.   */
18676                   add_AT_low_high_pc (subr_die, fde->dw_fde_begin,
18677                                       fde->dw_fde_end, false);
18678
18679                   /* Build a minimal DIE for the secondary section.  */
18680                   seg_die = new_die (DW_TAG_subprogram,
18681                                      subr_die->die_parent, decl);
18682
18683                   if (TREE_PUBLIC (decl))
18684                     add_AT_flag (seg_die, DW_AT_external, 1);
18685
18686                   if (decl_name != NULL 
18687                       && IDENTIFIER_POINTER (decl_name) != NULL)
18688                     {
18689                       name = dwarf2_name (decl, 1);
18690                       if (! DECL_ARTIFICIAL (decl))
18691                         add_src_coords_attributes (seg_die, decl);
18692
18693                       add_linkage_name (seg_die, decl);
18694                     }
18695                   gcc_assert (name != NULL);
18696                   add_pure_or_virtual_attribute (seg_die, decl);
18697                   if (DECL_ARTIFICIAL (decl))
18698                     add_AT_flag (seg_die, DW_AT_artificial, 1);
18699
18700                   name = concat ("__second_sect_of_", name, NULL); 
18701                   add_AT_low_high_pc (seg_die, fde->dw_fde_second_begin,
18702                                       fde->dw_fde_second_end, false);
18703                   add_name_attribute (seg_die, name);
18704                   if (want_pubnames ())
18705                     add_pubname_string (name, seg_die);
18706                 }
18707             }
18708           else
18709            add_AT_low_high_pc (subr_die, fde->dw_fde_begin, fde->dw_fde_end,
18710                                false);
18711         }
18712
18713       cfa_fb_offset = CFA_FRAME_BASE_OFFSET (decl);
18714
18715       /* We define the "frame base" as the function's CFA.  This is more
18716          convenient for several reasons: (1) It's stable across the prologue
18717          and epilogue, which makes it better than just a frame pointer,
18718          (2) With dwarf3, there exists a one-byte encoding that allows us
18719          to reference the .debug_frame data by proxy, but failing that,
18720          (3) We can at least reuse the code inspection and interpretation
18721          code that determines the CFA position at various points in the
18722          function.  */
18723       if (dwarf_version >= 3 && targetm.debug_unwind_info () == UI_DWARF2)
18724         {
18725           dw_loc_descr_ref op = new_loc_descr (DW_OP_call_frame_cfa, 0, 0);
18726           add_AT_loc (subr_die, DW_AT_frame_base, op);
18727         }
18728       else
18729         {
18730           dw_loc_list_ref list = convert_cfa_to_fb_loc_list (cfa_fb_offset);
18731           if (list->dw_loc_next)
18732             add_AT_loc_list (subr_die, DW_AT_frame_base, list);
18733           else
18734             add_AT_loc (subr_die, DW_AT_frame_base, list->expr);
18735         }
18736
18737       /* Compute a displacement from the "steady-state frame pointer" to
18738          the CFA.  The former is what all stack slots and argument slots
18739          will reference in the rtl; the latter is what we've told the
18740          debugger about.  We'll need to adjust all frame_base references
18741          by this displacement.  */
18742       compute_frame_pointer_to_fb_displacement (cfa_fb_offset);
18743
18744       if (fun->static_chain_decl)
18745         add_AT_location_description (subr_die, DW_AT_static_link,
18746                  loc_list_from_tree (fun->static_chain_decl, 2, NULL));
18747     }
18748
18749   /* Generate child dies for template paramaters.  */
18750   if (debug_info_level > DINFO_LEVEL_TERSE)
18751     gen_generic_params_dies (decl);
18752
18753   /* Now output descriptions of the arguments for this function. This gets
18754      (unnecessarily?) complex because of the fact that the DECL_ARGUMENT list
18755      for a FUNCTION_DECL doesn't indicate cases where there was a trailing
18756      `...' at the end of the formal parameter list.  In order to find out if
18757      there was a trailing ellipsis or not, we must instead look at the type
18758      associated with the FUNCTION_DECL.  This will be a node of type
18759      FUNCTION_TYPE. If the chain of type nodes hanging off of this
18760      FUNCTION_TYPE node ends with a void_type_node then there should *not* be
18761      an ellipsis at the end.  */
18762
18763   /* In the case where we are describing a mere function declaration, all we
18764      need to do here (and all we *can* do here) is to describe the *types* of
18765      its formal parameters.  */
18766   if (debug_info_level <= DINFO_LEVEL_TERSE)
18767     ;
18768   else if (declaration)
18769     gen_formal_types_die (decl, subr_die);
18770   else
18771     {
18772       /* Generate DIEs to represent all known formal parameters.  */
18773       tree parm = DECL_ARGUMENTS (decl);
18774       tree generic_decl = lang_hooks.decls.get_generic_function_decl (decl);
18775       tree generic_decl_parm = generic_decl
18776                                 ? DECL_ARGUMENTS (generic_decl)
18777                                 : NULL;
18778
18779       /* Now we want to walk the list of parameters of the function and
18780          emit their relevant DIEs.
18781
18782          We consider the case of DECL being an instance of a generic function
18783          as well as it being a normal function.
18784
18785          If DECL is an instance of a generic function we walk the
18786          parameters of the generic function declaration _and_ the parameters of
18787          DECL itself. This is useful because we want to emit specific DIEs for
18788          function parameter packs and those are declared as part of the
18789          generic function declaration. In that particular case,
18790          the parameter pack yields a DW_TAG_GNU_formal_parameter_pack DIE.
18791          That DIE has children DIEs representing the set of arguments
18792          of the pack. Note that the set of pack arguments can be empty.
18793          In that case, the DW_TAG_GNU_formal_parameter_pack DIE will not have any
18794          children DIE.
18795
18796          Otherwise, we just consider the parameters of DECL.  */
18797       while (generic_decl_parm || parm)
18798         {
18799           if (generic_decl_parm
18800               && lang_hooks.function_parameter_pack_p (generic_decl_parm))
18801             gen_formal_parameter_pack_die (generic_decl_parm,
18802                                            parm, subr_die,
18803                                            &parm);
18804           else if (parm && !POINTER_BOUNDS_P (parm))
18805             {
18806               dw_die_ref parm_die = gen_decl_die (parm, NULL, subr_die);
18807
18808               if (parm == DECL_ARGUMENTS (decl)
18809                   && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE
18810                   && parm_die
18811                   && (dwarf_version >= 3 || !dwarf_strict))
18812                 add_AT_die_ref (subr_die, DW_AT_object_pointer, parm_die);
18813
18814               parm = DECL_CHAIN (parm);
18815             }
18816           else if (parm)
18817             parm = DECL_CHAIN (parm);
18818
18819           if (generic_decl_parm)
18820             generic_decl_parm = DECL_CHAIN (generic_decl_parm);
18821         }
18822
18823       /* Decide whether we need an unspecified_parameters DIE at the end.
18824          There are 2 more cases to do this for: 1) the ansi ... declaration -
18825          this is detectable when the end of the arg list is not a
18826          void_type_node 2) an unprototyped function declaration (not a
18827          definition).  This just means that we have no info about the
18828          parameters at all.  */
18829       if (prototype_p (TREE_TYPE (decl)))
18830         {
18831           /* This is the prototyped case, check for....  */
18832           if (stdarg_p (TREE_TYPE (decl)))
18833             gen_unspecified_parameters_die (decl, subr_die);
18834         }
18835       else if (DECL_INITIAL (decl) == NULL_TREE)
18836         gen_unspecified_parameters_die (decl, subr_die);
18837     }
18838
18839   /* Output Dwarf info for all of the stuff within the body of the function
18840      (if it has one - it may be just a declaration).  */
18841   outer_scope = DECL_INITIAL (decl);
18842
18843   /* OUTER_SCOPE is a pointer to the outermost BLOCK node created to represent
18844      a function.  This BLOCK actually represents the outermost binding contour
18845      for the function, i.e. the contour in which the function's formal
18846      parameters and labels get declared. Curiously, it appears that the front
18847      end doesn't actually put the PARM_DECL nodes for the current function onto
18848      the BLOCK_VARS list for this outer scope, but are strung off of the
18849      DECL_ARGUMENTS list for the function instead.
18850
18851      The BLOCK_VARS list for the `outer_scope' does provide us with a list of
18852      the LABEL_DECL nodes for the function however, and we output DWARF info
18853      for those in decls_for_scope.  Just within the `outer_scope' there will be
18854      a BLOCK node representing the function's outermost pair of curly braces,
18855      and any blocks used for the base and member initializers of a C++
18856      constructor function.  */
18857   if (! declaration && outer_scope && TREE_CODE (outer_scope) != ERROR_MARK)
18858     {
18859       int call_site_note_count = 0;
18860       int tail_call_site_note_count = 0;
18861
18862       /* Emit a DW_TAG_variable DIE for a named return value.  */
18863       if (DECL_NAME (DECL_RESULT (decl)))
18864         gen_decl_die (DECL_RESULT (decl), NULL, subr_die);
18865
18866       decls_for_scope (outer_scope, subr_die);
18867
18868       if (call_arg_locations && !dwarf_strict)
18869         {
18870           struct call_arg_loc_node *ca_loc;
18871           for (ca_loc = call_arg_locations; ca_loc; ca_loc = ca_loc->next)
18872             {
18873               dw_die_ref die = NULL;
18874               rtx tloc = NULL_RTX, tlocc = NULL_RTX;
18875               rtx arg, next_arg;
18876
18877               for (arg = NOTE_VAR_LOCATION (ca_loc->call_arg_loc_note);
18878                    arg; arg = next_arg)
18879                 {
18880                   dw_loc_descr_ref reg, val;
18881                   machine_mode mode = GET_MODE (XEXP (XEXP (arg, 0), 1));
18882                   dw_die_ref cdie, tdie = NULL;
18883
18884                   next_arg = XEXP (arg, 1);
18885                   if (REG_P (XEXP (XEXP (arg, 0), 0))
18886                       && next_arg
18887                       && MEM_P (XEXP (XEXP (next_arg, 0), 0))
18888                       && REG_P (XEXP (XEXP (XEXP (next_arg, 0), 0), 0))
18889                       && REGNO (XEXP (XEXP (arg, 0), 0))
18890                          == REGNO (XEXP (XEXP (XEXP (next_arg, 0), 0), 0)))
18891                     next_arg = XEXP (next_arg, 1);
18892                   if (mode == VOIDmode)
18893                     {
18894                       mode = GET_MODE (XEXP (XEXP (arg, 0), 0));
18895                       if (mode == VOIDmode)
18896                         mode = GET_MODE (XEXP (arg, 0));
18897                     }
18898                   if (mode == VOIDmode || mode == BLKmode)
18899                     continue;
18900                   if (XEXP (XEXP (arg, 0), 0) == pc_rtx)
18901                     {
18902                       gcc_assert (ca_loc->symbol_ref == NULL_RTX);
18903                       tloc = XEXP (XEXP (arg, 0), 1);
18904                       continue;
18905                     }
18906                   else if (GET_CODE (XEXP (XEXP (arg, 0), 0)) == CLOBBER
18907                            && XEXP (XEXP (XEXP (arg, 0), 0), 0) == pc_rtx)
18908                     {
18909                       gcc_assert (ca_loc->symbol_ref == NULL_RTX);
18910                       tlocc = XEXP (XEXP (arg, 0), 1);
18911                       continue;
18912                     }
18913                   reg = NULL;
18914                   if (REG_P (XEXP (XEXP (arg, 0), 0)))
18915                     reg = reg_loc_descriptor (XEXP (XEXP (arg, 0), 0),
18916                                               VAR_INIT_STATUS_INITIALIZED);
18917                   else if (MEM_P (XEXP (XEXP (arg, 0), 0)))
18918                     {
18919                       rtx mem = XEXP (XEXP (arg, 0), 0);
18920                       reg = mem_loc_descriptor (XEXP (mem, 0),
18921                                                 get_address_mode (mem),
18922                                                 GET_MODE (mem),
18923                                                 VAR_INIT_STATUS_INITIALIZED);
18924                     }
18925                   else if (GET_CODE (XEXP (XEXP (arg, 0), 0))
18926                            == DEBUG_PARAMETER_REF)
18927                     {
18928                       tree tdecl
18929                         = DEBUG_PARAMETER_REF_DECL (XEXP (XEXP (arg, 0), 0));
18930                       tdie = lookup_decl_die (tdecl);
18931                       if (tdie == NULL)
18932                         continue;
18933                     }
18934                   else
18935                     continue;
18936                   if (reg == NULL
18937                       && GET_CODE (XEXP (XEXP (arg, 0), 0))
18938                          != DEBUG_PARAMETER_REF)
18939                     continue;
18940                   val = mem_loc_descriptor (XEXP (XEXP (arg, 0), 1), mode,
18941                                             VOIDmode,
18942                                             VAR_INIT_STATUS_INITIALIZED);
18943                   if (val == NULL)
18944                     continue;
18945                   if (die == NULL)
18946                     die = gen_call_site_die (decl, subr_die, ca_loc);
18947                   cdie = new_die (DW_TAG_GNU_call_site_parameter, die,
18948                                   NULL_TREE);
18949                   if (reg != NULL)
18950                     add_AT_loc (cdie, DW_AT_location, reg);
18951                   else if (tdie != NULL)
18952                     add_AT_die_ref (cdie, DW_AT_abstract_origin, tdie);
18953                   add_AT_loc (cdie, DW_AT_GNU_call_site_value, val);
18954                   if (next_arg != XEXP (arg, 1))
18955                     {
18956                       mode = GET_MODE (XEXP (XEXP (XEXP (arg, 1), 0), 1));
18957                       if (mode == VOIDmode)
18958                         mode = GET_MODE (XEXP (XEXP (XEXP (arg, 1), 0), 0));
18959                       val = mem_loc_descriptor (XEXP (XEXP (XEXP (arg, 1),
18960                                                             0), 1),
18961                                                 mode, VOIDmode,
18962                                                 VAR_INIT_STATUS_INITIALIZED);
18963                       if (val != NULL)
18964                         add_AT_loc (cdie, DW_AT_GNU_call_site_data_value, val);
18965                     }
18966                 }
18967               if (die == NULL
18968                   && (ca_loc->symbol_ref || tloc))
18969                 die = gen_call_site_die (decl, subr_die, ca_loc);
18970               if (die != NULL && (tloc != NULL_RTX || tlocc != NULL_RTX))
18971                 {
18972                   dw_loc_descr_ref tval = NULL;
18973
18974                   if (tloc != NULL_RTX)
18975                     tval = mem_loc_descriptor (tloc,
18976                                                GET_MODE (tloc) == VOIDmode
18977                                                ? Pmode : GET_MODE (tloc),
18978                                                VOIDmode,
18979                                                VAR_INIT_STATUS_INITIALIZED);
18980                   if (tval)
18981                     add_AT_loc (die, DW_AT_GNU_call_site_target, tval);
18982                   else if (tlocc != NULL_RTX)
18983                     {
18984                       tval = mem_loc_descriptor (tlocc,
18985                                                  GET_MODE (tlocc) == VOIDmode
18986                                                  ? Pmode : GET_MODE (tlocc),
18987                                                  VOIDmode,
18988                                                  VAR_INIT_STATUS_INITIALIZED);
18989                       if (tval)
18990                         add_AT_loc (die, DW_AT_GNU_call_site_target_clobbered,
18991                                     tval);
18992                     }
18993                 }
18994               if (die != NULL)
18995                 {
18996                   call_site_note_count++;
18997                   if (ca_loc->tail_call_p)
18998                     tail_call_site_note_count++;
18999                 }
19000             }
19001         }
19002       call_arg_locations = NULL;
19003       call_arg_loc_last = NULL;
19004       if (tail_call_site_count >= 0
19005           && tail_call_site_count == tail_call_site_note_count
19006           && !dwarf_strict)
19007         {
19008           if (call_site_count >= 0
19009               && call_site_count == call_site_note_count)
19010             add_AT_flag (subr_die, DW_AT_GNU_all_call_sites, 1);
19011           else
19012             add_AT_flag (subr_die, DW_AT_GNU_all_tail_call_sites, 1);
19013         }
19014       call_site_count = -1;
19015       tail_call_site_count = -1;
19016     }
19017
19018   if (subr_die != old_die)
19019     /* Add the calling convention attribute if requested.  */
19020     add_calling_convention_attribute (subr_die, decl);
19021 }
19022
19023 /* Returns a hash value for X (which really is a die_struct).  */
19024
19025 hashval_t
19026 block_die_hasher::hash (die_struct *d)
19027 {
19028   return (hashval_t) d->decl_id ^ htab_hash_pointer (d->die_parent);
19029 }
19030
19031 /* Return nonzero if decl_id and die_parent of die_struct X is the same
19032    as decl_id and die_parent of die_struct Y.  */
19033
19034 bool
19035 block_die_hasher::equal (die_struct *x, die_struct *y)
19036 {
19037   return x->decl_id == y->decl_id && x->die_parent == y->die_parent;
19038 }
19039
19040 /* Generate a DIE to represent a declared data object.
19041    Either DECL or ORIGIN must be non-null.  */
19042
19043 static void
19044 gen_variable_die (tree decl, tree origin, dw_die_ref context_die)
19045 {
19046   HOST_WIDE_INT off = 0;
19047   tree com_decl;
19048   tree decl_or_origin = decl ? decl : origin;
19049   tree ultimate_origin;
19050   dw_die_ref var_die;
19051   dw_die_ref old_die = decl ? lookup_decl_die (decl) : NULL;
19052   dw_die_ref origin_die;
19053   bool declaration = (DECL_EXTERNAL (decl_or_origin)
19054                       || class_or_namespace_scope_p (context_die));
19055   bool specialization_p = false;
19056
19057   ultimate_origin = decl_ultimate_origin (decl_or_origin);
19058   if (decl || ultimate_origin)
19059     origin = ultimate_origin;
19060   com_decl = fortran_common (decl_or_origin, &off);
19061
19062   /* Symbol in common gets emitted as a child of the common block, in the form
19063      of a data member.  */
19064   if (com_decl)
19065     {
19066       dw_die_ref com_die;
19067       dw_loc_list_ref loc;
19068       die_node com_die_arg;
19069
19070       var_die = lookup_decl_die (decl_or_origin);
19071       if (var_die)
19072         {
19073           if (get_AT (var_die, DW_AT_location) == NULL)
19074             {
19075               loc = loc_list_from_tree (com_decl, off ? 1 : 2, NULL);
19076               if (loc)
19077                 {
19078                   if (off)
19079                     {
19080                       /* Optimize the common case.  */
19081                       if (single_element_loc_list_p (loc)
19082                           && loc->expr->dw_loc_opc == DW_OP_addr
19083                           && loc->expr->dw_loc_next == NULL
19084                           && GET_CODE (loc->expr->dw_loc_oprnd1.v.val_addr)
19085                              == SYMBOL_REF)
19086                         {
19087                           rtx x = loc->expr->dw_loc_oprnd1.v.val_addr;
19088                           loc->expr->dw_loc_oprnd1.v.val_addr
19089                             = plus_constant (GET_MODE (x), x , off);
19090                         }
19091                       else
19092                         loc_list_plus_const (loc, off);
19093                     }
19094                   add_AT_location_description (var_die, DW_AT_location, loc);
19095                   remove_AT (var_die, DW_AT_declaration);
19096                 }
19097             }
19098           return;
19099         }
19100
19101       if (common_block_die_table == NULL)
19102         common_block_die_table = hash_table<block_die_hasher>::create_ggc (10);
19103
19104       com_die_arg.decl_id = DECL_UID (com_decl);
19105       com_die_arg.die_parent = context_die;
19106       com_die = common_block_die_table->find (&com_die_arg);
19107       loc = loc_list_from_tree (com_decl, 2, NULL);
19108       if (com_die == NULL)
19109         {
19110           const char *cnam
19111             = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (com_decl));
19112           die_node **slot;
19113
19114           com_die = new_die (DW_TAG_common_block, context_die, decl);
19115           add_name_and_src_coords_attributes (com_die, com_decl);
19116           if (loc)
19117             {
19118               add_AT_location_description (com_die, DW_AT_location, loc);
19119               /* Avoid sharing the same loc descriptor between
19120                  DW_TAG_common_block and DW_TAG_variable.  */
19121               loc = loc_list_from_tree (com_decl, 2, NULL);
19122             }
19123           else if (DECL_EXTERNAL (decl))
19124             add_AT_flag (com_die, DW_AT_declaration, 1);
19125           if (want_pubnames ())
19126             add_pubname_string (cnam, com_die); /* ??? needed? */
19127           com_die->decl_id = DECL_UID (com_decl);
19128           slot = common_block_die_table->find_slot (com_die, INSERT);
19129           *slot = com_die;
19130         }
19131       else if (get_AT (com_die, DW_AT_location) == NULL && loc)
19132         {
19133           add_AT_location_description (com_die, DW_AT_location, loc);
19134           loc = loc_list_from_tree (com_decl, 2, NULL);
19135           remove_AT (com_die, DW_AT_declaration);
19136         }
19137       var_die = new_die (DW_TAG_variable, com_die, decl);
19138       add_name_and_src_coords_attributes (var_die, decl);
19139       add_type_attribute (var_die, TREE_TYPE (decl), decl_quals (decl),
19140                           context_die);
19141       add_AT_flag (var_die, DW_AT_external, 1);
19142       if (loc)
19143         {
19144           if (off)
19145             {
19146               /* Optimize the common case.  */
19147               if (single_element_loc_list_p (loc)
19148                   && loc->expr->dw_loc_opc == DW_OP_addr
19149                   && loc->expr->dw_loc_next == NULL
19150                   && GET_CODE (loc->expr->dw_loc_oprnd1.v.val_addr) == SYMBOL_REF)
19151                 {
19152                   rtx x = loc->expr->dw_loc_oprnd1.v.val_addr;
19153                   loc->expr->dw_loc_oprnd1.v.val_addr
19154                     = plus_constant (GET_MODE (x), x, off);
19155                 }
19156               else
19157                 loc_list_plus_const (loc, off);
19158             }
19159           add_AT_location_description (var_die, DW_AT_location, loc);
19160         }
19161       else if (DECL_EXTERNAL (decl))
19162         add_AT_flag (var_die, DW_AT_declaration, 1);
19163       equate_decl_number_to_die (decl, var_die);
19164       return;
19165     }
19166
19167   /* If the compiler emitted a definition for the DECL declaration
19168      and if we already emitted a DIE for it, don't emit a second
19169      DIE for it again. Allow re-declarations of DECLs that are
19170      inside functions, though.  */
19171   if (old_die && declaration && !local_scope_p (context_die))
19172     return;
19173
19174   /* For static data members, the declaration in the class is supposed
19175      to have DW_TAG_member tag; the specification should still be
19176      DW_TAG_variable referencing the DW_TAG_member DIE.  */
19177   if (declaration && class_scope_p (context_die))
19178     var_die = new_die (DW_TAG_member, context_die, decl);
19179   else
19180     var_die = new_die (DW_TAG_variable, context_die, decl);
19181
19182   origin_die = NULL;
19183   if (origin != NULL)
19184     origin_die = add_abstract_origin_attribute (var_die, origin);
19185
19186   /* Loop unrolling can create multiple blocks that refer to the same
19187      static variable, so we must test for the DW_AT_declaration flag.
19188
19189      ??? Loop unrolling/reorder_blocks should perhaps be rewritten to
19190      copy decls and set the DECL_ABSTRACT_P flag on them instead of
19191      sharing them.
19192
19193      ??? Duplicated blocks have been rewritten to use .debug_ranges.
19194
19195      ??? The declare_in_namespace support causes us to get two DIEs for one
19196      variable, both of which are declarations.  We want to avoid considering
19197      one to be a specification, so we must test that this DIE is not a
19198      declaration.  */
19199   else if (old_die && TREE_STATIC (decl) && ! declaration
19200            && get_AT_flag (old_die, DW_AT_declaration) == 1)
19201     {
19202       /* This is a definition of a C++ class level static.  */
19203       add_AT_specification (var_die, old_die);
19204       specialization_p = true;
19205       if (DECL_NAME (decl))
19206         {
19207           expanded_location s = expand_location (DECL_SOURCE_LOCATION (decl));
19208           struct dwarf_file_data * file_index = lookup_filename (s.file);
19209
19210           if (get_AT_file (old_die, DW_AT_decl_file) != file_index)
19211             add_AT_file (var_die, DW_AT_decl_file, file_index);
19212
19213           if (get_AT_unsigned (old_die, DW_AT_decl_line) != (unsigned) s.line)
19214             add_AT_unsigned (var_die, DW_AT_decl_line, s.line);
19215
19216           if (old_die->die_tag == DW_TAG_member)
19217             add_linkage_name (var_die, decl);
19218         }
19219     }
19220   else
19221     add_name_and_src_coords_attributes (var_die, decl);
19222
19223   if ((origin == NULL && !specialization_p)
19224       || (origin != NULL
19225           && !DECL_ABSTRACT_P (decl_or_origin)
19226           && variably_modified_type_p (TREE_TYPE (decl_or_origin),
19227                                        decl_function_context
19228                                                         (decl_or_origin))))
19229     {
19230       tree type = TREE_TYPE (decl_or_origin);
19231
19232       if (decl_by_reference_p (decl_or_origin))
19233         add_type_attribute (var_die, TREE_TYPE (type), TYPE_UNQUALIFIED,
19234                             context_die);
19235       else
19236         add_type_attribute (var_die, type, decl_quals (decl_or_origin),
19237                             context_die);
19238     }
19239
19240   if (origin == NULL && !specialization_p)
19241     {
19242       if (TREE_PUBLIC (decl))
19243         add_AT_flag (var_die, DW_AT_external, 1);
19244
19245       if (DECL_ARTIFICIAL (decl))
19246         add_AT_flag (var_die, DW_AT_artificial, 1);
19247
19248       add_accessibility_attribute (var_die, decl);
19249     }
19250
19251   if (declaration)
19252     add_AT_flag (var_die, DW_AT_declaration, 1);
19253
19254   if (decl && (DECL_ABSTRACT_P (decl) || declaration || old_die == NULL))
19255     equate_decl_number_to_die (decl, var_die);
19256
19257   if (! declaration
19258       && (! DECL_ABSTRACT_P (decl_or_origin)
19259           /* Local static vars are shared between all clones/inlines,
19260              so emit DW_AT_location on the abstract DIE if DECL_RTL is
19261              already set.  */
19262           || (TREE_CODE (decl_or_origin) == VAR_DECL
19263               && TREE_STATIC (decl_or_origin)
19264               && DECL_RTL_SET_P (decl_or_origin)))
19265       /* When abstract origin already has DW_AT_location attribute, no need
19266          to add it again.  */
19267       && (origin_die == NULL || get_AT (origin_die, DW_AT_location) == NULL))
19268     {
19269       if (TREE_CODE (decl_or_origin) == VAR_DECL && TREE_STATIC (decl_or_origin)
19270           && !TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl_or_origin)))
19271         defer_location (decl_or_origin, var_die);
19272       else
19273         add_location_or_const_value_attribute (var_die, decl_or_origin,
19274                                                decl == NULL, DW_AT_location);
19275       add_pubname (decl_or_origin, var_die);
19276     }
19277   else
19278     tree_add_const_value_attribute_for_decl (var_die, decl_or_origin);
19279 }
19280
19281 /* Generate a DIE to represent a named constant.  */
19282
19283 static void
19284 gen_const_die (tree decl, dw_die_ref context_die)
19285 {
19286   dw_die_ref const_die;
19287   tree type = TREE_TYPE (decl);
19288
19289   const_die = new_die (DW_TAG_constant, context_die, decl);
19290   add_name_and_src_coords_attributes (const_die, decl);
19291   add_type_attribute (const_die, type, TYPE_QUAL_CONST, context_die);
19292   if (TREE_PUBLIC (decl))
19293     add_AT_flag (const_die, DW_AT_external, 1);
19294   if (DECL_ARTIFICIAL (decl))
19295     add_AT_flag (const_die, DW_AT_artificial, 1);
19296   tree_add_const_value_attribute_for_decl (const_die, decl);
19297 }
19298
19299 /* Generate a DIE to represent a label identifier.  */
19300
19301 static void
19302 gen_label_die (tree decl, dw_die_ref context_die)
19303 {
19304   tree origin = decl_ultimate_origin (decl);
19305   dw_die_ref lbl_die = new_die (DW_TAG_label, context_die, decl);
19306   rtx insn;
19307   char label[MAX_ARTIFICIAL_LABEL_BYTES];
19308
19309   if (origin != NULL)
19310     add_abstract_origin_attribute (lbl_die, origin);
19311   else
19312     add_name_and_src_coords_attributes (lbl_die, decl);
19313
19314   if (DECL_ABSTRACT_P (decl))
19315     equate_decl_number_to_die (decl, lbl_die);
19316   else
19317     {
19318       insn = DECL_RTL_IF_SET (decl);
19319
19320       /* Deleted labels are programmer specified labels which have been
19321          eliminated because of various optimizations.  We still emit them
19322          here so that it is possible to put breakpoints on them.  */
19323       if (insn
19324           && (LABEL_P (insn)
19325               || ((NOTE_P (insn)
19326                    && NOTE_KIND (insn) == NOTE_INSN_DELETED_LABEL))))
19327         {
19328           /* When optimization is enabled (via -O) some parts of the compiler
19329              (e.g. jump.c and cse.c) may try to delete CODE_LABEL insns which
19330              represent source-level labels which were explicitly declared by
19331              the user.  This really shouldn't be happening though, so catch
19332              it if it ever does happen.  */
19333           gcc_assert (!as_a<rtx_insn *> (insn)->deleted ());
19334
19335           ASM_GENERATE_INTERNAL_LABEL (label, "L", CODE_LABEL_NUMBER (insn));
19336           add_AT_lbl_id (lbl_die, DW_AT_low_pc, label);
19337         }
19338       else if (insn
19339                && NOTE_P (insn)
19340                && NOTE_KIND (insn) == NOTE_INSN_DELETED_DEBUG_LABEL
19341                && CODE_LABEL_NUMBER (insn) != -1)
19342         {
19343           ASM_GENERATE_INTERNAL_LABEL (label, "LDL", CODE_LABEL_NUMBER (insn));
19344           add_AT_lbl_id (lbl_die, DW_AT_low_pc, label);
19345         }
19346     }
19347 }
19348
19349 /* A helper function for gen_inlined_subroutine_die.  Add source coordinate
19350    attributes to the DIE for a block STMT, to describe where the inlined
19351    function was called from.  This is similar to add_src_coords_attributes.  */
19352
19353 static inline void
19354 add_call_src_coords_attributes (tree stmt, dw_die_ref die)
19355 {
19356   expanded_location s = expand_location (BLOCK_SOURCE_LOCATION (stmt));
19357
19358   if (dwarf_version >= 3 || !dwarf_strict)
19359     {
19360       add_AT_file (die, DW_AT_call_file, lookup_filename (s.file));
19361       add_AT_unsigned (die, DW_AT_call_line, s.line);
19362     }
19363 }
19364
19365
19366 /* A helper function for gen_lexical_block_die and gen_inlined_subroutine_die.
19367    Add low_pc and high_pc attributes to the DIE for a block STMT.  */
19368
19369 static inline void
19370 add_high_low_attributes (tree stmt, dw_die_ref die)
19371 {
19372   char label[MAX_ARTIFICIAL_LABEL_BYTES];
19373
19374   if (BLOCK_FRAGMENT_CHAIN (stmt)
19375       && (dwarf_version >= 3 || !dwarf_strict))
19376     {
19377       tree chain, superblock = NULL_TREE;
19378       dw_die_ref pdie;
19379       dw_attr_ref attr = NULL;
19380
19381       if (inlined_function_outer_scope_p (stmt))
19382         {
19383           ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_BEGIN_LABEL,
19384                                        BLOCK_NUMBER (stmt));
19385           add_AT_lbl_id (die, DW_AT_entry_pc, label);
19386         }
19387
19388       /* Optimize duplicate .debug_ranges lists or even tails of
19389          lists.  If this BLOCK has same ranges as its supercontext,
19390          lookup DW_AT_ranges attribute in the supercontext (and
19391          recursively so), verify that the ranges_table contains the
19392          right values and use it instead of adding a new .debug_range.  */
19393       for (chain = stmt, pdie = die;
19394            BLOCK_SAME_RANGE (chain);
19395            chain = BLOCK_SUPERCONTEXT (chain))
19396         {
19397           dw_attr_ref new_attr;
19398
19399           pdie = pdie->die_parent;
19400           if (pdie == NULL)
19401             break;
19402           if (BLOCK_SUPERCONTEXT (chain) == NULL_TREE)
19403             break;
19404           new_attr = get_AT (pdie, DW_AT_ranges);
19405           if (new_attr == NULL
19406               || new_attr->dw_attr_val.val_class != dw_val_class_range_list)
19407             break;
19408           attr = new_attr;
19409           superblock = BLOCK_SUPERCONTEXT (chain);
19410         }
19411       if (attr != NULL
19412           && (ranges_table[attr->dw_attr_val.v.val_offset
19413                            / 2 / DWARF2_ADDR_SIZE].num
19414               == BLOCK_NUMBER (superblock))
19415           && BLOCK_FRAGMENT_CHAIN (superblock))
19416         {
19417           unsigned long off = attr->dw_attr_val.v.val_offset
19418                               / 2 / DWARF2_ADDR_SIZE;
19419           unsigned long supercnt = 0, thiscnt = 0;
19420           for (chain = BLOCK_FRAGMENT_CHAIN (superblock);
19421                chain; chain = BLOCK_FRAGMENT_CHAIN (chain))
19422             {
19423               ++supercnt;
19424               gcc_checking_assert (ranges_table[off + supercnt].num
19425                                    == BLOCK_NUMBER (chain));
19426             }
19427           gcc_checking_assert (ranges_table[off + supercnt + 1].num == 0);
19428           for (chain = BLOCK_FRAGMENT_CHAIN (stmt);
19429                chain; chain = BLOCK_FRAGMENT_CHAIN (chain))
19430             ++thiscnt;
19431           gcc_assert (supercnt >= thiscnt);
19432           add_AT_range_list (die, DW_AT_ranges,
19433                              ((off + supercnt - thiscnt)
19434                               * 2 * DWARF2_ADDR_SIZE),
19435                              false);
19436           return;
19437         }
19438
19439       add_AT_range_list (die, DW_AT_ranges, add_ranges (stmt), false);
19440
19441       chain = BLOCK_FRAGMENT_CHAIN (stmt);
19442       do
19443         {
19444           add_ranges (chain);
19445           chain = BLOCK_FRAGMENT_CHAIN (chain);
19446         }
19447       while (chain);
19448       add_ranges (NULL);
19449     }
19450   else
19451     {
19452       char label_high[MAX_ARTIFICIAL_LABEL_BYTES];
19453       ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_BEGIN_LABEL,
19454                                    BLOCK_NUMBER (stmt));
19455       ASM_GENERATE_INTERNAL_LABEL (label_high, BLOCK_END_LABEL,
19456                                    BLOCK_NUMBER (stmt));
19457       add_AT_low_high_pc (die, label, label_high, false);
19458     }
19459 }
19460
19461 /* Generate a DIE for a lexical block.  */
19462
19463 static void
19464 gen_lexical_block_die (tree stmt, dw_die_ref context_die)
19465 {
19466   dw_die_ref stmt_die = new_die (DW_TAG_lexical_block, context_die, stmt);
19467
19468   if (call_arg_locations)
19469     {
19470       if (block_map.length () <= BLOCK_NUMBER (stmt))
19471         block_map.safe_grow_cleared (BLOCK_NUMBER (stmt) + 1);
19472       block_map[BLOCK_NUMBER (stmt)] = stmt_die;
19473     }
19474
19475   if (! BLOCK_ABSTRACT (stmt) && TREE_ASM_WRITTEN (stmt))
19476     add_high_low_attributes (stmt, stmt_die);
19477
19478   decls_for_scope (stmt, stmt_die);
19479 }
19480
19481 /* Generate a DIE for an inlined subprogram.  */
19482
19483 static void
19484 gen_inlined_subroutine_die (tree stmt, dw_die_ref context_die)
19485 {
19486   tree decl;
19487
19488   /* The instance of function that is effectively being inlined shall not
19489      be abstract.  */
19490   gcc_assert (! BLOCK_ABSTRACT (stmt));
19491
19492   decl = block_ultimate_origin (stmt);
19493
19494   /* Emit info for the abstract instance first, if we haven't yet.  We
19495      must emit this even if the block is abstract, otherwise when we
19496      emit the block below (or elsewhere), we may end up trying to emit
19497      a die whose origin die hasn't been emitted, and crashing.  */
19498   dwarf2out_abstract_function (decl);
19499
19500   if (! BLOCK_ABSTRACT (stmt))
19501     {
19502       dw_die_ref subr_die
19503         = new_die (DW_TAG_inlined_subroutine, context_die, stmt);
19504
19505       if (call_arg_locations)
19506         {
19507           if (block_map.length () <= BLOCK_NUMBER (stmt))
19508             block_map.safe_grow_cleared (BLOCK_NUMBER (stmt) + 1);
19509           block_map[BLOCK_NUMBER (stmt)] = subr_die;
19510         }
19511       add_abstract_origin_attribute (subr_die, decl);
19512       if (TREE_ASM_WRITTEN (stmt))
19513         add_high_low_attributes (stmt, subr_die);
19514       add_call_src_coords_attributes (stmt, subr_die);
19515
19516       decls_for_scope (stmt, subr_die);
19517     }
19518 }
19519
19520 /* Generate a DIE for a field in a record, or structure.  */
19521
19522 static void
19523 gen_field_die (tree decl, dw_die_ref context_die)
19524 {
19525   dw_die_ref decl_die;
19526
19527   if (TREE_TYPE (decl) == error_mark_node)
19528     return;
19529
19530   decl_die = new_die (DW_TAG_member, context_die, decl);
19531   add_name_and_src_coords_attributes (decl_die, decl);
19532   add_type_attribute (decl_die, member_declared_type (decl),
19533                       decl_quals (decl), context_die);
19534
19535   if (DECL_BIT_FIELD_TYPE (decl))
19536     {
19537       add_byte_size_attribute (decl_die, decl);
19538       add_bit_size_attribute (decl_die, decl);
19539       add_bit_offset_attribute (decl_die, decl);
19540     }
19541
19542   if (TREE_CODE (DECL_FIELD_CONTEXT (decl)) != UNION_TYPE)
19543     add_data_member_location_attribute (decl_die, decl);
19544
19545   if (DECL_ARTIFICIAL (decl))
19546     add_AT_flag (decl_die, DW_AT_artificial, 1);
19547
19548   add_accessibility_attribute (decl_die, decl);
19549
19550   /* Equate decl number to die, so that we can look up this decl later on.  */
19551   equate_decl_number_to_die (decl, decl_die);
19552 }
19553
19554 #if 0
19555 /* Don't generate either pointer_type DIEs or reference_type DIEs here.
19556    Use modified_type_die instead.
19557    We keep this code here just in case these types of DIEs may be needed to
19558    represent certain things in other languages (e.g. Pascal) someday.  */
19559
19560 static void
19561 gen_pointer_type_die (tree type, dw_die_ref context_die)
19562 {
19563   dw_die_ref ptr_die
19564     = new_die (DW_TAG_pointer_type, scope_die_for (type, context_die), type);
19565
19566   equate_type_number_to_die (type, ptr_die);
19567   add_type_attribute (ptr_die, TREE_TYPE (type), TYPE_UNQUALIFIED,
19568                       context_die);
19569   add_AT_unsigned (mod_type_die, DW_AT_byte_size, PTR_SIZE);
19570 }
19571
19572 /* Don't generate either pointer_type DIEs or reference_type DIEs here.
19573    Use modified_type_die instead.
19574    We keep this code here just in case these types of DIEs may be needed to
19575    represent certain things in other languages (e.g. Pascal) someday.  */
19576
19577 static void
19578 gen_reference_type_die (tree type, dw_die_ref context_die)
19579 {
19580   dw_die_ref ref_die, scope_die = scope_die_for (type, context_die);
19581
19582   if (TYPE_REF_IS_RVALUE (type) && dwarf_version >= 4)
19583     ref_die = new_die (DW_TAG_rvalue_reference_type, scope_die, type);
19584   else
19585     ref_die = new_die (DW_TAG_reference_type, scope_die, type);
19586
19587   equate_type_number_to_die (type, ref_die);
19588   add_type_attribute (ref_die, TREE_TYPE (type), TYPE_UNQUALIFIED,
19589                       context_die);
19590   add_AT_unsigned (mod_type_die, DW_AT_byte_size, PTR_SIZE);
19591 }
19592 #endif
19593
19594 /* Generate a DIE for a pointer to a member type.  */
19595
19596 static void
19597 gen_ptr_to_mbr_type_die (tree type, dw_die_ref context_die)
19598 {
19599   dw_die_ref ptr_die
19600     = new_die (DW_TAG_ptr_to_member_type,
19601                scope_die_for (type, context_die), type);
19602
19603   equate_type_number_to_die (type, ptr_die);
19604   add_AT_die_ref (ptr_die, DW_AT_containing_type,
19605                   lookup_type_die (TYPE_OFFSET_BASETYPE (type)));
19606   add_type_attribute (ptr_die, TREE_TYPE (type), TYPE_UNQUALIFIED,
19607                       context_die);
19608 }
19609
19610 typedef const char *dchar_p; /* For DEF_VEC_P.  */
19611
19612 static char *producer_string;
19613
19614 /* Return a heap allocated producer string including command line options
19615    if -grecord-gcc-switches.  */
19616
19617 static char *
19618 gen_producer_string (void)
19619 {
19620   size_t j;
19621   auto_vec<dchar_p> switches;
19622   const char *language_string = lang_hooks.name;
19623   char *producer, *tail;
19624   const char *p;
19625   size_t len = dwarf_record_gcc_switches ? 0 : 3;
19626   size_t plen = strlen (language_string) + 1 + strlen (version_string);
19627
19628   for (j = 1; dwarf_record_gcc_switches && j < save_decoded_options_count; j++)
19629     switch (save_decoded_options[j].opt_index)
19630       {
19631       case OPT_o:
19632       case OPT_d:
19633       case OPT_dumpbase:
19634       case OPT_dumpdir:
19635       case OPT_auxbase:
19636       case OPT_auxbase_strip:
19637       case OPT_quiet:
19638       case OPT_version:
19639       case OPT_v:
19640       case OPT_w:
19641       case OPT_L:
19642       case OPT_D:
19643       case OPT_I:
19644       case OPT_U:
19645       case OPT_SPECIAL_unknown:
19646       case OPT_SPECIAL_ignore:
19647       case OPT_SPECIAL_program_name:
19648       case OPT_SPECIAL_input_file:
19649       case OPT_grecord_gcc_switches:
19650       case OPT_gno_record_gcc_switches:
19651       case OPT__output_pch_:
19652       case OPT_fdiagnostics_show_location_:
19653       case OPT_fdiagnostics_show_option:
19654       case OPT_fdiagnostics_show_caret:
19655       case OPT_fdiagnostics_color_:
19656       case OPT_fverbose_asm:
19657       case OPT____:
19658       case OPT__sysroot_:
19659       case OPT_nostdinc:
19660       case OPT_nostdinc__:
19661       case OPT_fpreprocessed:
19662       case OPT_fltrans_output_list_:
19663       case OPT_fresolution_:
19664         /* Ignore these.  */
19665         continue;
19666       default:
19667         if (cl_options[save_decoded_options[j].opt_index].flags
19668             & CL_NO_DWARF_RECORD)
19669           continue;
19670         gcc_checking_assert (save_decoded_options[j].canonical_option[0][0]
19671                              == '-');
19672         switch (save_decoded_options[j].canonical_option[0][1])
19673           {
19674           case 'M':
19675           case 'i':
19676           case 'W':
19677             continue;
19678           case 'f':
19679             if (strncmp (save_decoded_options[j].canonical_option[0] + 2,
19680                          "dump", 4) == 0)
19681               continue;
19682             break;
19683           default:
19684             break;
19685           }
19686         switches.safe_push (save_decoded_options[j].orig_option_with_args_text);
19687         len += strlen (save_decoded_options[j].orig_option_with_args_text) + 1;
19688         break;
19689       }
19690
19691   producer = XNEWVEC (char, plen + 1 + len + 1);
19692   tail = producer;
19693   sprintf (tail, "%s %s", language_string, version_string);
19694   tail += plen;
19695
19696   FOR_EACH_VEC_ELT (switches, j, p)
19697     {
19698       len = strlen (p);
19699       *tail = ' ';
19700       memcpy (tail + 1, p, len);
19701       tail += len + 1;
19702     }
19703
19704   *tail = '\0';
19705   return producer;
19706 }
19707
19708 /* Given a C and/or C++ language/version string return the "highest".
19709    C++ is assumed to be "higher" than C in this case.  Used for merging
19710    LTO translation unit languages.  */
19711 static const char *
19712 highest_c_language (const char *lang1, const char *lang2)
19713 {
19714   if (strcmp ("GNU C++14", lang1) == 0 || strcmp ("GNU C++14", lang2) == 0)
19715     return "GNU C++14";
19716   if (strcmp ("GNU C++11", lang1) == 0 || strcmp ("GNU C++11", lang2) == 0)
19717     return "GNU C++11";
19718   if (strcmp ("GNU C++98", lang1) == 0 || strcmp ("GNU C++98", lang2) == 0)
19719     return "GNU C++98";
19720
19721   if (strcmp ("GNU C11", lang1) == 0 || strcmp ("GNU C11", lang2) == 0)
19722     return "GNU C11";
19723   if (strcmp ("GNU C99", lang1) == 0 || strcmp ("GNU C99", lang2) == 0)
19724     return "GNU C99";
19725   if (strcmp ("GNU C89", lang1) == 0 || strcmp ("GNU C89", lang2) == 0)
19726     return "GNU C89";
19727
19728   gcc_unreachable ();
19729 }
19730
19731
19732 /* Generate the DIE for the compilation unit.  */
19733
19734 static dw_die_ref
19735 gen_compile_unit_die (const char *filename)
19736 {
19737   dw_die_ref die;
19738   const char *language_string = lang_hooks.name;
19739   int language;
19740
19741   die = new_die (DW_TAG_compile_unit, NULL, NULL);
19742
19743   if (filename)
19744     {
19745       add_name_attribute (die, filename);
19746       /* Don't add cwd for <built-in>.  */
19747       if (!IS_ABSOLUTE_PATH (filename) && filename[0] != '<')
19748         add_comp_dir_attribute (die);
19749     }
19750
19751   add_AT_string (die, DW_AT_producer, producer_string ? producer_string : "");
19752
19753   /* If our producer is LTO try to figure out a common language to use
19754      from the global list of translation units.  */
19755   if (strcmp (language_string, "GNU GIMPLE") == 0)
19756     {
19757       unsigned i;
19758       tree t;
19759       const char *common_lang = NULL;
19760
19761       FOR_EACH_VEC_SAFE_ELT (all_translation_units, i, t)
19762         {
19763           if (!TRANSLATION_UNIT_LANGUAGE (t))
19764             continue;
19765           if (!common_lang)
19766             common_lang = TRANSLATION_UNIT_LANGUAGE (t);
19767           else if (strcmp (common_lang, TRANSLATION_UNIT_LANGUAGE (t)) == 0)
19768             ;
19769           else if (strncmp (common_lang, "GNU C", 5) == 0
19770                     && strncmp (TRANSLATION_UNIT_LANGUAGE (t), "GNU C", 5) == 0)
19771             /* Mixing C and C++ is ok, use C++ in that case.  */
19772             common_lang = highest_c_language (common_lang,
19773                                               TRANSLATION_UNIT_LANGUAGE (t));
19774           else
19775             {
19776               /* Fall back to C.  */
19777               common_lang = NULL;
19778               break;
19779             }
19780         }
19781
19782       if (common_lang)
19783         language_string = common_lang;
19784     }
19785
19786   language = DW_LANG_C;
19787   if (strncmp (language_string, "GNU C", 5) == 0
19788       && ISDIGIT (language_string[5]))
19789     {
19790       language = DW_LANG_C89;
19791       if (dwarf_version >= 3 || !dwarf_strict)
19792         {
19793           if (strcmp (language_string, "GNU C89") != 0)
19794             language = DW_LANG_C99;
19795
19796           if (dwarf_version >= 5 /* || !dwarf_strict */)
19797             if (strcmp (language_string, "GNU C11") == 0)
19798               language = DW_LANG_C11;
19799         }
19800     }
19801   else if (strncmp (language_string, "GNU C++", 7) == 0)
19802     {
19803       language = DW_LANG_C_plus_plus;
19804       if (dwarf_version >= 5 /* || !dwarf_strict */)
19805         {
19806           if (strcmp (language_string, "GNU C++11") == 0)
19807             language = DW_LANG_C_plus_plus_11;
19808           else if (strcmp (language_string, "GNU C++14") == 0)
19809             language = DW_LANG_C_plus_plus_14;
19810         }
19811     }
19812   else if (strcmp (language_string, "GNU F77") == 0)
19813     language = DW_LANG_Fortran77;
19814   else if (strcmp (language_string, "GNU Pascal") == 0)
19815     language = DW_LANG_Pascal83;
19816   else if (dwarf_version >= 3 || !dwarf_strict)
19817     {
19818       if (strcmp (language_string, "GNU Ada") == 0)
19819         language = DW_LANG_Ada95;
19820       else if (strncmp (language_string, "GNU Fortran", 11) == 0)
19821         {
19822           language = DW_LANG_Fortran95;
19823           if (dwarf_version >= 5 /* || !dwarf_strict */)
19824             {
19825               if (strcmp (language_string, "GNU Fortran2003") == 0)
19826                 language = DW_LANG_Fortran03;
19827               else if (strcmp (language_string, "GNU Fortran2008") == 0)
19828                 language = DW_LANG_Fortran08;
19829             }
19830         }
19831       else if (strcmp (language_string, "GNU Java") == 0)
19832         language = DW_LANG_Java;
19833       else if (strcmp (language_string, "GNU Objective-C") == 0)
19834         language = DW_LANG_ObjC;
19835       else if (strcmp (language_string, "GNU Objective-C++") == 0)
19836         language = DW_LANG_ObjC_plus_plus;
19837       else if (dwarf_version >= 5 || !dwarf_strict)
19838         {
19839           if (strcmp (language_string, "GNU Go") == 0)
19840             language = DW_LANG_Go;
19841         }
19842     }
19843   /* Use a degraded Fortran setting in strict DWARF2 so is_fortran works.  */
19844   else if (strncmp (language_string, "GNU Fortran", 11) == 0)
19845     language = DW_LANG_Fortran90;
19846
19847   add_AT_unsigned (die, DW_AT_language, language);
19848
19849   switch (language)
19850     {
19851     case DW_LANG_Fortran77:
19852     case DW_LANG_Fortran90:
19853     case DW_LANG_Fortran95:
19854     case DW_LANG_Fortran03:
19855     case DW_LANG_Fortran08:
19856       /* Fortran has case insensitive identifiers and the front-end
19857          lowercases everything.  */
19858       add_AT_unsigned (die, DW_AT_identifier_case, DW_ID_down_case);
19859       break;
19860     default:
19861       /* The default DW_ID_case_sensitive doesn't need to be specified.  */
19862       break;
19863     }
19864   return die;
19865 }
19866
19867 /* Generate the DIE for a base class.  */
19868
19869 static void
19870 gen_inheritance_die (tree binfo, tree access, dw_die_ref context_die)
19871 {
19872   dw_die_ref die = new_die (DW_TAG_inheritance, context_die, binfo);
19873
19874   add_type_attribute (die, BINFO_TYPE (binfo), TYPE_UNQUALIFIED, context_die);
19875   add_data_member_location_attribute (die, binfo);
19876
19877   if (BINFO_VIRTUAL_P (binfo))
19878     add_AT_unsigned (die, DW_AT_virtuality, DW_VIRTUALITY_virtual);
19879
19880   /* In DWARF3+ the default is DW_ACCESS_private only in DW_TAG_class_type
19881      children, otherwise the default is DW_ACCESS_public.  In DWARF2
19882      the default has always been DW_ACCESS_private.  */
19883   if (access == access_public_node)
19884     {
19885       if (dwarf_version == 2
19886           || context_die->die_tag == DW_TAG_class_type)
19887       add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_public);
19888     }
19889   else if (access == access_protected_node)
19890     add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_protected);
19891   else if (dwarf_version > 2
19892            && context_die->die_tag != DW_TAG_class_type)
19893     add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_private);
19894 }
19895
19896 /* Generate a DIE for a class member.  */
19897
19898 static void
19899 gen_member_die (tree type, dw_die_ref context_die)
19900 {
19901   tree member;
19902   tree binfo = TYPE_BINFO (type);
19903   dw_die_ref child;
19904
19905   /* If this is not an incomplete type, output descriptions of each of its
19906      members. Note that as we output the DIEs necessary to represent the
19907      members of this record or union type, we will also be trying to output
19908      DIEs to represent the *types* of those members. However the `type'
19909      function (above) will specifically avoid generating type DIEs for member
19910      types *within* the list of member DIEs for this (containing) type except
19911      for those types (of members) which are explicitly marked as also being
19912      members of this (containing) type themselves.  The g++ front- end can
19913      force any given type to be treated as a member of some other (containing)
19914      type by setting the TYPE_CONTEXT of the given (member) type to point to
19915      the TREE node representing the appropriate (containing) type.  */
19916
19917   /* First output info about the base classes.  */
19918   if (binfo)
19919     {
19920       vec<tree, va_gc> *accesses = BINFO_BASE_ACCESSES (binfo);
19921       int i;
19922       tree base;
19923
19924       for (i = 0; BINFO_BASE_ITERATE (binfo, i, base); i++)
19925         gen_inheritance_die (base,
19926                              (accesses ? (*accesses)[i] : access_public_node),
19927                              context_die);
19928     }
19929
19930   /* Now output info about the data members and type members.  */
19931   for (member = TYPE_FIELDS (type); member; member = DECL_CHAIN (member))
19932     {
19933       /* If we thought we were generating minimal debug info for TYPE
19934          and then changed our minds, some of the member declarations
19935          may have already been defined.  Don't define them again, but
19936          do put them in the right order.  */
19937
19938       child = lookup_decl_die (member);
19939       if (child)
19940         splice_child_die (context_die, child);
19941       else
19942         gen_decl_die (member, NULL, context_die);
19943     }
19944
19945   /* Now output info about the function members (if any).  */
19946   for (member = TYPE_METHODS (type); member; member = DECL_CHAIN (member))
19947     {
19948       /* Don't include clones in the member list.  */
19949       if (DECL_ABSTRACT_ORIGIN (member))
19950         continue;
19951
19952       child = lookup_decl_die (member);
19953       if (child)
19954         splice_child_die (context_die, child);
19955       else
19956         gen_decl_die (member, NULL, context_die);
19957     }
19958 }
19959
19960 /* Generate a DIE for a structure or union type.  If TYPE_DECL_SUPPRESS_DEBUG
19961    is set, we pretend that the type was never defined, so we only get the
19962    member DIEs needed by later specification DIEs.  */
19963
19964 static void
19965 gen_struct_or_union_type_die (tree type, dw_die_ref context_die,
19966                                 enum debug_info_usage usage)
19967 {
19968   dw_die_ref type_die = lookup_type_die (type);
19969   dw_die_ref scope_die = 0;
19970   int nested = 0;
19971   int complete = (TYPE_SIZE (type)
19972                   && (! TYPE_STUB_DECL (type)
19973                       || ! TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type))));
19974   int ns_decl = (context_die && context_die->die_tag == DW_TAG_namespace);
19975   complete = complete && should_emit_struct_debug (type, usage);
19976
19977   if (type_die && ! complete)
19978     return;
19979
19980   if (TYPE_CONTEXT (type) != NULL_TREE
19981       && (AGGREGATE_TYPE_P (TYPE_CONTEXT (type))
19982           || TREE_CODE (TYPE_CONTEXT (type)) == NAMESPACE_DECL))
19983     nested = 1;
19984
19985   scope_die = scope_die_for (type, context_die);
19986
19987   /* Generate child dies for template paramaters.  */
19988   if (!type_die && debug_info_level > DINFO_LEVEL_TERSE)
19989     schedule_generic_params_dies_gen (type);
19990
19991   if (! type_die || (nested && is_cu_die (scope_die)))
19992     /* First occurrence of type or toplevel definition of nested class.  */
19993     {
19994       dw_die_ref old_die = type_die;
19995
19996       type_die = new_die (TREE_CODE (type) == RECORD_TYPE
19997                           ? record_type_tag (type) : DW_TAG_union_type,
19998                           scope_die, type);
19999       equate_type_number_to_die (type, type_die);
20000       if (old_die)
20001         add_AT_specification (type_die, old_die);
20002       else
20003         add_name_attribute (type_die, type_tag (type));
20004     }
20005   else
20006     remove_AT (type_die, DW_AT_declaration);
20007
20008   /* If this type has been completed, then give it a byte_size attribute and
20009      then give a list of members.  */
20010   if (complete && !ns_decl)
20011     {
20012       /* Prevent infinite recursion in cases where the type of some member of
20013          this type is expressed in terms of this type itself.  */
20014       TREE_ASM_WRITTEN (type) = 1;
20015       add_byte_size_attribute (type_die, type);
20016       if (TYPE_STUB_DECL (type) != NULL_TREE)
20017         {
20018           add_src_coords_attributes (type_die, TYPE_STUB_DECL (type));
20019           add_accessibility_attribute (type_die, TYPE_STUB_DECL (type));
20020         }
20021
20022       /* If the first reference to this type was as the return type of an
20023          inline function, then it may not have a parent.  Fix this now.  */
20024       if (type_die->die_parent == NULL)
20025         add_child_die (scope_die, type_die);
20026
20027       push_decl_scope (type);
20028       gen_member_die (type, type_die);
20029       pop_decl_scope ();
20030
20031       add_gnat_descriptive_type_attribute (type_die, type, context_die);
20032       if (TYPE_ARTIFICIAL (type))
20033         add_AT_flag (type_die, DW_AT_artificial, 1);
20034
20035       /* GNU extension: Record what type our vtable lives in.  */
20036       if (TYPE_VFIELD (type))
20037         {
20038           tree vtype = DECL_FCONTEXT (TYPE_VFIELD (type));
20039
20040           gen_type_die (vtype, context_die);
20041           add_AT_die_ref (type_die, DW_AT_containing_type,
20042                           lookup_type_die (vtype));
20043         }
20044     }
20045   else
20046     {
20047       add_AT_flag (type_die, DW_AT_declaration, 1);
20048
20049       /* We don't need to do this for function-local types.  */
20050       if (TYPE_STUB_DECL (type)
20051           && ! decl_function_context (TYPE_STUB_DECL (type)))
20052         vec_safe_push (incomplete_types, type);
20053     }
20054
20055   if (get_AT (type_die, DW_AT_name))
20056     add_pubtype (type, type_die);
20057 }
20058
20059 /* Generate a DIE for a subroutine _type_.  */
20060
20061 static void
20062 gen_subroutine_type_die (tree type, dw_die_ref context_die)
20063 {
20064   tree return_type = TREE_TYPE (type);
20065   dw_die_ref subr_die
20066     = new_die (DW_TAG_subroutine_type,
20067                scope_die_for (type, context_die), type);
20068
20069   equate_type_number_to_die (type, subr_die);
20070   add_prototyped_attribute (subr_die, type);
20071   add_type_attribute (subr_die, return_type, TYPE_UNQUALIFIED, context_die);
20072   gen_formal_types_die (type, subr_die);
20073
20074   if (get_AT (subr_die, DW_AT_name))
20075     add_pubtype (type, subr_die);
20076 }
20077
20078 /* Generate a DIE for a type definition.  */
20079
20080 static void
20081 gen_typedef_die (tree decl, dw_die_ref context_die)
20082 {
20083   dw_die_ref type_die;
20084   tree origin;
20085
20086   if (TREE_ASM_WRITTEN (decl))
20087     return;
20088
20089   TREE_ASM_WRITTEN (decl) = 1;
20090   type_die = new_die (DW_TAG_typedef, context_die, decl);
20091   origin = decl_ultimate_origin (decl);
20092   if (origin != NULL)
20093     add_abstract_origin_attribute (type_die, origin);
20094   else
20095     {
20096       tree type;
20097
20098       add_name_and_src_coords_attributes (type_die, decl);
20099       if (DECL_ORIGINAL_TYPE (decl))
20100         {
20101           type = DECL_ORIGINAL_TYPE (decl);
20102
20103           gcc_assert (type != TREE_TYPE (decl));
20104           equate_type_number_to_die (TREE_TYPE (decl), type_die);
20105         }
20106       else
20107         {
20108           type = TREE_TYPE (decl);
20109
20110           if (is_naming_typedef_decl (TYPE_NAME (type)))
20111             {
20112               /* Here, we are in the case of decl being a typedef naming
20113                  an anonymous type, e.g:
20114                      typedef struct {...} foo;
20115                  In that case TREE_TYPE (decl) is not a typedef variant
20116                  type and TYPE_NAME of the anonymous type is set to the
20117                  TYPE_DECL of the typedef. This construct is emitted by
20118                  the C++ FE.
20119
20120                  TYPE is the anonymous struct named by the typedef
20121                  DECL. As we need the DW_AT_type attribute of the
20122                  DW_TAG_typedef to point to the DIE of TYPE, let's
20123                  generate that DIE right away. add_type_attribute
20124                  called below will then pick (via lookup_type_die) that
20125                  anonymous struct DIE.  */
20126               if (!TREE_ASM_WRITTEN (type))
20127                 gen_tagged_type_die (type, context_die, DINFO_USAGE_DIR_USE);
20128
20129               /* This is a GNU Extension.  We are adding a
20130                  DW_AT_linkage_name attribute to the DIE of the
20131                  anonymous struct TYPE.  The value of that attribute
20132                  is the name of the typedef decl naming the anonymous
20133                  struct.  This greatly eases the work of consumers of
20134                  this debug info.  */
20135               add_linkage_attr (lookup_type_die (type), decl);
20136             }
20137         }
20138
20139       add_type_attribute (type_die, type, decl_quals (decl), context_die);
20140
20141       if (is_naming_typedef_decl (decl))
20142         /* We want that all subsequent calls to lookup_type_die with
20143            TYPE in argument yield the DW_TAG_typedef we have just
20144            created.  */
20145         equate_type_number_to_die (type, type_die);
20146
20147       add_accessibility_attribute (type_die, decl);
20148     }
20149
20150   if (DECL_ABSTRACT_P (decl))
20151     equate_decl_number_to_die (decl, type_die);
20152
20153   if (get_AT (type_die, DW_AT_name))
20154     add_pubtype (decl, type_die);
20155 }
20156
20157 /* Generate a DIE for a struct, class, enum or union type.  */
20158
20159 static void
20160 gen_tagged_type_die (tree type,
20161                      dw_die_ref context_die,
20162                      enum debug_info_usage usage)
20163 {
20164   int need_pop;
20165
20166   if (type == NULL_TREE
20167       || !is_tagged_type (type))
20168     return;
20169
20170   /* If this is a nested type whose containing class hasn't been written
20171      out yet, writing it out will cover this one, too.  This does not apply
20172      to instantiations of member class templates; they need to be added to
20173      the containing class as they are generated.  FIXME: This hurts the
20174      idea of combining type decls from multiple TUs, since we can't predict
20175      what set of template instantiations we'll get.  */
20176   if (TYPE_CONTEXT (type)
20177       && AGGREGATE_TYPE_P (TYPE_CONTEXT (type))
20178       && ! TREE_ASM_WRITTEN (TYPE_CONTEXT (type)))
20179     {
20180       gen_type_die_with_usage (TYPE_CONTEXT (type), context_die, usage);
20181
20182       if (TREE_ASM_WRITTEN (type))
20183         return;
20184
20185       /* If that failed, attach ourselves to the stub.  */
20186       push_decl_scope (TYPE_CONTEXT (type));
20187       context_die = lookup_type_die (TYPE_CONTEXT (type));
20188       need_pop = 1;
20189     }
20190   else if (TYPE_CONTEXT (type) != NULL_TREE
20191            && (TREE_CODE (TYPE_CONTEXT (type)) == FUNCTION_DECL))
20192     {
20193       /* If this type is local to a function that hasn't been written
20194          out yet, use a NULL context for now; it will be fixed up in
20195          decls_for_scope.  */
20196       context_die = lookup_decl_die (TYPE_CONTEXT (type));
20197       /* A declaration DIE doesn't count; nested types need to go in the
20198          specification.  */
20199       if (context_die && is_declaration_die (context_die))
20200         context_die = NULL;
20201       need_pop = 0;
20202     }
20203   else
20204     {
20205       context_die = declare_in_namespace (type, context_die);
20206       need_pop = 0;
20207     }
20208
20209   if (TREE_CODE (type) == ENUMERAL_TYPE)
20210     {
20211       /* This might have been written out by the call to
20212          declare_in_namespace.  */
20213       if (!TREE_ASM_WRITTEN (type))
20214         gen_enumeration_type_die (type, context_die);
20215     }
20216   else
20217     gen_struct_or_union_type_die (type, context_die, usage);
20218
20219   if (need_pop)
20220     pop_decl_scope ();
20221
20222   /* Don't set TREE_ASM_WRITTEN on an incomplete struct; we want to fix
20223      it up if it is ever completed.  gen_*_type_die will set it for us
20224      when appropriate.  */
20225 }
20226
20227 /* Generate a type description DIE.  */
20228
20229 static void
20230 gen_type_die_with_usage (tree type, dw_die_ref context_die,
20231                          enum debug_info_usage usage)
20232 {
20233   struct array_descr_info info;
20234
20235   if (type == NULL_TREE || type == error_mark_node)
20236     return;
20237
20238   if (TYPE_NAME (type) != NULL_TREE
20239       && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
20240       && is_redundant_typedef (TYPE_NAME (type))
20241       && DECL_ORIGINAL_TYPE (TYPE_NAME (type)))
20242     /* The DECL of this type is a typedef we don't want to emit debug
20243        info for but we want debug info for its underlying typedef.
20244        This can happen for e.g, the injected-class-name of a C++
20245        type.  */
20246     type = DECL_ORIGINAL_TYPE (TYPE_NAME (type));
20247
20248   /* If TYPE is a typedef type variant, let's generate debug info
20249      for the parent typedef which TYPE is a type of.  */
20250   if (typedef_variant_p (type))
20251     {
20252       if (TREE_ASM_WRITTEN (type))
20253         return;
20254
20255       /* Prevent broken recursion; we can't hand off to the same type.  */
20256       gcc_assert (DECL_ORIGINAL_TYPE (TYPE_NAME (type)) != type);
20257
20258       /* Give typedefs the right scope.  */
20259       context_die = scope_die_for (type, context_die);
20260
20261       TREE_ASM_WRITTEN (type) = 1;
20262
20263       gen_decl_die (TYPE_NAME (type), NULL, context_die);
20264       return;
20265     }
20266
20267   /* If type is an anonymous tagged type named by a typedef, let's
20268      generate debug info for the typedef.  */
20269   if (is_naming_typedef_decl (TYPE_NAME (type)))
20270     {
20271       /* Use the DIE of the containing namespace as the parent DIE of
20272          the type description DIE we want to generate.  */
20273       if (DECL_CONTEXT (TYPE_NAME (type))
20274           && TREE_CODE (DECL_CONTEXT (TYPE_NAME (type))) == NAMESPACE_DECL)
20275         context_die = get_context_die (DECL_CONTEXT (TYPE_NAME (type)));
20276       
20277       gen_decl_die (TYPE_NAME (type), NULL, context_die);
20278       return;
20279     }
20280
20281   /* We are going to output a DIE to represent the unqualified version
20282      of this type (i.e. without any const or volatile qualifiers) so
20283      get the main variant (i.e. the unqualified version) of this type
20284      now.  (Vectors are special because the debugging info is in the
20285      cloned type itself).  */
20286   if (TREE_CODE (type) != VECTOR_TYPE)
20287     type = type_main_variant (type);
20288
20289   /* If this is an array type with hidden descriptor, handle it first.  */
20290   if (!TREE_ASM_WRITTEN (type)
20291       && lang_hooks.types.get_array_descr_info)
20292     {
20293       memset (&info, 0, sizeof (info));
20294       if (lang_hooks.types.get_array_descr_info (type, &info))
20295         {
20296           gen_descr_array_type_die (type, &info, context_die);
20297           TREE_ASM_WRITTEN (type) = 1;
20298           return;
20299         }
20300     }
20301
20302   if (TREE_ASM_WRITTEN (type))
20303     return;
20304
20305   switch (TREE_CODE (type))
20306     {
20307     case ERROR_MARK:
20308       break;
20309
20310     case POINTER_TYPE:
20311     case REFERENCE_TYPE:
20312       /* We must set TREE_ASM_WRITTEN in case this is a recursive type.  This
20313          ensures that the gen_type_die recursion will terminate even if the
20314          type is recursive.  Recursive types are possible in Ada.  */
20315       /* ??? We could perhaps do this for all types before the switch
20316          statement.  */
20317       TREE_ASM_WRITTEN (type) = 1;
20318
20319       /* For these types, all that is required is that we output a DIE (or a
20320          set of DIEs) to represent the "basis" type.  */
20321       gen_type_die_with_usage (TREE_TYPE (type), context_die,
20322                                 DINFO_USAGE_IND_USE);
20323       break;
20324
20325     case OFFSET_TYPE:
20326       /* This code is used for C++ pointer-to-data-member types.
20327          Output a description of the relevant class type.  */
20328       gen_type_die_with_usage (TYPE_OFFSET_BASETYPE (type), context_die,
20329                                         DINFO_USAGE_IND_USE);
20330
20331       /* Output a description of the type of the object pointed to.  */
20332       gen_type_die_with_usage (TREE_TYPE (type), context_die,
20333                                         DINFO_USAGE_IND_USE);
20334
20335       /* Now output a DIE to represent this pointer-to-data-member type
20336          itself.  */
20337       gen_ptr_to_mbr_type_die (type, context_die);
20338       break;
20339
20340     case FUNCTION_TYPE:
20341       /* Force out return type (in case it wasn't forced out already).  */
20342       gen_type_die_with_usage (TREE_TYPE (type), context_die,
20343                                         DINFO_USAGE_DIR_USE);
20344       gen_subroutine_type_die (type, context_die);
20345       break;
20346
20347     case METHOD_TYPE:
20348       /* Force out return type (in case it wasn't forced out already).  */
20349       gen_type_die_with_usage (TREE_TYPE (type), context_die,
20350                                         DINFO_USAGE_DIR_USE);
20351       gen_subroutine_type_die (type, context_die);
20352       break;
20353
20354     case ARRAY_TYPE:
20355       gen_array_type_die (type, context_die);
20356       break;
20357
20358     case VECTOR_TYPE:
20359       gen_array_type_die (type, context_die);
20360       break;
20361
20362     case ENUMERAL_TYPE:
20363     case RECORD_TYPE:
20364     case UNION_TYPE:
20365     case QUAL_UNION_TYPE:
20366       gen_tagged_type_die (type, context_die, usage);
20367       return;
20368
20369     case VOID_TYPE:
20370     case INTEGER_TYPE:
20371     case REAL_TYPE:
20372     case FIXED_POINT_TYPE:
20373     case COMPLEX_TYPE:
20374     case BOOLEAN_TYPE:
20375     case POINTER_BOUNDS_TYPE:
20376       /* No DIEs needed for fundamental types.  */
20377       break;
20378
20379     case NULLPTR_TYPE:
20380     case LANG_TYPE:
20381       /* Just use DW_TAG_unspecified_type.  */
20382       {
20383         dw_die_ref type_die = lookup_type_die (type);
20384         if (type_die == NULL)
20385           {
20386             tree name = TYPE_IDENTIFIER (type);
20387             type_die = new_die (DW_TAG_unspecified_type, comp_unit_die (),
20388                                 type);
20389             add_name_attribute (type_die, IDENTIFIER_POINTER (name));
20390             equate_type_number_to_die (type, type_die);
20391           }
20392       }
20393       break;
20394
20395     default:
20396       if (is_cxx_auto (type))
20397         {
20398           tree name = TYPE_IDENTIFIER (type);
20399           dw_die_ref *die = (name == get_identifier ("auto")
20400                              ? &auto_die : &decltype_auto_die);
20401           if (!*die)
20402             {
20403               *die = new_die (DW_TAG_unspecified_type,
20404                               comp_unit_die (), NULL_TREE);
20405               add_name_attribute (*die, IDENTIFIER_POINTER (name));
20406             }
20407           equate_type_number_to_die (type, *die);
20408           break;
20409         }
20410       gcc_unreachable ();
20411     }
20412
20413   TREE_ASM_WRITTEN (type) = 1;
20414 }
20415
20416 static void
20417 gen_type_die (tree type, dw_die_ref context_die)
20418 {
20419   gen_type_die_with_usage (type, context_die, DINFO_USAGE_DIR_USE);
20420 }
20421
20422 /* Generate a DW_TAG_lexical_block DIE followed by DIEs to represent all of the
20423    things which are local to the given block.  */
20424
20425 static void
20426 gen_block_die (tree stmt, dw_die_ref context_die)
20427 {
20428   int must_output_die = 0;
20429   bool inlined_func;
20430
20431   /* Ignore blocks that are NULL.  */
20432   if (stmt == NULL_TREE)
20433     return;
20434
20435   inlined_func = inlined_function_outer_scope_p (stmt);
20436
20437   /* If the block is one fragment of a non-contiguous block, do not
20438      process the variables, since they will have been done by the
20439      origin block.  Do process subblocks.  */
20440   if (BLOCK_FRAGMENT_ORIGIN (stmt))
20441     {
20442       tree sub;
20443
20444       for (sub = BLOCK_SUBBLOCKS (stmt); sub; sub = BLOCK_CHAIN (sub))
20445         gen_block_die (sub, context_die);
20446
20447       return;
20448     }
20449
20450   /* Determine if we need to output any Dwarf DIEs at all to represent this
20451      block.  */
20452   if (inlined_func)
20453     /* The outer scopes for inlinings *must* always be represented.  We
20454        generate DW_TAG_inlined_subroutine DIEs for them.  (See below.) */
20455     must_output_die = 1;
20456   else
20457     {
20458       /* Determine if this block directly contains any "significant"
20459          local declarations which we will need to output DIEs for.  */
20460       if (debug_info_level > DINFO_LEVEL_TERSE)
20461         /* We are not in terse mode so *any* local declaration counts
20462            as being a "significant" one.  */
20463         must_output_die = ((BLOCK_VARS (stmt) != NULL
20464                             || BLOCK_NUM_NONLOCALIZED_VARS (stmt))
20465                            && (TREE_USED (stmt)
20466                                || TREE_ASM_WRITTEN (stmt)
20467                                || BLOCK_ABSTRACT (stmt)));
20468       else if ((TREE_USED (stmt)
20469                 || TREE_ASM_WRITTEN (stmt)
20470                 || BLOCK_ABSTRACT (stmt))
20471                && !dwarf2out_ignore_block (stmt))
20472         must_output_die = 1;
20473     }
20474
20475   /* It would be a waste of space to generate a Dwarf DW_TAG_lexical_block
20476      DIE for any block which contains no significant local declarations at
20477      all.  Rather, in such cases we just call `decls_for_scope' so that any
20478      needed Dwarf info for any sub-blocks will get properly generated. Note
20479      that in terse mode, our definition of what constitutes a "significant"
20480      local declaration gets restricted to include only inlined function
20481      instances and local (nested) function definitions.  */
20482   if (must_output_die)
20483     {
20484       if (inlined_func)
20485         {
20486           /* If STMT block is abstract, that means we have been called
20487              indirectly from dwarf2out_abstract_function.
20488              That function rightfully marks the descendent blocks (of
20489              the abstract function it is dealing with) as being abstract,
20490              precisely to prevent us from emitting any
20491              DW_TAG_inlined_subroutine DIE as a descendent
20492              of an abstract function instance. So in that case, we should
20493              not call gen_inlined_subroutine_die.
20494
20495              Later though, when cgraph asks dwarf2out to emit info
20496              for the concrete instance of the function decl into which
20497              the concrete instance of STMT got inlined, the later will lead
20498              to the generation of a DW_TAG_inlined_subroutine DIE.  */
20499           if (! BLOCK_ABSTRACT (stmt))
20500             gen_inlined_subroutine_die (stmt, context_die);
20501         }
20502       else
20503         gen_lexical_block_die (stmt, context_die);
20504     }
20505   else
20506     decls_for_scope (stmt, context_die);
20507 }
20508
20509 /* Process variable DECL (or variable with origin ORIGIN) within
20510    block STMT and add it to CONTEXT_DIE.  */
20511 static void
20512 process_scope_var (tree stmt, tree decl, tree origin, dw_die_ref context_die)
20513 {
20514   dw_die_ref die;
20515   tree decl_or_origin = decl ? decl : origin;
20516
20517   if (TREE_CODE (decl_or_origin) == FUNCTION_DECL)
20518     die = lookup_decl_die (decl_or_origin);
20519   else if (TREE_CODE (decl_or_origin) == TYPE_DECL
20520            && TYPE_DECL_IS_STUB (decl_or_origin))
20521     die = lookup_type_die (TREE_TYPE (decl_or_origin));
20522   else
20523     die = NULL;
20524
20525   if (die != NULL && die->die_parent == NULL)
20526     add_child_die (context_die, die);
20527   else if (TREE_CODE (decl_or_origin) == IMPORTED_DECL)
20528     dwarf2out_imported_module_or_decl_1 (decl_or_origin, DECL_NAME (decl_or_origin),
20529                                          stmt, context_die);
20530   else
20531     gen_decl_die (decl, origin, context_die);
20532 }
20533
20534 /* Generate all of the decls declared within a given scope and (recursively)
20535    all of its sub-blocks.  */
20536
20537 static void
20538 decls_for_scope (tree stmt, dw_die_ref context_die)
20539 {
20540   tree decl;
20541   unsigned int i;
20542   tree subblocks;
20543
20544   /* Ignore NULL blocks.  */
20545   if (stmt == NULL_TREE)
20546     return;
20547
20548   /* Output the DIEs to represent all of the data objects and typedefs
20549      declared directly within this block but not within any nested
20550      sub-blocks.  Also, nested function and tag DIEs have been
20551      generated with a parent of NULL; fix that up now.  We don't
20552      have to do this if we're at -g1.  */
20553   if (debug_info_level > DINFO_LEVEL_TERSE)
20554     {
20555       for (decl = BLOCK_VARS (stmt); decl != NULL; decl = DECL_CHAIN (decl))
20556         process_scope_var (stmt, decl, NULL_TREE, context_die);
20557       for (i = 0; i < BLOCK_NUM_NONLOCALIZED_VARS (stmt); i++)
20558         process_scope_var (stmt, NULL, BLOCK_NONLOCALIZED_VAR (stmt, i),
20559                            context_die);
20560     }
20561
20562   /* Even if we're at -g1, we need to process the subblocks in order to get
20563      inlined call information.  */
20564
20565   /* Output the DIEs to represent all sub-blocks (and the items declared
20566      therein) of this block.  */
20567   for (subblocks = BLOCK_SUBBLOCKS (stmt);
20568        subblocks != NULL;
20569        subblocks = BLOCK_CHAIN (subblocks))
20570     gen_block_die (subblocks, context_die);
20571 }
20572
20573 /* Is this a typedef we can avoid emitting?  */
20574
20575 static inline int
20576 is_redundant_typedef (const_tree decl)
20577 {
20578   if (TYPE_DECL_IS_STUB (decl))
20579     return 1;
20580
20581   if (DECL_ARTIFICIAL (decl)
20582       && DECL_CONTEXT (decl)
20583       && is_tagged_type (DECL_CONTEXT (decl))
20584       && TREE_CODE (TYPE_NAME (DECL_CONTEXT (decl))) == TYPE_DECL
20585       && DECL_NAME (decl) == DECL_NAME (TYPE_NAME (DECL_CONTEXT (decl))))
20586     /* Also ignore the artificial member typedef for the class name.  */
20587     return 1;
20588
20589   return 0;
20590 }
20591
20592 /* Return TRUE if TYPE is a typedef that names a type for linkage
20593    purposes. This kind of typedefs is produced by the C++ FE for
20594    constructs like:
20595
20596    typedef struct {...} foo;
20597
20598    In that case, there is no typedef variant type produced for foo.
20599    Rather, the TREE_TYPE of the TYPE_DECL of foo is the anonymous
20600    struct type.  */
20601
20602 static bool
20603 is_naming_typedef_decl (const_tree decl)
20604 {
20605   if (decl == NULL_TREE
20606       || TREE_CODE (decl) != TYPE_DECL
20607       || !is_tagged_type (TREE_TYPE (decl))
20608       || DECL_IS_BUILTIN (decl)
20609       || is_redundant_typedef (decl)
20610       /* It looks like Ada produces TYPE_DECLs that are very similar
20611          to C++ naming typedefs but that have different
20612          semantics. Let's be specific to c++ for now.  */
20613       || !is_cxx ())
20614     return FALSE;
20615
20616   return (DECL_ORIGINAL_TYPE (decl) == NULL_TREE
20617           && TYPE_NAME (TREE_TYPE (decl)) == decl
20618           && (TYPE_STUB_DECL (TREE_TYPE (decl))
20619               != TYPE_NAME (TREE_TYPE (decl))));
20620 }
20621
20622 /* Returns the DIE for a context.  */
20623
20624 static inline dw_die_ref
20625 get_context_die (tree context)
20626 {
20627   if (context)
20628     {
20629       /* Find die that represents this context.  */
20630       if (TYPE_P (context))
20631         {
20632           context = TYPE_MAIN_VARIANT (context);
20633           return strip_naming_typedef (context, force_type_die (context));
20634         }
20635       else
20636         return force_decl_die (context);
20637     }
20638   return comp_unit_die ();
20639 }
20640
20641 /* Returns the DIE for decl.  A DIE will always be returned.  */
20642
20643 static dw_die_ref
20644 force_decl_die (tree decl)
20645 {
20646   dw_die_ref decl_die;
20647   unsigned saved_external_flag;
20648   tree save_fn = NULL_TREE;
20649   decl_die = lookup_decl_die (decl);
20650   if (!decl_die)
20651     {
20652       dw_die_ref context_die = get_context_die (DECL_CONTEXT (decl));
20653
20654       decl_die = lookup_decl_die (decl);
20655       if (decl_die)
20656         return decl_die;
20657
20658       switch (TREE_CODE (decl))
20659         {
20660         case FUNCTION_DECL:
20661           /* Clear current_function_decl, so that gen_subprogram_die thinks
20662              that this is a declaration. At this point, we just want to force
20663              declaration die.  */
20664           save_fn = current_function_decl;
20665           current_function_decl = NULL_TREE;
20666           gen_subprogram_die (decl, context_die);
20667           current_function_decl = save_fn;
20668           break;
20669
20670         case VAR_DECL:
20671           /* Set external flag to force declaration die. Restore it after
20672            gen_decl_die() call.  */
20673           saved_external_flag = DECL_EXTERNAL (decl);
20674           DECL_EXTERNAL (decl) = 1;
20675           gen_decl_die (decl, NULL, context_die);
20676           DECL_EXTERNAL (decl) = saved_external_flag;
20677           break;
20678
20679         case NAMESPACE_DECL:
20680           if (dwarf_version >= 3 || !dwarf_strict)
20681             dwarf2out_decl (decl);
20682           else
20683             /* DWARF2 has neither DW_TAG_module, nor DW_TAG_namespace.  */
20684             decl_die = comp_unit_die ();
20685           break;
20686
20687         case TRANSLATION_UNIT_DECL:
20688           decl_die = comp_unit_die ();
20689           break;
20690
20691         default:
20692           gcc_unreachable ();
20693         }
20694
20695       /* We should be able to find the DIE now.  */
20696       if (!decl_die)
20697         decl_die = lookup_decl_die (decl);
20698       gcc_assert (decl_die);
20699     }
20700
20701   return decl_die;
20702 }
20703
20704 /* Returns the DIE for TYPE, that must not be a base type.  A DIE is
20705    always returned.  */
20706
20707 static dw_die_ref
20708 force_type_die (tree type)
20709 {
20710   dw_die_ref type_die;
20711
20712   type_die = lookup_type_die (type);
20713   if (!type_die)
20714     {
20715       dw_die_ref context_die = get_context_die (TYPE_CONTEXT (type));
20716
20717       type_die = modified_type_die (type, TYPE_QUALS_NO_ADDR_SPACE (type),
20718                                     context_die);
20719       gcc_assert (type_die);
20720     }
20721   return type_die;
20722 }
20723
20724 /* Force out any required namespaces to be able to output DECL,
20725    and return the new context_die for it, if it's changed.  */
20726
20727 static dw_die_ref
20728 setup_namespace_context (tree thing, dw_die_ref context_die)
20729 {
20730   tree context = (DECL_P (thing)
20731                   ? DECL_CONTEXT (thing) : TYPE_CONTEXT (thing));
20732   if (context && TREE_CODE (context) == NAMESPACE_DECL)
20733     /* Force out the namespace.  */
20734     context_die = force_decl_die (context);
20735
20736   return context_die;
20737 }
20738
20739 /* Emit a declaration DIE for THING (which is either a DECL or a tagged
20740    type) within its namespace, if appropriate.
20741
20742    For compatibility with older debuggers, namespace DIEs only contain
20743    declarations; all definitions are emitted at CU scope.  */
20744
20745 static dw_die_ref
20746 declare_in_namespace (tree thing, dw_die_ref context_die)
20747 {
20748   dw_die_ref ns_context;
20749
20750   if (debug_info_level <= DINFO_LEVEL_TERSE)
20751     return context_die;
20752
20753   /* External declarations in the local scope only need to be emitted
20754      once, not once in the namespace and once in the scope.
20755
20756      This avoids declaring the `extern' below in the
20757      namespace DIE as well as in the innermost scope:
20758
20759           namespace S
20760           {
20761             int i=5;
20762             int foo()
20763             {
20764               int i=8;
20765               extern int i;
20766               return i;
20767             }
20768           }
20769   */
20770   if (DECL_P (thing) && DECL_EXTERNAL (thing) && local_scope_p (context_die))
20771     return context_die;
20772
20773   /* If this decl is from an inlined function, then don't try to emit it in its
20774      namespace, as we will get confused.  It would have already been emitted
20775      when the abstract instance of the inline function was emitted anyways.  */
20776   if (DECL_P (thing) && DECL_ABSTRACT_ORIGIN (thing))
20777     return context_die;
20778
20779   ns_context = setup_namespace_context (thing, context_die);
20780
20781   if (ns_context != context_die)
20782     {
20783       if (is_fortran ())
20784         return ns_context;
20785       if (DECL_P (thing))
20786         gen_decl_die (thing, NULL, ns_context);
20787       else
20788         gen_type_die (thing, ns_context);
20789     }
20790   return context_die;
20791 }
20792
20793 /* Generate a DIE for a namespace or namespace alias.  */
20794
20795 static void
20796 gen_namespace_die (tree decl, dw_die_ref context_die)
20797 {
20798   dw_die_ref namespace_die;
20799
20800   /* Namespace aliases have a DECL_ABSTRACT_ORIGIN of the namespace
20801      they are an alias of.  */
20802   if (DECL_ABSTRACT_ORIGIN (decl) == NULL)
20803     {
20804       /* Output a real namespace or module.  */
20805       context_die = setup_namespace_context (decl, comp_unit_die ());
20806       namespace_die = new_die (is_fortran ()
20807                                ? DW_TAG_module : DW_TAG_namespace,
20808                                context_die, decl);
20809       /* For Fortran modules defined in different CU don't add src coords.  */
20810       if (namespace_die->die_tag == DW_TAG_module && DECL_EXTERNAL (decl))
20811         {
20812           const char *name = dwarf2_name (decl, 0);
20813           if (name)
20814             add_name_attribute (namespace_die, name);
20815         }
20816       else
20817         add_name_and_src_coords_attributes (namespace_die, decl);
20818       if (DECL_EXTERNAL (decl))
20819         add_AT_flag (namespace_die, DW_AT_declaration, 1);
20820       equate_decl_number_to_die (decl, namespace_die);
20821     }
20822   else
20823     {
20824       /* Output a namespace alias.  */
20825
20826       /* Force out the namespace we are an alias of, if necessary.  */
20827       dw_die_ref origin_die
20828         = force_decl_die (DECL_ABSTRACT_ORIGIN (decl));
20829
20830       if (DECL_FILE_SCOPE_P (decl)
20831           || TREE_CODE (DECL_CONTEXT (decl)) == NAMESPACE_DECL)
20832         context_die = setup_namespace_context (decl, comp_unit_die ());
20833       /* Now create the namespace alias DIE.  */
20834       namespace_die = new_die (DW_TAG_imported_declaration, context_die, decl);
20835       add_name_and_src_coords_attributes (namespace_die, decl);
20836       add_AT_die_ref (namespace_die, DW_AT_import, origin_die);
20837       equate_decl_number_to_die (decl, namespace_die);
20838     }
20839   /* Bypass dwarf2_name's check for DECL_NAMELESS.  */
20840   if (want_pubnames ())
20841     add_pubname_string (lang_hooks.dwarf_name (decl, 1), namespace_die);
20842 }
20843
20844 /* Generate Dwarf debug information for a decl described by DECL.
20845    The return value is currently only meaningful for PARM_DECLs,
20846    for all other decls it returns NULL.  */
20847
20848 static dw_die_ref
20849 gen_decl_die (tree decl, tree origin, dw_die_ref context_die)
20850 {
20851   tree decl_or_origin = decl ? decl : origin;
20852   tree class_origin = NULL, ultimate_origin;
20853
20854   if (DECL_P (decl_or_origin) && DECL_IGNORED_P (decl_or_origin))
20855     return NULL;
20856
20857   /* Ignore pointer bounds decls.  */
20858   if (DECL_P (decl_or_origin)
20859       && TREE_TYPE (decl_or_origin)
20860       && POINTER_BOUNDS_P (decl_or_origin))
20861     return NULL;
20862
20863   switch (TREE_CODE (decl_or_origin))
20864     {
20865     case ERROR_MARK:
20866       break;
20867
20868     case CONST_DECL:
20869       if (!is_fortran () && !is_ada ())
20870         {
20871           /* The individual enumerators of an enum type get output when we output
20872              the Dwarf representation of the relevant enum type itself.  */
20873           break;
20874         }
20875
20876       /* Emit its type.  */
20877       gen_type_die (TREE_TYPE (decl), context_die);
20878
20879       /* And its containing namespace.  */
20880       context_die = declare_in_namespace (decl, context_die);
20881
20882       gen_const_die (decl, context_die);
20883       break;
20884
20885     case FUNCTION_DECL:
20886       /* Don't output any DIEs to represent mere function declarations,
20887          unless they are class members or explicit block externs.  */
20888       if (DECL_INITIAL (decl_or_origin) == NULL_TREE
20889           && DECL_FILE_SCOPE_P (decl_or_origin)
20890           && (current_function_decl == NULL_TREE
20891               || DECL_ARTIFICIAL (decl_or_origin)))
20892         break;
20893
20894 #if 0
20895       /* FIXME */
20896       /* This doesn't work because the C frontend sets DECL_ABSTRACT_ORIGIN
20897          on local redeclarations of global functions.  That seems broken.  */
20898       if (current_function_decl != decl)
20899         /* This is only a declaration.  */;
20900 #endif
20901
20902       /* If we're emitting a clone, emit info for the abstract instance.  */
20903       if (origin || DECL_ORIGIN (decl) != decl)
20904         dwarf2out_abstract_function (origin
20905                                      ? DECL_ORIGIN (origin)
20906                                      : DECL_ABSTRACT_ORIGIN (decl));
20907
20908       /* If we're emitting an out-of-line copy of an inline function,
20909          emit info for the abstract instance and set up to refer to it.  */
20910       else if (cgraph_function_possibly_inlined_p (decl)
20911                && ! DECL_ABSTRACT_P (decl)
20912                && ! class_or_namespace_scope_p (context_die)
20913                /* dwarf2out_abstract_function won't emit a die if this is just
20914                   a declaration.  We must avoid setting DECL_ABSTRACT_ORIGIN in
20915                   that case, because that works only if we have a die.  */
20916                && DECL_INITIAL (decl) != NULL_TREE)
20917         {
20918           dwarf2out_abstract_function (decl);
20919           set_decl_origin_self (decl);
20920         }
20921
20922       /* Otherwise we're emitting the primary DIE for this decl.  */
20923       else if (debug_info_level > DINFO_LEVEL_TERSE)
20924         {
20925           /* Before we describe the FUNCTION_DECL itself, make sure that we
20926              have its containing type.  */
20927           if (!origin)
20928             origin = decl_class_context (decl);
20929           if (origin != NULL_TREE)
20930             gen_type_die (origin, context_die);
20931
20932           /* And its return type.  */
20933           gen_type_die (TREE_TYPE (TREE_TYPE (decl)), context_die);
20934
20935           /* And its virtual context.  */
20936           if (DECL_VINDEX (decl) != NULL_TREE)
20937             gen_type_die (DECL_CONTEXT (decl), context_die);
20938
20939           /* Make sure we have a member DIE for decl.  */
20940           if (origin != NULL_TREE)
20941             gen_type_die_for_member (origin, decl, context_die);
20942
20943           /* And its containing namespace.  */
20944           context_die = declare_in_namespace (decl, context_die);
20945         }
20946
20947       /* Now output a DIE to represent the function itself.  */
20948       if (decl)
20949         gen_subprogram_die (decl, context_die);
20950       break;
20951
20952     case TYPE_DECL:
20953       /* If we are in terse mode, don't generate any DIEs to represent any
20954          actual typedefs.  */
20955       if (debug_info_level <= DINFO_LEVEL_TERSE)
20956         break;
20957
20958       /* In the special case of a TYPE_DECL node representing the declaration
20959          of some type tag, if the given TYPE_DECL is marked as having been
20960          instantiated from some other (original) TYPE_DECL node (e.g. one which
20961          was generated within the original definition of an inline function) we
20962          used to generate a special (abbreviated) DW_TAG_structure_type,
20963          DW_TAG_union_type, or DW_TAG_enumeration_type DIE here.  But nothing
20964          should be actually referencing those DIEs, as variable DIEs with that
20965          type would be emitted already in the abstract origin, so it was always
20966          removed during unused type prunning.  Don't add anything in this
20967          case.  */
20968       if (TYPE_DECL_IS_STUB (decl) && decl_ultimate_origin (decl) != NULL_TREE)
20969         break;
20970
20971       if (is_redundant_typedef (decl))
20972         gen_type_die (TREE_TYPE (decl), context_die);
20973       else
20974         /* Output a DIE to represent the typedef itself.  */
20975         gen_typedef_die (decl, context_die);
20976       break;
20977
20978     case LABEL_DECL:
20979       if (debug_info_level >= DINFO_LEVEL_NORMAL)
20980         gen_label_die (decl, context_die);
20981       break;
20982
20983     case VAR_DECL:
20984     case RESULT_DECL:
20985       /* If we are in terse mode, don't generate any DIEs to represent any
20986          variable declarations or definitions.  */
20987       if (debug_info_level <= DINFO_LEVEL_TERSE)
20988         break;
20989
20990       /* Output any DIEs that are needed to specify the type of this data
20991          object.  */
20992       if (decl_by_reference_p (decl_or_origin))
20993         gen_type_die (TREE_TYPE (TREE_TYPE (decl_or_origin)), context_die);
20994       else
20995         gen_type_die (TREE_TYPE (decl_or_origin), context_die);
20996
20997       /* And its containing type.  */
20998       class_origin = decl_class_context (decl_or_origin);
20999       if (class_origin != NULL_TREE)
21000         gen_type_die_for_member (class_origin, decl_or_origin, context_die);
21001
21002       /* And its containing namespace.  */
21003       context_die = declare_in_namespace (decl_or_origin, context_die);
21004
21005       /* Now output the DIE to represent the data object itself.  This gets
21006          complicated because of the possibility that the VAR_DECL really
21007          represents an inlined instance of a formal parameter for an inline
21008          function.  */
21009       ultimate_origin = decl_ultimate_origin (decl_or_origin);
21010       if (ultimate_origin != NULL_TREE
21011           && TREE_CODE (ultimate_origin) == PARM_DECL)
21012         gen_formal_parameter_die (decl, origin,
21013                                   true /* Emit name attribute.  */,
21014                                   context_die);
21015       else
21016         gen_variable_die (decl, origin, context_die);
21017       break;
21018
21019     case FIELD_DECL:
21020       /* Ignore the nameless fields that are used to skip bits but handle C++
21021          anonymous unions and structs.  */
21022       if (DECL_NAME (decl) != NULL_TREE
21023           || TREE_CODE (TREE_TYPE (decl)) == UNION_TYPE
21024           || TREE_CODE (TREE_TYPE (decl)) == RECORD_TYPE)
21025         {
21026           gen_type_die (member_declared_type (decl), context_die);
21027           gen_field_die (decl, context_die);
21028         }
21029       break;
21030
21031     case PARM_DECL:
21032       if (DECL_BY_REFERENCE (decl_or_origin))
21033         gen_type_die (TREE_TYPE (TREE_TYPE (decl_or_origin)), context_die);
21034       else
21035         gen_type_die (TREE_TYPE (decl_or_origin), context_die);
21036       return gen_formal_parameter_die (decl, origin,
21037                                        true /* Emit name attribute.  */,
21038                                        context_die);
21039
21040     case NAMESPACE_DECL:
21041     case IMPORTED_DECL:
21042       if (dwarf_version >= 3 || !dwarf_strict)
21043         gen_namespace_die (decl, context_die);
21044       break;
21045
21046     case NAMELIST_DECL:
21047       gen_namelist_decl (DECL_NAME (decl), context_die,
21048                          NAMELIST_DECL_ASSOCIATED_DECL (decl));
21049       break;
21050
21051     default:
21052       /* Probably some frontend-internal decl.  Assume we don't care.  */
21053       gcc_assert ((int)TREE_CODE (decl) > NUM_TREE_CODES);
21054       break;
21055     }
21056
21057   return NULL;
21058 }
21059 \f
21060 /* Output debug information for global decl DECL.  Called from toplev.c after
21061    compilation proper has finished.  */
21062
21063 static void
21064 dwarf2out_global_decl (tree decl)
21065 {
21066   /* Output DWARF2 information for file-scope tentative data object
21067      declarations, file-scope (extern) function declarations (which
21068      had no corresponding body) and file-scope tagged type declarations
21069      and definitions which have not yet been forced out.  */
21070   if ((TREE_CODE (decl) != FUNCTION_DECL || !DECL_INITIAL (decl))
21071       && !POINTER_BOUNDS_P (decl))
21072     dwarf2out_decl (decl);
21073 }
21074
21075 /* Output debug information for type decl DECL.  Called from toplev.c
21076    and from language front ends (to record built-in types).  */
21077 static void
21078 dwarf2out_type_decl (tree decl, int local)
21079 {
21080   if (!local)
21081     dwarf2out_decl (decl);
21082 }
21083
21084 /* Output debug information for imported module or decl DECL.
21085    NAME is non-NULL name in the lexical block if the decl has been renamed.
21086    LEXICAL_BLOCK is the lexical block (which TREE_CODE is a BLOCK)
21087    that DECL belongs to.
21088    LEXICAL_BLOCK_DIE is the DIE of LEXICAL_BLOCK.  */
21089 static void
21090 dwarf2out_imported_module_or_decl_1 (tree decl,
21091                                      tree name,
21092                                      tree lexical_block,
21093                                      dw_die_ref lexical_block_die)
21094 {
21095   expanded_location xloc;
21096   dw_die_ref imported_die = NULL;
21097   dw_die_ref at_import_die;
21098
21099   if (TREE_CODE (decl) == IMPORTED_DECL)
21100     {
21101       xloc = expand_location (DECL_SOURCE_LOCATION (decl));
21102       decl = IMPORTED_DECL_ASSOCIATED_DECL (decl);
21103       gcc_assert (decl);
21104     }
21105   else
21106     xloc = expand_location (input_location);
21107
21108   if (TREE_CODE (decl) == TYPE_DECL || TREE_CODE (decl) == CONST_DECL)
21109     {
21110       at_import_die = force_type_die (TREE_TYPE (decl));
21111       /* For namespace N { typedef void T; } using N::T; base_type_die
21112          returns NULL, but DW_TAG_imported_declaration requires
21113          the DW_AT_import tag.  Force creation of DW_TAG_typedef.  */
21114       if (!at_import_die)
21115         {
21116           gcc_assert (TREE_CODE (decl) == TYPE_DECL);
21117           gen_typedef_die (decl, get_context_die (DECL_CONTEXT (decl)));
21118           at_import_die = lookup_type_die (TREE_TYPE (decl));
21119           gcc_assert (at_import_die);
21120         }
21121     }
21122   else
21123     {
21124       at_import_die = lookup_decl_die (decl);
21125       if (!at_import_die)
21126         {
21127           /* If we're trying to avoid duplicate debug info, we may not have
21128              emitted the member decl for this field.  Emit it now.  */
21129           if (TREE_CODE (decl) == FIELD_DECL)
21130             {
21131               tree type = DECL_CONTEXT (decl);
21132
21133               if (TYPE_CONTEXT (type)
21134                   && TYPE_P (TYPE_CONTEXT (type))
21135                   && !should_emit_struct_debug (TYPE_CONTEXT (type),
21136                                                 DINFO_USAGE_DIR_USE))
21137                 return;
21138               gen_type_die_for_member (type, decl,
21139                                        get_context_die (TYPE_CONTEXT (type)));
21140             }
21141           if (TREE_CODE (decl) == NAMELIST_DECL)
21142             at_import_die = gen_namelist_decl (DECL_NAME (decl),
21143                                          get_context_die (DECL_CONTEXT (decl)),
21144                                          NULL_TREE);
21145           else
21146             at_import_die = force_decl_die (decl);
21147         }
21148     }
21149
21150   if (TREE_CODE (decl) == NAMESPACE_DECL)
21151     {
21152       if (dwarf_version >= 3 || !dwarf_strict)
21153         imported_die = new_die (DW_TAG_imported_module,
21154                                 lexical_block_die,
21155                                 lexical_block);
21156       else
21157         return;
21158     }
21159   else
21160     imported_die = new_die (DW_TAG_imported_declaration,
21161                             lexical_block_die,
21162                             lexical_block);
21163
21164   add_AT_file (imported_die, DW_AT_decl_file, lookup_filename (xloc.file));
21165   add_AT_unsigned (imported_die, DW_AT_decl_line, xloc.line);
21166   if (name)
21167     add_AT_string (imported_die, DW_AT_name,
21168                    IDENTIFIER_POINTER (name));
21169   add_AT_die_ref (imported_die, DW_AT_import, at_import_die);
21170 }
21171
21172 /* Output debug information for imported module or decl DECL.
21173    NAME is non-NULL name in context if the decl has been renamed.
21174    CHILD is true if decl is one of the renamed decls as part of
21175    importing whole module.  */
21176
21177 static void
21178 dwarf2out_imported_module_or_decl (tree decl, tree name, tree context,
21179                                    bool child)
21180 {
21181   /* dw_die_ref at_import_die;  */
21182   dw_die_ref scope_die;
21183
21184   if (debug_info_level <= DINFO_LEVEL_TERSE)
21185     return;
21186
21187   gcc_assert (decl);
21188
21189   /* To emit DW_TAG_imported_module or DW_TAG_imported_decl, we need two DIEs.
21190      We need decl DIE for reference and scope die. First, get DIE for the decl
21191      itself.  */
21192
21193   /* Get the scope die for decl context. Use comp_unit_die for global module
21194      or decl. If die is not found for non globals, force new die.  */
21195   if (context
21196       && TYPE_P (context)
21197       && !should_emit_struct_debug (context, DINFO_USAGE_DIR_USE))
21198     return;
21199
21200   if (!(dwarf_version >= 3 || !dwarf_strict))
21201     return;
21202
21203   scope_die = get_context_die (context);
21204
21205   if (child)
21206     {
21207       gcc_assert (scope_die->die_child);
21208       gcc_assert (scope_die->die_child->die_tag == DW_TAG_imported_module);
21209       gcc_assert (TREE_CODE (decl) != NAMESPACE_DECL);
21210       scope_die = scope_die->die_child;
21211     }
21212
21213   /* OK, now we have DIEs for decl as well as scope. Emit imported die.  */
21214   dwarf2out_imported_module_or_decl_1 (decl, name, context, scope_die);
21215
21216 }
21217
21218 /* Output debug information for namelists.   */
21219
21220 static dw_die_ref
21221 gen_namelist_decl (tree name, dw_die_ref scope_die, tree item_decls)
21222 {
21223   dw_die_ref nml_die, nml_item_die, nml_item_ref_die;
21224   tree value;
21225   unsigned i;
21226
21227   if (debug_info_level <= DINFO_LEVEL_TERSE)
21228     return NULL;
21229
21230   gcc_assert (scope_die != NULL);
21231   nml_die = new_die (DW_TAG_namelist, scope_die, NULL);
21232   add_AT_string (nml_die, DW_AT_name, IDENTIFIER_POINTER (name));
21233
21234   /* If there are no item_decls, we have a nondefining namelist, e.g.
21235      with USE association; hence, set DW_AT_declaration.  */
21236   if (item_decls == NULL_TREE)
21237     {
21238       add_AT_flag (nml_die, DW_AT_declaration, 1);
21239       return nml_die;
21240     }
21241
21242   FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (item_decls), i, value)
21243     {
21244       nml_item_ref_die = lookup_decl_die (value);
21245       if (!nml_item_ref_die)
21246         nml_item_ref_die = force_decl_die (value);
21247
21248       nml_item_die = new_die (DW_TAG_namelist_item, nml_die, NULL);
21249       add_AT_die_ref (nml_item_die, DW_AT_namelist_items, nml_item_ref_die);
21250     }
21251   return nml_die;
21252 }
21253
21254
21255 /* Write the debugging output for DECL.  */
21256
21257 static void
21258 dwarf2out_decl (tree decl)
21259 {
21260   dw_die_ref context_die = comp_unit_die ();
21261
21262   switch (TREE_CODE (decl))
21263     {
21264     case ERROR_MARK:
21265       return;
21266
21267     case FUNCTION_DECL:
21268       /* What we would really like to do here is to filter out all mere
21269          file-scope declarations of file-scope functions which are never
21270          referenced later within this translation unit (and keep all of ones
21271          that *are* referenced later on) but we aren't clairvoyant, so we have
21272          no idea which functions will be referenced in the future (i.e. later
21273          on within the current translation unit). So here we just ignore all
21274          file-scope function declarations which are not also definitions.  If
21275          and when the debugger needs to know something about these functions,
21276          it will have to hunt around and find the DWARF information associated
21277          with the definition of the function.
21278
21279          We can't just check DECL_EXTERNAL to find out which FUNCTION_DECL
21280          nodes represent definitions and which ones represent mere
21281          declarations.  We have to check DECL_INITIAL instead. That's because
21282          the C front-end supports some weird semantics for "extern inline"
21283          function definitions.  These can get inlined within the current
21284          translation unit (and thus, we need to generate Dwarf info for their
21285          abstract instances so that the Dwarf info for the concrete inlined
21286          instances can have something to refer to) but the compiler never
21287          generates any out-of-lines instances of such things (despite the fact
21288          that they *are* definitions).
21289
21290          The important point is that the C front-end marks these "extern
21291          inline" functions as DECL_EXTERNAL, but we need to generate DWARF for
21292          them anyway. Note that the C++ front-end also plays some similar games
21293          for inline function definitions appearing within include files which
21294          also contain `#pragma interface' pragmas.
21295
21296          If we are called from dwarf2out_abstract_function output a DIE
21297          anyway.  We can end up here this way with early inlining and LTO
21298          where the inlined function is output in a different LTRANS unit
21299          or not at all.  */
21300       if (DECL_INITIAL (decl) == NULL_TREE
21301           && ! DECL_ABSTRACT_P (decl))
21302         return;
21303
21304       /* If we're a nested function, initially use a parent of NULL; if we're
21305          a plain function, this will be fixed up in decls_for_scope.  If
21306          we're a method, it will be ignored, since we already have a DIE.  */
21307       if (decl_function_context (decl)
21308           /* But if we're in terse mode, we don't care about scope.  */
21309           && debug_info_level > DINFO_LEVEL_TERSE)
21310         context_die = NULL;
21311       break;
21312
21313     case VAR_DECL:
21314       /* Ignore this VAR_DECL if it refers to a file-scope extern data object
21315          declaration and if the declaration was never even referenced from
21316          within this entire compilation unit.  We suppress these DIEs in
21317          order to save space in the .debug section (by eliminating entries
21318          which are probably useless).  Note that we must not suppress
21319          block-local extern declarations (whether used or not) because that
21320          would screw-up the debugger's name lookup mechanism and cause it to
21321          miss things which really ought to be in scope at a given point.  */
21322       if (DECL_EXTERNAL (decl) && !TREE_USED (decl))
21323         return;
21324
21325       /* For local statics lookup proper context die.  */
21326       if (TREE_STATIC (decl)
21327           && DECL_CONTEXT (decl)
21328           && TREE_CODE (DECL_CONTEXT (decl)) == FUNCTION_DECL)
21329         context_die = lookup_decl_die (DECL_CONTEXT (decl));
21330
21331       /* If we are in terse mode, don't generate any DIEs to represent any
21332          variable declarations or definitions.  */
21333       if (debug_info_level <= DINFO_LEVEL_TERSE)
21334         return;
21335       break;
21336
21337     case CONST_DECL:
21338       if (debug_info_level <= DINFO_LEVEL_TERSE)
21339         return;
21340       if (!is_fortran () && !is_ada ())
21341         return;
21342       if (TREE_STATIC (decl) && decl_function_context (decl))
21343         context_die = lookup_decl_die (DECL_CONTEXT (decl));
21344       break;
21345
21346     case NAMESPACE_DECL:
21347     case IMPORTED_DECL:
21348       if (debug_info_level <= DINFO_LEVEL_TERSE)
21349         return;
21350       if (lookup_decl_die (decl) != NULL)
21351         return;
21352       break;
21353
21354     case TYPE_DECL:
21355       /* Don't emit stubs for types unless they are needed by other DIEs.  */
21356       if (TYPE_DECL_SUPPRESS_DEBUG (decl))
21357         return;
21358
21359       /* Don't bother trying to generate any DIEs to represent any of the
21360          normal built-in types for the language we are compiling.  */
21361       if (DECL_IS_BUILTIN (decl))
21362         return;
21363
21364       /* If we are in terse mode, don't generate any DIEs for types.  */
21365       if (debug_info_level <= DINFO_LEVEL_TERSE)
21366         return;
21367
21368       /* If we're a function-scope tag, initially use a parent of NULL;
21369          this will be fixed up in decls_for_scope.  */
21370       if (decl_function_context (decl))
21371         context_die = NULL;
21372
21373       break;
21374
21375     case NAMELIST_DECL:
21376       break;
21377
21378     default:
21379       return;
21380     }
21381
21382   gen_decl_die (decl, NULL, context_die);
21383 }
21384
21385 /* Write the debugging output for DECL.  */
21386
21387 static void
21388 dwarf2out_function_decl (tree decl)
21389 {
21390   dwarf2out_decl (decl);
21391   call_arg_locations = NULL;
21392   call_arg_loc_last = NULL;
21393   call_site_count = -1;
21394   tail_call_site_count = -1;
21395   block_map.release ();
21396   decl_loc_table->empty ();
21397   cached_dw_loc_list_table->empty ();
21398 }
21399
21400 /* Output a marker (i.e. a label) for the beginning of the generated code for
21401    a lexical block.  */
21402
21403 static void
21404 dwarf2out_begin_block (unsigned int line ATTRIBUTE_UNUSED,
21405                        unsigned int blocknum)
21406 {
21407   switch_to_section (current_function_section ());
21408   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, BLOCK_BEGIN_LABEL, blocknum);
21409 }
21410
21411 /* Output a marker (i.e. a label) for the end of the generated code for a
21412    lexical block.  */
21413
21414 static void
21415 dwarf2out_end_block (unsigned int line ATTRIBUTE_UNUSED, unsigned int blocknum)
21416 {
21417   switch_to_section (current_function_section ());
21418   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, BLOCK_END_LABEL, blocknum);
21419 }
21420
21421 /* Returns nonzero if it is appropriate not to emit any debugging
21422    information for BLOCK, because it doesn't contain any instructions.
21423
21424    Don't allow this for blocks with nested functions or local classes
21425    as we would end up with orphans, and in the presence of scheduling
21426    we may end up calling them anyway.  */
21427
21428 static bool
21429 dwarf2out_ignore_block (const_tree block)
21430 {
21431   tree decl;
21432   unsigned int i;
21433
21434   for (decl = BLOCK_VARS (block); decl; decl = DECL_CHAIN (decl))
21435     if (TREE_CODE (decl) == FUNCTION_DECL
21436         || (TREE_CODE (decl) == TYPE_DECL && TYPE_DECL_IS_STUB (decl)))
21437       return 0;
21438   for (i = 0; i < BLOCK_NUM_NONLOCALIZED_VARS (block); i++)
21439     {
21440       decl = BLOCK_NONLOCALIZED_VAR (block, i);
21441       if (TREE_CODE (decl) == FUNCTION_DECL
21442           || (TREE_CODE (decl) == TYPE_DECL && TYPE_DECL_IS_STUB (decl)))
21443       return 0;
21444     }
21445
21446   return 1;
21447 }
21448
21449 /* Hash table routines for file_hash.  */
21450
21451 bool
21452 dwarf_file_hasher::equal (dwarf_file_data *p1, const char *p2)
21453 {
21454   return filename_cmp (p1->filename, p2) == 0;
21455 }
21456
21457 hashval_t
21458 dwarf_file_hasher::hash (dwarf_file_data *p)
21459 {
21460   return htab_hash_string (p->filename);
21461 }
21462
21463 /* Lookup FILE_NAME (in the list of filenames that we know about here in
21464    dwarf2out.c) and return its "index".  The index of each (known) filename is
21465    just a unique number which is associated with only that one filename.  We
21466    need such numbers for the sake of generating labels (in the .debug_sfnames
21467    section) and references to those files numbers (in the .debug_srcinfo
21468    and.debug_macinfo sections).  If the filename given as an argument is not
21469    found in our current list, add it to the list and assign it the next
21470    available unique index number.  In order to speed up searches, we remember
21471    the index of the filename was looked up last.  This handles the majority of
21472    all searches.  */
21473
21474 static struct dwarf_file_data *
21475 lookup_filename (const char *file_name)
21476 {
21477   struct dwarf_file_data * created;
21478
21479   /* Check to see if the file name that was searched on the previous
21480      call matches this file name.  If so, return the index.  */
21481   if (file_table_last_lookup
21482       && (file_name == file_table_last_lookup->filename
21483           || filename_cmp (file_table_last_lookup->filename, file_name) == 0))
21484     return file_table_last_lookup;
21485
21486   /* Didn't match the previous lookup, search the table.  */
21487   dwarf_file_data **slot
21488     = file_table->find_slot_with_hash (file_name, htab_hash_string (file_name),
21489                                        INSERT);
21490   if (*slot)
21491     return *slot;
21492
21493   created = ggc_alloc<dwarf_file_data> ();
21494   created->filename = file_name;
21495   created->emitted_number = 0;
21496   *slot = created;
21497   return created;
21498 }
21499
21500 /* If the assembler will construct the file table, then translate the compiler
21501    internal file table number into the assembler file table number, and emit
21502    a .file directive if we haven't already emitted one yet.  The file table
21503    numbers are different because we prune debug info for unused variables and
21504    types, which may include filenames.  */
21505
21506 static int
21507 maybe_emit_file (struct dwarf_file_data * fd)
21508 {
21509   if (! fd->emitted_number)
21510     {
21511       if (last_emitted_file)
21512         fd->emitted_number = last_emitted_file->emitted_number + 1;
21513       else
21514         fd->emitted_number = 1;
21515       last_emitted_file = fd;
21516
21517       if (DWARF2_ASM_LINE_DEBUG_INFO)
21518         {
21519           fprintf (asm_out_file, "\t.file %u ", fd->emitted_number);
21520           output_quoted_string (asm_out_file,
21521                                 remap_debug_filename (fd->filename));
21522           fputc ('\n', asm_out_file);
21523         }
21524     }
21525
21526   return fd->emitted_number;
21527 }
21528
21529 /* Schedule generation of a DW_AT_const_value attribute to DIE.
21530    That generation should happen after function debug info has been
21531    generated. The value of the attribute is the constant value of ARG.  */
21532
21533 static void
21534 append_entry_to_tmpl_value_parm_die_table (dw_die_ref die, tree arg)
21535 {
21536   die_arg_entry entry;
21537
21538   if (!die || !arg)
21539     return;
21540
21541   if (!tmpl_value_parm_die_table)
21542     vec_alloc (tmpl_value_parm_die_table, 32);
21543
21544   entry.die = die;
21545   entry.arg = arg;
21546   vec_safe_push (tmpl_value_parm_die_table, entry);
21547 }
21548
21549 /* Return TRUE if T is an instance of generic type, FALSE
21550    otherwise.  */
21551
21552 static bool
21553 generic_type_p (tree t)
21554 {
21555   if (t == NULL_TREE || !TYPE_P (t))
21556     return false;
21557   return lang_hooks.get_innermost_generic_parms (t) != NULL_TREE;
21558 }
21559
21560 /* Schedule the generation of the generic parameter dies for the
21561   instance of generic type T. The proper generation itself is later
21562   done by gen_scheduled_generic_parms_dies. */
21563
21564 static void
21565 schedule_generic_params_dies_gen (tree t)
21566 {
21567   if (!generic_type_p (t))
21568     return;
21569
21570   if (!generic_type_instances)
21571     vec_alloc (generic_type_instances, 256);
21572
21573   vec_safe_push (generic_type_instances, t);
21574 }
21575
21576 /* Add a DW_AT_const_value attribute to DIEs that were scheduled
21577    by append_entry_to_tmpl_value_parm_die_table. This function must
21578    be called after function DIEs have been generated.  */
21579
21580 static void
21581 gen_remaining_tmpl_value_param_die_attribute (void)
21582 {
21583   if (tmpl_value_parm_die_table)
21584     {
21585       unsigned i;
21586       die_arg_entry *e;
21587
21588       FOR_EACH_VEC_ELT (*tmpl_value_parm_die_table, i, e)
21589         tree_add_const_value_attribute (e->die, e->arg);
21590     }
21591 }
21592
21593 /* Generate generic parameters DIEs for instances of generic types
21594    that have been previously scheduled by
21595    schedule_generic_params_dies_gen. This function must be called
21596    after all the types of the CU have been laid out.  */
21597
21598 static void
21599 gen_scheduled_generic_parms_dies (void)
21600 {
21601   unsigned i;
21602   tree t;
21603
21604   if (!generic_type_instances)
21605     return;
21606   
21607   FOR_EACH_VEC_ELT (*generic_type_instances, i, t)
21608     if (COMPLETE_TYPE_P (t))
21609       gen_generic_params_dies (t);
21610 }
21611
21612
21613 /* Replace DW_AT_name for the decl with name.  */
21614
21615 static void
21616 dwarf2out_set_name (tree decl, tree name)
21617 {
21618   dw_die_ref die;
21619   dw_attr_ref attr;
21620   const char *dname;
21621
21622   die = TYPE_SYMTAB_DIE (decl);
21623   if (!die)
21624     return;
21625
21626   dname = dwarf2_name (name, 0);
21627   if (!dname)
21628     return;
21629
21630   attr = get_AT (die, DW_AT_name);
21631   if (attr)
21632     {
21633       struct indirect_string_node *node;
21634
21635       node = find_AT_string (dname);
21636       /* replace the string.  */
21637       attr->dw_attr_val.v.val_str = node;
21638     }
21639
21640   else
21641     add_name_attribute (die, dname);
21642 }
21643
21644 /* True if before or during processing of the first function being emitted.  */
21645 static bool in_first_function_p = true;
21646 /* True if loc_note during dwarf2out_var_location call might still be
21647    before first real instruction at address equal to .Ltext0.  */
21648 static bool maybe_at_text_label_p = true;
21649 /* One above highest N where .LVLN label might be equal to .Ltext0 label.  */
21650 static unsigned int first_loclabel_num_not_at_text_label;
21651
21652 /* Called by the final INSN scan whenever we see a var location.  We
21653    use it to drop labels in the right places, and throw the location in
21654    our lookup table.  */
21655
21656 static void
21657 dwarf2out_var_location (rtx_insn *loc_note)
21658 {
21659   char loclabel[MAX_ARTIFICIAL_LABEL_BYTES + 2];
21660   struct var_loc_node *newloc;
21661   rtx_insn *next_real, *next_note;
21662   static const char *last_label;
21663   static const char *last_postcall_label;
21664   static bool last_in_cold_section_p;
21665   static rtx_insn *expected_next_loc_note;
21666   tree decl;
21667   bool var_loc_p;
21668
21669   if (!NOTE_P (loc_note))
21670     {
21671       if (CALL_P (loc_note))
21672         {
21673           call_site_count++;
21674           if (SIBLING_CALL_P (loc_note))
21675             tail_call_site_count++;
21676         }
21677       return;
21678     }
21679
21680   var_loc_p = NOTE_KIND (loc_note) == NOTE_INSN_VAR_LOCATION;
21681   if (var_loc_p && !DECL_P (NOTE_VAR_LOCATION_DECL (loc_note)))
21682     return;
21683
21684   /* Optimize processing a large consecutive sequence of location
21685      notes so we don't spend too much time in next_real_insn.  If the
21686      next insn is another location note, remember the next_real_insn
21687      calculation for next time.  */
21688   next_real = cached_next_real_insn;
21689   if (next_real)
21690     {
21691       if (expected_next_loc_note != loc_note)
21692         next_real = NULL;
21693     }
21694
21695   next_note = NEXT_INSN (loc_note);
21696   if (! next_note
21697       || next_note->deleted ()
21698       || ! NOTE_P (next_note)
21699       || (NOTE_KIND (next_note) != NOTE_INSN_VAR_LOCATION
21700           && NOTE_KIND (next_note) != NOTE_INSN_CALL_ARG_LOCATION))
21701     next_note = NULL;
21702
21703   if (! next_real)
21704     next_real = next_real_insn (loc_note);
21705
21706   if (next_note)
21707     {
21708       expected_next_loc_note = next_note;
21709       cached_next_real_insn = next_real;
21710     }
21711   else
21712     cached_next_real_insn = NULL;
21713
21714   /* If there are no instructions which would be affected by this note,
21715      don't do anything.  */
21716   if (var_loc_p
21717       && next_real == NULL_RTX
21718       && !NOTE_DURING_CALL_P (loc_note))
21719     return;
21720
21721   if (next_real == NULL_RTX)
21722     next_real = get_last_insn ();
21723
21724   /* If there were any real insns between note we processed last time
21725      and this note (or if it is the first note), clear
21726      last_{,postcall_}label so that they are not reused this time.  */
21727   if (last_var_location_insn == NULL_RTX
21728       || last_var_location_insn != next_real
21729       || last_in_cold_section_p != in_cold_section_p)
21730     {
21731       last_label = NULL;
21732       last_postcall_label = NULL;
21733     }
21734
21735   if (var_loc_p)
21736     {
21737       decl = NOTE_VAR_LOCATION_DECL (loc_note);
21738       newloc = add_var_loc_to_decl (decl, loc_note,
21739                                     NOTE_DURING_CALL_P (loc_note)
21740                                     ? last_postcall_label : last_label);
21741       if (newloc == NULL)
21742         return;
21743     }
21744   else
21745     {
21746       decl = NULL_TREE;
21747       newloc = NULL;
21748     }
21749
21750   /* If there were no real insns between note we processed last time
21751      and this note, use the label we emitted last time.  Otherwise
21752      create a new label and emit it.  */
21753   if (last_label == NULL)
21754     {
21755       ASM_GENERATE_INTERNAL_LABEL (loclabel, "LVL", loclabel_num);
21756       ASM_OUTPUT_DEBUG_LABEL (asm_out_file, "LVL", loclabel_num);
21757       loclabel_num++;
21758       last_label = ggc_strdup (loclabel);
21759       /* See if loclabel might be equal to .Ltext0.  If yes,
21760          bump first_loclabel_num_not_at_text_label.  */
21761       if (!have_multiple_function_sections
21762           && in_first_function_p
21763           && maybe_at_text_label_p)
21764         {
21765           static rtx_insn *last_start;
21766           rtx_insn *insn;
21767           for (insn = loc_note; insn; insn = previous_insn (insn))
21768             if (insn == last_start)
21769               break;
21770             else if (!NONDEBUG_INSN_P (insn))
21771               continue;
21772             else
21773               {
21774                 rtx body = PATTERN (insn);
21775                 if (GET_CODE (body) == USE || GET_CODE (body) == CLOBBER)
21776                   continue;
21777                 /* Inline asm could occupy zero bytes.  */
21778                 else if (GET_CODE (body) == ASM_INPUT
21779                          || asm_noperands (body) >= 0)
21780                   continue;
21781 #ifdef HAVE_attr_length
21782                 else if (get_attr_min_length (insn) == 0)
21783                   continue;
21784 #endif
21785                 else
21786                   {
21787                     /* Assume insn has non-zero length.  */
21788                     maybe_at_text_label_p = false;
21789                     break;
21790                   }
21791               }
21792           if (maybe_at_text_label_p)
21793             {
21794               last_start = loc_note;
21795               first_loclabel_num_not_at_text_label = loclabel_num;
21796             }
21797         }
21798     }
21799
21800   if (!var_loc_p)
21801     {
21802       struct call_arg_loc_node *ca_loc
21803         = ggc_cleared_alloc<call_arg_loc_node> ();
21804       rtx_insn *prev = prev_real_insn (loc_note);
21805       rtx x;
21806       ca_loc->call_arg_loc_note = loc_note;
21807       ca_loc->next = NULL;
21808       ca_loc->label = last_label;
21809       gcc_assert (prev
21810                   && (CALL_P (prev)
21811                       || (NONJUMP_INSN_P (prev)
21812                           && GET_CODE (PATTERN (prev)) == SEQUENCE
21813                           && CALL_P (XVECEXP (PATTERN (prev), 0, 0)))));
21814       if (!CALL_P (prev))
21815         prev = as_a <rtx_sequence *> (PATTERN (prev))->insn (0);
21816       ca_loc->tail_call_p = SIBLING_CALL_P (prev);
21817       x = get_call_rtx_from (PATTERN (prev));
21818       if (x)
21819         {
21820           x = XEXP (XEXP (x, 0), 0);
21821           if (GET_CODE (x) == SYMBOL_REF
21822               && SYMBOL_REF_DECL (x)
21823               && TREE_CODE (SYMBOL_REF_DECL (x)) == FUNCTION_DECL)
21824             ca_loc->symbol_ref = x;
21825         }
21826       ca_loc->block = insn_scope (prev);
21827       if (call_arg_locations)
21828         call_arg_loc_last->next = ca_loc;
21829       else
21830         call_arg_locations = ca_loc;
21831       call_arg_loc_last = ca_loc;
21832     }
21833   else if (!NOTE_DURING_CALL_P (loc_note))
21834     newloc->label = last_label;
21835   else
21836     {
21837       if (!last_postcall_label)
21838         {
21839           sprintf (loclabel, "%s-1", last_label);
21840           last_postcall_label = ggc_strdup (loclabel);
21841         }
21842       newloc->label = last_postcall_label;
21843     }
21844
21845   last_var_location_insn = next_real;
21846   last_in_cold_section_p = in_cold_section_p;
21847 }
21848
21849 /* Note in one location list that text section has changed.  */
21850
21851 int
21852 var_location_switch_text_section_1 (var_loc_list **slot, void *)
21853 {
21854   var_loc_list *list = *slot;
21855   if (list->first)
21856     list->last_before_switch
21857       = list->last->next ? list->last->next : list->last;
21858   return 1;
21859 }
21860
21861 /* Note in all location lists that text section has changed.  */
21862
21863 static void
21864 var_location_switch_text_section (void)
21865 {
21866   if (decl_loc_table == NULL)
21867     return;
21868
21869   decl_loc_table->traverse<void *, var_location_switch_text_section_1> (NULL);
21870 }
21871
21872 /* Create a new line number table.  */
21873
21874 static dw_line_info_table *
21875 new_line_info_table (void)
21876 {
21877   dw_line_info_table *table;
21878
21879   table = ggc_cleared_alloc<dw_line_info_table_struct> ();
21880   table->file_num = 1;
21881   table->line_num = 1;
21882   table->is_stmt = DWARF_LINE_DEFAULT_IS_STMT_START;
21883
21884   return table;
21885 }
21886
21887 /* Lookup the "current" table into which we emit line info, so
21888    that we don't have to do it for every source line.  */
21889
21890 static void
21891 set_cur_line_info_table (section *sec)
21892 {
21893   dw_line_info_table *table;
21894
21895   if (sec == text_section)
21896     table = text_section_line_info;
21897   else if (sec == cold_text_section)
21898     {
21899       table = cold_text_section_line_info;
21900       if (!table)
21901         {
21902           cold_text_section_line_info = table = new_line_info_table ();
21903           table->end_label = cold_end_label;
21904         }
21905     }
21906   else
21907     {
21908       const char *end_label;
21909
21910       if (flag_reorder_blocks_and_partition)
21911         {
21912           if (in_cold_section_p)
21913             end_label = crtl->subsections.cold_section_end_label;
21914           else
21915             end_label = crtl->subsections.hot_section_end_label;
21916         }
21917       else
21918         {
21919           char label[MAX_ARTIFICIAL_LABEL_BYTES];
21920           ASM_GENERATE_INTERNAL_LABEL (label, FUNC_END_LABEL,
21921                                        current_function_funcdef_no);
21922           end_label = ggc_strdup (label);
21923         }
21924
21925       table = new_line_info_table ();
21926       table->end_label = end_label;
21927
21928       vec_safe_push (separate_line_info, table);
21929     }
21930
21931   if (DWARF2_ASM_LINE_DEBUG_INFO)
21932     table->is_stmt = (cur_line_info_table
21933                       ? cur_line_info_table->is_stmt
21934                       : DWARF_LINE_DEFAULT_IS_STMT_START);
21935   cur_line_info_table = table;
21936 }
21937
21938
21939 /* We need to reset the locations at the beginning of each
21940    function. We can't do this in the end_function hook, because the
21941    declarations that use the locations won't have been output when
21942    that hook is called.  Also compute have_multiple_function_sections here.  */
21943
21944 static void
21945 dwarf2out_begin_function (tree fun)
21946 {
21947   section *sec = function_section (fun);
21948
21949   if (sec != text_section)
21950     have_multiple_function_sections = true;
21951
21952   if (flag_reorder_blocks_and_partition && !cold_text_section)
21953     {
21954       gcc_assert (current_function_decl == fun);
21955       cold_text_section = unlikely_text_section ();
21956       switch_to_section (cold_text_section);
21957       ASM_OUTPUT_LABEL (asm_out_file, cold_text_section_label);
21958       switch_to_section (sec);
21959     }
21960
21961   dwarf2out_note_section_used ();
21962   call_site_count = 0;
21963   tail_call_site_count = 0;
21964
21965   set_cur_line_info_table (sec);
21966 }
21967
21968 /* Helper function of dwarf2out_end_function, called only after emitting
21969    the very first function into assembly.  Check if some .debug_loc range
21970    might end with a .LVL* label that could be equal to .Ltext0.
21971    In that case we must force using absolute addresses in .debug_loc ranges,
21972    because this range could be .LVLN-.Ltext0 .. .LVLM-.Ltext0 for
21973    .LVLN == .LVLM == .Ltext0, thus 0 .. 0, which is a .debug_loc
21974    list terminator.
21975    Set have_multiple_function_sections to true in that case and
21976    terminate htab traversal.  */
21977
21978 int
21979 find_empty_loc_ranges_at_text_label (var_loc_list **slot, int)
21980 {
21981   var_loc_list *entry = *slot;
21982   struct var_loc_node *node;
21983
21984   node = entry->first;
21985   if (node && node->next && node->next->label)
21986     {
21987       unsigned int i;
21988       const char *label = node->next->label;
21989       char loclabel[MAX_ARTIFICIAL_LABEL_BYTES];
21990
21991       for (i = 0; i < first_loclabel_num_not_at_text_label; i++)
21992         {
21993           ASM_GENERATE_INTERNAL_LABEL (loclabel, "LVL", i);
21994           if (strcmp (label, loclabel) == 0)
21995             {
21996               have_multiple_function_sections = true;
21997               return 0;
21998             }
21999         }
22000     }
22001   return 1;
22002 }
22003
22004 /* Hook called after emitting a function into assembly.
22005    This does something only for the very first function emitted.  */
22006
22007 static void
22008 dwarf2out_end_function (unsigned int)
22009 {
22010   if (in_first_function_p
22011       && !have_multiple_function_sections
22012       && first_loclabel_num_not_at_text_label
22013       && decl_loc_table)
22014     decl_loc_table->traverse<int, find_empty_loc_ranges_at_text_label> (0);
22015   in_first_function_p = false;
22016   maybe_at_text_label_p = false;
22017 }
22018
22019 /* Add OPCODE+VAL as an entry at the end of the opcode array in TABLE.  */
22020
22021 static void
22022 push_dw_line_info_entry (dw_line_info_table *table,
22023                          enum dw_line_info_opcode opcode, unsigned int val)
22024 {
22025   dw_line_info_entry e;
22026   e.opcode = opcode;
22027   e.val = val;
22028   vec_safe_push (table->entries, e);
22029 }
22030
22031 /* Output a label to mark the beginning of a source code line entry
22032    and record information relating to this source line, in
22033    'line_info_table' for later output of the .debug_line section.  */
22034 /* ??? The discriminator parameter ought to be unsigned.  */
22035
22036 static void
22037 dwarf2out_source_line (unsigned int line, const char *filename,
22038                        int discriminator, bool is_stmt)
22039 {
22040   unsigned int file_num;
22041   dw_line_info_table *table;
22042
22043   if (debug_info_level < DINFO_LEVEL_TERSE || line == 0)
22044     return;
22045
22046   /* The discriminator column was added in dwarf4.  Simplify the below
22047      by simply removing it if we're not supposed to output it.  */
22048   if (dwarf_version < 4 && dwarf_strict)
22049     discriminator = 0;
22050
22051   table = cur_line_info_table;
22052   file_num = maybe_emit_file (lookup_filename (filename));
22053
22054   /* ??? TODO: Elide duplicate line number entries.  Traditionally,
22055      the debugger has used the second (possibly duplicate) line number
22056      at the beginning of the function to mark the end of the prologue.
22057      We could eliminate any other duplicates within the function.  For
22058      Dwarf3, we ought to include the DW_LNS_set_prologue_end mark in
22059      that second line number entry.  */
22060   /* Recall that this end-of-prologue indication is *not* the same thing
22061      as the end_prologue debug hook.  The NOTE_INSN_PROLOGUE_END note,
22062      to which the hook corresponds, follows the last insn that was 
22063      emitted by gen_prologue.  What we need is to precede the first insn
22064      that had been emitted after NOTE_INSN_FUNCTION_BEG, i.e. the first
22065      insn that corresponds to something the user wrote.  These may be
22066      very different locations once scheduling is enabled.  */
22067
22068   if (0 && file_num == table->file_num
22069       && line == table->line_num
22070       && discriminator == table->discrim_num
22071       && is_stmt == table->is_stmt)
22072     return;
22073
22074   switch_to_section (current_function_section ());
22075
22076   /* If requested, emit something human-readable.  */
22077   if (flag_debug_asm)
22078     fprintf (asm_out_file, "\t%s %s:%d\n", ASM_COMMENT_START, filename, line);
22079
22080   if (DWARF2_ASM_LINE_DEBUG_INFO)
22081     {
22082       /* Emit the .loc directive understood by GNU as.  */
22083       /* "\t.loc %u %u 0 is_stmt %u discriminator %u",
22084          file_num, line, is_stmt, discriminator */
22085       fputs ("\t.loc ", asm_out_file);
22086       fprint_ul (asm_out_file, file_num);
22087       putc (' ', asm_out_file);
22088       fprint_ul (asm_out_file, line);
22089       putc (' ', asm_out_file);
22090       putc ('0', asm_out_file);
22091
22092       if (is_stmt != table->is_stmt)
22093         {
22094           fputs (" is_stmt ", asm_out_file);
22095           putc (is_stmt ? '1' : '0', asm_out_file);
22096         }
22097       if (SUPPORTS_DISCRIMINATOR && discriminator != 0)
22098         {
22099           gcc_assert (discriminator > 0);
22100           fputs (" discriminator ", asm_out_file);
22101           fprint_ul (asm_out_file, (unsigned long) discriminator);
22102         }
22103       putc ('\n', asm_out_file);
22104     }
22105   else
22106     {
22107       unsigned int label_num = ++line_info_label_num;
22108
22109       targetm.asm_out.internal_label (asm_out_file, LINE_CODE_LABEL, label_num);
22110
22111       push_dw_line_info_entry (table, LI_set_address, label_num);
22112       if (file_num != table->file_num)
22113         push_dw_line_info_entry (table, LI_set_file, file_num);
22114       if (discriminator != table->discrim_num)
22115         push_dw_line_info_entry (table, LI_set_discriminator, discriminator);
22116       if (is_stmt != table->is_stmt)
22117         push_dw_line_info_entry (table, LI_negate_stmt, 0);
22118       push_dw_line_info_entry (table, LI_set_line, line);
22119     }
22120
22121   table->file_num = file_num;
22122   table->line_num = line;
22123   table->discrim_num = discriminator;
22124   table->is_stmt = is_stmt;
22125   table->in_use = true;
22126 }
22127
22128 /* Record the beginning of a new source file.  */
22129
22130 static void
22131 dwarf2out_start_source_file (unsigned int lineno, const char *filename)
22132 {
22133   if (flag_eliminate_dwarf2_dups)
22134     {
22135       /* Record the beginning of the file for break_out_includes.  */
22136       dw_die_ref bincl_die;
22137
22138       bincl_die = new_die (DW_TAG_GNU_BINCL, comp_unit_die (), NULL);
22139       add_AT_string (bincl_die, DW_AT_name, remap_debug_filename (filename));
22140     }
22141
22142   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
22143     {
22144       macinfo_entry e;
22145       e.code = DW_MACINFO_start_file;
22146       e.lineno = lineno;
22147       e.info = ggc_strdup (filename);
22148       vec_safe_push (macinfo_table, e);
22149     }
22150 }
22151
22152 /* Record the end of a source file.  */
22153
22154 static void
22155 dwarf2out_end_source_file (unsigned int lineno ATTRIBUTE_UNUSED)
22156 {
22157   if (flag_eliminate_dwarf2_dups)
22158     /* Record the end of the file for break_out_includes.  */
22159     new_die (DW_TAG_GNU_EINCL, comp_unit_die (), NULL);
22160
22161   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
22162     {
22163       macinfo_entry e;
22164       e.code = DW_MACINFO_end_file;
22165       e.lineno = lineno;
22166       e.info = NULL;
22167       vec_safe_push (macinfo_table, e);
22168     }
22169 }
22170
22171 /* Called from debug_define in toplev.c.  The `buffer' parameter contains
22172    the tail part of the directive line, i.e. the part which is past the
22173    initial whitespace, #, whitespace, directive-name, whitespace part.  */
22174
22175 static void
22176 dwarf2out_define (unsigned int lineno ATTRIBUTE_UNUSED,
22177                   const char *buffer ATTRIBUTE_UNUSED)
22178 {
22179   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
22180     {
22181       macinfo_entry e;
22182       /* Insert a dummy first entry to be able to optimize the whole
22183          predefined macro block using DW_MACRO_GNU_transparent_include.  */
22184       if (macinfo_table->is_empty () && lineno <= 1)
22185         {
22186           e.code = 0;
22187           e.lineno = 0;
22188           e.info = NULL;
22189           vec_safe_push (macinfo_table, e);
22190         }
22191       e.code = DW_MACINFO_define;
22192       e.lineno = lineno;
22193       e.info = ggc_strdup (buffer);
22194       vec_safe_push (macinfo_table, e);
22195     }
22196 }
22197
22198 /* Called from debug_undef in toplev.c.  The `buffer' parameter contains
22199    the tail part of the directive line, i.e. the part which is past the
22200    initial whitespace, #, whitespace, directive-name, whitespace part.  */
22201
22202 static void
22203 dwarf2out_undef (unsigned int lineno ATTRIBUTE_UNUSED,
22204                  const char *buffer ATTRIBUTE_UNUSED)
22205 {
22206   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
22207     {
22208       macinfo_entry e;
22209       /* Insert a dummy first entry to be able to optimize the whole
22210          predefined macro block using DW_MACRO_GNU_transparent_include.  */
22211       if (macinfo_table->is_empty () && lineno <= 1)
22212         {
22213           e.code = 0;
22214           e.lineno = 0;
22215           e.info = NULL;
22216           vec_safe_push (macinfo_table, e);
22217         }
22218       e.code = DW_MACINFO_undef;
22219       e.lineno = lineno;
22220       e.info = ggc_strdup (buffer);
22221       vec_safe_push (macinfo_table, e);
22222     }
22223 }
22224
22225 /* Helpers to manipulate hash table of CUs.  */
22226
22227 struct macinfo_entry_hasher : typed_noop_remove <macinfo_entry>
22228 {
22229   typedef macinfo_entry value_type;
22230   typedef macinfo_entry compare_type;
22231   static inline hashval_t hash (const value_type *);
22232   static inline bool equal (const value_type *, const compare_type *);
22233 };
22234
22235 inline hashval_t
22236 macinfo_entry_hasher::hash (const value_type *entry)
22237 {
22238   return htab_hash_string (entry->info);
22239 }
22240
22241 inline bool
22242 macinfo_entry_hasher::equal (const value_type *entry1,
22243                              const compare_type *entry2)
22244 {
22245   return !strcmp (entry1->info, entry2->info);
22246 }
22247
22248 typedef hash_table<macinfo_entry_hasher> macinfo_hash_type;
22249
22250 /* Output a single .debug_macinfo entry.  */
22251
22252 static void
22253 output_macinfo_op (macinfo_entry *ref)
22254 {
22255   int file_num;
22256   size_t len;
22257   struct indirect_string_node *node;
22258   char label[MAX_ARTIFICIAL_LABEL_BYTES];
22259   struct dwarf_file_data *fd;
22260
22261   switch (ref->code)
22262     {
22263     case DW_MACINFO_start_file:
22264       fd = lookup_filename (ref->info);
22265       file_num = maybe_emit_file (fd);
22266       dw2_asm_output_data (1, DW_MACINFO_start_file, "Start new file");
22267       dw2_asm_output_data_uleb128 (ref->lineno,
22268                                    "Included from line number %lu", 
22269                                    (unsigned long) ref->lineno);
22270       dw2_asm_output_data_uleb128 (file_num, "file %s", ref->info);
22271       break;
22272     case DW_MACINFO_end_file:
22273       dw2_asm_output_data (1, DW_MACINFO_end_file, "End file");
22274       break;
22275     case DW_MACINFO_define:
22276     case DW_MACINFO_undef:
22277       len = strlen (ref->info) + 1;
22278       if (!dwarf_strict
22279           && len > DWARF_OFFSET_SIZE
22280           && !DWARF2_INDIRECT_STRING_SUPPORT_MISSING_ON_TARGET
22281           && (debug_str_section->common.flags & SECTION_MERGE) != 0)
22282         {
22283           ref->code = ref->code == DW_MACINFO_define
22284                       ? DW_MACRO_GNU_define_indirect
22285                       : DW_MACRO_GNU_undef_indirect;
22286           output_macinfo_op (ref);
22287           return;
22288         }
22289       dw2_asm_output_data (1, ref->code,
22290                            ref->code == DW_MACINFO_define
22291                            ? "Define macro" : "Undefine macro");
22292       dw2_asm_output_data_uleb128 (ref->lineno, "At line number %lu", 
22293                                    (unsigned long) ref->lineno);
22294       dw2_asm_output_nstring (ref->info, -1, "The macro");
22295       break;
22296     case DW_MACRO_GNU_define_indirect:
22297     case DW_MACRO_GNU_undef_indirect:
22298       node = find_AT_string (ref->info);
22299       gcc_assert (node
22300                   && ((node->form == DW_FORM_strp)
22301                       || (node->form == DW_FORM_GNU_str_index)));
22302       dw2_asm_output_data (1, ref->code,
22303                            ref->code == DW_MACRO_GNU_define_indirect
22304                            ? "Define macro indirect"
22305                            : "Undefine macro indirect");
22306       dw2_asm_output_data_uleb128 (ref->lineno, "At line number %lu",
22307                                    (unsigned long) ref->lineno);
22308       if (node->form == DW_FORM_strp)
22309         dw2_asm_output_offset (DWARF_OFFSET_SIZE, node->label,
22310                                debug_str_section, "The macro: \"%s\"",
22311                                ref->info);
22312       else
22313         dw2_asm_output_data_uleb128 (node->index, "The macro: \"%s\"",
22314                                      ref->info);
22315       break;
22316     case DW_MACRO_GNU_transparent_include:
22317       dw2_asm_output_data (1, ref->code, "Transparent include");
22318       ASM_GENERATE_INTERNAL_LABEL (label,
22319                                    DEBUG_MACRO_SECTION_LABEL, ref->lineno);
22320       dw2_asm_output_offset (DWARF_OFFSET_SIZE, label, NULL, NULL);
22321       break;
22322     default:
22323       fprintf (asm_out_file, "%s unrecognized macinfo code %lu\n",
22324                ASM_COMMENT_START, (unsigned long) ref->code);
22325       break;
22326     }
22327 }
22328
22329 /* Attempt to make a sequence of define/undef macinfo ops shareable with
22330    other compilation unit .debug_macinfo sections.  IDX is the first
22331    index of a define/undef, return the number of ops that should be
22332    emitted in a comdat .debug_macinfo section and emit
22333    a DW_MACRO_GNU_transparent_include entry referencing it.
22334    If the define/undef entry should be emitted normally, return 0.  */
22335
22336 static unsigned
22337 optimize_macinfo_range (unsigned int idx, vec<macinfo_entry, va_gc> *files,
22338                         macinfo_hash_type **macinfo_htab)
22339 {
22340   macinfo_entry *first, *second, *cur, *inc;
22341   char linebuf[sizeof (HOST_WIDE_INT) * 3 + 1];
22342   unsigned char checksum[16];
22343   struct md5_ctx ctx;
22344   char *grp_name, *tail;
22345   const char *base;
22346   unsigned int i, count, encoded_filename_len, linebuf_len;
22347   macinfo_entry **slot;
22348
22349   first = &(*macinfo_table)[idx];
22350   second = &(*macinfo_table)[idx + 1];
22351
22352   /* Optimize only if there are at least two consecutive define/undef ops,
22353      and either all of them are before first DW_MACINFO_start_file
22354      with lineno {0,1} (i.e. predefined macro block), or all of them are
22355      in some included header file.  */
22356   if (second->code != DW_MACINFO_define && second->code != DW_MACINFO_undef)
22357     return 0;
22358   if (vec_safe_is_empty (files))
22359     {
22360       if (first->lineno > 1 || second->lineno > 1)
22361         return 0;
22362     }
22363   else if (first->lineno == 0)
22364     return 0;
22365
22366   /* Find the last define/undef entry that can be grouped together
22367      with first and at the same time compute md5 checksum of their
22368      codes, linenumbers and strings.  */
22369   md5_init_ctx (&ctx);
22370   for (i = idx; macinfo_table->iterate (i, &cur); i++)
22371     if (cur->code != DW_MACINFO_define && cur->code != DW_MACINFO_undef)
22372       break;
22373     else if (vec_safe_is_empty (files) && cur->lineno > 1)
22374       break;
22375     else
22376       {
22377         unsigned char code = cur->code;
22378         md5_process_bytes (&code, 1, &ctx);
22379         checksum_uleb128 (cur->lineno, &ctx);
22380         md5_process_bytes (cur->info, strlen (cur->info) + 1, &ctx);
22381       }
22382   md5_finish_ctx (&ctx, checksum);
22383   count = i - idx;
22384
22385   /* From the containing include filename (if any) pick up just
22386      usable characters from its basename.  */
22387   if (vec_safe_is_empty (files))
22388     base = "";
22389   else
22390     base = lbasename (files->last ().info);
22391   for (encoded_filename_len = 0, i = 0; base[i]; i++)
22392     if (ISIDNUM (base[i]) || base[i] == '.')
22393       encoded_filename_len++;
22394   /* Count . at the end.  */
22395   if (encoded_filename_len)
22396     encoded_filename_len++;
22397
22398   sprintf (linebuf, HOST_WIDE_INT_PRINT_UNSIGNED, first->lineno);
22399   linebuf_len = strlen (linebuf);
22400
22401   /* The group name format is: wmN.[<encoded filename>.]<lineno>.<md5sum>  */
22402   grp_name = XALLOCAVEC (char, 4 + encoded_filename_len + linebuf_len + 1
22403                          + 16 * 2 + 1);
22404   memcpy (grp_name, DWARF_OFFSET_SIZE == 4 ? "wm4." : "wm8.", 4);
22405   tail = grp_name + 4;
22406   if (encoded_filename_len)
22407     {
22408       for (i = 0; base[i]; i++)
22409         if (ISIDNUM (base[i]) || base[i] == '.')
22410           *tail++ = base[i];
22411       *tail++ = '.';
22412     }
22413   memcpy (tail, linebuf, linebuf_len);
22414   tail += linebuf_len;
22415   *tail++ = '.';
22416   for (i = 0; i < 16; i++)
22417     sprintf (tail + i * 2, "%02x", checksum[i] & 0xff);
22418
22419   /* Construct a macinfo_entry for DW_MACRO_GNU_transparent_include
22420      in the empty vector entry before the first define/undef.  */
22421   inc = &(*macinfo_table)[idx - 1];
22422   inc->code = DW_MACRO_GNU_transparent_include;
22423   inc->lineno = 0;
22424   inc->info = ggc_strdup (grp_name);
22425   if (!*macinfo_htab)
22426     *macinfo_htab = new macinfo_hash_type (10);
22427   /* Avoid emitting duplicates.  */
22428   slot = (*macinfo_htab)->find_slot (inc, INSERT);
22429   if (*slot != NULL)
22430     {
22431       inc->code = 0;
22432       inc->info = NULL;
22433       /* If such an entry has been used before, just emit
22434          a DW_MACRO_GNU_transparent_include op.  */
22435       inc = *slot;
22436       output_macinfo_op (inc);
22437       /* And clear all macinfo_entry in the range to avoid emitting them
22438          in the second pass.  */
22439       for (i = idx; macinfo_table->iterate (i, &cur) && i < idx + count; i++)
22440         {
22441           cur->code = 0;
22442           cur->info = NULL;
22443         }
22444     }
22445   else
22446     {
22447       *slot = inc;
22448       inc->lineno = (*macinfo_htab)->elements ();
22449       output_macinfo_op (inc);
22450     }
22451   return count;
22452 }
22453
22454 /* Save any strings needed by the macinfo table in the debug str
22455    table.  All strings must be collected into the table by the time
22456    index_string is called.  */
22457
22458 static void
22459 save_macinfo_strings (void)
22460 {
22461   unsigned len;
22462   unsigned i;
22463   macinfo_entry *ref;
22464
22465   for (i = 0; macinfo_table && macinfo_table->iterate (i, &ref); i++)
22466     {
22467       switch (ref->code)
22468         {
22469           /* Match the logic in output_macinfo_op to decide on
22470              indirect strings.  */
22471           case DW_MACINFO_define:
22472           case DW_MACINFO_undef:
22473             len = strlen (ref->info) + 1;
22474             if (!dwarf_strict
22475                 && len > DWARF_OFFSET_SIZE
22476                 && !DWARF2_INDIRECT_STRING_SUPPORT_MISSING_ON_TARGET
22477                 && (debug_str_section->common.flags & SECTION_MERGE) != 0)
22478               set_indirect_string (find_AT_string (ref->info));
22479             break;
22480           case DW_MACRO_GNU_define_indirect:
22481           case DW_MACRO_GNU_undef_indirect:
22482             set_indirect_string (find_AT_string (ref->info));
22483             break;
22484           default:
22485             break;
22486         }
22487     }
22488 }
22489
22490 /* Output macinfo section(s).  */
22491
22492 static void
22493 output_macinfo (void)
22494 {
22495   unsigned i;
22496   unsigned long length = vec_safe_length (macinfo_table);
22497   macinfo_entry *ref;
22498   vec<macinfo_entry, va_gc> *files = NULL;
22499   macinfo_hash_type *macinfo_htab = NULL;
22500
22501   if (! length)
22502     return;
22503
22504   /* output_macinfo* uses these interchangeably.  */
22505   gcc_assert ((int) DW_MACINFO_define == (int) DW_MACRO_GNU_define
22506               && (int) DW_MACINFO_undef == (int) DW_MACRO_GNU_undef
22507               && (int) DW_MACINFO_start_file == (int) DW_MACRO_GNU_start_file
22508               && (int) DW_MACINFO_end_file == (int) DW_MACRO_GNU_end_file);
22509
22510   /* For .debug_macro emit the section header.  */
22511   if (!dwarf_strict)
22512     {
22513       dw2_asm_output_data (2, 4, "DWARF macro version number");
22514       if (DWARF_OFFSET_SIZE == 8)
22515         dw2_asm_output_data (1, 3, "Flags: 64-bit, lineptr present");
22516       else
22517         dw2_asm_output_data (1, 2, "Flags: 32-bit, lineptr present");
22518       dw2_asm_output_offset (DWARF_OFFSET_SIZE,
22519                              (!dwarf_split_debug_info ? debug_line_section_label
22520                               : debug_skeleton_line_section_label),
22521                              debug_line_section, NULL);
22522     }
22523
22524   /* In the first loop, it emits the primary .debug_macinfo section
22525      and after each emitted op the macinfo_entry is cleared.
22526      If a longer range of define/undef ops can be optimized using
22527      DW_MACRO_GNU_transparent_include, the
22528      DW_MACRO_GNU_transparent_include op is emitted and kept in
22529      the vector before the first define/undef in the range and the
22530      whole range of define/undef ops is not emitted and kept.  */
22531   for (i = 0; macinfo_table->iterate (i, &ref); i++)
22532     {
22533       switch (ref->code)
22534         {
22535         case DW_MACINFO_start_file:
22536           vec_safe_push (files, *ref);
22537           break;
22538         case DW_MACINFO_end_file:
22539           if (!vec_safe_is_empty (files))
22540             files->pop ();
22541           break;
22542         case DW_MACINFO_define:
22543         case DW_MACINFO_undef:
22544           if (!dwarf_strict
22545               && HAVE_COMDAT_GROUP
22546               && vec_safe_length (files) != 1
22547               && i > 0
22548               && i + 1 < length
22549               && (*macinfo_table)[i - 1].code == 0)
22550             {
22551               unsigned count = optimize_macinfo_range (i, files, &macinfo_htab);
22552               if (count)
22553                 {
22554                   i += count - 1;
22555                   continue;
22556                 }
22557             }
22558           break;
22559         case 0:
22560           /* A dummy entry may be inserted at the beginning to be able
22561              to optimize the whole block of predefined macros.  */
22562           if (i == 0)
22563             continue;
22564         default:
22565           break;
22566         }
22567       output_macinfo_op (ref);
22568       ref->info = NULL;
22569       ref->code = 0;
22570     }
22571
22572   if (!macinfo_htab)
22573     return;
22574
22575   delete macinfo_htab;
22576   macinfo_htab = NULL;
22577
22578   /* If any DW_MACRO_GNU_transparent_include were used, on those
22579      DW_MACRO_GNU_transparent_include entries terminate the
22580      current chain and switch to a new comdat .debug_macinfo
22581      section and emit the define/undef entries within it.  */
22582   for (i = 0; macinfo_table->iterate (i, &ref); i++)
22583     switch (ref->code)
22584       {
22585       case 0:
22586         continue;
22587       case DW_MACRO_GNU_transparent_include:
22588         {
22589           char label[MAX_ARTIFICIAL_LABEL_BYTES];
22590           tree comdat_key = get_identifier (ref->info);
22591           /* Terminate the previous .debug_macinfo section.  */
22592           dw2_asm_output_data (1, 0, "End compilation unit");
22593           targetm.asm_out.named_section (DEBUG_MACRO_SECTION,
22594                                          SECTION_DEBUG
22595                                          | SECTION_LINKONCE,
22596                                          comdat_key);
22597           ASM_GENERATE_INTERNAL_LABEL (label,
22598                                        DEBUG_MACRO_SECTION_LABEL,
22599                                        ref->lineno);
22600           ASM_OUTPUT_LABEL (asm_out_file, label);
22601           ref->code = 0;
22602           ref->info = NULL;
22603           dw2_asm_output_data (2, 4, "DWARF macro version number");
22604           if (DWARF_OFFSET_SIZE == 8)
22605             dw2_asm_output_data (1, 1, "Flags: 64-bit");
22606           else
22607             dw2_asm_output_data (1, 0, "Flags: 32-bit");
22608         }
22609         break;
22610       case DW_MACINFO_define:
22611       case DW_MACINFO_undef:
22612         output_macinfo_op (ref);
22613         ref->code = 0;
22614         ref->info = NULL;
22615         break;
22616       default:
22617         gcc_unreachable ();
22618       }
22619 }
22620
22621 /* Set up for Dwarf output at the start of compilation.  */
22622
22623 static void
22624 dwarf2out_init (const char *filename ATTRIBUTE_UNUSED)
22625 {
22626   /* This option is currently broken, see (PR53118 and PR46102).  */
22627   if (flag_eliminate_dwarf2_dups
22628       && strstr (lang_hooks.name, "C++"))
22629     {
22630       warning (0, "-feliminate-dwarf2-dups is broken for C++, ignoring");
22631       flag_eliminate_dwarf2_dups = 0;
22632     }
22633
22634   /* Allocate the file_table.  */
22635   file_table = hash_table<dwarf_file_hasher>::create_ggc (50);
22636
22637   /* Allocate the decl_die_table.  */
22638   decl_die_table = hash_table<decl_die_hasher>::create_ggc (10);
22639
22640   /* Allocate the decl_loc_table.  */
22641   decl_loc_table = hash_table<decl_loc_hasher>::create_ggc (10);
22642
22643   /* Allocate the cached_dw_loc_list_table.  */
22644   cached_dw_loc_list_table = hash_table<dw_loc_list_hasher>::create_ggc (10);
22645
22646   /* Allocate the initial hunk of the decl_scope_table.  */
22647   vec_alloc (decl_scope_table, 256);
22648
22649   /* Allocate the initial hunk of the abbrev_die_table.  */
22650   abbrev_die_table = ggc_cleared_vec_alloc<dw_die_ref>
22651     (ABBREV_DIE_TABLE_INCREMENT);
22652   abbrev_die_table_allocated = ABBREV_DIE_TABLE_INCREMENT;
22653   /* Zero-th entry is allocated, but unused.  */
22654   abbrev_die_table_in_use = 1;
22655
22656   /* Allocate the pubtypes and pubnames vectors.  */
22657   vec_alloc (pubname_table, 32);
22658   vec_alloc (pubtype_table, 32);
22659
22660   vec_alloc (incomplete_types, 64);
22661
22662   vec_alloc (used_rtx_array, 32);
22663
22664   if (!dwarf_split_debug_info)
22665     {
22666       debug_info_section = get_section (DEBUG_INFO_SECTION,
22667                                         SECTION_DEBUG, NULL);
22668       debug_abbrev_section = get_section (DEBUG_ABBREV_SECTION,
22669                                           SECTION_DEBUG, NULL);
22670       debug_loc_section = get_section (DEBUG_LOC_SECTION,
22671                                        SECTION_DEBUG, NULL);
22672     }
22673   else
22674     {
22675       debug_info_section = get_section (DEBUG_DWO_INFO_SECTION,
22676                                         SECTION_DEBUG | SECTION_EXCLUDE, NULL);
22677       debug_abbrev_section = get_section (DEBUG_DWO_ABBREV_SECTION,
22678                                           SECTION_DEBUG | SECTION_EXCLUDE,
22679                                           NULL);
22680       debug_addr_section = get_section (DEBUG_ADDR_SECTION,
22681                                         SECTION_DEBUG, NULL);
22682       debug_skeleton_info_section = get_section (DEBUG_INFO_SECTION,
22683                                                  SECTION_DEBUG, NULL);
22684       debug_skeleton_abbrev_section = get_section (DEBUG_ABBREV_SECTION,
22685                                                    SECTION_DEBUG, NULL);
22686       ASM_GENERATE_INTERNAL_LABEL (debug_skeleton_abbrev_section_label,
22687                                   DEBUG_SKELETON_ABBREV_SECTION_LABEL, 0);
22688
22689       /* Somewhat confusing detail: The skeleton_[abbrev|info] sections stay in
22690          the main .o, but the skeleton_line goes into the split off dwo.  */
22691       debug_skeleton_line_section
22692           = get_section (DEBUG_DWO_LINE_SECTION,
22693                          SECTION_DEBUG | SECTION_EXCLUDE, NULL);
22694       ASM_GENERATE_INTERNAL_LABEL (debug_skeleton_line_section_label,
22695                                    DEBUG_SKELETON_LINE_SECTION_LABEL, 0);
22696       debug_str_offsets_section = get_section (DEBUG_STR_OFFSETS_SECTION,
22697                                                SECTION_DEBUG | SECTION_EXCLUDE,
22698                                                NULL);
22699       ASM_GENERATE_INTERNAL_LABEL (debug_skeleton_info_section_label,
22700                                    DEBUG_SKELETON_INFO_SECTION_LABEL, 0);
22701       debug_loc_section = get_section (DEBUG_DWO_LOC_SECTION,
22702                                        SECTION_DEBUG | SECTION_EXCLUDE, NULL);
22703       debug_str_dwo_section = get_section (DEBUG_STR_DWO_SECTION,
22704                                            DEBUG_STR_DWO_SECTION_FLAGS, NULL);
22705     }
22706   debug_aranges_section = get_section (DEBUG_ARANGES_SECTION,
22707                                        SECTION_DEBUG, NULL);
22708   debug_macinfo_section = get_section (dwarf_strict
22709                                        ? DEBUG_MACINFO_SECTION
22710                                        : DEBUG_MACRO_SECTION,
22711                                        DEBUG_MACRO_SECTION_FLAGS, NULL);
22712   debug_line_section = get_section (DEBUG_LINE_SECTION,
22713                                     SECTION_DEBUG, NULL);
22714   debug_pubnames_section = get_section (DEBUG_PUBNAMES_SECTION,
22715                                         SECTION_DEBUG, NULL);
22716   debug_pubtypes_section = get_section (DEBUG_PUBTYPES_SECTION,
22717                                         SECTION_DEBUG, NULL);
22718   debug_str_section = get_section (DEBUG_STR_SECTION,
22719                                    DEBUG_STR_SECTION_FLAGS, NULL);
22720   debug_ranges_section = get_section (DEBUG_RANGES_SECTION,
22721                                       SECTION_DEBUG, NULL);
22722   debug_frame_section = get_section (DEBUG_FRAME_SECTION,
22723                                      SECTION_DEBUG, NULL);
22724
22725   ASM_GENERATE_INTERNAL_LABEL (text_end_label, TEXT_END_LABEL, 0);
22726   ASM_GENERATE_INTERNAL_LABEL (abbrev_section_label,
22727                                DEBUG_ABBREV_SECTION_LABEL, 0);
22728   ASM_GENERATE_INTERNAL_LABEL (text_section_label, TEXT_SECTION_LABEL, 0);
22729   ASM_GENERATE_INTERNAL_LABEL (cold_text_section_label,
22730                                COLD_TEXT_SECTION_LABEL, 0);
22731   ASM_GENERATE_INTERNAL_LABEL (cold_end_label, COLD_END_LABEL, 0);
22732
22733   ASM_GENERATE_INTERNAL_LABEL (debug_info_section_label,
22734                                DEBUG_INFO_SECTION_LABEL, 0);
22735   ASM_GENERATE_INTERNAL_LABEL (debug_line_section_label,
22736                                DEBUG_LINE_SECTION_LABEL, 0);
22737   ASM_GENERATE_INTERNAL_LABEL (ranges_section_label,
22738                                DEBUG_RANGES_SECTION_LABEL, 0);
22739   ASM_GENERATE_INTERNAL_LABEL (debug_addr_section_label,
22740                                DEBUG_ADDR_SECTION_LABEL, 0);
22741   ASM_GENERATE_INTERNAL_LABEL (macinfo_section_label,
22742                                dwarf_strict
22743                                ? DEBUG_MACINFO_SECTION_LABEL
22744                                : DEBUG_MACRO_SECTION_LABEL, 0);
22745   ASM_GENERATE_INTERNAL_LABEL (loc_section_label, DEBUG_LOC_SECTION_LABEL, 0);
22746
22747   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
22748     vec_alloc (macinfo_table, 64);
22749
22750   switch_to_section (text_section);
22751   ASM_OUTPUT_LABEL (asm_out_file, text_section_label);
22752
22753   /* Make sure the line number table for .text always exists.  */
22754   text_section_line_info = new_line_info_table ();
22755   text_section_line_info->end_label = text_end_label;
22756 }
22757
22758 /* Called before compile () starts outputtting functions, variables
22759    and toplevel asms into assembly.  */
22760
22761 static void
22762 dwarf2out_assembly_start (void)
22763 {
22764   if (HAVE_GAS_CFI_SECTIONS_DIRECTIVE
22765       && dwarf2out_do_cfi_asm ()
22766       && (!(flag_unwind_tables || flag_exceptions)
22767           || targetm_common.except_unwind_info (&global_options) != UI_DWARF2))
22768     fprintf (asm_out_file, "\t.cfi_sections\t.debug_frame\n");
22769 }
22770
22771 /* A helper function for dwarf2out_finish called through
22772    htab_traverse.  Assign a string its index.  All strings must be
22773    collected into the table by the time index_string is called,
22774    because the indexing code relies on htab_traverse to traverse nodes
22775    in the same order for each run. */
22776
22777 int
22778 index_string (indirect_string_node **h, unsigned int *index)
22779 {
22780   indirect_string_node *node = *h;
22781
22782   find_string_form (node);
22783   if (node->form == DW_FORM_GNU_str_index && node->refcount > 0)
22784     {
22785       gcc_assert (node->index == NO_INDEX_ASSIGNED);
22786       node->index = *index;
22787       *index += 1;
22788     }
22789   return 1;
22790 }
22791
22792 /* A helper function for output_indirect_strings called through
22793    htab_traverse.  Output the offset to a string and update the
22794    current offset.  */
22795
22796 int
22797 output_index_string_offset (indirect_string_node **h, unsigned int *offset)
22798 {
22799   indirect_string_node *node = *h;
22800
22801   if (node->form == DW_FORM_GNU_str_index && node->refcount > 0)
22802     {
22803       /* Assert that this node has been assigned an index.  */
22804       gcc_assert (node->index != NO_INDEX_ASSIGNED
22805                   && node->index != NOT_INDEXED);
22806       dw2_asm_output_data (DWARF_OFFSET_SIZE, *offset,
22807                            "indexed string 0x%x: %s", node->index, node->str);
22808       *offset += strlen (node->str) + 1;
22809     }
22810   return 1;
22811 }
22812
22813 /* A helper function for dwarf2out_finish called through
22814    htab_traverse.  Output the indexed string.  */
22815
22816 int
22817 output_index_string (indirect_string_node **h, unsigned int *cur_idx)
22818 {
22819   struct indirect_string_node *node = *h;
22820
22821   if (node->form == DW_FORM_GNU_str_index && node->refcount > 0)
22822     {
22823       /* Assert that the strings are output in the same order as their
22824          indexes were assigned.  */
22825       gcc_assert (*cur_idx == node->index);
22826       assemble_string (node->str, strlen (node->str) + 1);
22827       *cur_idx += 1;
22828     }
22829   return 1;
22830 }
22831
22832 /* A helper function for dwarf2out_finish called through
22833    htab_traverse.  Emit one queued .debug_str string.  */
22834
22835 int
22836 output_indirect_string (indirect_string_node **h, void *)
22837 {
22838   struct indirect_string_node *node = *h;
22839
22840   node->form = find_string_form (node);
22841   if (node->form == DW_FORM_strp && node->refcount > 0)
22842     {
22843       ASM_OUTPUT_LABEL (asm_out_file, node->label);
22844       assemble_string (node->str, strlen (node->str) + 1);
22845     }
22846
22847   return 1;
22848 }
22849
22850 /* Output the indexed string table.  */
22851
22852 static void
22853 output_indirect_strings (void)
22854 {
22855   switch_to_section (debug_str_section);
22856   if (!dwarf_split_debug_info)
22857     debug_str_hash->traverse<void *, output_indirect_string> (NULL);
22858   else
22859     {
22860       unsigned int offset = 0;
22861       unsigned int cur_idx = 0;
22862
22863       skeleton_debug_str_hash->traverse<void *, output_indirect_string> (NULL);
22864
22865       switch_to_section (debug_str_offsets_section);
22866       debug_str_hash->traverse_noresize
22867         <unsigned int *, output_index_string_offset> (&offset);
22868       switch_to_section (debug_str_dwo_section);
22869       debug_str_hash->traverse_noresize<unsigned int *, output_index_string>
22870         (&cur_idx);
22871     }
22872 }
22873
22874 /* Callback for htab_traverse to assign an index to an entry in the
22875    table, and to write that entry to the .debug_addr section.  */
22876
22877 int
22878 output_addr_table_entry (addr_table_entry **slot, unsigned int *cur_index)
22879 {
22880   addr_table_entry *entry = *slot;
22881
22882   if (entry->refcount == 0)
22883     {
22884       gcc_assert (entry->index == NO_INDEX_ASSIGNED
22885                   || entry->index == NOT_INDEXED);
22886       return 1;
22887     }
22888
22889   gcc_assert (entry->index == *cur_index);
22890   (*cur_index)++;
22891
22892   switch (entry->kind)
22893     {
22894       case ate_kind_rtx:
22895         dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE, entry->addr.rtl,
22896                                  "0x%x", entry->index);
22897         break;
22898       case ate_kind_rtx_dtprel:
22899         gcc_assert (targetm.asm_out.output_dwarf_dtprel);
22900         targetm.asm_out.output_dwarf_dtprel (asm_out_file,
22901                                              DWARF2_ADDR_SIZE,
22902                                              entry->addr.rtl);
22903         fputc ('\n', asm_out_file);
22904         break;
22905       case ate_kind_label:
22906         dw2_asm_output_addr (DWARF2_ADDR_SIZE, entry->addr.label,
22907                                  "0x%x", entry->index);
22908         break;
22909       default:
22910         gcc_unreachable ();
22911     }
22912   return 1;
22913 }
22914
22915 /* Produce the .debug_addr section.  */
22916
22917 static void
22918 output_addr_table (void)
22919 {
22920   unsigned int index = 0;
22921   if (addr_index_table == NULL || addr_index_table->size () == 0)
22922     return;
22923
22924   switch_to_section (debug_addr_section);
22925   addr_index_table
22926     ->traverse_noresize<unsigned int *, output_addr_table_entry> (&index);
22927 }
22928
22929 #if ENABLE_ASSERT_CHECKING
22930 /* Verify that all marks are clear.  */
22931
22932 static void
22933 verify_marks_clear (dw_die_ref die)
22934 {
22935   dw_die_ref c;
22936
22937   gcc_assert (! die->die_mark);
22938   FOR_EACH_CHILD (die, c, verify_marks_clear (c));
22939 }
22940 #endif /* ENABLE_ASSERT_CHECKING */
22941
22942 /* Clear the marks for a die and its children.
22943    Be cool if the mark isn't set.  */
22944
22945 static void
22946 prune_unmark_dies (dw_die_ref die)
22947 {
22948   dw_die_ref c;
22949
22950   if (die->die_mark)
22951     die->die_mark = 0;
22952   FOR_EACH_CHILD (die, c, prune_unmark_dies (c));
22953 }
22954
22955 /* Given DIE that we're marking as used, find any other dies
22956    it references as attributes and mark them as used.  */
22957
22958 static void
22959 prune_unused_types_walk_attribs (dw_die_ref die)
22960 {
22961   dw_attr_ref a;
22962   unsigned ix;
22963
22964   FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
22965     {
22966       if (a->dw_attr_val.val_class == dw_val_class_die_ref)
22967         {
22968           /* A reference to another DIE.
22969              Make sure that it will get emitted.
22970              If it was broken out into a comdat group, don't follow it.  */
22971           if (! AT_ref (a)->comdat_type_p
22972               || a->dw_attr == DW_AT_specification)
22973             prune_unused_types_mark (a->dw_attr_val.v.val_die_ref.die, 1);
22974         }
22975       /* Set the string's refcount to 0 so that prune_unused_types_mark
22976          accounts properly for it.  */
22977       if (AT_class (a) == dw_val_class_str)
22978         a->dw_attr_val.v.val_str->refcount = 0;
22979     }
22980 }
22981
22982 /* Mark the generic parameters and arguments children DIEs of DIE.  */
22983
22984 static void
22985 prune_unused_types_mark_generic_parms_dies (dw_die_ref die)
22986 {
22987   dw_die_ref c;
22988
22989   if (die == NULL || die->die_child == NULL)
22990     return;
22991   c = die->die_child;
22992   do
22993     {
22994       if (is_template_parameter (c))
22995         prune_unused_types_mark (c, 1);
22996       c = c->die_sib;
22997     } while (c && c != die->die_child);
22998 }
22999
23000 /* Mark DIE as being used.  If DOKIDS is true, then walk down
23001    to DIE's children.  */
23002
23003 static void
23004 prune_unused_types_mark (dw_die_ref die, int dokids)
23005 {
23006   dw_die_ref c;
23007
23008   if (die->die_mark == 0)
23009     {
23010       /* We haven't done this node yet.  Mark it as used.  */
23011       die->die_mark = 1;
23012       /* If this is the DIE of a generic type instantiation,
23013          mark the children DIEs that describe its generic parms and
23014          args.  */
23015       prune_unused_types_mark_generic_parms_dies (die);
23016
23017       /* We also have to mark its parents as used.
23018          (But we don't want to mark our parent's kids due to this,
23019          unless it is a class.)  */
23020       if (die->die_parent)
23021         prune_unused_types_mark (die->die_parent,
23022                                  class_scope_p (die->die_parent));
23023
23024       /* Mark any referenced nodes.  */
23025       prune_unused_types_walk_attribs (die);
23026
23027       /* If this node is a specification,
23028          also mark the definition, if it exists.  */
23029       if (get_AT_flag (die, DW_AT_declaration) && die->die_definition)
23030         prune_unused_types_mark (die->die_definition, 1);
23031     }
23032
23033   if (dokids && die->die_mark != 2)
23034     {
23035       /* We need to walk the children, but haven't done so yet.
23036          Remember that we've walked the kids.  */
23037       die->die_mark = 2;
23038
23039       /* If this is an array type, we need to make sure our
23040          kids get marked, even if they're types.  If we're
23041          breaking out types into comdat sections, do this
23042          for all type definitions.  */
23043       if (die->die_tag == DW_TAG_array_type
23044           || (use_debug_types
23045               && is_type_die (die) && ! is_declaration_die (die)))
23046         FOR_EACH_CHILD (die, c, prune_unused_types_mark (c, 1));
23047       else
23048         FOR_EACH_CHILD (die, c, prune_unused_types_walk (c));
23049     }
23050 }
23051
23052 /* For local classes, look if any static member functions were emitted
23053    and if so, mark them.  */
23054
23055 static void
23056 prune_unused_types_walk_local_classes (dw_die_ref die)
23057 {
23058   dw_die_ref c;
23059
23060   if (die->die_mark == 2)
23061     return;
23062
23063   switch (die->die_tag)
23064     {
23065     case DW_TAG_structure_type:
23066     case DW_TAG_union_type:
23067     case DW_TAG_class_type:
23068       break;
23069
23070     case DW_TAG_subprogram:
23071       if (!get_AT_flag (die, DW_AT_declaration)
23072           || die->die_definition != NULL)
23073         prune_unused_types_mark (die, 1);
23074       return;
23075
23076     default:
23077       return;
23078     }
23079
23080   /* Mark children.  */
23081   FOR_EACH_CHILD (die, c, prune_unused_types_walk_local_classes (c));
23082 }
23083
23084 /* Walk the tree DIE and mark types that we actually use.  */
23085
23086 static void
23087 prune_unused_types_walk (dw_die_ref die)
23088 {
23089   dw_die_ref c;
23090
23091   /* Don't do anything if this node is already marked and
23092      children have been marked as well.  */
23093   if (die->die_mark == 2)
23094     return;
23095
23096   switch (die->die_tag)
23097     {
23098     case DW_TAG_structure_type:
23099     case DW_TAG_union_type:
23100     case DW_TAG_class_type:
23101       if (die->die_perennial_p)
23102         break;
23103
23104       for (c = die->die_parent; c; c = c->die_parent)
23105         if (c->die_tag == DW_TAG_subprogram)
23106           break;
23107
23108       /* Finding used static member functions inside of classes
23109          is needed just for local classes, because for other classes
23110          static member function DIEs with DW_AT_specification
23111          are emitted outside of the DW_TAG_*_type.  If we ever change
23112          it, we'd need to call this even for non-local classes.  */
23113       if (c)
23114         prune_unused_types_walk_local_classes (die);
23115
23116       /* It's a type node --- don't mark it.  */
23117       return;
23118
23119     case DW_TAG_const_type:
23120     case DW_TAG_packed_type:
23121     case DW_TAG_pointer_type:
23122     case DW_TAG_reference_type:
23123     case DW_TAG_rvalue_reference_type:
23124     case DW_TAG_volatile_type:
23125     case DW_TAG_typedef:
23126     case DW_TAG_array_type:
23127     case DW_TAG_interface_type:
23128     case DW_TAG_friend:
23129     case DW_TAG_variant_part:
23130     case DW_TAG_enumeration_type:
23131     case DW_TAG_subroutine_type:
23132     case DW_TAG_string_type:
23133     case DW_TAG_set_type:
23134     case DW_TAG_subrange_type:
23135     case DW_TAG_ptr_to_member_type:
23136     case DW_TAG_file_type:
23137       if (die->die_perennial_p)
23138         break;
23139
23140       /* It's a type node --- don't mark it.  */
23141       return;
23142
23143     default:
23144       /* Mark everything else.  */
23145       break;
23146   }
23147
23148   if (die->die_mark == 0)
23149     {
23150       die->die_mark = 1;
23151
23152       /* Now, mark any dies referenced from here.  */
23153       prune_unused_types_walk_attribs (die);
23154     }
23155
23156   die->die_mark = 2;
23157
23158   /* Mark children.  */
23159   FOR_EACH_CHILD (die, c, prune_unused_types_walk (c));
23160 }
23161
23162 /* Increment the string counts on strings referred to from DIE's
23163    attributes.  */
23164
23165 static void
23166 prune_unused_types_update_strings (dw_die_ref die)
23167 {
23168   dw_attr_ref a;
23169   unsigned ix;
23170
23171   FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
23172     if (AT_class (a) == dw_val_class_str)
23173       {
23174         struct indirect_string_node *s = a->dw_attr_val.v.val_str;
23175         s->refcount++;
23176         /* Avoid unnecessarily putting strings that are used less than
23177            twice in the hash table.  */
23178         if (s->refcount
23179             == ((DEBUG_STR_SECTION_FLAGS & SECTION_MERGE) ? 1 : 2))
23180           {
23181             indirect_string_node **slot
23182               = debug_str_hash->find_slot_with_hash (s->str,
23183                                                      htab_hash_string (s->str),
23184                                                      INSERT);
23185             gcc_assert (*slot == NULL);
23186             *slot = s;
23187           }
23188       }
23189 }
23190
23191 /* Remove from the tree DIE any dies that aren't marked.  */
23192
23193 static void
23194 prune_unused_types_prune (dw_die_ref die)
23195 {
23196   dw_die_ref c;
23197
23198   gcc_assert (die->die_mark);
23199   prune_unused_types_update_strings (die);
23200
23201   if (! die->die_child)
23202     return;
23203
23204   c = die->die_child;
23205   do {
23206     dw_die_ref prev = c;
23207     for (c = c->die_sib; ! c->die_mark; c = c->die_sib)
23208       if (c == die->die_child)
23209         {
23210           /* No marked children between 'prev' and the end of the list.  */
23211           if (prev == c)
23212             /* No marked children at all.  */
23213             die->die_child = NULL;
23214           else
23215             {
23216               prev->die_sib = c->die_sib;
23217               die->die_child = prev;
23218             }
23219           return;
23220         }
23221
23222     if (c != prev->die_sib)
23223       prev->die_sib = c;
23224     prune_unused_types_prune (c);
23225   } while (c != die->die_child);
23226 }
23227
23228 /* Remove dies representing declarations that we never use.  */
23229
23230 static void
23231 prune_unused_types (void)
23232 {
23233   unsigned int i;
23234   limbo_die_node *node;
23235   comdat_type_node *ctnode;
23236   pubname_ref pub;
23237   dw_die_ref base_type;
23238
23239 #if ENABLE_ASSERT_CHECKING
23240   /* All the marks should already be clear.  */
23241   verify_marks_clear (comp_unit_die ());
23242   for (node = limbo_die_list; node; node = node->next)
23243     verify_marks_clear (node->die);
23244   for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next)
23245     verify_marks_clear (ctnode->root_die);
23246 #endif /* ENABLE_ASSERT_CHECKING */
23247
23248   /* Mark types that are used in global variables.  */
23249   premark_types_used_by_global_vars ();
23250
23251   /* Set the mark on nodes that are actually used.  */
23252   prune_unused_types_walk (comp_unit_die ());
23253   for (node = limbo_die_list; node; node = node->next)
23254     prune_unused_types_walk (node->die);
23255   for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next)
23256     {
23257       prune_unused_types_walk (ctnode->root_die);
23258       prune_unused_types_mark (ctnode->type_die, 1);
23259     }
23260
23261   /* Also set the mark on nodes referenced from the pubname_table.  Enumerators
23262      are unusual in that they are pubnames that are the children of pubtypes.
23263      They should only be marked via their parent DW_TAG_enumeration_type die,
23264      not as roots in themselves.  */
23265   FOR_EACH_VEC_ELT (*pubname_table, i, pub)
23266     if (pub->die->die_tag != DW_TAG_enumerator)
23267       prune_unused_types_mark (pub->die, 1);
23268   for (i = 0; base_types.iterate (i, &base_type); i++)
23269     prune_unused_types_mark (base_type, 1);
23270
23271   if (debug_str_hash)
23272     debug_str_hash->empty ();
23273   if (skeleton_debug_str_hash)
23274     skeleton_debug_str_hash->empty ();
23275   prune_unused_types_prune (comp_unit_die ());
23276   for (node = limbo_die_list; node; node = node->next)
23277     prune_unused_types_prune (node->die);
23278   for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next)
23279     prune_unused_types_prune (ctnode->root_die);
23280
23281   /* Leave the marks clear.  */
23282   prune_unmark_dies (comp_unit_die ());
23283   for (node = limbo_die_list; node; node = node->next)
23284     prune_unmark_dies (node->die);
23285   for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next)
23286     prune_unmark_dies (ctnode->root_die);
23287 }
23288
23289 /* Set the parameter to true if there are any relative pathnames in
23290    the file table.  */
23291 int
23292 file_table_relative_p (dwarf_file_data **slot, bool *p)
23293 {
23294   struct dwarf_file_data *d = *slot;
23295   if (!IS_ABSOLUTE_PATH (d->filename))
23296     {
23297       *p = true;
23298       return 0;
23299     }
23300   return 1;
23301 }
23302
23303 /* Helpers to manipulate hash table of comdat type units.  */
23304
23305 struct comdat_type_hasher : typed_noop_remove <comdat_type_node>
23306 {
23307   typedef comdat_type_node value_type;
23308   typedef comdat_type_node compare_type;
23309   static inline hashval_t hash (const value_type *);
23310   static inline bool equal (const value_type *, const compare_type *);
23311 };
23312
23313 inline hashval_t
23314 comdat_type_hasher::hash (const value_type *type_node)
23315 {
23316   hashval_t h;
23317   memcpy (&h, type_node->signature, sizeof (h));
23318   return h;
23319 }
23320
23321 inline bool
23322 comdat_type_hasher::equal (const value_type *type_node_1,
23323                            const compare_type *type_node_2)
23324 {
23325   return (! memcmp (type_node_1->signature, type_node_2->signature,
23326                     DWARF_TYPE_SIGNATURE_SIZE));
23327 }
23328
23329 /* Move a DW_AT_{,MIPS_}linkage_name attribute just added to dw_die_ref
23330    to the location it would have been added, should we know its
23331    DECL_ASSEMBLER_NAME when we added other attributes.  This will
23332    probably improve compactness of debug info, removing equivalent
23333    abbrevs, and hide any differences caused by deferring the
23334    computation of the assembler name, triggered by e.g. PCH.  */
23335
23336 static inline void
23337 move_linkage_attr (dw_die_ref die)
23338 {
23339   unsigned ix = vec_safe_length (die->die_attr);
23340   dw_attr_node linkage = (*die->die_attr)[ix - 1];
23341
23342   gcc_assert (linkage.dw_attr == DW_AT_linkage_name
23343               || linkage.dw_attr == DW_AT_MIPS_linkage_name);
23344
23345   while (--ix > 0)
23346     {
23347       dw_attr_node *prev = &(*die->die_attr)[ix - 1];
23348
23349       if (prev->dw_attr == DW_AT_decl_line || prev->dw_attr == DW_AT_name)
23350         break;
23351     }
23352
23353   if (ix != vec_safe_length (die->die_attr) - 1)
23354     {
23355       die->die_attr->pop ();
23356       die->die_attr->quick_insert (ix, linkage);
23357     }
23358 }
23359
23360 /* Helper function for resolve_addr, mark DW_TAG_base_type nodes
23361    referenced from typed stack ops and count how often they are used.  */
23362
23363 static void
23364 mark_base_types (dw_loc_descr_ref loc)
23365 {
23366   dw_die_ref base_type = NULL;
23367
23368   for (; loc; loc = loc->dw_loc_next)
23369     {
23370       switch (loc->dw_loc_opc)
23371         {
23372         case DW_OP_GNU_regval_type:
23373         case DW_OP_GNU_deref_type:
23374           base_type = loc->dw_loc_oprnd2.v.val_die_ref.die;
23375           break;
23376         case DW_OP_GNU_convert:
23377         case DW_OP_GNU_reinterpret:
23378           if (loc->dw_loc_oprnd1.val_class == dw_val_class_unsigned_const)
23379             continue;
23380           /* FALLTHRU */
23381         case DW_OP_GNU_const_type:
23382           base_type = loc->dw_loc_oprnd1.v.val_die_ref.die;
23383           break;
23384         case DW_OP_GNU_entry_value:
23385           mark_base_types (loc->dw_loc_oprnd1.v.val_loc);
23386           continue;
23387         default:
23388           continue;
23389         }
23390       gcc_assert (base_type->die_parent == comp_unit_die ());
23391       if (base_type->die_mark)
23392         base_type->die_mark++;
23393       else
23394         {
23395           base_types.safe_push (base_type);
23396           base_type->die_mark = 1;
23397         }
23398     }
23399 }
23400
23401 /* Comparison function for sorting marked base types.  */
23402
23403 static int
23404 base_type_cmp (const void *x, const void *y)
23405 {
23406   dw_die_ref dx = *(const dw_die_ref *) x;
23407   dw_die_ref dy = *(const dw_die_ref *) y;
23408   unsigned int byte_size1, byte_size2;
23409   unsigned int encoding1, encoding2;
23410   if (dx->die_mark > dy->die_mark)
23411     return -1;
23412   if (dx->die_mark < dy->die_mark)
23413     return 1;
23414   byte_size1 = get_AT_unsigned (dx, DW_AT_byte_size);
23415   byte_size2 = get_AT_unsigned (dy, DW_AT_byte_size);
23416   if (byte_size1 < byte_size2)
23417     return 1;
23418   if (byte_size1 > byte_size2)
23419     return -1;
23420   encoding1 = get_AT_unsigned (dx, DW_AT_encoding);
23421   encoding2 = get_AT_unsigned (dy, DW_AT_encoding);
23422   if (encoding1 < encoding2)
23423     return 1;
23424   if (encoding1 > encoding2)
23425     return -1;
23426   return 0;
23427 }
23428
23429 /* Move base types marked by mark_base_types as early as possible
23430    in the CU, sorted by decreasing usage count both to make the
23431    uleb128 references as small as possible and to make sure they
23432    will have die_offset already computed by calc_die_sizes when
23433    sizes of typed stack loc ops is computed.  */
23434
23435 static void
23436 move_marked_base_types (void)
23437 {
23438   unsigned int i;
23439   dw_die_ref base_type, die, c;
23440
23441   if (base_types.is_empty ())
23442     return;
23443
23444   /* Sort by decreasing usage count, they will be added again in that
23445      order later on.  */
23446   base_types.qsort (base_type_cmp);
23447   die = comp_unit_die ();
23448   c = die->die_child;
23449   do
23450     {
23451       dw_die_ref prev = c;
23452       c = c->die_sib;
23453       while (c->die_mark)
23454         {
23455           remove_child_with_prev (c, prev);
23456           /* As base types got marked, there must be at least
23457              one node other than DW_TAG_base_type.  */
23458           gcc_assert (c != c->die_sib);
23459           c = c->die_sib;
23460         }
23461     }
23462   while (c != die->die_child);
23463   gcc_assert (die->die_child);
23464   c = die->die_child;
23465   for (i = 0; base_types.iterate (i, &base_type); i++)
23466     {
23467       base_type->die_mark = 0;
23468       base_type->die_sib = c->die_sib;
23469       c->die_sib = base_type;
23470       c = base_type;
23471     }
23472 }
23473
23474 /* Helper function for resolve_addr, attempt to resolve
23475    one CONST_STRING, return true if successful.  Similarly verify that
23476    SYMBOL_REFs refer to variables emitted in the current CU.  */
23477
23478 static bool
23479 resolve_one_addr (rtx *addr)
23480 {
23481   rtx rtl = *addr;
23482
23483   if (GET_CODE (rtl) == CONST_STRING)
23484     {
23485       size_t len = strlen (XSTR (rtl, 0)) + 1;
23486       tree t = build_string (len, XSTR (rtl, 0));
23487       tree tlen = size_int (len - 1);
23488       TREE_TYPE (t)
23489         = build_array_type (char_type_node, build_index_type (tlen));
23490       rtl = lookup_constant_def (t);
23491       if (!rtl || !MEM_P (rtl))
23492         return false;
23493       rtl = XEXP (rtl, 0);
23494       if (GET_CODE (rtl) == SYMBOL_REF
23495           && SYMBOL_REF_DECL (rtl)
23496           && !TREE_ASM_WRITTEN (SYMBOL_REF_DECL (rtl)))
23497         return false;
23498       vec_safe_push (used_rtx_array, rtl);
23499       *addr = rtl;
23500       return true;
23501     }
23502
23503   if (GET_CODE (rtl) == SYMBOL_REF
23504       && SYMBOL_REF_DECL (rtl))
23505     {
23506       if (TREE_CONSTANT_POOL_ADDRESS_P (rtl))
23507         {
23508           if (!TREE_ASM_WRITTEN (DECL_INITIAL (SYMBOL_REF_DECL (rtl))))
23509             return false;
23510         }
23511       else if (!TREE_ASM_WRITTEN (SYMBOL_REF_DECL (rtl)))
23512         return false;
23513     }
23514
23515   if (GET_CODE (rtl) == CONST)
23516     {
23517       subrtx_ptr_iterator::array_type array;
23518       FOR_EACH_SUBRTX_PTR (iter, array, &XEXP (rtl, 0), ALL)
23519         if (!resolve_one_addr (*iter))
23520           return false;
23521     }
23522
23523   return true;
23524 }
23525
23526 /* For STRING_CST, return SYMBOL_REF of its constant pool entry,
23527    if possible, and create DW_TAG_dwarf_procedure that can be referenced
23528    from DW_OP_GNU_implicit_pointer if the string hasn't been seen yet.  */
23529
23530 static rtx
23531 string_cst_pool_decl (tree t)
23532 {
23533   rtx rtl = output_constant_def (t, 1);
23534   unsigned char *array;
23535   dw_loc_descr_ref l;
23536   tree decl;
23537   size_t len;
23538   dw_die_ref ref;
23539
23540   if (!rtl || !MEM_P (rtl))
23541     return NULL_RTX;
23542   rtl = XEXP (rtl, 0);
23543   if (GET_CODE (rtl) != SYMBOL_REF
23544       || SYMBOL_REF_DECL (rtl) == NULL_TREE)
23545     return NULL_RTX;
23546
23547   decl = SYMBOL_REF_DECL (rtl);
23548   if (!lookup_decl_die (decl))
23549     {
23550       len = TREE_STRING_LENGTH (t);
23551       vec_safe_push (used_rtx_array, rtl);
23552       ref = new_die (DW_TAG_dwarf_procedure, comp_unit_die (), decl);
23553       array = ggc_vec_alloc<unsigned char> (len);
23554       memcpy (array, TREE_STRING_POINTER (t), len);
23555       l = new_loc_descr (DW_OP_implicit_value, len, 0);
23556       l->dw_loc_oprnd2.val_class = dw_val_class_vec;
23557       l->dw_loc_oprnd2.v.val_vec.length = len;
23558       l->dw_loc_oprnd2.v.val_vec.elt_size = 1;
23559       l->dw_loc_oprnd2.v.val_vec.array = array;
23560       add_AT_loc (ref, DW_AT_location, l);
23561       equate_decl_number_to_die (decl, ref);
23562     }
23563   return rtl;
23564 }
23565
23566 /* Helper function of resolve_addr_in_expr.  LOC is
23567    a DW_OP_addr followed by DW_OP_stack_value, either at the start
23568    of exprloc or after DW_OP_{,bit_}piece, and val_addr can't be
23569    resolved.  Replace it (both DW_OP_addr and DW_OP_stack_value)
23570    with DW_OP_GNU_implicit_pointer if possible
23571    and return true, if unsuccessful, return false.  */
23572
23573 static bool
23574 optimize_one_addr_into_implicit_ptr (dw_loc_descr_ref loc)
23575 {
23576   rtx rtl = loc->dw_loc_oprnd1.v.val_addr;
23577   HOST_WIDE_INT offset = 0;
23578   dw_die_ref ref = NULL;
23579   tree decl;
23580
23581   if (GET_CODE (rtl) == CONST
23582       && GET_CODE (XEXP (rtl, 0)) == PLUS
23583       && CONST_INT_P (XEXP (XEXP (rtl, 0), 1)))
23584     {
23585       offset = INTVAL (XEXP (XEXP (rtl, 0), 1));
23586       rtl = XEXP (XEXP (rtl, 0), 0);
23587     }
23588   if (GET_CODE (rtl) == CONST_STRING)
23589     {
23590       size_t len = strlen (XSTR (rtl, 0)) + 1;
23591       tree t = build_string (len, XSTR (rtl, 0));
23592       tree tlen = size_int (len - 1);
23593
23594       TREE_TYPE (t)
23595         = build_array_type (char_type_node, build_index_type (tlen));
23596       rtl = string_cst_pool_decl (t);
23597       if (!rtl)
23598         return false;
23599     }
23600   if (GET_CODE (rtl) == SYMBOL_REF && SYMBOL_REF_DECL (rtl))
23601     {
23602       decl = SYMBOL_REF_DECL (rtl);
23603       if (TREE_CODE (decl) == VAR_DECL && !DECL_EXTERNAL (decl))
23604         {
23605           ref = lookup_decl_die (decl);
23606           if (ref && (get_AT (ref, DW_AT_location)
23607                       || get_AT (ref, DW_AT_const_value)))
23608             {
23609               loc->dw_loc_opc = DW_OP_GNU_implicit_pointer;
23610               loc->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
23611               loc->dw_loc_oprnd1.val_entry = NULL;
23612               loc->dw_loc_oprnd1.v.val_die_ref.die = ref;
23613               loc->dw_loc_oprnd1.v.val_die_ref.external = 0;
23614               loc->dw_loc_next = loc->dw_loc_next->dw_loc_next;
23615               loc->dw_loc_oprnd2.v.val_int = offset;
23616               return true;
23617             }
23618         }
23619     }
23620   return false;
23621 }
23622
23623 /* Helper function for resolve_addr, handle one location
23624    expression, return false if at least one CONST_STRING or SYMBOL_REF in
23625    the location list couldn't be resolved.  */
23626
23627 static bool
23628 resolve_addr_in_expr (dw_loc_descr_ref loc)
23629 {
23630   dw_loc_descr_ref keep = NULL;
23631   for (dw_loc_descr_ref prev = NULL; loc; prev = loc, loc = loc->dw_loc_next)
23632     switch (loc->dw_loc_opc)
23633       {
23634       case DW_OP_addr:
23635         if (!resolve_one_addr (&loc->dw_loc_oprnd1.v.val_addr))
23636           {
23637             if ((prev == NULL
23638                  || prev->dw_loc_opc == DW_OP_piece
23639                  || prev->dw_loc_opc == DW_OP_bit_piece)
23640                 && loc->dw_loc_next
23641                 && loc->dw_loc_next->dw_loc_opc == DW_OP_stack_value
23642                 && !dwarf_strict
23643                 && optimize_one_addr_into_implicit_ptr (loc))
23644               break;
23645             return false;
23646           }
23647         break;
23648       case DW_OP_GNU_addr_index:
23649       case DW_OP_GNU_const_index:
23650         if (loc->dw_loc_opc == DW_OP_GNU_addr_index
23651             || (loc->dw_loc_opc == DW_OP_GNU_const_index && loc->dtprel))
23652           {
23653             rtx rtl = loc->dw_loc_oprnd1.val_entry->addr.rtl;
23654             if (!resolve_one_addr (&rtl))
23655               return false;
23656             remove_addr_table_entry (loc->dw_loc_oprnd1.val_entry);
23657             loc->dw_loc_oprnd1.val_entry =
23658                 add_addr_table_entry (rtl, ate_kind_rtx);
23659           }
23660         break;
23661       case DW_OP_const4u:
23662       case DW_OP_const8u:
23663         if (loc->dtprel
23664             && !resolve_one_addr (&loc->dw_loc_oprnd1.v.val_addr))
23665           return false;
23666         break;
23667       case DW_OP_plus_uconst:
23668         if (size_of_loc_descr (loc)
23669             > size_of_int_loc_descriptor (loc->dw_loc_oprnd1.v.val_unsigned)
23670               + 1
23671             && loc->dw_loc_oprnd1.v.val_unsigned > 0)
23672           {
23673             dw_loc_descr_ref repl
23674               = int_loc_descriptor (loc->dw_loc_oprnd1.v.val_unsigned);
23675             add_loc_descr (&repl, new_loc_descr (DW_OP_plus, 0, 0));
23676             add_loc_descr (&repl, loc->dw_loc_next);
23677             *loc = *repl;
23678           }
23679         break;
23680       case DW_OP_implicit_value:
23681         if (loc->dw_loc_oprnd2.val_class == dw_val_class_addr
23682             && !resolve_one_addr (&loc->dw_loc_oprnd2.v.val_addr))
23683           return false;
23684         break;
23685       case DW_OP_GNU_implicit_pointer:
23686       case DW_OP_GNU_parameter_ref:
23687         if (loc->dw_loc_oprnd1.val_class == dw_val_class_decl_ref)
23688           {
23689             dw_die_ref ref
23690               = lookup_decl_die (loc->dw_loc_oprnd1.v.val_decl_ref);
23691             if (ref == NULL)
23692               return false;
23693             loc->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
23694             loc->dw_loc_oprnd1.v.val_die_ref.die = ref;
23695             loc->dw_loc_oprnd1.v.val_die_ref.external = 0;
23696           }
23697         break;
23698       case DW_OP_GNU_const_type:
23699       case DW_OP_GNU_regval_type:
23700       case DW_OP_GNU_deref_type:
23701       case DW_OP_GNU_convert:
23702       case DW_OP_GNU_reinterpret:
23703         while (loc->dw_loc_next
23704                && loc->dw_loc_next->dw_loc_opc == DW_OP_GNU_convert)
23705           {
23706             dw_die_ref base1, base2;
23707             unsigned enc1, enc2, size1, size2;
23708             if (loc->dw_loc_opc == DW_OP_GNU_regval_type
23709                 || loc->dw_loc_opc == DW_OP_GNU_deref_type)
23710               base1 = loc->dw_loc_oprnd2.v.val_die_ref.die;
23711             else if (loc->dw_loc_oprnd1.val_class
23712                      == dw_val_class_unsigned_const)
23713               break;
23714             else
23715               base1 = loc->dw_loc_oprnd1.v.val_die_ref.die;
23716             if (loc->dw_loc_next->dw_loc_oprnd1.val_class
23717                 == dw_val_class_unsigned_const)
23718               break;
23719             base2 = loc->dw_loc_next->dw_loc_oprnd1.v.val_die_ref.die;
23720             gcc_assert (base1->die_tag == DW_TAG_base_type
23721                         && base2->die_tag == DW_TAG_base_type);
23722             enc1 = get_AT_unsigned (base1, DW_AT_encoding);
23723             enc2 = get_AT_unsigned (base2, DW_AT_encoding);
23724             size1 = get_AT_unsigned (base1, DW_AT_byte_size);
23725             size2 = get_AT_unsigned (base2, DW_AT_byte_size);
23726             if (size1 == size2
23727                 && (((enc1 == DW_ATE_unsigned || enc1 == DW_ATE_signed)
23728                      && (enc2 == DW_ATE_unsigned || enc2 == DW_ATE_signed)
23729                      && loc != keep)
23730                     || enc1 == enc2))
23731               {
23732                 /* Optimize away next DW_OP_GNU_convert after
23733                    adjusting LOC's base type die reference.  */
23734                 if (loc->dw_loc_opc == DW_OP_GNU_regval_type
23735                     || loc->dw_loc_opc == DW_OP_GNU_deref_type)
23736                   loc->dw_loc_oprnd2.v.val_die_ref.die = base2;
23737                 else
23738                   loc->dw_loc_oprnd1.v.val_die_ref.die = base2;
23739                 loc->dw_loc_next = loc->dw_loc_next->dw_loc_next;
23740                 continue;
23741               }
23742             /* Don't change integer DW_OP_GNU_convert after e.g. floating
23743                point typed stack entry.  */
23744             else if (enc1 != DW_ATE_unsigned && enc1 != DW_ATE_signed)
23745               keep = loc->dw_loc_next;
23746             break;
23747           }
23748         break;
23749       default:
23750         break;
23751       }
23752   return true;
23753 }
23754
23755 /* Helper function of resolve_addr.  DIE had DW_AT_location of
23756    DW_OP_addr alone, which referred to DECL in DW_OP_addr's operand
23757    and DW_OP_addr couldn't be resolved.  resolve_addr has already
23758    removed the DW_AT_location attribute.  This function attempts to
23759    add a new DW_AT_location attribute with DW_OP_GNU_implicit_pointer
23760    to it or DW_AT_const_value attribute, if possible.  */
23761
23762 static void
23763 optimize_location_into_implicit_ptr (dw_die_ref die, tree decl)
23764 {
23765   if (TREE_CODE (decl) != VAR_DECL
23766       || lookup_decl_die (decl) != die
23767       || DECL_EXTERNAL (decl)
23768       || !TREE_STATIC (decl)
23769       || DECL_INITIAL (decl) == NULL_TREE
23770       || DECL_P (DECL_INITIAL (decl))
23771       || get_AT (die, DW_AT_const_value))
23772     return;
23773
23774   tree init = DECL_INITIAL (decl);
23775   HOST_WIDE_INT offset = 0;
23776   /* For variables that have been optimized away and thus
23777      don't have a memory location, see if we can emit
23778      DW_AT_const_value instead.  */
23779   if (tree_add_const_value_attribute (die, init))
23780     return;
23781   if (dwarf_strict)
23782     return;
23783   /* If init is ADDR_EXPR or POINTER_PLUS_EXPR of ADDR_EXPR,
23784      and ADDR_EXPR refers to a decl that has DW_AT_location or
23785      DW_AT_const_value (but isn't addressable, otherwise
23786      resolving the original DW_OP_addr wouldn't fail), see if
23787      we can add DW_OP_GNU_implicit_pointer.  */
23788   STRIP_NOPS (init);
23789   if (TREE_CODE (init) == POINTER_PLUS_EXPR
23790       && tree_fits_shwi_p (TREE_OPERAND (init, 1)))
23791     {
23792       offset = tree_to_shwi (TREE_OPERAND (init, 1));
23793       init = TREE_OPERAND (init, 0);
23794       STRIP_NOPS (init);
23795     }
23796   if (TREE_CODE (init) != ADDR_EXPR)
23797     return;
23798   if ((TREE_CODE (TREE_OPERAND (init, 0)) == STRING_CST
23799        && !TREE_ASM_WRITTEN (TREE_OPERAND (init, 0)))
23800       || (TREE_CODE (TREE_OPERAND (init, 0)) == VAR_DECL
23801           && !DECL_EXTERNAL (TREE_OPERAND (init, 0))
23802           && TREE_OPERAND (init, 0) != decl))
23803     {
23804       dw_die_ref ref;
23805       dw_loc_descr_ref l;
23806
23807       if (TREE_CODE (TREE_OPERAND (init, 0)) == STRING_CST)
23808         {
23809           rtx rtl = string_cst_pool_decl (TREE_OPERAND (init, 0));
23810           if (!rtl)
23811             return;
23812           decl = SYMBOL_REF_DECL (rtl);
23813         }
23814       else
23815         decl = TREE_OPERAND (init, 0);
23816       ref = lookup_decl_die (decl);
23817       if (ref == NULL
23818           || (!get_AT (ref, DW_AT_location)
23819               && !get_AT (ref, DW_AT_const_value)))
23820         return;
23821       l = new_loc_descr (DW_OP_GNU_implicit_pointer, 0, offset);
23822       l->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
23823       l->dw_loc_oprnd1.v.val_die_ref.die = ref;
23824       l->dw_loc_oprnd1.v.val_die_ref.external = 0;
23825       add_AT_loc (die, DW_AT_location, l);
23826     }
23827 }
23828
23829 /* Resolve DW_OP_addr and DW_AT_const_value CONST_STRING arguments to
23830    an address in .rodata section if the string literal is emitted there,
23831    or remove the containing location list or replace DW_AT_const_value
23832    with DW_AT_location and empty location expression, if it isn't found
23833    in .rodata.  Similarly for SYMBOL_REFs, keep only those that refer
23834    to something that has been emitted in the current CU.  */
23835
23836 static void
23837 resolve_addr (dw_die_ref die)
23838 {
23839   dw_die_ref c;
23840   dw_attr_ref a;
23841   dw_loc_list_ref *curr, *start, loc;
23842   unsigned ix;
23843
23844   FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
23845     switch (AT_class (a))
23846       {
23847       case dw_val_class_loc_list:
23848         start = curr = AT_loc_list_ptr (a);
23849         loc = *curr;
23850         gcc_assert (loc);
23851         /* The same list can be referenced more than once.  See if we have
23852            already recorded the result from a previous pass.  */
23853         if (loc->replaced)
23854           *curr = loc->dw_loc_next;
23855         else if (!loc->resolved_addr)
23856           {
23857             /* As things stand, we do not expect or allow one die to
23858                reference a suffix of another die's location list chain.
23859                References must be identical or completely separate.
23860                There is therefore no need to cache the result of this
23861                pass on any list other than the first; doing so
23862                would lead to unnecessary writes.  */
23863             while (*curr)
23864               {
23865                 gcc_assert (!(*curr)->replaced && !(*curr)->resolved_addr);
23866                 if (!resolve_addr_in_expr ((*curr)->expr))
23867                   {
23868                     dw_loc_list_ref next = (*curr)->dw_loc_next;
23869                     dw_loc_descr_ref l = (*curr)->expr;
23870
23871                     if (next && (*curr)->ll_symbol)
23872                       {
23873                         gcc_assert (!next->ll_symbol);
23874                         next->ll_symbol = (*curr)->ll_symbol;
23875                       }
23876                     if (dwarf_split_debug_info)
23877                       remove_loc_list_addr_table_entries (l);
23878                     *curr = next;
23879                   }
23880                 else
23881                   {
23882                     mark_base_types ((*curr)->expr);
23883                     curr = &(*curr)->dw_loc_next;
23884                   }
23885               }
23886             if (loc == *start)
23887               loc->resolved_addr = 1;
23888             else
23889               {
23890                 loc->replaced = 1;
23891                 loc->dw_loc_next = *start;
23892               }
23893           }
23894         if (!*start)
23895           {
23896             remove_AT (die, a->dw_attr);
23897             ix--;
23898           }
23899         break;
23900       case dw_val_class_loc:
23901         {
23902           dw_loc_descr_ref l = AT_loc (a);
23903           /* For -gdwarf-2 don't attempt to optimize
23904              DW_AT_data_member_location containing
23905              DW_OP_plus_uconst - older consumers might
23906              rely on it being that op instead of a more complex,
23907              but shorter, location description.  */
23908           if ((dwarf_version > 2
23909                || a->dw_attr != DW_AT_data_member_location
23910                || l == NULL
23911                || l->dw_loc_opc != DW_OP_plus_uconst
23912                || l->dw_loc_next != NULL)
23913               && !resolve_addr_in_expr (l))
23914             {
23915               if (dwarf_split_debug_info)
23916                 remove_loc_list_addr_table_entries (l);
23917               if (l != NULL
23918                   && l->dw_loc_next == NULL
23919                   && l->dw_loc_opc == DW_OP_addr
23920                   && GET_CODE (l->dw_loc_oprnd1.v.val_addr) == SYMBOL_REF
23921                   && SYMBOL_REF_DECL (l->dw_loc_oprnd1.v.val_addr)
23922                   && a->dw_attr == DW_AT_location)
23923                 {
23924                   tree decl = SYMBOL_REF_DECL (l->dw_loc_oprnd1.v.val_addr);
23925                   remove_AT (die, a->dw_attr);
23926                   ix--;
23927                   optimize_location_into_implicit_ptr (die, decl);
23928                   break;
23929                 }
23930               remove_AT (die, a->dw_attr);
23931               ix--;
23932             }
23933           else
23934             mark_base_types (l);
23935         }
23936         break;
23937       case dw_val_class_addr:
23938         if (a->dw_attr == DW_AT_const_value
23939             && !resolve_one_addr (&a->dw_attr_val.v.val_addr))
23940           {
23941             if (AT_index (a) != NOT_INDEXED)
23942               remove_addr_table_entry (a->dw_attr_val.val_entry);
23943             remove_AT (die, a->dw_attr);
23944             ix--;
23945           }
23946         if (die->die_tag == DW_TAG_GNU_call_site
23947             && a->dw_attr == DW_AT_abstract_origin)
23948           {
23949             tree tdecl = SYMBOL_REF_DECL (a->dw_attr_val.v.val_addr);
23950             dw_die_ref tdie = lookup_decl_die (tdecl);
23951             if (tdie == NULL
23952                 && DECL_EXTERNAL (tdecl)
23953                 && DECL_ABSTRACT_ORIGIN (tdecl) == NULL_TREE)
23954               {
23955                 force_decl_die (tdecl);
23956                 tdie = lookup_decl_die (tdecl);
23957               }
23958             if (tdie)
23959               {
23960                 a->dw_attr_val.val_class = dw_val_class_die_ref;
23961                 a->dw_attr_val.v.val_die_ref.die = tdie;
23962                 a->dw_attr_val.v.val_die_ref.external = 0;
23963               }
23964             else
23965               {
23966                 if (AT_index (a) != NOT_INDEXED)
23967                   remove_addr_table_entry (a->dw_attr_val.val_entry);
23968                 remove_AT (die, a->dw_attr);
23969                 ix--;
23970               }
23971           }
23972         break;
23973       default:
23974         break;
23975       }
23976
23977   FOR_EACH_CHILD (die, c, resolve_addr (c));
23978 }
23979 \f
23980 /* Helper routines for optimize_location_lists.
23981    This pass tries to share identical local lists in .debug_loc
23982    section.  */
23983
23984 /* Iteratively hash operands of LOC opcode into HSTATE.  */
23985
23986 static void
23987 hash_loc_operands (dw_loc_descr_ref loc, inchash::hash &hstate)
23988 {
23989   dw_val_ref val1 = &loc->dw_loc_oprnd1;
23990   dw_val_ref val2 = &loc->dw_loc_oprnd2;
23991
23992   switch (loc->dw_loc_opc)
23993     {
23994     case DW_OP_const4u:
23995     case DW_OP_const8u:
23996       if (loc->dtprel)
23997         goto hash_addr;
23998       /* FALLTHRU */
23999     case DW_OP_const1u:
24000     case DW_OP_const1s:
24001     case DW_OP_const2u:
24002     case DW_OP_const2s:
24003     case DW_OP_const4s:
24004     case DW_OP_const8s:
24005     case DW_OP_constu:
24006     case DW_OP_consts:
24007     case DW_OP_pick:
24008     case DW_OP_plus_uconst:
24009     case DW_OP_breg0:
24010     case DW_OP_breg1:
24011     case DW_OP_breg2:
24012     case DW_OP_breg3:
24013     case DW_OP_breg4:
24014     case DW_OP_breg5:
24015     case DW_OP_breg6:
24016     case DW_OP_breg7:
24017     case DW_OP_breg8:
24018     case DW_OP_breg9:
24019     case DW_OP_breg10:
24020     case DW_OP_breg11:
24021     case DW_OP_breg12:
24022     case DW_OP_breg13:
24023     case DW_OP_breg14:
24024     case DW_OP_breg15:
24025     case DW_OP_breg16:
24026     case DW_OP_breg17:
24027     case DW_OP_breg18:
24028     case DW_OP_breg19:
24029     case DW_OP_breg20:
24030     case DW_OP_breg21:
24031     case DW_OP_breg22:
24032     case DW_OP_breg23:
24033     case DW_OP_breg24:
24034     case DW_OP_breg25:
24035     case DW_OP_breg26:
24036     case DW_OP_breg27:
24037     case DW_OP_breg28:
24038     case DW_OP_breg29:
24039     case DW_OP_breg30:
24040     case DW_OP_breg31:
24041     case DW_OP_regx:
24042     case DW_OP_fbreg:
24043     case DW_OP_piece:
24044     case DW_OP_deref_size:
24045     case DW_OP_xderef_size:
24046       hstate.add_object (val1->v.val_int);
24047       break;
24048     case DW_OP_skip:
24049     case DW_OP_bra:
24050       {
24051         int offset;
24052
24053         gcc_assert (val1->val_class == dw_val_class_loc);
24054         offset = val1->v.val_loc->dw_loc_addr - (loc->dw_loc_addr + 3);
24055         hstate.add_object (offset);
24056       }
24057       break;
24058     case DW_OP_implicit_value:
24059       hstate.add_object (val1->v.val_unsigned);
24060       switch (val2->val_class)
24061         {
24062         case dw_val_class_const:
24063           hstate.add_object (val2->v.val_int);
24064           break;
24065         case dw_val_class_vec:
24066           {
24067             unsigned int elt_size = val2->v.val_vec.elt_size;
24068             unsigned int len = val2->v.val_vec.length;
24069
24070             hstate.add_int (elt_size);
24071             hstate.add_int (len);
24072             hstate.add (val2->v.val_vec.array, len * elt_size);
24073           }
24074           break;
24075         case dw_val_class_const_double:
24076           hstate.add_object (val2->v.val_double.low);
24077           hstate.add_object (val2->v.val_double.high);
24078           break;
24079         case dw_val_class_wide_int:
24080           hstate.add (val2->v.val_wide->get_val (),
24081                       get_full_len (*val2->v.val_wide)
24082                       * HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR);
24083           break;
24084         case dw_val_class_addr: 
24085           inchash::add_rtx (val2->v.val_addr, hstate);
24086           break;
24087         default:
24088           gcc_unreachable ();
24089         }
24090       break;
24091     case DW_OP_bregx:
24092     case DW_OP_bit_piece:
24093       hstate.add_object (val1->v.val_int);
24094       hstate.add_object (val2->v.val_int);
24095       break;
24096     case DW_OP_addr:
24097     hash_addr:
24098       if (loc->dtprel)
24099         {
24100           unsigned char dtprel = 0xd1;
24101           hstate.add_object (dtprel);
24102         }
24103       inchash::add_rtx (val1->v.val_addr, hstate);
24104       break;
24105     case DW_OP_GNU_addr_index:
24106     case DW_OP_GNU_const_index:
24107       {
24108         if (loc->dtprel)
24109           {
24110             unsigned char dtprel = 0xd1;
24111             hstate.add_object (dtprel);
24112           }
24113         inchash::add_rtx (val1->val_entry->addr.rtl, hstate);
24114       }
24115       break;
24116     case DW_OP_GNU_implicit_pointer:
24117       hstate.add_int (val2->v.val_int);
24118       break;
24119     case DW_OP_GNU_entry_value:
24120       hstate.add_object (val1->v.val_loc);
24121       break;
24122     case DW_OP_GNU_regval_type:
24123     case DW_OP_GNU_deref_type:
24124       {
24125         unsigned int byte_size
24126           = get_AT_unsigned (val2->v.val_die_ref.die, DW_AT_byte_size);
24127         unsigned int encoding
24128           = get_AT_unsigned (val2->v.val_die_ref.die, DW_AT_encoding);
24129         hstate.add_object (val1->v.val_int);
24130         hstate.add_object (byte_size);
24131         hstate.add_object (encoding);
24132       }
24133       break;
24134     case DW_OP_GNU_convert:
24135     case DW_OP_GNU_reinterpret:
24136       if (val1->val_class == dw_val_class_unsigned_const)
24137         {
24138           hstate.add_object (val1->v.val_unsigned);
24139           break;
24140         }
24141       /* FALLTHRU */
24142     case DW_OP_GNU_const_type:
24143       {
24144         unsigned int byte_size
24145           = get_AT_unsigned (val1->v.val_die_ref.die, DW_AT_byte_size);
24146         unsigned int encoding
24147           = get_AT_unsigned (val1->v.val_die_ref.die, DW_AT_encoding);
24148         hstate.add_object (byte_size);
24149         hstate.add_object (encoding);
24150         if (loc->dw_loc_opc != DW_OP_GNU_const_type)
24151           break;
24152         hstate.add_object (val2->val_class);
24153         switch (val2->val_class)
24154           {
24155           case dw_val_class_const:
24156             hstate.add_object (val2->v.val_int);
24157             break;
24158           case dw_val_class_vec:
24159             {
24160               unsigned int elt_size = val2->v.val_vec.elt_size;
24161               unsigned int len = val2->v.val_vec.length;
24162
24163               hstate.add_object (elt_size);
24164               hstate.add_object (len);
24165               hstate.add (val2->v.val_vec.array, len * elt_size);
24166             }
24167             break;
24168           case dw_val_class_const_double:
24169             hstate.add_object (val2->v.val_double.low);
24170             hstate.add_object (val2->v.val_double.high);
24171             break;
24172           case dw_val_class_wide_int:
24173             hstate.add (val2->v.val_wide->get_val (),
24174                         get_full_len (*val2->v.val_wide)
24175                         * HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR);
24176             break;
24177           default:
24178             gcc_unreachable ();
24179           }
24180       }
24181       break;
24182
24183     default:
24184       /* Other codes have no operands.  */
24185       break;
24186     }
24187 }
24188
24189 /* Iteratively hash the whole DWARF location expression LOC into HSTATE.  */
24190
24191 static inline void
24192 hash_locs (dw_loc_descr_ref loc, inchash::hash &hstate)
24193 {
24194   dw_loc_descr_ref l;
24195   bool sizes_computed = false;
24196   /* Compute sizes, so that DW_OP_skip/DW_OP_bra can be checksummed.  */
24197   size_of_locs (loc);
24198
24199   for (l = loc; l != NULL; l = l->dw_loc_next)
24200     {
24201       enum dwarf_location_atom opc = l->dw_loc_opc;
24202       hstate.add_object (opc);
24203       if ((opc == DW_OP_skip || opc == DW_OP_bra) && !sizes_computed)
24204         {
24205           size_of_locs (loc);
24206           sizes_computed = true;
24207         }
24208       hash_loc_operands (l, hstate);
24209     }
24210 }
24211
24212 /* Compute hash of the whole location list LIST_HEAD.  */
24213
24214 static inline void
24215 hash_loc_list (dw_loc_list_ref list_head)
24216 {
24217   dw_loc_list_ref curr = list_head;
24218   inchash::hash hstate;
24219
24220   for (curr = list_head; curr != NULL; curr = curr->dw_loc_next)
24221     {
24222       hstate.add (curr->begin, strlen (curr->begin) + 1);
24223       hstate.add (curr->end, strlen (curr->end) + 1);
24224       if (curr->section)
24225         hstate.add (curr->section, strlen (curr->section) + 1);
24226       hash_locs (curr->expr, hstate);
24227     }
24228   list_head->hash = hstate.end ();
24229 }
24230
24231 /* Return true if X and Y opcodes have the same operands.  */
24232
24233 static inline bool
24234 compare_loc_operands (dw_loc_descr_ref x, dw_loc_descr_ref y)
24235 {
24236   dw_val_ref valx1 = &x->dw_loc_oprnd1;
24237   dw_val_ref valx2 = &x->dw_loc_oprnd2;
24238   dw_val_ref valy1 = &y->dw_loc_oprnd1;
24239   dw_val_ref valy2 = &y->dw_loc_oprnd2;
24240
24241   switch (x->dw_loc_opc)
24242     {
24243     case DW_OP_const4u:
24244     case DW_OP_const8u:
24245       if (x->dtprel)
24246         goto hash_addr;
24247       /* FALLTHRU */
24248     case DW_OP_const1u:
24249     case DW_OP_const1s:
24250     case DW_OP_const2u:
24251     case DW_OP_const2s:
24252     case DW_OP_const4s:
24253     case DW_OP_const8s:
24254     case DW_OP_constu:
24255     case DW_OP_consts:
24256     case DW_OP_pick:
24257     case DW_OP_plus_uconst:
24258     case DW_OP_breg0:
24259     case DW_OP_breg1:
24260     case DW_OP_breg2:
24261     case DW_OP_breg3:
24262     case DW_OP_breg4:
24263     case DW_OP_breg5:
24264     case DW_OP_breg6:
24265     case DW_OP_breg7:
24266     case DW_OP_breg8:
24267     case DW_OP_breg9:
24268     case DW_OP_breg10:
24269     case DW_OP_breg11:
24270     case DW_OP_breg12:
24271     case DW_OP_breg13:
24272     case DW_OP_breg14:
24273     case DW_OP_breg15:
24274     case DW_OP_breg16:
24275     case DW_OP_breg17:
24276     case DW_OP_breg18:
24277     case DW_OP_breg19:
24278     case DW_OP_breg20:
24279     case DW_OP_breg21:
24280     case DW_OP_breg22:
24281     case DW_OP_breg23:
24282     case DW_OP_breg24:
24283     case DW_OP_breg25:
24284     case DW_OP_breg26:
24285     case DW_OP_breg27:
24286     case DW_OP_breg28:
24287     case DW_OP_breg29:
24288     case DW_OP_breg30:
24289     case DW_OP_breg31:
24290     case DW_OP_regx:
24291     case DW_OP_fbreg:
24292     case DW_OP_piece:
24293     case DW_OP_deref_size:
24294     case DW_OP_xderef_size:
24295       return valx1->v.val_int == valy1->v.val_int;
24296     case DW_OP_skip:
24297     case DW_OP_bra:
24298       /* If splitting debug info, the use of DW_OP_GNU_addr_index
24299         can cause irrelevant differences in dw_loc_addr.  */
24300       gcc_assert (valx1->val_class == dw_val_class_loc
24301                   && valy1->val_class == dw_val_class_loc
24302                   && (dwarf_split_debug_info
24303                       || x->dw_loc_addr == y->dw_loc_addr));
24304       return valx1->v.val_loc->dw_loc_addr == valy1->v.val_loc->dw_loc_addr;
24305     case DW_OP_implicit_value:
24306       if (valx1->v.val_unsigned != valy1->v.val_unsigned
24307           || valx2->val_class != valy2->val_class)
24308         return false;
24309       switch (valx2->val_class)
24310         {
24311         case dw_val_class_const:
24312           return valx2->v.val_int == valy2->v.val_int;
24313         case dw_val_class_vec:
24314           return valx2->v.val_vec.elt_size == valy2->v.val_vec.elt_size
24315                  && valx2->v.val_vec.length == valy2->v.val_vec.length
24316                  && memcmp (valx2->v.val_vec.array, valy2->v.val_vec.array,
24317                             valx2->v.val_vec.elt_size
24318                             * valx2->v.val_vec.length) == 0;
24319         case dw_val_class_const_double:
24320           return valx2->v.val_double.low == valy2->v.val_double.low
24321                  && valx2->v.val_double.high == valy2->v.val_double.high;
24322         case dw_val_class_wide_int:
24323           return *valx2->v.val_wide == *valy2->v.val_wide;
24324         case dw_val_class_addr:
24325           return rtx_equal_p (valx2->v.val_addr, valy2->v.val_addr);
24326         default:
24327           gcc_unreachable ();
24328         }
24329     case DW_OP_bregx:
24330     case DW_OP_bit_piece:
24331       return valx1->v.val_int == valy1->v.val_int
24332              && valx2->v.val_int == valy2->v.val_int;
24333     case DW_OP_addr:
24334     hash_addr:
24335       return rtx_equal_p (valx1->v.val_addr, valy1->v.val_addr);
24336     case DW_OP_GNU_addr_index:
24337     case DW_OP_GNU_const_index:
24338       {
24339         rtx ax1 = valx1->val_entry->addr.rtl;
24340         rtx ay1 = valy1->val_entry->addr.rtl;
24341         return rtx_equal_p (ax1, ay1);
24342       }
24343     case DW_OP_GNU_implicit_pointer:
24344       return valx1->val_class == dw_val_class_die_ref
24345              && valx1->val_class == valy1->val_class
24346              && valx1->v.val_die_ref.die == valy1->v.val_die_ref.die
24347              && valx2->v.val_int == valy2->v.val_int;
24348     case DW_OP_GNU_entry_value:
24349       return compare_loc_operands (valx1->v.val_loc, valy1->v.val_loc);
24350     case DW_OP_GNU_const_type:
24351       if (valx1->v.val_die_ref.die != valy1->v.val_die_ref.die
24352           || valx2->val_class != valy2->val_class)
24353         return false;
24354       switch (valx2->val_class)
24355         {
24356         case dw_val_class_const:
24357           return valx2->v.val_int == valy2->v.val_int;
24358         case dw_val_class_vec:
24359           return valx2->v.val_vec.elt_size == valy2->v.val_vec.elt_size
24360                  && valx2->v.val_vec.length == valy2->v.val_vec.length
24361                  && memcmp (valx2->v.val_vec.array, valy2->v.val_vec.array,
24362                             valx2->v.val_vec.elt_size
24363                             * valx2->v.val_vec.length) == 0;
24364         case dw_val_class_const_double:
24365           return valx2->v.val_double.low == valy2->v.val_double.low
24366                  && valx2->v.val_double.high == valy2->v.val_double.high;
24367         case dw_val_class_wide_int:
24368           return *valx2->v.val_wide == *valy2->v.val_wide;
24369         default:
24370           gcc_unreachable ();
24371         }
24372     case DW_OP_GNU_regval_type:
24373     case DW_OP_GNU_deref_type:
24374       return valx1->v.val_int == valy1->v.val_int
24375              && valx2->v.val_die_ref.die == valy2->v.val_die_ref.die;
24376     case DW_OP_GNU_convert:
24377     case DW_OP_GNU_reinterpret:
24378       if (valx1->val_class != valy1->val_class)
24379         return false;
24380       if (valx1->val_class == dw_val_class_unsigned_const)
24381         return valx1->v.val_unsigned == valy1->v.val_unsigned;
24382       return valx1->v.val_die_ref.die == valy1->v.val_die_ref.die;
24383     case DW_OP_GNU_parameter_ref:
24384       return valx1->val_class == dw_val_class_die_ref
24385              && valx1->val_class == valy1->val_class
24386              && valx1->v.val_die_ref.die == valy1->v.val_die_ref.die;
24387     default:
24388       /* Other codes have no operands.  */
24389       return true;
24390     }
24391 }
24392
24393 /* Return true if DWARF location expressions X and Y are the same.  */
24394
24395 static inline bool
24396 compare_locs (dw_loc_descr_ref x, dw_loc_descr_ref y)
24397 {
24398   for (; x != NULL && y != NULL; x = x->dw_loc_next, y = y->dw_loc_next)
24399     if (x->dw_loc_opc != y->dw_loc_opc
24400         || x->dtprel != y->dtprel
24401         || !compare_loc_operands (x, y))
24402       break;
24403   return x == NULL && y == NULL;
24404 }
24405
24406 /* Hashtable helpers.  */
24407
24408 struct loc_list_hasher : typed_noop_remove <dw_loc_list_struct>
24409 {
24410   typedef dw_loc_list_struct value_type;
24411   typedef dw_loc_list_struct compare_type;
24412   static inline hashval_t hash (const value_type *);
24413   static inline bool equal (const value_type *, const compare_type *);
24414 };
24415
24416 /* Return precomputed hash of location list X.  */
24417
24418 inline hashval_t
24419 loc_list_hasher::hash (const value_type *x)
24420 {
24421   return x->hash;
24422 }
24423
24424 /* Return true if location lists A and B are the same.  */
24425
24426 inline bool
24427 loc_list_hasher::equal (const value_type *a, const compare_type *b)
24428 {
24429   if (a == b)
24430     return 1;
24431   if (a->hash != b->hash)
24432     return 0;
24433   for (; a != NULL && b != NULL; a = a->dw_loc_next, b = b->dw_loc_next)
24434     if (strcmp (a->begin, b->begin) != 0
24435         || strcmp (a->end, b->end) != 0
24436         || (a->section == NULL) != (b->section == NULL)
24437         || (a->section && strcmp (a->section, b->section) != 0)
24438         || !compare_locs (a->expr, b->expr))
24439       break;
24440   return a == NULL && b == NULL;
24441 }
24442
24443 typedef hash_table<loc_list_hasher> loc_list_hash_type;
24444
24445
24446 /* Recursively optimize location lists referenced from DIE
24447    children and share them whenever possible.  */
24448
24449 static void
24450 optimize_location_lists_1 (dw_die_ref die, loc_list_hash_type *htab)
24451 {
24452   dw_die_ref c;
24453   dw_attr_ref a;
24454   unsigned ix;
24455   dw_loc_list_struct **slot;
24456
24457   FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
24458     if (AT_class (a) == dw_val_class_loc_list)
24459       {
24460         dw_loc_list_ref list = AT_loc_list (a);
24461         /* TODO: perform some optimizations here, before hashing
24462            it and storing into the hash table.  */
24463         hash_loc_list (list);
24464         slot = htab->find_slot_with_hash (list, list->hash, INSERT);
24465         if (*slot == NULL)
24466           *slot = list;
24467         else
24468           a->dw_attr_val.v.val_loc_list = *slot;
24469       }
24470
24471   FOR_EACH_CHILD (die, c, optimize_location_lists_1 (c, htab));
24472 }
24473
24474
24475 /* Recursively assign each location list a unique index into the debug_addr
24476    section.  */
24477
24478 static void
24479 index_location_lists (dw_die_ref die)
24480 {
24481   dw_die_ref c;
24482   dw_attr_ref a;
24483   unsigned ix;
24484
24485   FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
24486     if (AT_class (a) == dw_val_class_loc_list)
24487       {
24488         dw_loc_list_ref list = AT_loc_list (a);
24489         dw_loc_list_ref curr;
24490         for (curr = list; curr != NULL; curr = curr->dw_loc_next)
24491           {
24492             /* Don't index an entry that has already been indexed
24493                or won't be output.  */
24494             if (curr->begin_entry != NULL
24495                 || (strcmp (curr->begin, curr->end) == 0 && !curr->force))
24496               continue;
24497
24498             curr->begin_entry
24499                 = add_addr_table_entry (xstrdup (curr->begin),
24500                                         ate_kind_label);
24501           }
24502       }
24503
24504   FOR_EACH_CHILD (die, c, index_location_lists (c));
24505 }
24506
24507 /* Optimize location lists referenced from DIE
24508    children and share them whenever possible.  */
24509
24510 static void
24511 optimize_location_lists (dw_die_ref die)
24512 {
24513   loc_list_hash_type htab (500);
24514   optimize_location_lists_1 (die, &htab);
24515 }
24516 \f
24517 /* Output stuff that dwarf requires at the end of every file,
24518    and generate the DWARF-2 debugging info.  */
24519
24520 static void
24521 dwarf2out_finish (const char *filename)
24522 {
24523   limbo_die_node *node, *next_node;
24524   comdat_type_node *ctnode;
24525   unsigned int i;
24526   dw_die_ref main_comp_unit_die;
24527
24528   /* PCH might result in DW_AT_producer string being restored from the
24529      header compilation, so always fill it with empty string initially
24530      and overwrite only here.  */
24531   dw_attr_ref producer = get_AT (comp_unit_die (), DW_AT_producer);
24532   producer_string = gen_producer_string ();
24533   producer->dw_attr_val.v.val_str->refcount--;
24534   producer->dw_attr_val.v.val_str = find_AT_string (producer_string);
24535
24536   gen_scheduled_generic_parms_dies ();
24537   gen_remaining_tmpl_value_param_die_attribute ();
24538
24539   /* Add the name for the main input file now.  We delayed this from
24540      dwarf2out_init to avoid complications with PCH.
24541      For LTO produced units use a fixed artificial name to avoid
24542      leaking tempfile names into the dwarf.  */
24543   if (!in_lto_p)
24544     add_name_attribute (comp_unit_die (), remap_debug_filename (filename));
24545   else
24546     add_name_attribute (comp_unit_die (), "<artificial>");
24547   if (!IS_ABSOLUTE_PATH (filename) || targetm.force_at_comp_dir)
24548     add_comp_dir_attribute (comp_unit_die ());
24549   else if (get_AT (comp_unit_die (), DW_AT_comp_dir) == NULL)
24550     {
24551       bool p = false;
24552       file_table->traverse<bool *, file_table_relative_p> (&p);
24553       if (p)
24554         add_comp_dir_attribute (comp_unit_die ());
24555     }
24556
24557   if (deferred_locations_list)
24558     for (i = 0; i < deferred_locations_list->length (); i++)
24559       {
24560         add_location_or_const_value_attribute (
24561             (*deferred_locations_list)[i].die,
24562             (*deferred_locations_list)[i].variable,
24563             false,
24564             DW_AT_location);
24565       }
24566
24567   /* Traverse the limbo die list, and add parent/child links.  The only
24568      dies without parents that should be here are concrete instances of
24569      inline functions, and the comp_unit_die.  We can ignore the comp_unit_die.
24570      For concrete instances, we can get the parent die from the abstract
24571      instance.  */
24572   for (node = limbo_die_list; node; node = next_node)
24573     {
24574       dw_die_ref die = node->die;
24575       next_node = node->next;
24576
24577       if (die->die_parent == NULL)
24578         {
24579           dw_die_ref origin = get_AT_ref (die, DW_AT_abstract_origin);
24580
24581           if (origin && origin->die_parent)
24582             add_child_die (origin->die_parent, die);
24583           else if (is_cu_die (die))
24584             ;
24585           else if (seen_error ())
24586             /* It's OK to be confused by errors in the input.  */
24587             add_child_die (comp_unit_die (), die);
24588           else
24589             {
24590               /* In certain situations, the lexical block containing a
24591                  nested function can be optimized away, which results
24592                  in the nested function die being orphaned.  Likewise
24593                  with the return type of that nested function.  Force
24594                  this to be a child of the containing function.
24595
24596                  It may happen that even the containing function got fully
24597                  inlined and optimized out.  In that case we are lost and
24598                  assign the empty child.  This should not be big issue as
24599                  the function is likely unreachable too.  */
24600               gcc_assert (node->created_for);
24601
24602               if (DECL_P (node->created_for))
24603                 origin = get_context_die (DECL_CONTEXT (node->created_for));
24604               else if (TYPE_P (node->created_for))
24605                 origin = scope_die_for (node->created_for, comp_unit_die ());
24606               else
24607                 origin = comp_unit_die ();
24608
24609               add_child_die (origin, die);
24610             }
24611         }
24612     }
24613
24614   limbo_die_list = NULL;
24615
24616 #if ENABLE_ASSERT_CHECKING
24617   {
24618     dw_die_ref die = comp_unit_die (), c;
24619     FOR_EACH_CHILD (die, c, gcc_assert (! c->die_mark));
24620   }
24621 #endif
24622   resolve_addr (comp_unit_die ());
24623   move_marked_base_types ();
24624
24625   for (node = deferred_asm_name; node; node = node->next)
24626     {
24627       tree decl = node->created_for;
24628       /* When generating LTO bytecode we can not generate new assembler
24629          names at this point and all important decls got theirs via
24630          free-lang-data.  */
24631       if (((!flag_generate_lto && !flag_generate_offload)
24632            || DECL_ASSEMBLER_NAME_SET_P (decl))
24633           && DECL_ASSEMBLER_NAME (decl) != DECL_NAME (decl))
24634         {
24635           add_linkage_attr (node->die, decl);
24636           move_linkage_attr (node->die);
24637         }
24638     }
24639
24640   deferred_asm_name = NULL;
24641
24642   /* Walk through the list of incomplete types again, trying once more to
24643      emit full debugging info for them.  */
24644   retry_incomplete_types ();
24645
24646   if (flag_eliminate_unused_debug_types)
24647     prune_unused_types ();
24648
24649   /* Generate separate COMDAT sections for type DIEs. */
24650   if (use_debug_types)
24651     {
24652       break_out_comdat_types (comp_unit_die ());
24653
24654       /* Each new type_unit DIE was added to the limbo die list when created.
24655          Since these have all been added to comdat_type_list, clear the
24656          limbo die list.  */
24657       limbo_die_list = NULL;
24658
24659       /* For each new comdat type unit, copy declarations for incomplete
24660          types to make the new unit self-contained (i.e., no direct
24661          references to the main compile unit).  */
24662       for (ctnode = comdat_type_list; ctnode != NULL; ctnode = ctnode->next)
24663         copy_decls_for_unworthy_types (ctnode->root_die);
24664       copy_decls_for_unworthy_types (comp_unit_die ());
24665
24666       /* In the process of copying declarations from one unit to another,
24667          we may have left some declarations behind that are no longer
24668          referenced.  Prune them.  */
24669       prune_unused_types ();
24670     }
24671
24672   /* Generate separate CUs for each of the include files we've seen.
24673      They will go into limbo_die_list.  */
24674   if (flag_eliminate_dwarf2_dups)
24675     break_out_includes (comp_unit_die ());
24676
24677   /* Traverse the DIE's and add add sibling attributes to those DIE's
24678      that have children.  */
24679   add_sibling_attributes (comp_unit_die ());
24680   for (node = limbo_die_list; node; node = node->next)
24681     add_sibling_attributes (node->die);
24682   for (ctnode = comdat_type_list; ctnode != NULL; ctnode = ctnode->next)
24683     add_sibling_attributes (ctnode->root_die);
24684
24685   /* When splitting DWARF info, we put some attributes in the
24686      skeleton compile_unit DIE that remains in the .o, while
24687      most attributes go in the DWO compile_unit_die.  */
24688   if (dwarf_split_debug_info)
24689     main_comp_unit_die = gen_compile_unit_die (NULL);
24690   else
24691     main_comp_unit_die = comp_unit_die ();
24692
24693   /* Output a terminator label for the .text section.  */
24694   switch_to_section (text_section);
24695   targetm.asm_out.internal_label (asm_out_file, TEXT_END_LABEL, 0);
24696   if (cold_text_section)
24697     {
24698       switch_to_section (cold_text_section);
24699       targetm.asm_out.internal_label (asm_out_file, COLD_END_LABEL, 0);
24700     }
24701
24702   /* We can only use the low/high_pc attributes if all of the code was
24703      in .text.  */
24704   if (!have_multiple_function_sections 
24705       || (dwarf_version < 3 && dwarf_strict))
24706     {
24707       /* Don't add if the CU has no associated code.  */
24708       if (text_section_used)
24709         add_AT_low_high_pc (main_comp_unit_die, text_section_label,
24710                             text_end_label, true);
24711     }
24712   else
24713     {
24714       unsigned fde_idx;
24715       dw_fde_ref fde;
24716       bool range_list_added = false;
24717
24718       if (text_section_used)
24719         add_ranges_by_labels (main_comp_unit_die, text_section_label,
24720                               text_end_label, &range_list_added, true);
24721       if (cold_text_section_used)
24722         add_ranges_by_labels (main_comp_unit_die, cold_text_section_label,
24723                               cold_end_label, &range_list_added, true);
24724
24725       FOR_EACH_VEC_ELT (*fde_vec, fde_idx, fde)
24726         {
24727           if (DECL_IGNORED_P (fde->decl))
24728             continue;
24729           if (!fde->in_std_section)
24730             add_ranges_by_labels (main_comp_unit_die, fde->dw_fde_begin,
24731                                   fde->dw_fde_end, &range_list_added,
24732                                   true);
24733           if (fde->dw_fde_second_begin && !fde->second_in_std_section)
24734             add_ranges_by_labels (main_comp_unit_die, fde->dw_fde_second_begin,
24735                                   fde->dw_fde_second_end, &range_list_added,
24736                                   true);
24737         }
24738
24739       if (range_list_added)
24740         {
24741           /* We need to give .debug_loc and .debug_ranges an appropriate
24742              "base address".  Use zero so that these addresses become
24743              absolute.  Historically, we've emitted the unexpected
24744              DW_AT_entry_pc instead of DW_AT_low_pc for this purpose.
24745              Emit both to give time for other tools to adapt.  */
24746           add_AT_addr (main_comp_unit_die, DW_AT_low_pc, const0_rtx, true);
24747           if (! dwarf_strict && dwarf_version < 4)
24748             add_AT_addr (main_comp_unit_die, DW_AT_entry_pc, const0_rtx, true);
24749
24750           add_ranges (NULL);
24751         }
24752     }
24753
24754   if (debug_info_level >= DINFO_LEVEL_TERSE)
24755     add_AT_lineptr (main_comp_unit_die, DW_AT_stmt_list,
24756                     debug_line_section_label);
24757
24758   if (have_macinfo)
24759     add_AT_macptr (comp_unit_die (),
24760                    dwarf_strict ? DW_AT_macro_info : DW_AT_GNU_macros,
24761                    macinfo_section_label);
24762
24763   if (dwarf_split_debug_info)
24764     {
24765       /* optimize_location_lists calculates the size of the lists,
24766          so index them first, and assign indices to the entries.
24767          Although optimize_location_lists will remove entries from
24768          the table, it only does so for duplicates, and therefore
24769          only reduces ref_counts to 1.  */
24770       index_location_lists (comp_unit_die ());
24771
24772       if (addr_index_table != NULL)
24773         {
24774           unsigned int index = 0;
24775           addr_index_table
24776             ->traverse_noresize<unsigned int *, index_addr_table_entry>
24777             (&index);
24778         }
24779     }
24780
24781   if (have_location_lists)
24782     optimize_location_lists (comp_unit_die ());
24783
24784   save_macinfo_strings ();
24785
24786   if (dwarf_split_debug_info)
24787     {
24788       unsigned int index = 0;
24789
24790       /* Add attributes common to skeleton compile_units and
24791          type_units.  Because these attributes include strings, it
24792          must be done before freezing the string table.  Top-level
24793          skeleton die attrs are added when the skeleton type unit is
24794          created, so ensure it is created by this point.  */
24795       add_top_level_skeleton_die_attrs (main_comp_unit_die);
24796       debug_str_hash->traverse_noresize<unsigned int *, index_string> (&index);
24797     }
24798
24799   /* Output all of the compilation units.  We put the main one last so that
24800      the offsets are available to output_pubnames.  */
24801   for (node = limbo_die_list; node; node = node->next)
24802     output_comp_unit (node->die, 0);
24803
24804   hash_table<comdat_type_hasher> comdat_type_table (100);
24805   for (ctnode = comdat_type_list; ctnode != NULL; ctnode = ctnode->next)
24806     {
24807       comdat_type_node **slot = comdat_type_table.find_slot (ctnode, INSERT);
24808
24809       /* Don't output duplicate types.  */
24810       if (*slot != HTAB_EMPTY_ENTRY)
24811         continue;
24812
24813       /* Add a pointer to the line table for the main compilation unit
24814          so that the debugger can make sense of DW_AT_decl_file
24815          attributes.  */
24816       if (debug_info_level >= DINFO_LEVEL_TERSE)
24817         add_AT_lineptr (ctnode->root_die, DW_AT_stmt_list,
24818                         (!dwarf_split_debug_info
24819                          ? debug_line_section_label
24820                          : debug_skeleton_line_section_label));
24821
24822       output_comdat_type_unit (ctnode);
24823       *slot = ctnode;
24824     }
24825
24826   /* The AT_pubnames attribute needs to go in all skeleton dies, including
24827      both the main_cu and all skeleton TUs.  Making this call unconditional
24828      would end up either adding a second copy of the AT_pubnames attribute, or
24829      requiring a special case in add_top_level_skeleton_die_attrs.  */
24830   if (!dwarf_split_debug_info)
24831     add_AT_pubnames (comp_unit_die ());
24832
24833   if (dwarf_split_debug_info)
24834     {
24835       int mark;
24836       unsigned char checksum[16];
24837       struct md5_ctx ctx;
24838
24839       /* Compute a checksum of the comp_unit to use as the dwo_id.  */
24840       md5_init_ctx (&ctx);
24841       mark = 0;
24842       die_checksum (comp_unit_die (), &ctx, &mark);
24843       unmark_all_dies (comp_unit_die ());
24844       md5_finish_ctx (&ctx, checksum);
24845
24846       /* Use the first 8 bytes of the checksum as the dwo_id,
24847         and add it to both comp-unit DIEs.  */
24848       add_AT_data8 (main_comp_unit_die, DW_AT_GNU_dwo_id, checksum);
24849       add_AT_data8 (comp_unit_die (), DW_AT_GNU_dwo_id, checksum);
24850
24851       /* Add the base offset of the ranges table to the skeleton
24852         comp-unit DIE.  */
24853       if (ranges_table_in_use)
24854         add_AT_lineptr (main_comp_unit_die, DW_AT_GNU_ranges_base,
24855                         ranges_section_label);
24856
24857       switch_to_section (debug_addr_section);
24858       ASM_OUTPUT_LABEL (asm_out_file, debug_addr_section_label);
24859       output_addr_table ();
24860     }
24861
24862   /* Output the main compilation unit if non-empty or if .debug_macinfo
24863      or .debug_macro will be emitted.  */
24864   output_comp_unit (comp_unit_die (), have_macinfo);
24865
24866   if (dwarf_split_debug_info && info_section_emitted)
24867     output_skeleton_debug_sections (main_comp_unit_die);
24868
24869   /* Output the abbreviation table.  */
24870   if (abbrev_die_table_in_use != 1)
24871     {
24872       switch_to_section (debug_abbrev_section);
24873       ASM_OUTPUT_LABEL (asm_out_file, abbrev_section_label);
24874       output_abbrev_section ();
24875     }
24876
24877   /* Output location list section if necessary.  */
24878   if (have_location_lists)
24879     {
24880       /* Output the location lists info.  */
24881       switch_to_section (debug_loc_section);
24882       ASM_OUTPUT_LABEL (asm_out_file, loc_section_label);
24883       output_location_lists (comp_unit_die ());
24884     }
24885
24886   output_pubtables ();
24887
24888   /* Output the address range information if a CU (.debug_info section)
24889      was emitted.  We output an empty table even if we had no functions
24890      to put in it.  This because the consumer has no way to tell the
24891      difference between an empty table that we omitted and failure to
24892      generate a table that would have contained data.  */
24893   if (info_section_emitted)
24894     {
24895       unsigned long aranges_length = size_of_aranges ();
24896
24897       switch_to_section (debug_aranges_section);
24898       output_aranges (aranges_length);
24899     }
24900
24901   /* Output ranges section if necessary.  */
24902   if (ranges_table_in_use)
24903     {
24904       switch_to_section (debug_ranges_section);
24905       ASM_OUTPUT_LABEL (asm_out_file, ranges_section_label);
24906       output_ranges ();
24907     }
24908
24909   /* Have to end the macro section.  */
24910   if (have_macinfo)
24911     {
24912       switch_to_section (debug_macinfo_section);
24913       ASM_OUTPUT_LABEL (asm_out_file, macinfo_section_label);
24914       output_macinfo ();
24915       dw2_asm_output_data (1, 0, "End compilation unit");
24916     }
24917
24918   /* Output the source line correspondence table.  We must do this
24919      even if there is no line information.  Otherwise, on an empty
24920      translation unit, we will generate a present, but empty,
24921      .debug_info section.  IRIX 6.5 `nm' will then complain when
24922      examining the file.  This is done late so that any filenames
24923      used by the debug_info section are marked as 'used'.  */
24924   switch_to_section (debug_line_section);
24925   ASM_OUTPUT_LABEL (asm_out_file, debug_line_section_label);
24926   if (! DWARF2_ASM_LINE_DEBUG_INFO)
24927     output_line_info (false);
24928
24929   if (dwarf_split_debug_info && info_section_emitted)
24930     {
24931       switch_to_section (debug_skeleton_line_section);
24932       ASM_OUTPUT_LABEL (asm_out_file, debug_skeleton_line_section_label);
24933       output_line_info (true);
24934     }
24935
24936   /* If we emitted any indirect strings, output the string table too.  */
24937   if (debug_str_hash || skeleton_debug_str_hash)
24938     output_indirect_strings ();
24939 }
24940
24941 /* Reset all state within dwarf2out.c so that we can rerun the compiler
24942    within the same process.  For use by toplev::finalize.  */
24943
24944 void
24945 dwarf2out_c_finalize (void)
24946 {
24947   last_var_location_insn = NULL;
24948   cached_next_real_insn = NULL;
24949   used_rtx_array = NULL;
24950   incomplete_types = NULL;
24951   decl_scope_table = NULL;
24952   debug_info_section = NULL;
24953   debug_skeleton_info_section = NULL;
24954   debug_abbrev_section = NULL;
24955   debug_skeleton_abbrev_section = NULL;
24956   debug_aranges_section = NULL;
24957   debug_addr_section = NULL;
24958   debug_macinfo_section = NULL;
24959   debug_line_section = NULL;
24960   debug_skeleton_line_section = NULL;
24961   debug_loc_section = NULL;
24962   debug_pubnames_section = NULL;
24963   debug_pubtypes_section = NULL;
24964   debug_str_section = NULL;
24965   debug_str_dwo_section = NULL;
24966   debug_str_offsets_section = NULL;
24967   debug_ranges_section = NULL;
24968   debug_frame_section = NULL;
24969   fde_vec = NULL;
24970   debug_str_hash = NULL;
24971   skeleton_debug_str_hash = NULL;
24972   dw2_string_counter = 0;
24973   have_multiple_function_sections = false;
24974   text_section_used = false;
24975   cold_text_section_used = false;
24976   cold_text_section = NULL;
24977   current_unit_personality = NULL;
24978
24979   deferred_locations_list = NULL;
24980
24981   next_die_offset = 0;
24982   single_comp_unit_die = NULL;
24983   comdat_type_list = NULL;
24984   limbo_die_list = NULL;
24985   deferred_asm_name = NULL;
24986   file_table = NULL;
24987   decl_die_table = NULL;
24988   common_block_die_table = NULL;
24989   decl_loc_table = NULL;
24990   call_arg_locations = NULL;
24991   call_arg_loc_last = NULL;
24992   call_site_count = -1;
24993   tail_call_site_count = -1;
24994   //block_map = NULL;
24995   cached_dw_loc_list_table = NULL;
24996   abbrev_die_table = NULL;
24997   abbrev_die_table_allocated = 0;
24998   abbrev_die_table_in_use = 0;
24999   line_info_label_num = 0;
25000   cur_line_info_table = NULL;
25001   text_section_line_info = NULL;
25002   cold_text_section_line_info = NULL;
25003   separate_line_info = NULL;
25004   info_section_emitted = false;
25005   pubname_table = NULL;
25006   pubtype_table = NULL;
25007   macinfo_table = NULL;
25008   ranges_table = NULL;
25009   ranges_table_allocated = 0;
25010   ranges_table_in_use = 0;
25011   ranges_by_label = 0;
25012   ranges_by_label_allocated = 0;
25013   ranges_by_label_in_use = 0;
25014   have_location_lists = false;
25015   loclabel_num = 0;
25016   poc_label_num = 0;
25017   last_emitted_file = NULL;
25018   label_num = 0;
25019   file_table_last_lookup = NULL;
25020   tmpl_value_parm_die_table = NULL;
25021   generic_type_instances = NULL;
25022   frame_pointer_fb_offset = 0;
25023   frame_pointer_fb_offset_valid = false;
25024   base_types.release ();
25025   XDELETEVEC (producer_string);
25026   producer_string = NULL;
25027 }
25028
25029 #include "gt-dwarf2out.h"