Update gcc-50 to SVN version 239798 (gcc-5-branch)
[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.  Some constants have a large uniform precision, so
393    we get the precision needed for the actual value of the number.  */
394
395 static unsigned int
396 get_full_len (const wide_int &op)
397 {
398   int prec = wi::min_precision (op, UNSIGNED);
399   return ((prec + HOST_BITS_PER_WIDE_INT - 1)
400           / HOST_BITS_PER_WIDE_INT);
401 }
402
403 static bool
404 should_emit_struct_debug (tree type, enum debug_info_usage usage)
405 {
406   enum debug_struct_file criterion;
407   tree type_decl;
408   bool generic = lang_hooks.types.generic_p (type);
409
410   if (generic)
411     criterion = debug_struct_generic[usage];
412   else
413     criterion = debug_struct_ordinary[usage];
414
415   if (criterion == DINFO_STRUCT_FILE_NONE)
416     return DUMP_GSTRUCT (type, usage, criterion, generic, false, false);
417   if (criterion == DINFO_STRUCT_FILE_ANY)
418     return DUMP_GSTRUCT (type, usage, criterion, generic, false, true);
419
420   type_decl = TYPE_STUB_DECL (TYPE_MAIN_VARIANT (type));
421
422   if (type_decl != NULL)
423     {
424      if (criterion == DINFO_STRUCT_FILE_SYS && DECL_IN_SYSTEM_HEADER (type_decl))
425         return DUMP_GSTRUCT (type, usage, criterion, generic, false, true);
426
427       if (matches_main_base (DECL_SOURCE_FILE (type_decl)))
428         return DUMP_GSTRUCT (type, usage, criterion, generic, true, true);
429     }
430
431   return DUMP_GSTRUCT (type, usage, criterion, generic, false, false);
432 }
433 \f
434 /* Return a pointer to a copy of the section string name S with all
435    attributes stripped off, and an asterisk prepended (for assemble_name).  */
436
437 static inline char *
438 stripattributes (const char *s)
439 {
440   char *stripped = XNEWVEC (char, strlen (s) + 2);
441   char *p = stripped;
442
443   *p++ = '*';
444
445   while (*s && *s != ',')
446     *p++ = *s++;
447
448   *p = '\0';
449   return stripped;
450 }
451
452 /* Switch [BACK] to eh_frame_section.  If we don't have an eh_frame_section,
453    switch to the data section instead, and write out a synthetic start label
454    for collect2 the first time around.  */
455
456 static void
457 switch_to_eh_frame_section (bool back)
458 {
459   tree label;
460
461 #ifdef EH_FRAME_SECTION_NAME
462   if (eh_frame_section == 0)
463     {
464       int flags;
465
466       if (EH_TABLES_CAN_BE_READ_ONLY)
467         {
468           int fde_encoding;
469           int per_encoding;
470           int lsda_encoding;
471
472           fde_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/1,
473                                                        /*global=*/0);
474           per_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2,
475                                                        /*global=*/1);
476           lsda_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0,
477                                                         /*global=*/0);
478           flags = ((! flag_pic
479                     || ((fde_encoding & 0x70) != DW_EH_PE_absptr
480                         && (fde_encoding & 0x70) != DW_EH_PE_aligned
481                         && (per_encoding & 0x70) != DW_EH_PE_absptr
482                         && (per_encoding & 0x70) != DW_EH_PE_aligned
483                         && (lsda_encoding & 0x70) != DW_EH_PE_absptr
484                         && (lsda_encoding & 0x70) != DW_EH_PE_aligned))
485                    ? 0 : SECTION_WRITE);
486         }
487       else
488         flags = SECTION_WRITE;
489       eh_frame_section = get_section (EH_FRAME_SECTION_NAME, flags, NULL);
490     }
491 #endif /* EH_FRAME_SECTION_NAME */
492
493   if (eh_frame_section)
494     switch_to_section (eh_frame_section);
495   else
496     {
497       /* We have no special eh_frame section.  Put the information in
498          the data section and emit special labels to guide collect2.  */
499       switch_to_section (data_section);
500
501       if (!back)
502         {
503           label = get_file_function_name ("F");
504           ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (PTR_SIZE));
505           targetm.asm_out.globalize_label (asm_out_file,
506                                            IDENTIFIER_POINTER (label));
507           ASM_OUTPUT_LABEL (asm_out_file, IDENTIFIER_POINTER (label));
508         }
509     }
510 }
511
512 /* Switch [BACK] to the eh or debug frame table section, depending on
513    FOR_EH.  */
514
515 static void
516 switch_to_frame_table_section (int for_eh, bool back)
517 {
518   if (for_eh)
519     switch_to_eh_frame_section (back);
520   else
521     {
522       if (!debug_frame_section)
523         debug_frame_section = get_section (DEBUG_FRAME_SECTION,
524                                            SECTION_DEBUG, NULL);
525       switch_to_section (debug_frame_section);
526     }
527 }
528
529 /* Describe for the GTY machinery what parts of dw_cfi_oprnd1 are used.  */
530
531 enum dw_cfi_oprnd_type
532 dw_cfi_oprnd1_desc (enum dwarf_call_frame_info cfi)
533 {
534   switch (cfi)
535     {
536     case DW_CFA_nop:
537     case DW_CFA_GNU_window_save:
538     case DW_CFA_remember_state:
539     case DW_CFA_restore_state:
540       return dw_cfi_oprnd_unused;
541
542     case DW_CFA_set_loc:
543     case DW_CFA_advance_loc1:
544     case DW_CFA_advance_loc2:
545     case DW_CFA_advance_loc4:
546     case DW_CFA_MIPS_advance_loc8:
547       return dw_cfi_oprnd_addr;
548
549     case DW_CFA_offset:
550     case DW_CFA_offset_extended:
551     case DW_CFA_def_cfa:
552     case DW_CFA_offset_extended_sf:
553     case DW_CFA_def_cfa_sf:
554     case DW_CFA_restore:
555     case DW_CFA_restore_extended:
556     case DW_CFA_undefined:
557     case DW_CFA_same_value:
558     case DW_CFA_def_cfa_register:
559     case DW_CFA_register:
560     case DW_CFA_expression:
561       return dw_cfi_oprnd_reg_num;
562
563     case DW_CFA_def_cfa_offset:
564     case DW_CFA_GNU_args_size:
565     case DW_CFA_def_cfa_offset_sf:
566       return dw_cfi_oprnd_offset;
567
568     case DW_CFA_def_cfa_expression:
569       return dw_cfi_oprnd_loc;
570
571     default:
572       gcc_unreachable ();
573     }
574 }
575
576 /* Describe for the GTY machinery what parts of dw_cfi_oprnd2 are used.  */
577
578 enum dw_cfi_oprnd_type
579 dw_cfi_oprnd2_desc (enum dwarf_call_frame_info cfi)
580 {
581   switch (cfi)
582     {
583     case DW_CFA_def_cfa:
584     case DW_CFA_def_cfa_sf:
585     case DW_CFA_offset:
586     case DW_CFA_offset_extended_sf:
587     case DW_CFA_offset_extended:
588       return dw_cfi_oprnd_offset;
589
590     case DW_CFA_register:
591       return dw_cfi_oprnd_reg_num;
592
593     case DW_CFA_expression:
594       return dw_cfi_oprnd_loc;
595
596     default:
597       return dw_cfi_oprnd_unused;
598     }
599 }
600
601 /* Output one FDE.  */
602
603 static void
604 output_fde (dw_fde_ref fde, bool for_eh, bool second,
605             char *section_start_label, int fde_encoding, char *augmentation,
606             bool any_lsda_needed, int lsda_encoding)
607 {
608   const char *begin, *end;
609   static unsigned int j;
610   char l1[20], l2[20];
611
612   targetm.asm_out.emit_unwind_label (asm_out_file, fde->decl, for_eh,
613                                      /* empty */ 0);
614   targetm.asm_out.internal_label (asm_out_file, FDE_LABEL,
615                                   for_eh + j);
616   ASM_GENERATE_INTERNAL_LABEL (l1, FDE_AFTER_SIZE_LABEL, for_eh + j);
617   ASM_GENERATE_INTERNAL_LABEL (l2, FDE_END_LABEL, for_eh + j);
618   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4 && !for_eh)
619     dw2_asm_output_data (4, 0xffffffff, "Initial length escape value"
620                          " indicating 64-bit DWARF extension");
621   dw2_asm_output_delta (for_eh ? 4 : DWARF_OFFSET_SIZE, l2, l1,
622                         "FDE Length");
623   ASM_OUTPUT_LABEL (asm_out_file, l1);
624
625   if (for_eh)
626     dw2_asm_output_delta (4, l1, section_start_label, "FDE CIE offset");
627   else
628     dw2_asm_output_offset (DWARF_OFFSET_SIZE, section_start_label,
629                            debug_frame_section, "FDE CIE offset");
630
631   begin = second ? fde->dw_fde_second_begin : fde->dw_fde_begin;
632   end = second ? fde->dw_fde_second_end : fde->dw_fde_end;
633
634   if (for_eh)
635     {
636       rtx sym_ref = gen_rtx_SYMBOL_REF (Pmode, begin);
637       SYMBOL_REF_FLAGS (sym_ref) |= SYMBOL_FLAG_LOCAL;
638       dw2_asm_output_encoded_addr_rtx (fde_encoding, sym_ref, false,
639                                        "FDE initial location");
640       dw2_asm_output_delta (size_of_encoded_value (fde_encoding),
641                             end, begin, "FDE address range");
642     }
643   else
644     {
645       dw2_asm_output_addr (DWARF2_ADDR_SIZE, begin, "FDE initial location");
646       dw2_asm_output_delta (DWARF2_ADDR_SIZE, end, begin, "FDE address range");
647     }
648
649   if (augmentation[0])
650     {
651       if (any_lsda_needed)
652         {
653           int size = size_of_encoded_value (lsda_encoding);
654
655           if (lsda_encoding == DW_EH_PE_aligned)
656             {
657               int offset = (  4         /* Length */
658                             + 4         /* CIE offset */
659                             + 2 * size_of_encoded_value (fde_encoding)
660                             + 1         /* Augmentation size */ );
661               int pad = -offset & (PTR_SIZE - 1);
662
663               size += pad;
664               gcc_assert (size_of_uleb128 (size) == 1);
665             }
666
667           dw2_asm_output_data_uleb128 (size, "Augmentation size");
668
669           if (fde->uses_eh_lsda)
670             {
671               ASM_GENERATE_INTERNAL_LABEL (l1, second ? "LLSDAC" : "LLSDA",
672                                            fde->funcdef_number);
673               dw2_asm_output_encoded_addr_rtx (lsda_encoding,
674                                                gen_rtx_SYMBOL_REF (Pmode, l1),
675                                                false,
676                                                "Language Specific Data Area");
677             }
678           else
679             {
680               if (lsda_encoding == DW_EH_PE_aligned)
681                 ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (PTR_SIZE));
682               dw2_asm_output_data (size_of_encoded_value (lsda_encoding), 0,
683                                    "Language Specific Data Area (none)");
684             }
685         }
686       else
687         dw2_asm_output_data_uleb128 (0, "Augmentation size");
688     }
689
690   /* Loop through the Call Frame Instructions associated with this FDE.  */
691   fde->dw_fde_current_label = begin;
692   {
693     size_t from, until, i;
694
695     from = 0;
696     until = vec_safe_length (fde->dw_fde_cfi);
697
698     if (fde->dw_fde_second_begin == NULL)
699       ;
700     else if (!second)
701       until = fde->dw_fde_switch_cfi_index;
702     else
703       from = fde->dw_fde_switch_cfi_index;
704
705     for (i = from; i < until; i++)
706       output_cfi ((*fde->dw_fde_cfi)[i], fde, for_eh);
707   }
708
709   /* If we are to emit a ref/link from function bodies to their frame tables,
710      do it now.  This is typically performed to make sure that tables
711      associated with functions are dragged with them and not discarded in
712      garbage collecting links. We need to do this on a per function basis to
713      cope with -ffunction-sections.  */
714
715 #ifdef ASM_OUTPUT_DWARF_TABLE_REF
716   /* Switch to the function section, emit the ref to the tables, and
717      switch *back* into the table section.  */
718   switch_to_section (function_section (fde->decl));
719   ASM_OUTPUT_DWARF_TABLE_REF (section_start_label);
720   switch_to_frame_table_section (for_eh, true);
721 #endif
722
723   /* Pad the FDE out to an address sized boundary.  */
724   ASM_OUTPUT_ALIGN (asm_out_file,
725                     floor_log2 ((for_eh ? PTR_SIZE : DWARF2_ADDR_SIZE)));
726   ASM_OUTPUT_LABEL (asm_out_file, l2);
727
728   j += 2;
729 }
730
731 /* Return true if frame description entry FDE is needed for EH.  */
732
733 static bool
734 fde_needed_for_eh_p (dw_fde_ref fde)
735 {
736   if (flag_asynchronous_unwind_tables)
737     return true;
738
739   if (TARGET_USES_WEAK_UNWIND_INFO && DECL_WEAK (fde->decl))
740     return true;
741
742   if (fde->uses_eh_lsda)
743     return true;
744
745   /* If exceptions are enabled, we have collected nothrow info.  */
746   if (flag_exceptions && (fde->all_throwers_are_sibcalls || fde->nothrow))
747     return false;
748
749   return true;
750 }
751
752 /* Output the call frame information used to record information
753    that relates to calculating the frame pointer, and records the
754    location of saved registers.  */
755
756 static void
757 output_call_frame_info (int for_eh)
758 {
759   unsigned int i;
760   dw_fde_ref fde;
761   dw_cfi_ref cfi;
762   char l1[20], l2[20], section_start_label[20];
763   bool any_lsda_needed = false;
764   char augmentation[6];
765   int augmentation_size;
766   int fde_encoding = DW_EH_PE_absptr;
767   int per_encoding = DW_EH_PE_absptr;
768   int lsda_encoding = DW_EH_PE_absptr;
769   int return_reg;
770   rtx personality = NULL;
771   int dw_cie_version;
772
773   /* Don't emit a CIE if there won't be any FDEs.  */
774   if (!fde_vec)
775     return;
776
777   /* Nothing to do if the assembler's doing it all.  */
778   if (dwarf2out_do_cfi_asm ())
779     return;
780
781   /* If we don't have any functions we'll want to unwind out of, don't emit
782      any EH unwind information.  If we make FDEs linkonce, we may have to
783      emit an empty label for an FDE that wouldn't otherwise be emitted.  We
784      want to avoid having an FDE kept around when the function it refers to
785      is discarded.  Example where this matters: a primary function template
786      in C++ requires EH information, an explicit specialization doesn't.  */
787   if (for_eh)
788     {
789       bool any_eh_needed = false;
790
791       FOR_EACH_VEC_ELT (*fde_vec, i, fde)
792         {
793           if (fde->uses_eh_lsda)
794             any_eh_needed = any_lsda_needed = true;
795           else if (fde_needed_for_eh_p (fde))
796             any_eh_needed = true;
797           else if (TARGET_USES_WEAK_UNWIND_INFO)
798             targetm.asm_out.emit_unwind_label (asm_out_file, fde->decl, 1, 1);
799         }
800
801       if (!any_eh_needed)
802         return;
803     }
804
805   /* We're going to be generating comments, so turn on app.  */
806   if (flag_debug_asm)
807     app_enable ();
808
809   /* Switch to the proper frame section, first time.  */
810   switch_to_frame_table_section (for_eh, false);
811
812   ASM_GENERATE_INTERNAL_LABEL (section_start_label, FRAME_BEGIN_LABEL, for_eh);
813   ASM_OUTPUT_LABEL (asm_out_file, section_start_label);
814
815   /* Output the CIE.  */
816   ASM_GENERATE_INTERNAL_LABEL (l1, CIE_AFTER_SIZE_LABEL, for_eh);
817   ASM_GENERATE_INTERNAL_LABEL (l2, CIE_END_LABEL, for_eh);
818   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4 && !for_eh)
819     dw2_asm_output_data (4, 0xffffffff,
820       "Initial length escape value indicating 64-bit DWARF extension");
821   dw2_asm_output_delta (for_eh ? 4 : DWARF_OFFSET_SIZE, l2, l1,
822                         "Length of Common Information Entry");
823   ASM_OUTPUT_LABEL (asm_out_file, l1);
824
825   /* Now that the CIE pointer is PC-relative for EH,
826      use 0 to identify the CIE.  */
827   dw2_asm_output_data ((for_eh ? 4 : DWARF_OFFSET_SIZE),
828                        (for_eh ? 0 : DWARF_CIE_ID),
829                        "CIE Identifier Tag");
830
831   /* Use the CIE version 3 for DWARF3; allow DWARF2 to continue to
832      use CIE version 1, unless that would produce incorrect results
833      due to overflowing the return register column.  */
834   return_reg = DWARF2_FRAME_REG_OUT (DWARF_FRAME_RETURN_COLUMN, for_eh);
835   dw_cie_version = 1;
836   if (return_reg >= 256 || dwarf_version > 2)
837     dw_cie_version = 3;
838   dw2_asm_output_data (1, dw_cie_version, "CIE Version");
839
840   augmentation[0] = 0;
841   augmentation_size = 0;
842
843   personality = current_unit_personality;
844   if (for_eh)
845     {
846       char *p;
847
848       /* Augmentation:
849          z      Indicates that a uleb128 is present to size the
850                 augmentation section.
851          L      Indicates the encoding (and thus presence) of
852                 an LSDA pointer in the FDE augmentation.
853          R      Indicates a non-default pointer encoding for
854                 FDE code pointers.
855          P      Indicates the presence of an encoding + language
856                 personality routine in the CIE augmentation.  */
857
858       fde_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/1, /*global=*/0);
859       per_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2, /*global=*/1);
860       lsda_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0, /*global=*/0);
861
862       p = augmentation + 1;
863       if (personality)
864         {
865           *p++ = 'P';
866           augmentation_size += 1 + size_of_encoded_value (per_encoding);
867           assemble_external_libcall (personality);
868         }
869       if (any_lsda_needed)
870         {
871           *p++ = 'L';
872           augmentation_size += 1;
873         }
874       if (fde_encoding != DW_EH_PE_absptr)
875         {
876           *p++ = 'R';
877           augmentation_size += 1;
878         }
879       if (p > augmentation + 1)
880         {
881           augmentation[0] = 'z';
882           *p = '\0';
883         }
884
885       /* Ug.  Some platforms can't do unaligned dynamic relocations at all.  */
886       if (personality && per_encoding == DW_EH_PE_aligned)
887         {
888           int offset = (  4             /* Length */
889                         + 4             /* CIE Id */
890                         + 1             /* CIE version */
891                         + strlen (augmentation) + 1     /* Augmentation */
892                         + size_of_uleb128 (1)           /* Code alignment */
893                         + size_of_sleb128 (DWARF_CIE_DATA_ALIGNMENT)
894                         + 1             /* RA column */
895                         + 1             /* Augmentation size */
896                         + 1             /* Personality encoding */ );
897           int pad = -offset & (PTR_SIZE - 1);
898
899           augmentation_size += pad;
900
901           /* Augmentations should be small, so there's scarce need to
902              iterate for a solution.  Die if we exceed one uleb128 byte.  */
903           gcc_assert (size_of_uleb128 (augmentation_size) == 1);
904         }
905     }
906
907   dw2_asm_output_nstring (augmentation, -1, "CIE Augmentation");
908   if (dw_cie_version >= 4)
909     {
910       dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "CIE Address Size");
911       dw2_asm_output_data (1, 0, "CIE Segment Size");
912     }
913   dw2_asm_output_data_uleb128 (1, "CIE Code Alignment Factor");
914   dw2_asm_output_data_sleb128 (DWARF_CIE_DATA_ALIGNMENT,
915                                "CIE Data Alignment Factor");
916
917   if (dw_cie_version == 1)
918     dw2_asm_output_data (1, return_reg, "CIE RA Column");
919   else
920     dw2_asm_output_data_uleb128 (return_reg, "CIE RA Column");
921
922   if (augmentation[0])
923     {
924       dw2_asm_output_data_uleb128 (augmentation_size, "Augmentation size");
925       if (personality)
926         {
927           dw2_asm_output_data (1, per_encoding, "Personality (%s)",
928                                eh_data_format_name (per_encoding));
929           dw2_asm_output_encoded_addr_rtx (per_encoding,
930                                            personality,
931                                            true, NULL);
932         }
933
934       if (any_lsda_needed)
935         dw2_asm_output_data (1, lsda_encoding, "LSDA Encoding (%s)",
936                              eh_data_format_name (lsda_encoding));
937
938       if (fde_encoding != DW_EH_PE_absptr)
939         dw2_asm_output_data (1, fde_encoding, "FDE Encoding (%s)",
940                              eh_data_format_name (fde_encoding));
941     }
942
943   FOR_EACH_VEC_ELT (*cie_cfi_vec, i, cfi)
944     output_cfi (cfi, NULL, for_eh);
945
946   /* Pad the CIE out to an address sized boundary.  */
947   ASM_OUTPUT_ALIGN (asm_out_file,
948                     floor_log2 (for_eh ? PTR_SIZE : DWARF2_ADDR_SIZE));
949   ASM_OUTPUT_LABEL (asm_out_file, l2);
950
951   /* Loop through all of the FDE's.  */
952   FOR_EACH_VEC_ELT (*fde_vec, i, fde)
953     {
954       unsigned int k;
955
956       /* Don't emit EH unwind info for leaf functions that don't need it.  */
957       if (for_eh && !fde_needed_for_eh_p (fde))
958         continue;
959
960       for (k = 0; k < (fde->dw_fde_second_begin ? 2 : 1); k++)
961         output_fde (fde, for_eh, k, section_start_label, fde_encoding,
962                     augmentation, any_lsda_needed, lsda_encoding);
963     }
964
965   if (for_eh && targetm.terminate_dw2_eh_frame_info)
966     dw2_asm_output_data (4, 0, "End of Table");
967
968   /* Turn off app to make assembly quicker.  */
969   if (flag_debug_asm)
970     app_disable ();
971 }
972
973 /* Emit .cfi_startproc and .cfi_personality/.cfi_lsda if needed.  */
974
975 static void
976 dwarf2out_do_cfi_startproc (bool second)
977 {
978   int enc;
979   rtx ref;
980   rtx personality = get_personality_function (current_function_decl);
981
982   fprintf (asm_out_file, "\t.cfi_startproc\n");
983
984   if (personality)
985     {
986       enc = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2, /*global=*/1);
987       ref = personality;
988
989       /* ??? The GAS support isn't entirely consistent.  We have to
990          handle indirect support ourselves, but PC-relative is done
991          in the assembler.  Further, the assembler can't handle any
992          of the weirder relocation types.  */
993       if (enc & DW_EH_PE_indirect)
994         ref = dw2_force_const_mem (ref, true);
995
996       fprintf (asm_out_file, "\t.cfi_personality %#x,", enc);
997       output_addr_const (asm_out_file, ref);
998       fputc ('\n', asm_out_file);
999     }
1000
1001   if (crtl->uses_eh_lsda)
1002     {
1003       char lab[20];
1004
1005       enc = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0, /*global=*/0);
1006       ASM_GENERATE_INTERNAL_LABEL (lab, second ? "LLSDAC" : "LLSDA",
1007                                    current_function_funcdef_no);
1008       ref = gen_rtx_SYMBOL_REF (Pmode, lab);
1009       SYMBOL_REF_FLAGS (ref) = SYMBOL_FLAG_LOCAL;
1010
1011       if (enc & DW_EH_PE_indirect)
1012         ref = dw2_force_const_mem (ref, true);
1013
1014       fprintf (asm_out_file, "\t.cfi_lsda %#x,", enc);
1015       output_addr_const (asm_out_file, ref);
1016       fputc ('\n', asm_out_file);
1017     }
1018 }
1019
1020 /* Allocate CURRENT_FDE.  Immediately initialize all we can, noting that
1021    this allocation may be done before pass_final.  */
1022
1023 dw_fde_ref
1024 dwarf2out_alloc_current_fde (void)
1025 {
1026   dw_fde_ref fde;
1027
1028   fde = ggc_cleared_alloc<dw_fde_node> ();
1029   fde->decl = current_function_decl;
1030   fde->funcdef_number = current_function_funcdef_no;
1031   fde->fde_index = vec_safe_length (fde_vec);
1032   fde->all_throwers_are_sibcalls = crtl->all_throwers_are_sibcalls;
1033   fde->uses_eh_lsda = crtl->uses_eh_lsda;
1034   fde->nothrow = crtl->nothrow;
1035   fde->drap_reg = INVALID_REGNUM;
1036   fde->vdrap_reg = INVALID_REGNUM;
1037
1038   /* Record the FDE associated with this function.  */
1039   cfun->fde = fde;
1040   vec_safe_push (fde_vec, fde);
1041
1042   return fde;
1043 }
1044
1045 /* Output a marker (i.e. a label) for the beginning of a function, before
1046    the prologue.  */
1047
1048 void
1049 dwarf2out_begin_prologue (unsigned int line ATTRIBUTE_UNUSED,
1050                           const char *file ATTRIBUTE_UNUSED)
1051 {
1052   char label[MAX_ARTIFICIAL_LABEL_BYTES];
1053   char * dup_label;
1054   dw_fde_ref fde;
1055   section *fnsec;
1056   bool do_frame;
1057
1058   current_function_func_begin_label = NULL;
1059
1060   do_frame = dwarf2out_do_frame ();
1061
1062   /* ??? current_function_func_begin_label is also used by except.c for
1063      call-site information.  We must emit this label if it might be used.  */
1064   if (!do_frame
1065       && (!flag_exceptions
1066           || targetm_common.except_unwind_info (&global_options) == UI_SJLJ))
1067     return;
1068
1069   fnsec = function_section (current_function_decl);
1070   switch_to_section (fnsec);
1071   ASM_GENERATE_INTERNAL_LABEL (label, FUNC_BEGIN_LABEL,
1072                                current_function_funcdef_no);
1073   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, FUNC_BEGIN_LABEL,
1074                           current_function_funcdef_no);
1075   dup_label = xstrdup (label);
1076   current_function_func_begin_label = dup_label;
1077
1078   /* We can elide the fde allocation if we're not emitting debug info.  */
1079   if (!do_frame)
1080     return;
1081
1082   /* Cater to the various TARGET_ASM_OUTPUT_MI_THUNK implementations that
1083      emit insns as rtx but bypass the bulk of rest_of_compilation, which
1084      would include pass_dwarf2_frame.  If we've not created the FDE yet,
1085      do so now.  */
1086   fde = cfun->fde;
1087   if (fde == NULL)
1088     fde = dwarf2out_alloc_current_fde ();
1089
1090   /* Initialize the bits of CURRENT_FDE that were not available earlier.  */
1091   fde->dw_fde_begin = dup_label;
1092   fde->dw_fde_current_label = dup_label;
1093   fde->in_std_section = (fnsec == text_section
1094                          || (cold_text_section && fnsec == cold_text_section));
1095
1096   /* We only want to output line number information for the genuine dwarf2
1097      prologue case, not the eh frame case.  */
1098 #ifdef DWARF2_DEBUGGING_INFO
1099   if (file)
1100     dwarf2out_source_line (line, file, 0, true);
1101 #endif
1102
1103   if (dwarf2out_do_cfi_asm ())
1104     dwarf2out_do_cfi_startproc (false);
1105   else
1106     {
1107       rtx personality = get_personality_function (current_function_decl);
1108       if (!current_unit_personality)
1109         current_unit_personality = personality;
1110
1111       /* We cannot keep a current personality per function as without CFI
1112          asm, at the point where we emit the CFI data, there is no current
1113          function anymore.  */
1114       if (personality && current_unit_personality != personality)
1115         sorry ("multiple EH personalities are supported only with assemblers "
1116                "supporting .cfi_personality directive");
1117     }
1118 }
1119
1120 /* Output a marker (i.e. a label) for the end of the generated code
1121    for a function prologue.  This gets called *after* the prologue code has
1122    been generated.  */
1123
1124 void
1125 dwarf2out_vms_end_prologue (unsigned int line ATTRIBUTE_UNUSED,
1126                         const char *file ATTRIBUTE_UNUSED)
1127 {
1128   char label[MAX_ARTIFICIAL_LABEL_BYTES];
1129
1130   /* Output a label to mark the endpoint of the code generated for this
1131      function.  */
1132   ASM_GENERATE_INTERNAL_LABEL (label, PROLOGUE_END_LABEL,
1133                                current_function_funcdef_no);
1134   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, PROLOGUE_END_LABEL,
1135                           current_function_funcdef_no);
1136   cfun->fde->dw_fde_vms_end_prologue = xstrdup (label);
1137 }
1138
1139 /* Output a marker (i.e. a label) for the beginning of the generated code
1140    for a function epilogue.  This gets called *before* the prologue code has
1141    been generated.  */
1142
1143 void
1144 dwarf2out_vms_begin_epilogue (unsigned int line ATTRIBUTE_UNUSED,
1145                           const char *file ATTRIBUTE_UNUSED)
1146 {
1147   dw_fde_ref fde = cfun->fde;
1148   char label[MAX_ARTIFICIAL_LABEL_BYTES];
1149
1150   if (fde->dw_fde_vms_begin_epilogue)
1151     return;
1152
1153   /* Output a label to mark the endpoint of the code generated for this
1154      function.  */
1155   ASM_GENERATE_INTERNAL_LABEL (label, EPILOGUE_BEGIN_LABEL,
1156                                current_function_funcdef_no);
1157   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, EPILOGUE_BEGIN_LABEL,
1158                           current_function_funcdef_no);
1159   fde->dw_fde_vms_begin_epilogue = xstrdup (label);
1160 }
1161
1162 /* Output a marker (i.e. a label) for the absolute end of the generated code
1163    for a function definition.  This gets called *after* the epilogue code has
1164    been generated.  */
1165
1166 void
1167 dwarf2out_end_epilogue (unsigned int line ATTRIBUTE_UNUSED,
1168                         const char *file ATTRIBUTE_UNUSED)
1169 {
1170   dw_fde_ref fde;
1171   char label[MAX_ARTIFICIAL_LABEL_BYTES];
1172
1173   last_var_location_insn = NULL;
1174   cached_next_real_insn = NULL;
1175
1176   if (dwarf2out_do_cfi_asm ())
1177     fprintf (asm_out_file, "\t.cfi_endproc\n");
1178
1179   /* Output a label to mark the endpoint of the code generated for this
1180      function.  */
1181   ASM_GENERATE_INTERNAL_LABEL (label, FUNC_END_LABEL,
1182                                current_function_funcdef_no);
1183   ASM_OUTPUT_LABEL (asm_out_file, label);
1184   fde = cfun->fde;
1185   gcc_assert (fde != NULL);
1186   if (fde->dw_fde_second_begin == NULL)
1187     fde->dw_fde_end = xstrdup (label);
1188 }
1189
1190 void
1191 dwarf2out_frame_finish (void)
1192 {
1193   /* Output call frame information.  */
1194   if (targetm.debug_unwind_info () == UI_DWARF2)
1195     output_call_frame_info (0);
1196
1197   /* Output another copy for the unwinder.  */
1198   if ((flag_unwind_tables || flag_exceptions)
1199       && targetm_common.except_unwind_info (&global_options) == UI_DWARF2)
1200     output_call_frame_info (1);
1201 }
1202
1203 /* Note that the current function section is being used for code.  */
1204
1205 static void
1206 dwarf2out_note_section_used (void)
1207 {
1208   section *sec = current_function_section ();
1209   if (sec == text_section)
1210     text_section_used = true;
1211   else if (sec == cold_text_section)
1212     cold_text_section_used = true;
1213 }
1214
1215 static void var_location_switch_text_section (void);
1216 static void set_cur_line_info_table (section *);
1217
1218 void
1219 dwarf2out_switch_text_section (void)
1220 {
1221   section *sect;
1222   dw_fde_ref fde = cfun->fde;
1223
1224   gcc_assert (cfun && fde && fde->dw_fde_second_begin == NULL);
1225
1226   if (!in_cold_section_p)
1227     {
1228       fde->dw_fde_end = crtl->subsections.cold_section_end_label;
1229       fde->dw_fde_second_begin = crtl->subsections.hot_section_label;
1230       fde->dw_fde_second_end = crtl->subsections.hot_section_end_label;
1231     }
1232   else
1233     {
1234       fde->dw_fde_end = crtl->subsections.hot_section_end_label;
1235       fde->dw_fde_second_begin = crtl->subsections.cold_section_label;
1236       fde->dw_fde_second_end = crtl->subsections.cold_section_end_label;
1237     }
1238   have_multiple_function_sections = true;
1239
1240   /* There is no need to mark used sections when not debugging.  */
1241   if (cold_text_section != NULL)
1242     dwarf2out_note_section_used ();
1243
1244   if (dwarf2out_do_cfi_asm ())
1245     fprintf (asm_out_file, "\t.cfi_endproc\n");
1246
1247   /* Now do the real section switch.  */
1248   sect = current_function_section ();
1249   switch_to_section (sect);
1250
1251   fde->second_in_std_section
1252     = (sect == text_section
1253        || (cold_text_section && sect == cold_text_section));
1254
1255   if (dwarf2out_do_cfi_asm ())
1256     dwarf2out_do_cfi_startproc (true);
1257
1258   var_location_switch_text_section ();
1259
1260   if (cold_text_section != NULL)
1261     set_cur_line_info_table (sect);
1262 }
1263 \f
1264 /* And now, the subset of the debugging information support code necessary
1265    for emitting location expressions.  */
1266
1267 /* Data about a single source file.  */
1268 struct GTY((for_user)) dwarf_file_data {
1269   const char * filename;
1270   int emitted_number;
1271 };
1272
1273 typedef struct GTY(()) deferred_locations_struct
1274 {
1275   tree variable;
1276   dw_die_ref die;
1277 } deferred_locations;
1278
1279
1280 static GTY(()) vec<deferred_locations, va_gc> *deferred_locations_list;
1281
1282
1283 /* Describe an entry into the .debug_addr section.  */
1284
1285 enum ate_kind {
1286   ate_kind_rtx,
1287   ate_kind_rtx_dtprel,
1288   ate_kind_label
1289 };
1290
1291 typedef struct GTY((for_user)) addr_table_entry_struct {
1292   enum ate_kind kind;
1293   unsigned int refcount;
1294   unsigned int index;
1295   union addr_table_entry_struct_union
1296     {
1297       rtx GTY ((tag ("0"))) rtl;
1298       char * GTY ((tag ("1"))) label;
1299     }
1300   GTY ((desc ("%1.kind"))) addr;
1301 }
1302 addr_table_entry;
1303
1304 /* Location lists are ranges + location descriptions for that range,
1305    so you can track variables that are in different places over
1306    their entire life.  */
1307 typedef struct GTY(()) dw_loc_list_struct {
1308   dw_loc_list_ref dw_loc_next;
1309   const char *begin; /* Label and addr_entry for start of range */
1310   addr_table_entry *begin_entry;
1311   const char *end;  /* Label for end of range */
1312   char *ll_symbol; /* Label for beginning of location list.
1313                       Only on head of list */
1314   const char *section; /* Section this loclist is relative to */
1315   dw_loc_descr_ref expr;
1316   hashval_t hash;
1317   /* True if all addresses in this and subsequent lists are known to be
1318      resolved.  */
1319   bool resolved_addr;
1320   /* True if this list has been replaced by dw_loc_next.  */
1321   bool replaced;
1322   bool emitted;
1323   /* True if the range should be emitted even if begin and end
1324      are the same.  */
1325   bool force;
1326 } dw_loc_list_node;
1327
1328 static dw_loc_descr_ref int_loc_descriptor (HOST_WIDE_INT);
1329
1330 /* Convert a DWARF stack opcode into its string name.  */
1331
1332 static const char *
1333 dwarf_stack_op_name (unsigned int op)
1334 {
1335   const char *name = get_DW_OP_name (op);
1336
1337   if (name != NULL)
1338     return name;
1339
1340   return "OP_<unknown>";
1341 }
1342
1343 /* Return a pointer to a newly allocated location description.  Location
1344    descriptions are simple expression terms that can be strung
1345    together to form more complicated location (address) descriptions.  */
1346
1347 static inline dw_loc_descr_ref
1348 new_loc_descr (enum dwarf_location_atom op, unsigned HOST_WIDE_INT oprnd1,
1349                unsigned HOST_WIDE_INT oprnd2)
1350 {
1351   dw_loc_descr_ref descr = ggc_cleared_alloc<dw_loc_descr_node> ();
1352
1353   descr->dw_loc_opc = op;
1354   descr->dw_loc_oprnd1.val_class = dw_val_class_unsigned_const;
1355   descr->dw_loc_oprnd1.val_entry = NULL;
1356   descr->dw_loc_oprnd1.v.val_unsigned = oprnd1;
1357   descr->dw_loc_oprnd2.val_class = dw_val_class_unsigned_const;
1358   descr->dw_loc_oprnd2.val_entry = NULL;
1359   descr->dw_loc_oprnd2.v.val_unsigned = oprnd2;
1360
1361   return descr;
1362 }
1363
1364 /* Return a pointer to a newly allocated location description for
1365    REG and OFFSET.  */
1366
1367 static inline dw_loc_descr_ref
1368 new_reg_loc_descr (unsigned int reg,  unsigned HOST_WIDE_INT offset)
1369 {
1370   if (reg <= 31)
1371     return new_loc_descr ((enum dwarf_location_atom) (DW_OP_breg0 + reg),
1372                           offset, 0);
1373   else
1374     return new_loc_descr (DW_OP_bregx, reg, offset);
1375 }
1376
1377 /* Add a location description term to a location description expression.  */
1378
1379 static inline void
1380 add_loc_descr (dw_loc_descr_ref *list_head, dw_loc_descr_ref descr)
1381 {
1382   dw_loc_descr_ref *d;
1383
1384   /* Find the end of the chain.  */
1385   for (d = list_head; (*d) != NULL; d = &(*d)->dw_loc_next)
1386     ;
1387
1388   *d = descr;
1389 }
1390
1391 /* Compare two location operands for exact equality.  */
1392
1393 static bool
1394 dw_val_equal_p (dw_val_node *a, dw_val_node *b)
1395 {
1396   if (a->val_class != b->val_class)
1397     return false;
1398   switch (a->val_class)
1399     {
1400     case dw_val_class_none:
1401       return true;
1402     case dw_val_class_addr:
1403       return rtx_equal_p (a->v.val_addr, b->v.val_addr);
1404
1405     case dw_val_class_offset:
1406     case dw_val_class_unsigned_const:
1407     case dw_val_class_const:
1408     case dw_val_class_range_list:
1409     case dw_val_class_lineptr:
1410     case dw_val_class_macptr:
1411       /* These are all HOST_WIDE_INT, signed or unsigned.  */
1412       return a->v.val_unsigned == b->v.val_unsigned;
1413
1414     case dw_val_class_loc:
1415       return a->v.val_loc == b->v.val_loc;
1416     case dw_val_class_loc_list:
1417       return a->v.val_loc_list == b->v.val_loc_list;
1418     case dw_val_class_die_ref:
1419       return a->v.val_die_ref.die == b->v.val_die_ref.die;
1420     case dw_val_class_fde_ref:
1421       return a->v.val_fde_index == b->v.val_fde_index;
1422     case dw_val_class_lbl_id:
1423     case dw_val_class_high_pc:
1424       return strcmp (a->v.val_lbl_id, b->v.val_lbl_id) == 0;
1425     case dw_val_class_str:
1426       return a->v.val_str == b->v.val_str;
1427     case dw_val_class_flag:
1428       return a->v.val_flag == b->v.val_flag;
1429     case dw_val_class_file:
1430       return a->v.val_file == b->v.val_file;
1431     case dw_val_class_decl_ref:
1432       return a->v.val_decl_ref == b->v.val_decl_ref;
1433     
1434     case dw_val_class_const_double:
1435       return (a->v.val_double.high == b->v.val_double.high
1436               && a->v.val_double.low == b->v.val_double.low);
1437
1438     case dw_val_class_wide_int:
1439       return *a->v.val_wide == *b->v.val_wide;
1440
1441     case dw_val_class_vec:
1442       {
1443         size_t a_len = a->v.val_vec.elt_size * a->v.val_vec.length;
1444         size_t b_len = b->v.val_vec.elt_size * b->v.val_vec.length;
1445
1446         return (a_len == b_len
1447                 && !memcmp (a->v.val_vec.array, b->v.val_vec.array, a_len));
1448       }
1449
1450     case dw_val_class_data8:
1451       return memcmp (a->v.val_data8, b->v.val_data8, 8) == 0;
1452
1453     case dw_val_class_vms_delta:
1454       return (!strcmp (a->v.val_vms_delta.lbl1, b->v.val_vms_delta.lbl1)
1455               && !strcmp (a->v.val_vms_delta.lbl1, b->v.val_vms_delta.lbl1));
1456     }
1457   gcc_unreachable ();
1458 }
1459
1460 /* Compare two location atoms for exact equality.  */
1461
1462 static bool
1463 loc_descr_equal_p_1 (dw_loc_descr_ref a, dw_loc_descr_ref b)
1464 {
1465   if (a->dw_loc_opc != b->dw_loc_opc)
1466     return false;
1467
1468   /* ??? This is only ever set for DW_OP_constNu, for N equal to the
1469      address size, but since we always allocate cleared storage it
1470      should be zero for other types of locations.  */
1471   if (a->dtprel != b->dtprel)
1472     return false;
1473
1474   return (dw_val_equal_p (&a->dw_loc_oprnd1, &b->dw_loc_oprnd1)
1475           && dw_val_equal_p (&a->dw_loc_oprnd2, &b->dw_loc_oprnd2));
1476 }
1477
1478 /* Compare two complete location expressions for exact equality.  */
1479
1480 bool
1481 loc_descr_equal_p (dw_loc_descr_ref a, dw_loc_descr_ref b)
1482 {
1483   while (1)
1484     {
1485       if (a == b)
1486         return true;
1487       if (a == NULL || b == NULL)
1488         return false;
1489       if (!loc_descr_equal_p_1 (a, b))
1490         return false;
1491
1492       a = a->dw_loc_next;
1493       b = b->dw_loc_next;
1494     }
1495 }
1496
1497
1498 /* Add a constant OFFSET to a location expression.  */
1499
1500 static void
1501 loc_descr_plus_const (dw_loc_descr_ref *list_head, HOST_WIDE_INT offset)
1502 {
1503   dw_loc_descr_ref loc;
1504   HOST_WIDE_INT *p;
1505
1506   gcc_assert (*list_head != NULL);
1507
1508   if (!offset)
1509     return;
1510
1511   /* Find the end of the chain.  */
1512   for (loc = *list_head; loc->dw_loc_next != NULL; loc = loc->dw_loc_next)
1513     ;
1514
1515   p = NULL;
1516   if (loc->dw_loc_opc == DW_OP_fbreg
1517       || (loc->dw_loc_opc >= DW_OP_breg0 && loc->dw_loc_opc <= DW_OP_breg31))
1518     p = &loc->dw_loc_oprnd1.v.val_int;
1519   else if (loc->dw_loc_opc == DW_OP_bregx)
1520     p = &loc->dw_loc_oprnd2.v.val_int;
1521
1522   /* If the last operation is fbreg, breg{0..31,x}, optimize by adjusting its
1523      offset.  Don't optimize if an signed integer overflow would happen.  */
1524   if (p != NULL
1525       && ((offset > 0 && *p <= INTTYPE_MAXIMUM (HOST_WIDE_INT) - offset)
1526           || (offset < 0 && *p >= INTTYPE_MINIMUM (HOST_WIDE_INT) - offset)))
1527     *p += offset;
1528
1529   else if (offset > 0)
1530     loc->dw_loc_next = new_loc_descr (DW_OP_plus_uconst, offset, 0);
1531
1532   else
1533     {
1534       loc->dw_loc_next = int_loc_descriptor (-offset);
1535       add_loc_descr (&loc->dw_loc_next, new_loc_descr (DW_OP_minus, 0, 0));
1536     }
1537 }
1538
1539 /* Add a constant OFFSET to a location list.  */
1540
1541 static void
1542 loc_list_plus_const (dw_loc_list_ref list_head, HOST_WIDE_INT offset)
1543 {
1544   dw_loc_list_ref d;
1545   for (d = list_head; d != NULL; d = d->dw_loc_next)
1546     loc_descr_plus_const (&d->expr, offset);
1547 }
1548
1549 #define DWARF_REF_SIZE  \
1550   (dwarf_version == 2 ? DWARF2_ADDR_SIZE : DWARF_OFFSET_SIZE)
1551
1552 static unsigned long int get_base_type_offset (dw_die_ref);
1553
1554 /* Return the size of a location descriptor.  */
1555
1556 static unsigned long
1557 size_of_loc_descr (dw_loc_descr_ref loc)
1558 {
1559   unsigned long size = 1;
1560
1561   switch (loc->dw_loc_opc)
1562     {
1563     case DW_OP_addr:
1564       size += DWARF2_ADDR_SIZE;
1565       break;
1566     case DW_OP_GNU_addr_index:
1567     case DW_OP_GNU_const_index:
1568       gcc_assert (loc->dw_loc_oprnd1.val_entry->index != NO_INDEX_ASSIGNED);
1569       size += size_of_uleb128 (loc->dw_loc_oprnd1.val_entry->index);
1570       break;
1571     case DW_OP_const1u:
1572     case DW_OP_const1s:
1573       size += 1;
1574       break;
1575     case DW_OP_const2u:
1576     case DW_OP_const2s:
1577       size += 2;
1578       break;
1579     case DW_OP_const4u:
1580     case DW_OP_const4s:
1581       size += 4;
1582       break;
1583     case DW_OP_const8u:
1584     case DW_OP_const8s:
1585       size += 8;
1586       break;
1587     case DW_OP_constu:
1588       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
1589       break;
1590     case DW_OP_consts:
1591       size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
1592       break;
1593     case DW_OP_pick:
1594       size += 1;
1595       break;
1596     case DW_OP_plus_uconst:
1597       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
1598       break;
1599     case DW_OP_skip:
1600     case DW_OP_bra:
1601       size += 2;
1602       break;
1603     case DW_OP_breg0:
1604     case DW_OP_breg1:
1605     case DW_OP_breg2:
1606     case DW_OP_breg3:
1607     case DW_OP_breg4:
1608     case DW_OP_breg5:
1609     case DW_OP_breg6:
1610     case DW_OP_breg7:
1611     case DW_OP_breg8:
1612     case DW_OP_breg9:
1613     case DW_OP_breg10:
1614     case DW_OP_breg11:
1615     case DW_OP_breg12:
1616     case DW_OP_breg13:
1617     case DW_OP_breg14:
1618     case DW_OP_breg15:
1619     case DW_OP_breg16:
1620     case DW_OP_breg17:
1621     case DW_OP_breg18:
1622     case DW_OP_breg19:
1623     case DW_OP_breg20:
1624     case DW_OP_breg21:
1625     case DW_OP_breg22:
1626     case DW_OP_breg23:
1627     case DW_OP_breg24:
1628     case DW_OP_breg25:
1629     case DW_OP_breg26:
1630     case DW_OP_breg27:
1631     case DW_OP_breg28:
1632     case DW_OP_breg29:
1633     case DW_OP_breg30:
1634     case DW_OP_breg31:
1635       size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
1636       break;
1637     case DW_OP_regx:
1638       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
1639       break;
1640     case DW_OP_fbreg:
1641       size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
1642       break;
1643     case DW_OP_bregx:
1644       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
1645       size += size_of_sleb128 (loc->dw_loc_oprnd2.v.val_int);
1646       break;
1647     case DW_OP_piece:
1648       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
1649       break;
1650     case DW_OP_bit_piece:
1651       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
1652       size += size_of_uleb128 (loc->dw_loc_oprnd2.v.val_unsigned);
1653       break;
1654     case DW_OP_deref_size:
1655     case DW_OP_xderef_size:
1656       size += 1;
1657       break;
1658     case DW_OP_call2:
1659       size += 2;
1660       break;
1661     case DW_OP_call4:
1662       size += 4;
1663       break;
1664     case DW_OP_call_ref:
1665       size += DWARF_REF_SIZE;
1666       break;
1667     case DW_OP_implicit_value:
1668       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned)
1669               + loc->dw_loc_oprnd1.v.val_unsigned;
1670       break;
1671     case DW_OP_GNU_implicit_pointer:
1672       size += DWARF_REF_SIZE + size_of_sleb128 (loc->dw_loc_oprnd2.v.val_int);
1673       break;
1674     case DW_OP_GNU_entry_value:
1675       {
1676         unsigned long op_size = size_of_locs (loc->dw_loc_oprnd1.v.val_loc);
1677         size += size_of_uleb128 (op_size) + op_size;
1678         break;
1679       }
1680     case DW_OP_GNU_const_type:
1681       {
1682         unsigned long o
1683           = get_base_type_offset (loc->dw_loc_oprnd1.v.val_die_ref.die);
1684         size += size_of_uleb128 (o) + 1;
1685         switch (loc->dw_loc_oprnd2.val_class)
1686           {
1687           case dw_val_class_vec:
1688             size += loc->dw_loc_oprnd2.v.val_vec.length
1689                     * loc->dw_loc_oprnd2.v.val_vec.elt_size;
1690             break;
1691           case dw_val_class_const:
1692             size += HOST_BITS_PER_WIDE_INT / BITS_PER_UNIT;
1693             break;
1694           case dw_val_class_const_double:
1695             size += HOST_BITS_PER_DOUBLE_INT / BITS_PER_UNIT;
1696             break;
1697           case dw_val_class_wide_int:
1698             size += (get_full_len (*loc->dw_loc_oprnd2.v.val_wide)
1699                      * HOST_BITS_PER_WIDE_INT / BITS_PER_UNIT);
1700             break;
1701           default:
1702             gcc_unreachable ();
1703           }
1704         break;
1705       }
1706     case DW_OP_GNU_regval_type:
1707       {
1708         unsigned long o
1709           = get_base_type_offset (loc->dw_loc_oprnd2.v.val_die_ref.die);
1710         size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned)
1711                 + size_of_uleb128 (o);
1712       }
1713       break;
1714     case DW_OP_GNU_deref_type:
1715       {
1716         unsigned long o
1717           = get_base_type_offset (loc->dw_loc_oprnd2.v.val_die_ref.die);
1718         size += 1 + size_of_uleb128 (o);
1719       }
1720       break;
1721     case DW_OP_GNU_convert:
1722     case DW_OP_GNU_reinterpret:
1723       if (loc->dw_loc_oprnd1.val_class == dw_val_class_unsigned_const)
1724         size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
1725       else
1726         {
1727           unsigned long o
1728             = get_base_type_offset (loc->dw_loc_oprnd1.v.val_die_ref.die);
1729           size += size_of_uleb128 (o);
1730         }
1731       break;
1732     case DW_OP_GNU_parameter_ref:
1733       size += 4;
1734       break;
1735     default:
1736       break;
1737     }
1738
1739   return size;
1740 }
1741
1742 /* Return the size of a series of location descriptors.  */
1743
1744 unsigned long
1745 size_of_locs (dw_loc_descr_ref loc)
1746 {
1747   dw_loc_descr_ref l;
1748   unsigned long size;
1749
1750   /* If there are no skip or bra opcodes, don't fill in the dw_loc_addr
1751      field, to avoid writing to a PCH file.  */
1752   for (size = 0, l = loc; l != NULL; l = l->dw_loc_next)
1753     {
1754       if (l->dw_loc_opc == DW_OP_skip || l->dw_loc_opc == DW_OP_bra)
1755         break;
1756       size += size_of_loc_descr (l);
1757     }
1758   if (! l)
1759     return size;
1760
1761   for (size = 0, l = loc; l != NULL; l = l->dw_loc_next)
1762     {
1763       l->dw_loc_addr = size;
1764       size += size_of_loc_descr (l);
1765     }
1766
1767   return size;
1768 }
1769
1770 static HOST_WIDE_INT extract_int (const unsigned char *, unsigned);
1771 static void get_ref_die_offset_label (char *, dw_die_ref);
1772 static unsigned long int get_ref_die_offset (dw_die_ref);
1773
1774 /* Output location description stack opcode's operands (if any).
1775    The for_eh_or_skip parameter controls whether register numbers are
1776    converted using DWARF2_FRAME_REG_OUT, which is needed in the case that
1777    hard reg numbers have been processed via DWARF_FRAME_REGNUM (i.e. for unwind
1778    info).  This should be suppressed for the cases that have not been converted
1779    (i.e. symbolic debug info), by setting the parameter < 0.  See PR47324.  */
1780
1781 static void
1782 output_loc_operands (dw_loc_descr_ref loc, int for_eh_or_skip)
1783 {
1784   dw_val_ref val1 = &loc->dw_loc_oprnd1;
1785   dw_val_ref val2 = &loc->dw_loc_oprnd2;
1786
1787   switch (loc->dw_loc_opc)
1788     {
1789 #ifdef DWARF2_DEBUGGING_INFO
1790     case DW_OP_const2u:
1791     case DW_OP_const2s:
1792       dw2_asm_output_data (2, val1->v.val_int, NULL);
1793       break;
1794     case DW_OP_const4u:
1795       if (loc->dtprel)
1796         {
1797           gcc_assert (targetm.asm_out.output_dwarf_dtprel);
1798           targetm.asm_out.output_dwarf_dtprel (asm_out_file, 4,
1799                                                val1->v.val_addr);
1800           fputc ('\n', asm_out_file);
1801           break;
1802         }
1803       /* FALLTHRU */
1804     case DW_OP_const4s:
1805       dw2_asm_output_data (4, val1->v.val_int, NULL);
1806       break;
1807     case DW_OP_const8u:
1808       if (loc->dtprel)
1809         {
1810           gcc_assert (targetm.asm_out.output_dwarf_dtprel);
1811           targetm.asm_out.output_dwarf_dtprel (asm_out_file, 8,
1812                                                val1->v.val_addr);
1813           fputc ('\n', asm_out_file);
1814           break;
1815         }
1816       /* FALLTHRU */
1817     case DW_OP_const8s:
1818       gcc_assert (HOST_BITS_PER_WIDE_INT >= 64);
1819       dw2_asm_output_data (8, val1->v.val_int, NULL);
1820       break;
1821     case DW_OP_skip:
1822     case DW_OP_bra:
1823       {
1824         int offset;
1825
1826         gcc_assert (val1->val_class == dw_val_class_loc);
1827         offset = val1->v.val_loc->dw_loc_addr - (loc->dw_loc_addr + 3);
1828
1829         dw2_asm_output_data (2, offset, NULL);
1830       }
1831       break;
1832     case DW_OP_implicit_value:
1833       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
1834       switch (val2->val_class)
1835         {
1836         case dw_val_class_const:
1837           dw2_asm_output_data (val1->v.val_unsigned, val2->v.val_int, NULL);
1838           break;
1839         case dw_val_class_vec:
1840           {
1841             unsigned int elt_size = val2->v.val_vec.elt_size;
1842             unsigned int len = val2->v.val_vec.length;
1843             unsigned int i;
1844             unsigned char *p;
1845
1846             if (elt_size > sizeof (HOST_WIDE_INT))
1847               {
1848                 elt_size /= 2;
1849                 len *= 2;
1850               }
1851             for (i = 0, p = val2->v.val_vec.array;
1852                  i < len;
1853                  i++, p += elt_size)
1854               dw2_asm_output_data (elt_size, extract_int (p, elt_size),
1855                                    "fp or vector constant word %u", i);
1856           }
1857           break;
1858         case dw_val_class_const_double:
1859           {
1860             unsigned HOST_WIDE_INT first, second;
1861
1862             if (WORDS_BIG_ENDIAN)
1863               {
1864                 first = val2->v.val_double.high;
1865                 second = val2->v.val_double.low;
1866               }
1867             else
1868               {
1869                 first = val2->v.val_double.low;
1870                 second = val2->v.val_double.high;
1871               }
1872             dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR,
1873                                  first, NULL);
1874             dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR,
1875                                  second, NULL);
1876           }
1877           break;
1878         case dw_val_class_wide_int:
1879           {
1880             int i;
1881             int len = get_full_len (*val2->v.val_wide);
1882             if (WORDS_BIG_ENDIAN)
1883               for (i = len - 1; i >= 0; --i)
1884                 dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR,
1885                                      val2->v.val_wide->elt (i), NULL);
1886             else
1887               for (i = 0; i < len; ++i)
1888                 dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR,
1889                                      val2->v.val_wide->elt (i), NULL);
1890           }
1891           break;
1892         case dw_val_class_addr:
1893           gcc_assert (val1->v.val_unsigned == DWARF2_ADDR_SIZE);
1894           dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE, val2->v.val_addr, NULL);
1895           break;
1896         default:
1897           gcc_unreachable ();
1898         }
1899       break;
1900 #else
1901     case DW_OP_const2u:
1902     case DW_OP_const2s:
1903     case DW_OP_const4u:
1904     case DW_OP_const4s:
1905     case DW_OP_const8u:
1906     case DW_OP_const8s:
1907     case DW_OP_skip:
1908     case DW_OP_bra:
1909     case DW_OP_implicit_value:
1910       /* We currently don't make any attempt to make sure these are
1911          aligned properly like we do for the main unwind info, so
1912          don't support emitting things larger than a byte if we're
1913          only doing unwinding.  */
1914       gcc_unreachable ();
1915 #endif
1916     case DW_OP_const1u:
1917     case DW_OP_const1s:
1918       dw2_asm_output_data (1, val1->v.val_int, NULL);
1919       break;
1920     case DW_OP_constu:
1921       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
1922       break;
1923     case DW_OP_consts:
1924       dw2_asm_output_data_sleb128 (val1->v.val_int, NULL);
1925       break;
1926     case DW_OP_pick:
1927       dw2_asm_output_data (1, val1->v.val_int, NULL);
1928       break;
1929     case DW_OP_plus_uconst:
1930       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
1931       break;
1932     case DW_OP_breg0:
1933     case DW_OP_breg1:
1934     case DW_OP_breg2:
1935     case DW_OP_breg3:
1936     case DW_OP_breg4:
1937     case DW_OP_breg5:
1938     case DW_OP_breg6:
1939     case DW_OP_breg7:
1940     case DW_OP_breg8:
1941     case DW_OP_breg9:
1942     case DW_OP_breg10:
1943     case DW_OP_breg11:
1944     case DW_OP_breg12:
1945     case DW_OP_breg13:
1946     case DW_OP_breg14:
1947     case DW_OP_breg15:
1948     case DW_OP_breg16:
1949     case DW_OP_breg17:
1950     case DW_OP_breg18:
1951     case DW_OP_breg19:
1952     case DW_OP_breg20:
1953     case DW_OP_breg21:
1954     case DW_OP_breg22:
1955     case DW_OP_breg23:
1956     case DW_OP_breg24:
1957     case DW_OP_breg25:
1958     case DW_OP_breg26:
1959     case DW_OP_breg27:
1960     case DW_OP_breg28:
1961     case DW_OP_breg29:
1962     case DW_OP_breg30:
1963     case DW_OP_breg31:
1964       dw2_asm_output_data_sleb128 (val1->v.val_int, NULL);
1965       break;
1966     case DW_OP_regx:
1967       {
1968         unsigned r = val1->v.val_unsigned;
1969         if (for_eh_or_skip >= 0)
1970           r = DWARF2_FRAME_REG_OUT (r, for_eh_or_skip);
1971         gcc_assert (size_of_uleb128 (r) 
1972                     == size_of_uleb128 (val1->v.val_unsigned));
1973         dw2_asm_output_data_uleb128 (r, NULL);  
1974       }
1975       break;
1976     case DW_OP_fbreg:
1977       dw2_asm_output_data_sleb128 (val1->v.val_int, NULL);
1978       break;
1979     case DW_OP_bregx:
1980       {
1981         unsigned r = val1->v.val_unsigned;
1982         if (for_eh_or_skip >= 0)
1983           r = DWARF2_FRAME_REG_OUT (r, for_eh_or_skip);
1984         gcc_assert (size_of_uleb128 (r) 
1985                     == size_of_uleb128 (val1->v.val_unsigned));
1986         dw2_asm_output_data_uleb128 (r, NULL);  
1987         dw2_asm_output_data_sleb128 (val2->v.val_int, NULL);
1988       }
1989       break;
1990     case DW_OP_piece:
1991       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
1992       break;
1993     case DW_OP_bit_piece:
1994       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
1995       dw2_asm_output_data_uleb128 (val2->v.val_unsigned, NULL);
1996       break;
1997     case DW_OP_deref_size:
1998     case DW_OP_xderef_size:
1999       dw2_asm_output_data (1, val1->v.val_int, NULL);
2000       break;
2001
2002     case DW_OP_addr:
2003       if (loc->dtprel)
2004         {
2005           if (targetm.asm_out.output_dwarf_dtprel)
2006             {
2007               targetm.asm_out.output_dwarf_dtprel (asm_out_file,
2008                                                    DWARF2_ADDR_SIZE,
2009                                                    val1->v.val_addr);
2010               fputc ('\n', asm_out_file);
2011             }
2012           else
2013             gcc_unreachable ();
2014         }
2015       else
2016         {
2017 #ifdef DWARF2_DEBUGGING_INFO
2018           dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE, val1->v.val_addr, NULL);
2019 #else
2020           gcc_unreachable ();
2021 #endif
2022         }
2023       break;
2024
2025     case DW_OP_GNU_addr_index:
2026     case DW_OP_GNU_const_index:
2027       gcc_assert (loc->dw_loc_oprnd1.val_entry->index != NO_INDEX_ASSIGNED);
2028       dw2_asm_output_data_uleb128 (loc->dw_loc_oprnd1.val_entry->index,
2029                                    "(index into .debug_addr)");
2030       break;
2031
2032     case DW_OP_GNU_implicit_pointer:
2033       {
2034         char label[MAX_ARTIFICIAL_LABEL_BYTES
2035                    + HOST_BITS_PER_WIDE_INT / 2 + 2];
2036         gcc_assert (val1->val_class == dw_val_class_die_ref);
2037         get_ref_die_offset_label (label, val1->v.val_die_ref.die);
2038         dw2_asm_output_offset (DWARF_REF_SIZE, label, debug_info_section, NULL);
2039         dw2_asm_output_data_sleb128 (val2->v.val_int, NULL);
2040       }
2041       break;
2042
2043     case DW_OP_GNU_entry_value:
2044       dw2_asm_output_data_uleb128 (size_of_locs (val1->v.val_loc), NULL);
2045       output_loc_sequence (val1->v.val_loc, for_eh_or_skip);
2046       break;
2047
2048     case DW_OP_GNU_const_type:
2049       {
2050         unsigned long o = get_base_type_offset (val1->v.val_die_ref.die), l;
2051         gcc_assert (o);
2052         dw2_asm_output_data_uleb128 (o, NULL);
2053         switch (val2->val_class)
2054           {
2055           case dw_val_class_const:
2056             l = HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR;
2057             dw2_asm_output_data (1, l, NULL);
2058             dw2_asm_output_data (l, val2->v.val_int, NULL);
2059             break;
2060           case dw_val_class_vec:
2061             {
2062               unsigned int elt_size = val2->v.val_vec.elt_size;
2063               unsigned int len = val2->v.val_vec.length;
2064               unsigned int i;
2065               unsigned char *p;
2066
2067               l = len * elt_size;
2068               dw2_asm_output_data (1, l, NULL);
2069               if (elt_size > sizeof (HOST_WIDE_INT))
2070                 {
2071                   elt_size /= 2;
2072                   len *= 2;
2073                 }
2074               for (i = 0, p = val2->v.val_vec.array;
2075                    i < len;
2076                    i++, p += elt_size)
2077                 dw2_asm_output_data (elt_size, extract_int (p, elt_size),
2078                                      "fp or vector constant word %u", i);
2079             }
2080             break;
2081           case dw_val_class_const_double:
2082             {
2083               unsigned HOST_WIDE_INT first, second;
2084               l = HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR;
2085
2086               dw2_asm_output_data (1, 2 * l, NULL);
2087               if (WORDS_BIG_ENDIAN)
2088                 {
2089                   first = val2->v.val_double.high;
2090                   second = val2->v.val_double.low;
2091                 }
2092               else
2093                 {
2094                   first = val2->v.val_double.low;
2095                   second = val2->v.val_double.high;
2096                 }
2097               dw2_asm_output_data (l, first, NULL);
2098               dw2_asm_output_data (l, second, NULL);
2099             }
2100             break;
2101           case dw_val_class_wide_int:
2102             {
2103               int i;
2104               int len = get_full_len (*val2->v.val_wide);
2105               l = HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR;
2106
2107               dw2_asm_output_data (1, len * l, NULL);
2108               if (WORDS_BIG_ENDIAN)
2109                 for (i = len - 1; i >= 0; --i)
2110                   dw2_asm_output_data (l, val2->v.val_wide->elt (i), NULL);
2111               else
2112                 for (i = 0; i < len; ++i)
2113                   dw2_asm_output_data (l, val2->v.val_wide->elt (i), NULL);
2114             }
2115             break;
2116           default:
2117             gcc_unreachable ();
2118           }
2119       }
2120       break;
2121     case DW_OP_GNU_regval_type:
2122       {
2123         unsigned r = val1->v.val_unsigned;
2124         unsigned long o = get_base_type_offset (val2->v.val_die_ref.die);
2125         gcc_assert (o);
2126         if (for_eh_or_skip >= 0)
2127           {
2128             r = DWARF2_FRAME_REG_OUT (r, for_eh_or_skip);
2129             gcc_assert (size_of_uleb128 (r)
2130                         == size_of_uleb128 (val1->v.val_unsigned));
2131           }
2132         dw2_asm_output_data_uleb128 (r, NULL);
2133         dw2_asm_output_data_uleb128 (o, NULL);
2134       }
2135       break;
2136     case DW_OP_GNU_deref_type:
2137       {
2138         unsigned long o = get_base_type_offset (val2->v.val_die_ref.die);
2139         gcc_assert (o);
2140         dw2_asm_output_data (1, val1->v.val_int, NULL);
2141         dw2_asm_output_data_uleb128 (o, NULL);
2142       }
2143       break;
2144     case DW_OP_GNU_convert:
2145     case DW_OP_GNU_reinterpret:
2146       if (loc->dw_loc_oprnd1.val_class == dw_val_class_unsigned_const)
2147         dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
2148       else
2149         {
2150           unsigned long o = get_base_type_offset (val1->v.val_die_ref.die);
2151           gcc_assert (o);
2152           dw2_asm_output_data_uleb128 (o, NULL);
2153         }
2154       break;
2155
2156     case DW_OP_GNU_parameter_ref:
2157       {
2158         unsigned long o;
2159         gcc_assert (val1->val_class == dw_val_class_die_ref);
2160         o = get_ref_die_offset (val1->v.val_die_ref.die);
2161         dw2_asm_output_data (4, o, NULL);
2162       }
2163       break;
2164
2165     default:
2166       /* Other codes have no operands.  */
2167       break;
2168     }
2169 }
2170
2171 /* Output a sequence of location operations.  
2172    The for_eh_or_skip parameter controls whether register numbers are
2173    converted using DWARF2_FRAME_REG_OUT, which is needed in the case that
2174    hard reg numbers have been processed via DWARF_FRAME_REGNUM (i.e. for unwind
2175    info).  This should be suppressed for the cases that have not been converted
2176    (i.e. symbolic debug info), by setting the parameter < 0.  See PR47324.  */
2177
2178 void
2179 output_loc_sequence (dw_loc_descr_ref loc, int for_eh_or_skip)
2180 {
2181   for (; loc != NULL; loc = loc->dw_loc_next)
2182     {
2183       enum dwarf_location_atom opc = loc->dw_loc_opc;
2184       /* Output the opcode.  */
2185       if (for_eh_or_skip >= 0 
2186           && opc >= DW_OP_breg0 && opc <= DW_OP_breg31)
2187         {
2188           unsigned r = (opc - DW_OP_breg0);
2189           r = DWARF2_FRAME_REG_OUT (r, for_eh_or_skip);
2190           gcc_assert (r <= 31);
2191           opc = (enum dwarf_location_atom) (DW_OP_breg0 + r);
2192         }
2193       else if (for_eh_or_skip >= 0 
2194                && opc >= DW_OP_reg0 && opc <= DW_OP_reg31)
2195         {
2196           unsigned r = (opc - DW_OP_reg0);
2197           r = DWARF2_FRAME_REG_OUT (r, for_eh_or_skip);
2198           gcc_assert (r <= 31);
2199           opc = (enum dwarf_location_atom) (DW_OP_reg0 + r);
2200         }
2201
2202       dw2_asm_output_data (1, opc,
2203                              "%s", dwarf_stack_op_name (opc));
2204
2205       /* Output the operand(s) (if any).  */
2206       output_loc_operands (loc, for_eh_or_skip);
2207     }
2208 }
2209
2210 /* Output location description stack opcode's operands (if any).
2211    The output is single bytes on a line, suitable for .cfi_escape.  */
2212
2213 static void
2214 output_loc_operands_raw (dw_loc_descr_ref loc)
2215 {
2216   dw_val_ref val1 = &loc->dw_loc_oprnd1;
2217   dw_val_ref val2 = &loc->dw_loc_oprnd2;
2218
2219   switch (loc->dw_loc_opc)
2220     {
2221     case DW_OP_addr:
2222     case DW_OP_GNU_addr_index:
2223     case DW_OP_GNU_const_index:
2224     case DW_OP_implicit_value:
2225       /* We cannot output addresses in .cfi_escape, only bytes.  */
2226       gcc_unreachable ();
2227
2228     case DW_OP_const1u:
2229     case DW_OP_const1s:
2230     case DW_OP_pick:
2231     case DW_OP_deref_size:
2232     case DW_OP_xderef_size:
2233       fputc (',', asm_out_file);
2234       dw2_asm_output_data_raw (1, val1->v.val_int);
2235       break;
2236
2237     case DW_OP_const2u:
2238     case DW_OP_const2s:
2239       fputc (',', asm_out_file);
2240       dw2_asm_output_data_raw (2, val1->v.val_int);
2241       break;
2242
2243     case DW_OP_const4u:
2244     case DW_OP_const4s:
2245       fputc (',', asm_out_file);
2246       dw2_asm_output_data_raw (4, val1->v.val_int);
2247       break;
2248
2249     case DW_OP_const8u:
2250     case DW_OP_const8s:
2251       gcc_assert (HOST_BITS_PER_WIDE_INT >= 64);
2252       fputc (',', asm_out_file);
2253       dw2_asm_output_data_raw (8, val1->v.val_int);
2254       break;
2255
2256     case DW_OP_skip:
2257     case DW_OP_bra:
2258       {
2259         int offset;
2260
2261         gcc_assert (val1->val_class == dw_val_class_loc);
2262         offset = val1->v.val_loc->dw_loc_addr - (loc->dw_loc_addr + 3);
2263
2264         fputc (',', asm_out_file);
2265         dw2_asm_output_data_raw (2, offset);
2266       }
2267       break;
2268
2269     case DW_OP_regx:
2270       {
2271         unsigned r = DWARF2_FRAME_REG_OUT (val1->v.val_unsigned, 1);
2272         gcc_assert (size_of_uleb128 (r) 
2273                     == size_of_uleb128 (val1->v.val_unsigned));
2274         fputc (',', asm_out_file);
2275         dw2_asm_output_data_uleb128_raw (r);
2276       }
2277       break;
2278       
2279     case DW_OP_constu:
2280     case DW_OP_plus_uconst:
2281     case DW_OP_piece:
2282       fputc (',', asm_out_file);
2283       dw2_asm_output_data_uleb128_raw (val1->v.val_unsigned);
2284       break;
2285
2286     case DW_OP_bit_piece:
2287       fputc (',', asm_out_file);
2288       dw2_asm_output_data_uleb128_raw (val1->v.val_unsigned);
2289       dw2_asm_output_data_uleb128_raw (val2->v.val_unsigned);
2290       break;
2291
2292     case DW_OP_consts:
2293     case DW_OP_breg0:
2294     case DW_OP_breg1:
2295     case DW_OP_breg2:
2296     case DW_OP_breg3:
2297     case DW_OP_breg4:
2298     case DW_OP_breg5:
2299     case DW_OP_breg6:
2300     case DW_OP_breg7:
2301     case DW_OP_breg8:
2302     case DW_OP_breg9:
2303     case DW_OP_breg10:
2304     case DW_OP_breg11:
2305     case DW_OP_breg12:
2306     case DW_OP_breg13:
2307     case DW_OP_breg14:
2308     case DW_OP_breg15:
2309     case DW_OP_breg16:
2310     case DW_OP_breg17:
2311     case DW_OP_breg18:
2312     case DW_OP_breg19:
2313     case DW_OP_breg20:
2314     case DW_OP_breg21:
2315     case DW_OP_breg22:
2316     case DW_OP_breg23:
2317     case DW_OP_breg24:
2318     case DW_OP_breg25:
2319     case DW_OP_breg26:
2320     case DW_OP_breg27:
2321     case DW_OP_breg28:
2322     case DW_OP_breg29:
2323     case DW_OP_breg30:
2324     case DW_OP_breg31:
2325     case DW_OP_fbreg:
2326       fputc (',', asm_out_file);
2327       dw2_asm_output_data_sleb128_raw (val1->v.val_int);
2328       break;
2329
2330     case DW_OP_bregx:
2331       {
2332         unsigned r = DWARF2_FRAME_REG_OUT (val1->v.val_unsigned, 1);
2333         gcc_assert (size_of_uleb128 (r) 
2334                     == size_of_uleb128 (val1->v.val_unsigned));
2335         fputc (',', asm_out_file);
2336         dw2_asm_output_data_uleb128_raw (r);
2337         fputc (',', asm_out_file);
2338         dw2_asm_output_data_sleb128_raw (val2->v.val_int);
2339       }
2340       break;
2341
2342     case DW_OP_GNU_implicit_pointer:
2343     case DW_OP_GNU_entry_value:
2344     case DW_OP_GNU_const_type:
2345     case DW_OP_GNU_regval_type:
2346     case DW_OP_GNU_deref_type:
2347     case DW_OP_GNU_convert:
2348     case DW_OP_GNU_reinterpret:
2349     case DW_OP_GNU_parameter_ref:
2350       gcc_unreachable ();
2351       break;
2352
2353     default:
2354       /* Other codes have no operands.  */
2355       break;
2356     }
2357 }
2358
2359 void
2360 output_loc_sequence_raw (dw_loc_descr_ref loc)
2361 {
2362   while (1)
2363     {
2364       enum dwarf_location_atom opc = loc->dw_loc_opc;
2365       /* Output the opcode.  */
2366       if (opc >= DW_OP_breg0 && opc <= DW_OP_breg31)
2367         {
2368           unsigned r = (opc - DW_OP_breg0);
2369           r = DWARF2_FRAME_REG_OUT (r, 1);
2370           gcc_assert (r <= 31);
2371           opc = (enum dwarf_location_atom) (DW_OP_breg0 + r);
2372         }
2373       else if (opc >= DW_OP_reg0 && opc <= DW_OP_reg31)
2374         {
2375           unsigned r = (opc - DW_OP_reg0);
2376           r = DWARF2_FRAME_REG_OUT (r, 1);
2377           gcc_assert (r <= 31);
2378           opc = (enum dwarf_location_atom) (DW_OP_reg0 + r);
2379         }
2380       /* Output the opcode.  */
2381       fprintf (asm_out_file, "%#x", opc);
2382       output_loc_operands_raw (loc);
2383
2384       if (!loc->dw_loc_next)
2385         break;
2386       loc = loc->dw_loc_next;
2387
2388       fputc (',', asm_out_file);
2389     }
2390 }
2391
2392 /* This function builds a dwarf location descriptor sequence from a
2393    dw_cfa_location, adding the given OFFSET to the result of the
2394    expression.  */
2395
2396 struct dw_loc_descr_node *
2397 build_cfa_loc (dw_cfa_location *cfa, HOST_WIDE_INT offset)
2398 {
2399   struct dw_loc_descr_node *head, *tmp;
2400
2401   offset += cfa->offset;
2402
2403   if (cfa->indirect)
2404     {
2405       head = new_reg_loc_descr (cfa->reg, cfa->base_offset);
2406       head->dw_loc_oprnd1.val_class = dw_val_class_const;
2407       head->dw_loc_oprnd1.val_entry = NULL;
2408       tmp = new_loc_descr (DW_OP_deref, 0, 0);
2409       add_loc_descr (&head, tmp);
2410       if (offset != 0)
2411         {
2412           tmp = new_loc_descr (DW_OP_plus_uconst, offset, 0);
2413           add_loc_descr (&head, tmp);
2414         }
2415     }
2416   else
2417     head = new_reg_loc_descr (cfa->reg, offset);
2418
2419   return head;
2420 }
2421
2422 /* This function builds a dwarf location descriptor sequence for
2423    the address at OFFSET from the CFA when stack is aligned to
2424    ALIGNMENT byte.  */
2425
2426 struct dw_loc_descr_node *
2427 build_cfa_aligned_loc (dw_cfa_location *cfa,
2428                        HOST_WIDE_INT offset, HOST_WIDE_INT alignment)
2429 {
2430   struct dw_loc_descr_node *head;
2431   unsigned int dwarf_fp
2432     = DWARF_FRAME_REGNUM (HARD_FRAME_POINTER_REGNUM);
2433
2434   /* When CFA is defined as FP+OFFSET, emulate stack alignment.  */
2435   if (cfa->reg == HARD_FRAME_POINTER_REGNUM && cfa->indirect == 0)
2436     {
2437       head = new_reg_loc_descr (dwarf_fp, 0);
2438       add_loc_descr (&head, int_loc_descriptor (alignment));
2439       add_loc_descr (&head, new_loc_descr (DW_OP_and, 0, 0));
2440       loc_descr_plus_const (&head, offset);
2441     }
2442   else
2443     head = new_reg_loc_descr (dwarf_fp, offset);
2444   return head;
2445 }
2446 \f
2447 /* And now, the support for symbolic debugging information.  */
2448
2449 /* .debug_str support.  */
2450
2451 static void dwarf2out_init (const char *);
2452 static void dwarf2out_finish (const char *);
2453 static void dwarf2out_assembly_start (void);
2454 static void dwarf2out_define (unsigned int, const char *);
2455 static void dwarf2out_undef (unsigned int, const char *);
2456 static void dwarf2out_start_source_file (unsigned, const char *);
2457 static void dwarf2out_end_source_file (unsigned);
2458 static void dwarf2out_function_decl (tree);
2459 static void dwarf2out_begin_block (unsigned, unsigned);
2460 static void dwarf2out_end_block (unsigned, unsigned);
2461 static bool dwarf2out_ignore_block (const_tree);
2462 static void dwarf2out_global_decl (tree);
2463 static void dwarf2out_type_decl (tree, int);
2464 static void dwarf2out_imported_module_or_decl (tree, tree, tree, bool);
2465 static void dwarf2out_imported_module_or_decl_1 (tree, tree, tree,
2466                                                  dw_die_ref);
2467 static void dwarf2out_abstract_function (tree);
2468 static void dwarf2out_var_location (rtx_insn *);
2469 static void dwarf2out_begin_function (tree);
2470 static void dwarf2out_end_function (unsigned int);
2471 static void dwarf2out_register_main_translation_unit (tree unit);
2472 static void dwarf2out_set_name (tree, tree);
2473
2474 /* The debug hooks structure.  */
2475
2476 const struct gcc_debug_hooks dwarf2_debug_hooks =
2477 {
2478   dwarf2out_init,
2479   dwarf2out_finish,
2480   dwarf2out_assembly_start,
2481   dwarf2out_define,
2482   dwarf2out_undef,
2483   dwarf2out_start_source_file,
2484   dwarf2out_end_source_file,
2485   dwarf2out_begin_block,
2486   dwarf2out_end_block,
2487   dwarf2out_ignore_block,
2488   dwarf2out_source_line,
2489   dwarf2out_begin_prologue,
2490 #if VMS_DEBUGGING_INFO
2491   dwarf2out_vms_end_prologue,
2492   dwarf2out_vms_begin_epilogue,
2493 #else
2494   debug_nothing_int_charstar,
2495   debug_nothing_int_charstar,
2496 #endif
2497   dwarf2out_end_epilogue,
2498   dwarf2out_begin_function,
2499   dwarf2out_end_function,       /* end_function */
2500   dwarf2out_register_main_translation_unit,
2501   dwarf2out_function_decl,      /* function_decl */
2502   dwarf2out_global_decl,
2503   dwarf2out_type_decl,          /* type_decl */
2504   dwarf2out_imported_module_or_decl,
2505   debug_nothing_tree,           /* deferred_inline_function */
2506   /* The DWARF 2 backend tries to reduce debugging bloat by not
2507      emitting the abstract description of inline functions until
2508      something tries to reference them.  */
2509   dwarf2out_abstract_function,  /* outlining_inline_function */
2510   debug_nothing_rtx_code_label, /* label */
2511   debug_nothing_int,            /* handle_pch */
2512   dwarf2out_var_location,
2513   dwarf2out_switch_text_section,
2514   dwarf2out_set_name,
2515   1,                            /* start_end_main_source_file */
2516   TYPE_SYMTAB_IS_DIE            /* tree_type_symtab_field */
2517 };
2518 \f
2519 /* NOTE: In the comments in this file, many references are made to
2520    "Debugging Information Entries".  This term is abbreviated as `DIE'
2521    throughout the remainder of this file.  */
2522
2523 /* An internal representation of the DWARF output is built, and then
2524    walked to generate the DWARF debugging info.  The walk of the internal
2525    representation is done after the entire program has been compiled.
2526    The types below are used to describe the internal representation.  */
2527
2528 /* Whether to put type DIEs into their own section .debug_types instead
2529    of making them part of the .debug_info section.  Only supported for
2530    Dwarf V4 or higher and the user didn't disable them through
2531    -fno-debug-types-section.  It is more efficient to put them in a
2532    separate comdat sections since the linker will then be able to
2533    remove duplicates.  But not all tools support .debug_types sections
2534    yet.  */
2535
2536 #define use_debug_types (dwarf_version >= 4 && flag_debug_types_section)
2537
2538 /* Various DIE's use offsets relative to the beginning of the
2539    .debug_info section to refer to each other.  */
2540
2541 typedef long int dw_offset;
2542
2543 /* Define typedefs here to avoid circular dependencies.  */
2544
2545 typedef struct dw_attr_struct *dw_attr_ref;
2546 typedef struct dw_line_info_struct *dw_line_info_ref;
2547 typedef struct pubname_struct *pubname_ref;
2548 typedef struct dw_ranges_struct *dw_ranges_ref;
2549 typedef struct dw_ranges_by_label_struct *dw_ranges_by_label_ref;
2550 typedef struct comdat_type_struct *comdat_type_node_ref;
2551
2552 /* The entries in the line_info table more-or-less mirror the opcodes
2553    that are used in the real dwarf line table.  Arrays of these entries
2554    are collected per section when DWARF2_ASM_LINE_DEBUG_INFO is not
2555    supported.  */
2556
2557 enum dw_line_info_opcode {
2558   /* Emit DW_LNE_set_address; the operand is the label index.  */
2559   LI_set_address,
2560
2561   /* Emit a row to the matrix with the given line.  This may be done
2562      via any combination of DW_LNS_copy, DW_LNS_advance_line, and
2563      special opcodes.  */
2564   LI_set_line,
2565
2566   /* Emit a DW_LNS_set_file.  */
2567   LI_set_file,
2568
2569   /* Emit a DW_LNS_set_column.  */
2570   LI_set_column,
2571
2572   /* Emit a DW_LNS_negate_stmt; the operand is ignored.  */
2573   LI_negate_stmt,
2574
2575   /* Emit a DW_LNS_set_prologue_end/epilogue_begin; the operand is ignored.  */
2576   LI_set_prologue_end,
2577   LI_set_epilogue_begin,
2578
2579   /* Emit a DW_LNE_set_discriminator.  */
2580   LI_set_discriminator
2581 };
2582
2583 typedef struct GTY(()) dw_line_info_struct {
2584   enum dw_line_info_opcode opcode;
2585   unsigned int val;
2586 } dw_line_info_entry;
2587
2588
2589 typedef struct GTY(()) dw_line_info_table_struct {
2590   /* The label that marks the end of this section.  */
2591   const char *end_label;
2592
2593   /* The values for the last row of the matrix, as collected in the table.
2594      These are used to minimize the changes to the next row.  */
2595   unsigned int file_num;
2596   unsigned int line_num;
2597   unsigned int column_num;
2598   int discrim_num;
2599   bool is_stmt;
2600   bool in_use;
2601
2602   vec<dw_line_info_entry, va_gc> *entries;
2603 } dw_line_info_table;
2604
2605 typedef dw_line_info_table *dw_line_info_table_p;
2606
2607
2608 /* Each DIE attribute has a field specifying the attribute kind,
2609    a link to the next attribute in the chain, and an attribute value.
2610    Attributes are typically linked below the DIE they modify.  */
2611
2612 typedef struct GTY(()) dw_attr_struct {
2613   enum dwarf_attribute dw_attr;
2614   dw_val_node dw_attr_val;
2615 }
2616 dw_attr_node;
2617
2618
2619 /* The Debugging Information Entry (DIE) structure.  DIEs form a tree.
2620    The children of each node form a circular list linked by
2621    die_sib.  die_child points to the node *before* the "first" child node.  */
2622
2623 typedef struct GTY((chain_circular ("%h.die_sib"), for_user)) die_struct {
2624   union die_symbol_or_type_node
2625     {
2626       const char * GTY ((tag ("0"))) die_symbol;
2627       comdat_type_node_ref GTY ((tag ("1"))) die_type_node;
2628     }
2629   GTY ((desc ("%0.comdat_type_p"))) die_id;
2630   vec<dw_attr_node, va_gc> *die_attr;
2631   dw_die_ref die_parent;
2632   dw_die_ref die_child;
2633   dw_die_ref die_sib;
2634   dw_die_ref die_definition; /* ref from a specification to its definition */
2635   dw_offset die_offset;
2636   unsigned long die_abbrev;
2637   int die_mark;
2638   unsigned int decl_id;
2639   enum dwarf_tag die_tag;
2640   /* Die is used and must not be pruned as unused.  */
2641   BOOL_BITFIELD die_perennial_p : 1;
2642   BOOL_BITFIELD comdat_type_p : 1; /* DIE has a type signature */
2643   /* Lots of spare bits.  */
2644 }
2645 die_node;
2646
2647 /* Evaluate 'expr' while 'c' is set to each child of DIE in order.  */
2648 #define FOR_EACH_CHILD(die, c, expr) do {       \
2649   c = die->die_child;                           \
2650   if (c) do {                                   \
2651     c = c->die_sib;                             \
2652     expr;                                       \
2653   } while (c != die->die_child);                \
2654 } while (0)
2655
2656 /* The pubname structure */
2657
2658 typedef struct GTY(()) pubname_struct {
2659   dw_die_ref die;
2660   const char *name;
2661 }
2662 pubname_entry;
2663
2664
2665 struct GTY(()) dw_ranges_struct {
2666   /* If this is positive, it's a block number, otherwise it's a
2667      bitwise-negated index into dw_ranges_by_label.  */
2668   int num;
2669 };
2670
2671 /* A structure to hold a macinfo entry.  */
2672
2673 typedef struct GTY(()) macinfo_struct {
2674   unsigned char code;
2675   unsigned HOST_WIDE_INT lineno;
2676   const char *info;
2677 }
2678 macinfo_entry;
2679
2680
2681 struct GTY(()) dw_ranges_by_label_struct {
2682   const char *begin;
2683   const char *end;
2684 };
2685
2686 /* The comdat type node structure.  */
2687 typedef struct GTY(()) comdat_type_struct
2688 {
2689   dw_die_ref root_die;
2690   dw_die_ref type_die;
2691   dw_die_ref skeleton_die;
2692   char signature[DWARF_TYPE_SIGNATURE_SIZE];
2693   struct comdat_type_struct *next;
2694 }
2695 comdat_type_node;
2696
2697 /* The limbo die list structure.  */
2698 typedef struct GTY(()) limbo_die_struct {
2699   dw_die_ref die;
2700   tree created_for;
2701   struct limbo_die_struct *next;
2702 }
2703 limbo_die_node;
2704
2705 typedef struct skeleton_chain_struct
2706 {
2707   dw_die_ref old_die;
2708   dw_die_ref new_die;
2709   struct skeleton_chain_struct *parent;
2710 }
2711 skeleton_chain_node;
2712
2713 /* Define a macro which returns nonzero for a TYPE_DECL which was
2714    implicitly generated for a type.
2715
2716    Note that, unlike the C front-end (which generates a NULL named
2717    TYPE_DECL node for each complete tagged type, each array type,
2718    and each function type node created) the C++ front-end generates
2719    a _named_ TYPE_DECL node for each tagged type node created.
2720    These TYPE_DECLs have DECL_ARTIFICIAL set, so we know not to
2721    generate a DW_TAG_typedef DIE for them.  Likewise with the Ada
2722    front-end, but for each type, tagged or not.  */
2723
2724 #define TYPE_DECL_IS_STUB(decl)                         \
2725   (DECL_NAME (decl) == NULL_TREE                        \
2726    || (DECL_ARTIFICIAL (decl)                           \
2727        && ((decl == TYPE_STUB_DECL (TREE_TYPE (decl)))  \
2728            /* This is necessary for stub decls that     \
2729               appear in nested inline functions.  */    \
2730            || (DECL_ABSTRACT_ORIGIN (decl) != NULL_TREE \
2731                && (decl_ultimate_origin (decl)          \
2732                    == TYPE_STUB_DECL (TREE_TYPE (decl)))))))
2733
2734 /* Information concerning the compilation unit's programming
2735    language, and compiler version.  */
2736
2737 /* Fixed size portion of the DWARF compilation unit header.  */
2738 #define DWARF_COMPILE_UNIT_HEADER_SIZE \
2739   (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 3)
2740
2741 /* Fixed size portion of the DWARF comdat type unit header.  */
2742 #define DWARF_COMDAT_TYPE_UNIT_HEADER_SIZE \
2743   (DWARF_COMPILE_UNIT_HEADER_SIZE + DWARF_TYPE_SIGNATURE_SIZE \
2744    + DWARF_OFFSET_SIZE)
2745
2746 /* Fixed size portion of public names info.  */
2747 #define DWARF_PUBNAMES_HEADER_SIZE (2 * DWARF_OFFSET_SIZE + 2)
2748
2749 /* Fixed size portion of the address range info.  */
2750 #define DWARF_ARANGES_HEADER_SIZE                                       \
2751   (DWARF_ROUND (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 4,      \
2752                 DWARF2_ADDR_SIZE * 2)                                   \
2753    - DWARF_INITIAL_LENGTH_SIZE)
2754
2755 /* Size of padding portion in the address range info.  It must be
2756    aligned to twice the pointer size.  */
2757 #define DWARF_ARANGES_PAD_SIZE \
2758   (DWARF_ROUND (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 4, \
2759                 DWARF2_ADDR_SIZE * 2)                              \
2760    - (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 4))
2761
2762 /* Use assembler line directives if available.  */
2763 #ifndef DWARF2_ASM_LINE_DEBUG_INFO
2764 #ifdef HAVE_AS_DWARF2_DEBUG_LINE
2765 #define DWARF2_ASM_LINE_DEBUG_INFO 1
2766 #else
2767 #define DWARF2_ASM_LINE_DEBUG_INFO 0
2768 #endif
2769 #endif
2770
2771 /* Minimum line offset in a special line info. opcode.
2772    This value was chosen to give a reasonable range of values.  */
2773 #define DWARF_LINE_BASE  -10
2774
2775 /* First special line opcode - leave room for the standard opcodes.  */
2776 #define DWARF_LINE_OPCODE_BASE  ((int)DW_LNS_set_isa + 1)
2777
2778 /* Range of line offsets in a special line info. opcode.  */
2779 #define DWARF_LINE_RANGE  (254-DWARF_LINE_OPCODE_BASE+1)
2780
2781 /* Flag that indicates the initial value of the is_stmt_start flag.
2782    In the present implementation, we do not mark any lines as
2783    the beginning of a source statement, because that information
2784    is not made available by the GCC front-end.  */
2785 #define DWARF_LINE_DEFAULT_IS_STMT_START 1
2786
2787 /* Maximum number of operations per instruction bundle.  */
2788 #ifndef DWARF_LINE_DEFAULT_MAX_OPS_PER_INSN
2789 #define DWARF_LINE_DEFAULT_MAX_OPS_PER_INSN 1
2790 #endif
2791
2792 /* This location is used by calc_die_sizes() to keep track
2793    the offset of each DIE within the .debug_info section.  */
2794 static unsigned long next_die_offset;
2795
2796 /* Record the root of the DIE's built for the current compilation unit.  */
2797 static GTY(()) dw_die_ref single_comp_unit_die;
2798
2799 /* A list of type DIEs that have been separated into comdat sections.  */
2800 static GTY(()) comdat_type_node *comdat_type_list;
2801
2802 /* A list of DIEs with a NULL parent waiting to be relocated.  */
2803 static GTY(()) limbo_die_node *limbo_die_list;
2804
2805 /* A list of DIEs for which we may have to generate
2806    DW_AT_{,MIPS_}linkage_name once their DECL_ASSEMBLER_NAMEs are set.  */
2807 static GTY(()) limbo_die_node *deferred_asm_name;
2808
2809 struct dwarf_file_hasher : ggc_hasher<dwarf_file_data *>
2810 {
2811   typedef const char *compare_type;
2812
2813   static hashval_t hash (dwarf_file_data *);
2814   static bool equal (dwarf_file_data *, const char *);
2815 };
2816
2817 /* Filenames referenced by this compilation unit.  */
2818 static GTY(()) hash_table<dwarf_file_hasher> *file_table;
2819
2820 struct decl_die_hasher : ggc_hasher<die_node *>
2821 {
2822   typedef tree compare_type;
2823
2824   static hashval_t hash (die_node *);
2825   static bool equal (die_node *, tree);
2826 };
2827 /* A hash table of references to DIE's that describe declarations.
2828    The key is a DECL_UID() which is a unique number identifying each decl.  */
2829 static GTY (()) hash_table<decl_die_hasher> *decl_die_table;
2830
2831 struct block_die_hasher : ggc_hasher<die_struct *>
2832 {
2833   static hashval_t hash (die_struct *);
2834   static bool equal (die_struct *, die_struct *);
2835 };
2836
2837 /* A hash table of references to DIE's that describe COMMON blocks.
2838    The key is DECL_UID() ^ die_parent.  */
2839 static GTY (()) hash_table<block_die_hasher> *common_block_die_table;
2840
2841 typedef struct GTY(()) die_arg_entry_struct {
2842     dw_die_ref die;
2843     tree arg;
2844 } die_arg_entry;
2845
2846
2847 /* Node of the variable location list.  */
2848 struct GTY ((chain_next ("%h.next"))) var_loc_node {
2849   /* Either NOTE_INSN_VAR_LOCATION, or, for SRA optimized variables,
2850      EXPR_LIST chain.  For small bitsizes, bitsize is encoded
2851      in mode of the EXPR_LIST node and first EXPR_LIST operand
2852      is either NOTE_INSN_VAR_LOCATION for a piece with a known
2853      location or NULL for padding.  For larger bitsizes,
2854      mode is 0 and first operand is a CONCAT with bitsize
2855      as first CONCAT operand and NOTE_INSN_VAR_LOCATION resp.
2856      NULL as second operand.  */
2857   rtx GTY (()) loc;
2858   const char * GTY (()) label;
2859   struct var_loc_node * GTY (()) next;
2860 };
2861
2862 /* Variable location list.  */
2863 struct GTY ((for_user)) var_loc_list_def {
2864   struct var_loc_node * GTY (()) first;
2865
2866   /* Pointer to the last but one or last element of the
2867      chained list.  If the list is empty, both first and
2868      last are NULL, if the list contains just one node
2869      or the last node certainly is not redundant, it points
2870      to the last node, otherwise points to the last but one.
2871      Do not mark it for GC because it is marked through the chain.  */
2872   struct var_loc_node * GTY ((skip ("%h"))) last;
2873
2874   /* Pointer to the last element before section switch,
2875      if NULL, either sections weren't switched or first
2876      is after section switch.  */
2877   struct var_loc_node * GTY ((skip ("%h"))) last_before_switch;
2878
2879   /* DECL_UID of the variable decl.  */
2880   unsigned int decl_id;
2881 };
2882 typedef struct var_loc_list_def var_loc_list;
2883
2884 /* Call argument location list.  */
2885 struct GTY ((chain_next ("%h.next"))) call_arg_loc_node {
2886   rtx GTY (()) call_arg_loc_note;
2887   const char * GTY (()) label;
2888   tree GTY (()) block;
2889   bool tail_call_p;
2890   rtx GTY (()) symbol_ref;
2891   struct call_arg_loc_node * GTY (()) next;
2892 };
2893
2894
2895 struct decl_loc_hasher : ggc_hasher<var_loc_list *>
2896 {
2897   typedef const_tree compare_type;
2898
2899   static hashval_t hash (var_loc_list *);
2900   static bool equal (var_loc_list *, const_tree);
2901 };
2902
2903 /* Table of decl location linked lists.  */
2904 static GTY (()) hash_table<decl_loc_hasher> *decl_loc_table;
2905
2906 /* Head and tail of call_arg_loc chain.  */
2907 static GTY (()) struct call_arg_loc_node *call_arg_locations;
2908 static struct call_arg_loc_node *call_arg_loc_last;
2909
2910 /* Number of call sites in the current function.  */
2911 static int call_site_count = -1;
2912 /* Number of tail call sites in the current function.  */
2913 static int tail_call_site_count = -1;
2914
2915 /* Vector mapping block numbers to DW_TAG_{lexical_block,inlined_subroutine}
2916    DIEs.  */
2917 static vec<dw_die_ref> block_map;
2918
2919 /* A cached location list.  */
2920 struct GTY ((for_user)) cached_dw_loc_list_def {
2921   /* The DECL_UID of the decl that this entry describes.  */
2922   unsigned int decl_id;
2923
2924   /* The cached location list.  */
2925   dw_loc_list_ref loc_list;
2926 };
2927 typedef struct cached_dw_loc_list_def cached_dw_loc_list;
2928
2929 struct dw_loc_list_hasher : ggc_hasher<cached_dw_loc_list *>
2930 {
2931
2932   typedef const_tree compare_type;
2933   
2934   static hashval_t hash (cached_dw_loc_list *);
2935   static bool equal (cached_dw_loc_list *, const_tree);
2936 };
2937
2938 /* Table of cached location lists.  */
2939 static GTY (()) hash_table<dw_loc_list_hasher> *cached_dw_loc_list_table;
2940
2941 /* A pointer to the base of a list of references to DIE's that
2942    are uniquely identified by their tag, presence/absence of
2943    children DIE's, and list of attribute/value pairs.  */
2944 static GTY((length ("abbrev_die_table_allocated")))
2945   dw_die_ref *abbrev_die_table;
2946
2947 /* Number of elements currently allocated for abbrev_die_table.  */
2948 static GTY(()) unsigned abbrev_die_table_allocated;
2949
2950 /* Number of elements in type_die_table currently in use.  */
2951 static GTY(()) unsigned abbrev_die_table_in_use;
2952
2953 /* Size (in elements) of increments by which we may expand the
2954    abbrev_die_table.  */
2955 #define ABBREV_DIE_TABLE_INCREMENT 256
2956
2957 /* A global counter for generating labels for line number data.  */
2958 static unsigned int line_info_label_num;
2959
2960 /* The current table to which we should emit line number information
2961    for the current function.  This will be set up at the beginning of
2962    assembly for the function.  */
2963 static dw_line_info_table *cur_line_info_table;
2964
2965 /* The two default tables of line number info.  */
2966 static GTY(()) dw_line_info_table *text_section_line_info;
2967 static GTY(()) dw_line_info_table *cold_text_section_line_info;
2968
2969 /* The set of all non-default tables of line number info.  */
2970 static GTY(()) vec<dw_line_info_table_p, va_gc> *separate_line_info;
2971
2972 /* A flag to tell pubnames/types export if there is an info section to
2973    refer to.  */
2974 static bool info_section_emitted;
2975
2976 /* A pointer to the base of a table that contains a list of publicly
2977    accessible names.  */
2978 static GTY (()) vec<pubname_entry, va_gc> *pubname_table;
2979
2980 /* A pointer to the base of a table that contains a list of publicly
2981    accessible types.  */
2982 static GTY (()) vec<pubname_entry, va_gc> *pubtype_table;
2983
2984 /* A pointer to the base of a table that contains a list of macro
2985    defines/undefines (and file start/end markers).  */
2986 static GTY (()) vec<macinfo_entry, va_gc> *macinfo_table;
2987
2988 /* True if .debug_macinfo or .debug_macros section is going to be
2989    emitted.  */
2990 #define have_macinfo \
2991   (debug_info_level >= DINFO_LEVEL_VERBOSE \
2992    && !macinfo_table->is_empty ())
2993
2994 /* Array of dies for which we should generate .debug_ranges info.  */
2995 static GTY ((length ("ranges_table_allocated"))) dw_ranges_ref ranges_table;
2996
2997 /* Number of elements currently allocated for ranges_table.  */
2998 static GTY(()) unsigned ranges_table_allocated;
2999
3000 /* Number of elements in ranges_table currently in use.  */
3001 static GTY(()) unsigned ranges_table_in_use;
3002
3003 /* Array of pairs of labels referenced in ranges_table.  */
3004 static GTY ((length ("ranges_by_label_allocated")))
3005      dw_ranges_by_label_ref ranges_by_label;
3006
3007 /* Number of elements currently allocated for ranges_by_label.  */
3008 static GTY(()) unsigned ranges_by_label_allocated;
3009
3010 /* Number of elements in ranges_by_label currently in use.  */
3011 static GTY(()) unsigned ranges_by_label_in_use;
3012
3013 /* Size (in elements) of increments by which we may expand the
3014    ranges_table.  */
3015 #define RANGES_TABLE_INCREMENT 64
3016
3017 /* Whether we have location lists that need outputting */
3018 static GTY(()) bool have_location_lists;
3019
3020 /* Unique label counter.  */
3021 static GTY(()) unsigned int loclabel_num;
3022
3023 /* Unique label counter for point-of-call tables.  */
3024 static GTY(()) unsigned int poc_label_num;
3025
3026 /* The last file entry emitted by maybe_emit_file().  */
3027 static GTY(()) struct dwarf_file_data * last_emitted_file;
3028
3029 /* Number of internal labels generated by gen_internal_sym().  */
3030 static GTY(()) int label_num;
3031
3032 /* Cached result of previous call to lookup_filename.  */
3033 static GTY(()) struct dwarf_file_data * file_table_last_lookup;
3034
3035 static GTY(()) vec<die_arg_entry, va_gc> *tmpl_value_parm_die_table;
3036
3037 /* Instances of generic types for which we need to generate debug
3038    info that describe their generic parameters and arguments. That
3039    generation needs to happen once all types are properly laid out so
3040    we do it at the end of compilation.  */
3041 static GTY(()) vec<tree, va_gc> *generic_type_instances;
3042
3043 /* Offset from the "steady-state frame pointer" to the frame base,
3044    within the current function.  */
3045 static HOST_WIDE_INT frame_pointer_fb_offset;
3046 static bool frame_pointer_fb_offset_valid;
3047
3048 static vec<dw_die_ref> base_types;
3049
3050 /* Flags to represent a set of attribute classes for attributes that represent
3051    a scalar value (bounds, pointers, ...).  */
3052 enum dw_scalar_form
3053 {
3054   dw_scalar_form_constant = 0x01,
3055   dw_scalar_form_exprloc = 0x02,
3056   dw_scalar_form_reference = 0x04
3057 };
3058
3059 /* Forward declarations for functions defined in this file.  */
3060
3061 static int is_pseudo_reg (const_rtx);
3062 static tree type_main_variant (tree);
3063 static int is_tagged_type (const_tree);
3064 static const char *dwarf_tag_name (unsigned);
3065 static const char *dwarf_attr_name (unsigned);
3066 static const char *dwarf_form_name (unsigned);
3067 static tree decl_ultimate_origin (const_tree);
3068 static tree decl_class_context (tree);
3069 static void add_dwarf_attr (dw_die_ref, dw_attr_ref);
3070 static inline enum dw_val_class AT_class (dw_attr_ref);
3071 static inline unsigned int AT_index (dw_attr_ref);
3072 static void add_AT_flag (dw_die_ref, enum dwarf_attribute, unsigned);
3073 static inline unsigned AT_flag (dw_attr_ref);
3074 static void add_AT_int (dw_die_ref, enum dwarf_attribute, HOST_WIDE_INT);
3075 static inline HOST_WIDE_INT AT_int (dw_attr_ref);
3076 static void add_AT_unsigned (dw_die_ref, enum dwarf_attribute, unsigned HOST_WIDE_INT);
3077 static inline unsigned HOST_WIDE_INT AT_unsigned (dw_attr_ref);
3078 static void add_AT_double (dw_die_ref, enum dwarf_attribute,
3079                            HOST_WIDE_INT, unsigned HOST_WIDE_INT);
3080 static inline void add_AT_vec (dw_die_ref, enum dwarf_attribute, unsigned int,
3081                                unsigned int, unsigned char *);
3082 static void add_AT_data8 (dw_die_ref, enum dwarf_attribute, unsigned char *);
3083 static void add_AT_string (dw_die_ref, enum dwarf_attribute, const char *);
3084 static inline const char *AT_string (dw_attr_ref);
3085 static enum dwarf_form AT_string_form (dw_attr_ref);
3086 static void add_AT_die_ref (dw_die_ref, enum dwarf_attribute, dw_die_ref);
3087 static void add_AT_specification (dw_die_ref, dw_die_ref);
3088 static inline dw_die_ref AT_ref (dw_attr_ref);
3089 static inline int AT_ref_external (dw_attr_ref);
3090 static inline void set_AT_ref_external (dw_attr_ref, int);
3091 static void add_AT_fde_ref (dw_die_ref, enum dwarf_attribute, unsigned);
3092 static void add_AT_loc (dw_die_ref, enum dwarf_attribute, dw_loc_descr_ref);
3093 static inline dw_loc_descr_ref AT_loc (dw_attr_ref);
3094 static void add_AT_loc_list (dw_die_ref, enum dwarf_attribute,
3095                              dw_loc_list_ref);
3096 static inline dw_loc_list_ref AT_loc_list (dw_attr_ref);
3097 static addr_table_entry *add_addr_table_entry (void *, enum ate_kind);
3098 static void remove_addr_table_entry (addr_table_entry *);
3099 static void add_AT_addr (dw_die_ref, enum dwarf_attribute, rtx, bool);
3100 static inline rtx AT_addr (dw_attr_ref);
3101 static void add_AT_lbl_id (dw_die_ref, enum dwarf_attribute, const char *);
3102 static void add_AT_lineptr (dw_die_ref, enum dwarf_attribute, const char *);
3103 static void add_AT_macptr (dw_die_ref, enum dwarf_attribute, const char *);
3104 static void add_AT_offset (dw_die_ref, enum dwarf_attribute,
3105                            unsigned HOST_WIDE_INT);
3106 static void add_AT_range_list (dw_die_ref, enum dwarf_attribute,
3107                                unsigned long, bool);
3108 static inline const char *AT_lbl (dw_attr_ref);
3109 static dw_attr_ref get_AT (dw_die_ref, enum dwarf_attribute);
3110 static const char *get_AT_low_pc (dw_die_ref);
3111 static const char *get_AT_hi_pc (dw_die_ref);
3112 static const char *get_AT_string (dw_die_ref, enum dwarf_attribute);
3113 static int get_AT_flag (dw_die_ref, enum dwarf_attribute);
3114 static unsigned get_AT_unsigned (dw_die_ref, enum dwarf_attribute);
3115 static inline dw_die_ref get_AT_ref (dw_die_ref, enum dwarf_attribute);
3116 static bool is_cxx (void);
3117 static bool is_fortran (void);
3118 static bool is_ada (void);
3119 static void remove_AT (dw_die_ref, enum dwarf_attribute);
3120 static void remove_child_TAG (dw_die_ref, enum dwarf_tag);
3121 static void add_child_die (dw_die_ref, dw_die_ref);
3122 static dw_die_ref new_die (enum dwarf_tag, dw_die_ref, tree);
3123 static dw_die_ref lookup_type_die (tree);
3124 static dw_die_ref strip_naming_typedef (tree, dw_die_ref);
3125 static dw_die_ref lookup_type_die_strip_naming_typedef (tree);
3126 static void equate_type_number_to_die (tree, dw_die_ref);
3127 static dw_die_ref lookup_decl_die (tree);
3128 static var_loc_list *lookup_decl_loc (const_tree);
3129 static void equate_decl_number_to_die (tree, dw_die_ref);
3130 static struct var_loc_node *add_var_loc_to_decl (tree, rtx, const char *);
3131 static void print_spaces (FILE *);
3132 static void print_die (dw_die_ref, FILE *);
3133 static dw_die_ref push_new_compile_unit (dw_die_ref, dw_die_ref);
3134 static dw_die_ref pop_compile_unit (dw_die_ref);
3135 static void loc_checksum (dw_loc_descr_ref, struct md5_ctx *);
3136 static void attr_checksum (dw_attr_ref, struct md5_ctx *, int *);
3137 static void die_checksum (dw_die_ref, struct md5_ctx *, int *);
3138 static void checksum_sleb128 (HOST_WIDE_INT, struct md5_ctx *);
3139 static void checksum_uleb128 (unsigned HOST_WIDE_INT, struct md5_ctx *);
3140 static void loc_checksum_ordered (dw_loc_descr_ref, struct md5_ctx *);
3141 static void attr_checksum_ordered (enum dwarf_tag, dw_attr_ref,
3142                                    struct md5_ctx *, int *);
3143 struct checksum_attributes;
3144 static void collect_checksum_attributes (struct checksum_attributes *, dw_die_ref);
3145 static void die_checksum_ordered (dw_die_ref, struct md5_ctx *, int *);
3146 static void checksum_die_context (dw_die_ref, struct md5_ctx *);
3147 static void generate_type_signature (dw_die_ref, comdat_type_node *);
3148 static int same_loc_p (dw_loc_descr_ref, dw_loc_descr_ref, int *);
3149 static int same_dw_val_p (const dw_val_node *, const dw_val_node *, int *);
3150 static int same_attr_p (dw_attr_ref, dw_attr_ref, int *);
3151 static int same_die_p (dw_die_ref, dw_die_ref, int *);
3152 static int same_die_p_wrap (dw_die_ref, dw_die_ref);
3153 static void compute_section_prefix (dw_die_ref);
3154 static int is_type_die (dw_die_ref);
3155 static int is_comdat_die (dw_die_ref);
3156 static int is_symbol_die (dw_die_ref);
3157 static inline bool is_template_instantiation (dw_die_ref);
3158 static void assign_symbol_names (dw_die_ref);
3159 static void break_out_includes (dw_die_ref);
3160 static int is_declaration_die (dw_die_ref);
3161 static int should_move_die_to_comdat (dw_die_ref);
3162 static dw_die_ref clone_as_declaration (dw_die_ref);
3163 static dw_die_ref clone_die (dw_die_ref);
3164 static dw_die_ref clone_tree (dw_die_ref);
3165 static dw_die_ref copy_declaration_context (dw_die_ref, dw_die_ref);
3166 static void generate_skeleton_ancestor_tree (skeleton_chain_node *);
3167 static void generate_skeleton_bottom_up (skeleton_chain_node *);
3168 static dw_die_ref generate_skeleton (dw_die_ref);
3169 static dw_die_ref remove_child_or_replace_with_skeleton (dw_die_ref,
3170                                                          dw_die_ref,
3171                                                          dw_die_ref);
3172 static void break_out_comdat_types (dw_die_ref);
3173 static void copy_decls_for_unworthy_types (dw_die_ref);
3174
3175 static void add_sibling_attributes (dw_die_ref);
3176 static void output_location_lists (dw_die_ref);
3177 static int constant_size (unsigned HOST_WIDE_INT);
3178 static unsigned long size_of_die (dw_die_ref);
3179 static void calc_die_sizes (dw_die_ref);
3180 static void calc_base_type_die_sizes (void);
3181 static void mark_dies (dw_die_ref);
3182 static void unmark_dies (dw_die_ref);
3183 static void unmark_all_dies (dw_die_ref);
3184 static unsigned long size_of_pubnames (vec<pubname_entry, va_gc> *);
3185 static unsigned long size_of_aranges (void);
3186 static enum dwarf_form value_format (dw_attr_ref);
3187 static void output_value_format (dw_attr_ref);
3188 static void output_abbrev_section (void);
3189 static void output_die_abbrevs (unsigned long, dw_die_ref);
3190 static void output_die_symbol (dw_die_ref);
3191 static void output_die (dw_die_ref);
3192 static void output_compilation_unit_header (void);
3193 static void output_comp_unit (dw_die_ref, int);
3194 static void output_comdat_type_unit (comdat_type_node *);
3195 static const char *dwarf2_name (tree, int);
3196 static void add_pubname (tree, dw_die_ref);
3197 static void add_enumerator_pubname (const char *, dw_die_ref);
3198 static void add_pubname_string (const char *, dw_die_ref);
3199 static void add_pubtype (tree, dw_die_ref);
3200 static void output_pubnames (vec<pubname_entry, va_gc> *);
3201 static void output_aranges (unsigned long);
3202 static unsigned int add_ranges_num (int);
3203 static unsigned int add_ranges (const_tree);
3204 static void add_ranges_by_labels (dw_die_ref, const char *, const char *,
3205                                   bool *, bool);
3206 static void output_ranges (void);
3207 static dw_line_info_table *new_line_info_table (void);
3208 static void output_line_info (bool);
3209 static void output_file_names (void);
3210 static dw_die_ref base_type_die (tree);
3211 static int is_base_type (tree);
3212 static dw_die_ref subrange_type_die (tree, tree, tree, dw_die_ref);
3213 static int decl_quals (const_tree);
3214 static dw_die_ref modified_type_die (tree, int, dw_die_ref);
3215 static dw_die_ref generic_parameter_die (tree, tree, bool, dw_die_ref);
3216 static dw_die_ref template_parameter_pack_die (tree, tree, dw_die_ref);
3217 static int type_is_enum (const_tree);
3218 static unsigned int dbx_reg_number (const_rtx);
3219 static void add_loc_descr_op_piece (dw_loc_descr_ref *, int);
3220 static dw_loc_descr_ref reg_loc_descriptor (rtx, enum var_init_status);
3221 static dw_loc_descr_ref one_reg_loc_descriptor (unsigned int,
3222                                                 enum var_init_status);
3223 static dw_loc_descr_ref multiple_reg_loc_descriptor (rtx, rtx,
3224                                                      enum var_init_status);
3225 static dw_loc_descr_ref based_loc_descr (rtx, HOST_WIDE_INT,
3226                                          enum var_init_status);
3227 static int is_based_loc (const_rtx);
3228 static bool resolve_one_addr (rtx *);
3229 static dw_loc_descr_ref concat_loc_descriptor (rtx, rtx,
3230                                                enum var_init_status);
3231 static dw_loc_descr_ref loc_descriptor (rtx, machine_mode mode,
3232                                         enum var_init_status);
3233 struct loc_descr_context;
3234 static dw_loc_list_ref loc_list_from_tree (tree, int,
3235                                            const struct loc_descr_context *);
3236 static dw_loc_descr_ref loc_descriptor_from_tree (tree, int,
3237                                                   const struct loc_descr_context *);
3238 static HOST_WIDE_INT ceiling (HOST_WIDE_INT, unsigned int);
3239 static tree field_type (const_tree);
3240 static unsigned int simple_type_align_in_bits (const_tree);
3241 static unsigned int simple_decl_align_in_bits (const_tree);
3242 static unsigned HOST_WIDE_INT simple_type_size_in_bits (const_tree);
3243 static HOST_WIDE_INT field_byte_offset (const_tree);
3244 static void add_AT_location_description (dw_die_ref, enum dwarf_attribute,
3245                                          dw_loc_list_ref);
3246 static void add_data_member_location_attribute (dw_die_ref, tree);
3247 static bool add_const_value_attribute (dw_die_ref, rtx);
3248 static void insert_int (HOST_WIDE_INT, unsigned, unsigned char *);
3249 static void insert_wide_int (const wide_int &, unsigned char *, int);
3250 static void insert_float (const_rtx, unsigned char *);
3251 static rtx rtl_for_decl_location (tree);
3252 static bool add_location_or_const_value_attribute (dw_die_ref, tree, bool,
3253                                                    enum dwarf_attribute);
3254 static bool tree_add_const_value_attribute (dw_die_ref, tree);
3255 static bool tree_add_const_value_attribute_for_decl (dw_die_ref, tree);
3256 static void add_name_attribute (dw_die_ref, const char *);
3257 static void add_gnat_descriptive_type_attribute (dw_die_ref, tree, dw_die_ref);
3258 static void add_comp_dir_attribute (dw_die_ref);
3259 static void add_scalar_info (dw_die_ref, enum dwarf_attribute, tree, int,
3260                              const struct loc_descr_context *);
3261 static void add_bound_info (dw_die_ref, enum dwarf_attribute, tree,
3262                             const struct loc_descr_context *);
3263 static void add_subscript_info (dw_die_ref, tree, bool);
3264 static void add_byte_size_attribute (dw_die_ref, tree);
3265 static void add_bit_offset_attribute (dw_die_ref, tree);
3266 static void add_bit_size_attribute (dw_die_ref, tree);
3267 static void add_prototyped_attribute (dw_die_ref, tree);
3268 static dw_die_ref add_abstract_origin_attribute (dw_die_ref, tree);
3269 static void add_pure_or_virtual_attribute (dw_die_ref, tree);
3270 static void add_src_coords_attributes (dw_die_ref, tree);
3271 static void add_name_and_src_coords_attributes (dw_die_ref, tree);
3272 static void push_decl_scope (tree);
3273 static void pop_decl_scope (void);
3274 static dw_die_ref scope_die_for (tree, dw_die_ref);
3275 static inline int local_scope_p (dw_die_ref);
3276 static inline int class_scope_p (dw_die_ref);
3277 static inline int class_or_namespace_scope_p (dw_die_ref);
3278 static void add_type_attribute (dw_die_ref, tree, int, dw_die_ref);
3279 static void add_calling_convention_attribute (dw_die_ref, tree);
3280 static const char *type_tag (const_tree);
3281 static tree member_declared_type (const_tree);
3282 #if 0
3283 static const char *decl_start_label (tree);
3284 #endif
3285 static void gen_array_type_die (tree, dw_die_ref);
3286 static void gen_descr_array_type_die (tree, struct array_descr_info *, dw_die_ref);
3287 #if 0
3288 static void gen_entry_point_die (tree, dw_die_ref);
3289 #endif
3290 static dw_die_ref gen_enumeration_type_die (tree, dw_die_ref);
3291 static dw_die_ref gen_formal_parameter_die (tree, tree, bool, dw_die_ref);
3292 static dw_die_ref gen_formal_parameter_pack_die  (tree, tree, dw_die_ref, tree*);
3293 static void gen_unspecified_parameters_die (tree, dw_die_ref);
3294 static void gen_formal_types_die (tree, dw_die_ref);
3295 static void gen_subprogram_die (tree, dw_die_ref);
3296 static void gen_variable_die (tree, tree, dw_die_ref);
3297 static void gen_const_die (tree, dw_die_ref);
3298 static void gen_label_die (tree, dw_die_ref);
3299 static void gen_lexical_block_die (tree, dw_die_ref);
3300 static void gen_inlined_subroutine_die (tree, dw_die_ref);
3301 static void gen_field_die (tree, dw_die_ref);
3302 static void gen_ptr_to_mbr_type_die (tree, dw_die_ref);
3303 static dw_die_ref gen_compile_unit_die (const char *);
3304 static void gen_inheritance_die (tree, tree, dw_die_ref);
3305 static void gen_member_die (tree, dw_die_ref);
3306 static void gen_struct_or_union_type_die (tree, dw_die_ref,
3307                                                 enum debug_info_usage);
3308 static void gen_subroutine_type_die (tree, dw_die_ref);
3309 static void gen_typedef_die (tree, dw_die_ref);
3310 static void gen_type_die (tree, dw_die_ref);
3311 static void gen_block_die (tree, dw_die_ref);
3312 static void decls_for_scope (tree, dw_die_ref);
3313 static inline int is_redundant_typedef (const_tree);
3314 static bool is_naming_typedef_decl (const_tree);
3315 static inline dw_die_ref get_context_die (tree);
3316 static void gen_namespace_die (tree, dw_die_ref);
3317 static dw_die_ref gen_namelist_decl (tree, dw_die_ref, tree);
3318 static dw_die_ref gen_decl_die (tree, tree, dw_die_ref);
3319 static dw_die_ref force_decl_die (tree);
3320 static dw_die_ref force_type_die (tree);
3321 static dw_die_ref setup_namespace_context (tree, dw_die_ref);
3322 static dw_die_ref declare_in_namespace (tree, dw_die_ref);
3323 static struct dwarf_file_data * lookup_filename (const char *);
3324 static void retry_incomplete_types (void);
3325 static void gen_type_die_for_member (tree, tree, dw_die_ref);
3326 static void gen_generic_params_dies (tree);
3327 static void gen_tagged_type_die (tree, dw_die_ref, enum debug_info_usage);
3328 static void gen_type_die_with_usage (tree, dw_die_ref, enum debug_info_usage);
3329 static void splice_child_die (dw_die_ref, dw_die_ref);
3330 static int file_info_cmp (const void *, const void *);
3331 static dw_loc_list_ref new_loc_list (dw_loc_descr_ref, const char *,
3332                                      const char *, const char *);
3333 static void output_loc_list (dw_loc_list_ref);
3334 static char *gen_internal_sym (const char *);
3335 static bool want_pubnames (void);
3336
3337 static void prune_unmark_dies (dw_die_ref);
3338 static void prune_unused_types_mark_generic_parms_dies (dw_die_ref);
3339 static void prune_unused_types_mark (dw_die_ref, int);
3340 static void prune_unused_types_walk (dw_die_ref);
3341 static void prune_unused_types_walk_attribs (dw_die_ref);
3342 static void prune_unused_types_prune (dw_die_ref);
3343 static void prune_unused_types (void);
3344 static int maybe_emit_file (struct dwarf_file_data *fd);
3345 static inline const char *AT_vms_delta1 (dw_attr_ref);
3346 static inline const char *AT_vms_delta2 (dw_attr_ref);
3347 static inline void add_AT_vms_delta (dw_die_ref, enum dwarf_attribute,
3348                                      const char *, const char *);
3349 static void append_entry_to_tmpl_value_parm_die_table (dw_die_ref, tree);
3350 static void gen_remaining_tmpl_value_param_die_attribute (void);
3351 static bool generic_type_p (tree);
3352 static void schedule_generic_params_dies_gen (tree t);
3353 static void gen_scheduled_generic_parms_dies (void);
3354
3355 static const char *comp_dir_string (void);
3356
3357 static void hash_loc_operands (dw_loc_descr_ref, inchash::hash &);
3358
3359 /* enum for tracking thread-local variables whose address is really an offset
3360    relative to the TLS pointer, which will need link-time relocation, but will
3361    not need relocation by the DWARF consumer.  */
3362
3363 enum dtprel_bool
3364 {
3365   dtprel_false = 0,
3366   dtprel_true = 1
3367 };
3368
3369 /* Return the operator to use for an address of a variable.  For dtprel_true, we
3370    use DW_OP_const*.  For regular variables, which need both link-time
3371    relocation and consumer-level relocation (e.g., to account for shared objects
3372    loaded at a random address), we use DW_OP_addr*.  */
3373
3374 static inline enum dwarf_location_atom
3375 dw_addr_op (enum dtprel_bool dtprel)
3376 {
3377   if (dtprel == dtprel_true)
3378     return (dwarf_split_debug_info ? DW_OP_GNU_const_index
3379             : (DWARF2_ADDR_SIZE == 4 ? DW_OP_const4u : DW_OP_const8u));
3380   else
3381     return dwarf_split_debug_info ? DW_OP_GNU_addr_index : DW_OP_addr;
3382 }
3383
3384 /* Return a pointer to a newly allocated address location description.  If
3385    dwarf_split_debug_info is true, then record the address with the appropriate
3386    relocation.  */
3387 static inline dw_loc_descr_ref
3388 new_addr_loc_descr (rtx addr, enum dtprel_bool dtprel)
3389 {
3390   dw_loc_descr_ref ref = new_loc_descr (dw_addr_op (dtprel), 0, 0);
3391
3392   ref->dw_loc_oprnd1.val_class = dw_val_class_addr;
3393   ref->dw_loc_oprnd1.v.val_addr = addr;
3394   ref->dtprel = dtprel;
3395   if (dwarf_split_debug_info)
3396     ref->dw_loc_oprnd1.val_entry
3397         = add_addr_table_entry (addr,
3398                                 dtprel ? ate_kind_rtx_dtprel : ate_kind_rtx);
3399   else
3400     ref->dw_loc_oprnd1.val_entry = NULL;
3401
3402   return ref;
3403 }
3404
3405 /* Section names used to hold DWARF debugging information.  */
3406
3407 #ifndef DEBUG_INFO_SECTION
3408 #define DEBUG_INFO_SECTION      ".debug_info"
3409 #endif
3410 #ifndef DEBUG_DWO_INFO_SECTION
3411 #define DEBUG_DWO_INFO_SECTION ".debug_info.dwo"
3412 #endif
3413 #ifndef DEBUG_ABBREV_SECTION
3414 #define DEBUG_ABBREV_SECTION    ".debug_abbrev"
3415 #endif
3416 #ifndef DEBUG_DWO_ABBREV_SECTION
3417 #define DEBUG_DWO_ABBREV_SECTION ".debug_abbrev.dwo"
3418 #endif
3419 #ifndef DEBUG_ARANGES_SECTION
3420 #define DEBUG_ARANGES_SECTION   ".debug_aranges"
3421 #endif
3422 #ifndef DEBUG_ADDR_SECTION
3423 #define DEBUG_ADDR_SECTION     ".debug_addr"
3424 #endif
3425 #ifndef DEBUG_NORM_MACINFO_SECTION
3426 #define DEBUG_NORM_MACINFO_SECTION     ".debug_macinfo"
3427 #endif
3428 #ifndef DEBUG_DWO_MACINFO_SECTION
3429 #define DEBUG_DWO_MACINFO_SECTION      ".debug_macinfo.dwo"
3430 #endif
3431 #ifndef DEBUG_MACINFO_SECTION
3432 #define DEBUG_MACINFO_SECTION                                           \
3433   (!dwarf_split_debug_info                                              \
3434    ? (DEBUG_NORM_MACINFO_SECTION) : (DEBUG_DWO_MACINFO_SECTION))
3435 #endif
3436 #ifndef DEBUG_NORM_MACRO_SECTION
3437 #define DEBUG_NORM_MACRO_SECTION ".debug_macro"
3438 #endif
3439 #ifndef DEBUG_DWO_MACRO_SECTION
3440 #define DEBUG_DWO_MACRO_SECTION        ".debug_macro.dwo"
3441 #endif
3442 #ifndef DEBUG_MACRO_SECTION
3443 #define DEBUG_MACRO_SECTION                                             \
3444   (!dwarf_split_debug_info                                              \
3445    ? (DEBUG_NORM_MACRO_SECTION) : (DEBUG_DWO_MACRO_SECTION))
3446 #endif
3447 #ifndef DEBUG_LINE_SECTION
3448 #define DEBUG_LINE_SECTION      ".debug_line"
3449 #endif
3450 #ifndef DEBUG_DWO_LINE_SECTION
3451 #define DEBUG_DWO_LINE_SECTION ".debug_line.dwo"
3452 #endif
3453 #ifndef DEBUG_LOC_SECTION
3454 #define DEBUG_LOC_SECTION       ".debug_loc"
3455 #endif
3456 #ifndef DEBUG_DWO_LOC_SECTION
3457 #define DEBUG_DWO_LOC_SECTION  ".debug_loc.dwo"
3458 #endif
3459 #ifndef DEBUG_PUBNAMES_SECTION
3460 #define DEBUG_PUBNAMES_SECTION  \
3461   ((debug_generate_pub_sections == 2) \
3462    ? ".debug_gnu_pubnames" : ".debug_pubnames")
3463 #endif
3464 #ifndef DEBUG_PUBTYPES_SECTION
3465 #define DEBUG_PUBTYPES_SECTION  \
3466   ((debug_generate_pub_sections == 2) \
3467    ? ".debug_gnu_pubtypes" : ".debug_pubtypes")
3468 #endif
3469 #define DEBUG_NORM_STR_OFFSETS_SECTION ".debug_str_offsets"
3470 #define DEBUG_DWO_STR_OFFSETS_SECTION ".debug_str_offsets.dwo"
3471 #ifndef DEBUG_STR_OFFSETS_SECTION
3472 #define DEBUG_STR_OFFSETS_SECTION                                       \
3473   (!dwarf_split_debug_info                                              \
3474    ? (DEBUG_NORM_STR_OFFSETS_SECTION) : (DEBUG_DWO_STR_OFFSETS_SECTION))
3475 #endif
3476 #ifndef DEBUG_STR_DWO_SECTION
3477 #define DEBUG_STR_DWO_SECTION   ".debug_str.dwo"
3478 #endif
3479 #ifndef DEBUG_STR_SECTION
3480 #define DEBUG_STR_SECTION  ".debug_str"
3481 #endif
3482 #ifndef DEBUG_RANGES_SECTION
3483 #define DEBUG_RANGES_SECTION    ".debug_ranges"
3484 #endif
3485
3486 /* Standard ELF section names for compiled code and data.  */
3487 #ifndef TEXT_SECTION_NAME
3488 #define TEXT_SECTION_NAME       ".text"
3489 #endif
3490
3491 /* Section flags for .debug_macinfo/.debug_macro section.  */
3492 #define DEBUG_MACRO_SECTION_FLAGS                                       \
3493   (dwarf_split_debug_info ? SECTION_DEBUG | SECTION_EXCLUDE : SECTION_DEBUG)
3494
3495 /* Section flags for .debug_str section.  */
3496 #define DEBUG_STR_SECTION_FLAGS                                 \
3497   (HAVE_GAS_SHF_MERGE && flag_merge_debug_strings               \
3498    ? SECTION_DEBUG | SECTION_MERGE | SECTION_STRINGS | 1        \
3499    : SECTION_DEBUG)
3500
3501 /* Section flags for .debug_str.dwo section.  */
3502 #define DEBUG_STR_DWO_SECTION_FLAGS (SECTION_DEBUG | SECTION_EXCLUDE)
3503
3504 /* Labels we insert at beginning sections we can reference instead of
3505    the section names themselves.  */
3506
3507 #ifndef TEXT_SECTION_LABEL
3508 #define TEXT_SECTION_LABEL                 "Ltext"
3509 #endif
3510 #ifndef COLD_TEXT_SECTION_LABEL
3511 #define COLD_TEXT_SECTION_LABEL             "Ltext_cold"
3512 #endif
3513 #ifndef DEBUG_LINE_SECTION_LABEL
3514 #define DEBUG_LINE_SECTION_LABEL           "Ldebug_line"
3515 #endif
3516 #ifndef DEBUG_SKELETON_LINE_SECTION_LABEL
3517 #define DEBUG_SKELETON_LINE_SECTION_LABEL   "Lskeleton_debug_line"
3518 #endif
3519 #ifndef DEBUG_INFO_SECTION_LABEL
3520 #define DEBUG_INFO_SECTION_LABEL           "Ldebug_info"
3521 #endif
3522 #ifndef DEBUG_SKELETON_INFO_SECTION_LABEL
3523 #define DEBUG_SKELETON_INFO_SECTION_LABEL   "Lskeleton_debug_info"
3524 #endif
3525 #ifndef DEBUG_ABBREV_SECTION_LABEL
3526 #define DEBUG_ABBREV_SECTION_LABEL         "Ldebug_abbrev"
3527 #endif
3528 #ifndef DEBUG_SKELETON_ABBREV_SECTION_LABEL
3529 #define DEBUG_SKELETON_ABBREV_SECTION_LABEL "Lskeleton_debug_abbrev"
3530 #endif
3531 #ifndef DEBUG_ADDR_SECTION_LABEL
3532 #define DEBUG_ADDR_SECTION_LABEL           "Ldebug_addr"
3533 #endif
3534 #ifndef DEBUG_LOC_SECTION_LABEL
3535 #define DEBUG_LOC_SECTION_LABEL                    "Ldebug_loc"
3536 #endif
3537 #ifndef DEBUG_RANGES_SECTION_LABEL
3538 #define DEBUG_RANGES_SECTION_LABEL         "Ldebug_ranges"
3539 #endif
3540 #ifndef DEBUG_MACINFO_SECTION_LABEL
3541 #define DEBUG_MACINFO_SECTION_LABEL         "Ldebug_macinfo"
3542 #endif
3543 #ifndef DEBUG_MACRO_SECTION_LABEL
3544 #define DEBUG_MACRO_SECTION_LABEL          "Ldebug_macro"
3545 #endif
3546 #define SKELETON_COMP_DIE_ABBREV 1
3547 #define SKELETON_TYPE_DIE_ABBREV 2
3548
3549 /* Definitions of defaults for formats and names of various special
3550    (artificial) labels which may be generated within this file (when the -g
3551    options is used and DWARF2_DEBUGGING_INFO is in effect.
3552    If necessary, these may be overridden from within the tm.h file, but
3553    typically, overriding these defaults is unnecessary.  */
3554
3555 static char text_end_label[MAX_ARTIFICIAL_LABEL_BYTES];
3556 static char text_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3557 static char cold_text_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3558 static char cold_end_label[MAX_ARTIFICIAL_LABEL_BYTES];
3559 static char abbrev_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3560 static char debug_info_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3561 static char debug_skeleton_info_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3562 static char debug_skeleton_abbrev_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3563 static char debug_line_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3564 static char debug_addr_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3565 static char debug_skeleton_line_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3566 static char macinfo_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3567 static char loc_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3568 static char ranges_section_label[2 * MAX_ARTIFICIAL_LABEL_BYTES];
3569
3570 #ifndef TEXT_END_LABEL
3571 #define TEXT_END_LABEL          "Letext"
3572 #endif
3573 #ifndef COLD_END_LABEL
3574 #define COLD_END_LABEL          "Letext_cold"
3575 #endif
3576 #ifndef BLOCK_BEGIN_LABEL
3577 #define BLOCK_BEGIN_LABEL       "LBB"
3578 #endif
3579 #ifndef BLOCK_END_LABEL
3580 #define BLOCK_END_LABEL         "LBE"
3581 #endif
3582 #ifndef LINE_CODE_LABEL
3583 #define LINE_CODE_LABEL         "LM"
3584 #endif
3585
3586 \f
3587 /* Return the root of the DIE's built for the current compilation unit.  */
3588 static dw_die_ref
3589 comp_unit_die (void)
3590 {
3591   if (!single_comp_unit_die)
3592     single_comp_unit_die = gen_compile_unit_die (NULL);
3593   return single_comp_unit_die;
3594 }
3595
3596 /* We allow a language front-end to designate a function that is to be
3597    called to "demangle" any name before it is put into a DIE.  */
3598
3599 static const char *(*demangle_name_func) (const char *);
3600
3601 void
3602 dwarf2out_set_demangle_name_func (const char *(*func) (const char *))
3603 {
3604   demangle_name_func = func;
3605 }
3606
3607 /* Test if rtl node points to a pseudo register.  */
3608
3609 static inline int
3610 is_pseudo_reg (const_rtx rtl)
3611 {
3612   return ((REG_P (rtl) && REGNO (rtl) >= FIRST_PSEUDO_REGISTER)
3613           || (GET_CODE (rtl) == SUBREG
3614               && REGNO (SUBREG_REG (rtl)) >= FIRST_PSEUDO_REGISTER));
3615 }
3616
3617 /* Return a reference to a type, with its const and volatile qualifiers
3618    removed.  */
3619
3620 static inline tree
3621 type_main_variant (tree type)
3622 {
3623   type = TYPE_MAIN_VARIANT (type);
3624
3625   /* ??? There really should be only one main variant among any group of
3626      variants of a given type (and all of the MAIN_VARIANT values for all
3627      members of the group should point to that one type) but sometimes the C
3628      front-end messes this up for array types, so we work around that bug
3629      here.  */
3630   if (TREE_CODE (type) == ARRAY_TYPE)
3631     while (type != TYPE_MAIN_VARIANT (type))
3632       type = TYPE_MAIN_VARIANT (type);
3633
3634   return type;
3635 }
3636
3637 /* Return nonzero if the given type node represents a tagged type.  */
3638
3639 static inline int
3640 is_tagged_type (const_tree type)
3641 {
3642   enum tree_code code = TREE_CODE (type);
3643
3644   return (code == RECORD_TYPE || code == UNION_TYPE
3645           || code == QUAL_UNION_TYPE || code == ENUMERAL_TYPE);
3646 }
3647
3648 /* Set label to debug_info_section_label + die_offset of a DIE reference.  */
3649
3650 static void
3651 get_ref_die_offset_label (char *label, dw_die_ref ref)
3652 {
3653   sprintf (label, "%s+%ld", debug_info_section_label, ref->die_offset);
3654 }
3655
3656 /* Return die_offset of a DIE reference to a base type.  */
3657
3658 static unsigned long int
3659 get_base_type_offset (dw_die_ref ref)
3660 {
3661   if (ref->die_offset)
3662     return ref->die_offset;
3663   if (comp_unit_die ()->die_abbrev)
3664     {
3665       calc_base_type_die_sizes ();
3666       gcc_assert (ref->die_offset);
3667     }
3668   return ref->die_offset;
3669 }
3670
3671 /* Return die_offset of a DIE reference other than base type.  */
3672
3673 static unsigned long int
3674 get_ref_die_offset (dw_die_ref ref)
3675 {
3676   gcc_assert (ref->die_offset);
3677   return ref->die_offset;
3678 }
3679
3680 /* Convert a DIE tag into its string name.  */
3681
3682 static const char *
3683 dwarf_tag_name (unsigned int tag)
3684 {
3685   const char *name = get_DW_TAG_name (tag);
3686
3687   if (name != NULL)
3688     return name;
3689
3690   return "DW_TAG_<unknown>";
3691 }
3692
3693 /* Convert a DWARF attribute code into its string name.  */
3694
3695 static const char *
3696 dwarf_attr_name (unsigned int attr)
3697 {
3698   const char *name;
3699
3700   switch (attr)
3701     {
3702 #if VMS_DEBUGGING_INFO
3703     case DW_AT_HP_prologue:
3704       return "DW_AT_HP_prologue";
3705 #else
3706     case DW_AT_MIPS_loop_unroll_factor:
3707       return "DW_AT_MIPS_loop_unroll_factor";
3708 #endif
3709
3710 #if VMS_DEBUGGING_INFO
3711     case DW_AT_HP_epilogue:
3712       return "DW_AT_HP_epilogue";
3713 #else
3714     case DW_AT_MIPS_stride:
3715       return "DW_AT_MIPS_stride";
3716 #endif
3717     }
3718
3719   name = get_DW_AT_name (attr);
3720
3721   if (name != NULL)
3722     return name;
3723
3724   return "DW_AT_<unknown>";
3725 }
3726
3727 /* Convert a DWARF value form code into its string name.  */
3728
3729 static const char *
3730 dwarf_form_name (unsigned int form)
3731 {
3732   const char *name = get_DW_FORM_name (form);
3733
3734   if (name != NULL)
3735     return name;
3736
3737   return "DW_FORM_<unknown>";
3738 }
3739 \f
3740 /* Determine the "ultimate origin" of a decl.  The decl may be an inlined
3741    instance of an inlined instance of a decl which is local to an inline
3742    function, so we have to trace all of the way back through the origin chain
3743    to find out what sort of node actually served as the original seed for the
3744    given block.  */
3745
3746 static tree
3747 decl_ultimate_origin (const_tree decl)
3748 {
3749   if (!CODE_CONTAINS_STRUCT (TREE_CODE (decl), TS_DECL_COMMON))
3750     return NULL_TREE;
3751
3752   /* DECL_ABSTRACT_ORIGIN can point to itself; ignore that if
3753      we're trying to output the abstract instance of this function.  */
3754   if (DECL_ABSTRACT_P (decl) && DECL_ABSTRACT_ORIGIN (decl) == decl)
3755     return NULL_TREE;
3756
3757   /* Since the DECL_ABSTRACT_ORIGIN for a DECL is supposed to be the
3758      most distant ancestor, this should never happen.  */
3759   gcc_assert (!DECL_FROM_INLINE (DECL_ORIGIN (decl)));
3760
3761   return DECL_ABSTRACT_ORIGIN (decl);
3762 }
3763
3764 /* Get the class to which DECL belongs, if any.  In g++, the DECL_CONTEXT
3765    of a virtual function may refer to a base class, so we check the 'this'
3766    parameter.  */
3767
3768 static tree
3769 decl_class_context (tree decl)
3770 {
3771   tree context = NULL_TREE;
3772
3773   if (TREE_CODE (decl) != FUNCTION_DECL || ! DECL_VINDEX (decl))
3774     context = DECL_CONTEXT (decl);
3775   else
3776     context = TYPE_MAIN_VARIANT
3777       (TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (decl)))));
3778
3779   if (context && !TYPE_P (context))
3780     context = NULL_TREE;
3781
3782   return context;
3783 }
3784 \f
3785 /* Add an attribute/value pair to a DIE.  */
3786
3787 static inline void
3788 add_dwarf_attr (dw_die_ref die, dw_attr_ref attr)
3789 {
3790   /* Maybe this should be an assert?  */
3791   if (die == NULL)
3792     return;
3793
3794   vec_safe_reserve (die->die_attr, 1);
3795   vec_safe_push (die->die_attr, *attr);
3796 }
3797
3798 static inline enum dw_val_class
3799 AT_class (dw_attr_ref a)
3800 {
3801   return a->dw_attr_val.val_class;
3802 }
3803
3804 /* Return the index for any attribute that will be referenced with a
3805    DW_FORM_GNU_addr_index or DW_FORM_GNU_str_index.  String indices
3806    are stored in dw_attr_val.v.val_str for reference counting
3807    pruning.  */
3808
3809 static inline unsigned int
3810 AT_index (dw_attr_ref a)
3811 {
3812   if (AT_class (a) == dw_val_class_str)
3813     return a->dw_attr_val.v.val_str->index;
3814   else if (a->dw_attr_val.val_entry != NULL)
3815     return a->dw_attr_val.val_entry->index;
3816   return NOT_INDEXED;
3817 }
3818
3819 /* Add a flag value attribute to a DIE.  */
3820
3821 static inline void
3822 add_AT_flag (dw_die_ref die, enum dwarf_attribute attr_kind, unsigned int flag)
3823 {
3824   dw_attr_node attr;
3825
3826   attr.dw_attr = attr_kind;
3827   attr.dw_attr_val.val_class = dw_val_class_flag;
3828   attr.dw_attr_val.val_entry = NULL;
3829   attr.dw_attr_val.v.val_flag = flag;
3830   add_dwarf_attr (die, &attr);
3831 }
3832
3833 static inline unsigned
3834 AT_flag (dw_attr_ref a)
3835 {
3836   gcc_assert (a && AT_class (a) == dw_val_class_flag);
3837   return a->dw_attr_val.v.val_flag;
3838 }
3839
3840 /* Add a signed integer attribute value to a DIE.  */
3841
3842 static inline void
3843 add_AT_int (dw_die_ref die, enum dwarf_attribute attr_kind, HOST_WIDE_INT int_val)
3844 {
3845   dw_attr_node attr;
3846
3847   attr.dw_attr = attr_kind;
3848   attr.dw_attr_val.val_class = dw_val_class_const;
3849   attr.dw_attr_val.val_entry = NULL;
3850   attr.dw_attr_val.v.val_int = int_val;
3851   add_dwarf_attr (die, &attr);
3852 }
3853
3854 static inline HOST_WIDE_INT
3855 AT_int (dw_attr_ref a)
3856 {
3857   gcc_assert (a && AT_class (a) == dw_val_class_const);
3858   return a->dw_attr_val.v.val_int;
3859 }
3860
3861 /* Add an unsigned integer attribute value to a DIE.  */
3862
3863 static inline void
3864 add_AT_unsigned (dw_die_ref die, enum dwarf_attribute attr_kind,
3865                  unsigned HOST_WIDE_INT unsigned_val)
3866 {
3867   dw_attr_node attr;
3868
3869   attr.dw_attr = attr_kind;
3870   attr.dw_attr_val.val_class = dw_val_class_unsigned_const;
3871   attr.dw_attr_val.val_entry = NULL;
3872   attr.dw_attr_val.v.val_unsigned = unsigned_val;
3873   add_dwarf_attr (die, &attr);
3874 }
3875
3876 static inline unsigned HOST_WIDE_INT
3877 AT_unsigned (dw_attr_ref a)
3878 {
3879   gcc_assert (a && AT_class (a) == dw_val_class_unsigned_const);
3880   return a->dw_attr_val.v.val_unsigned;
3881 }
3882
3883 /* Add an unsigned wide integer attribute value to a DIE.  */
3884
3885 static inline void
3886 add_AT_wide (dw_die_ref die, enum dwarf_attribute attr_kind,
3887              const wide_int& w)
3888 {
3889   dw_attr_node attr;
3890
3891   attr.dw_attr = attr_kind;
3892   attr.dw_attr_val.val_class = dw_val_class_wide_int;
3893   attr.dw_attr_val.val_entry = NULL;
3894   attr.dw_attr_val.v.val_wide = ggc_alloc<wide_int> ();
3895   *attr.dw_attr_val.v.val_wide = w;
3896   add_dwarf_attr (die, &attr);
3897 }
3898
3899 /* Add an unsigned double integer attribute value to a DIE.  */
3900
3901 static inline void
3902 add_AT_double (dw_die_ref die, enum dwarf_attribute attr_kind,
3903                HOST_WIDE_INT high, unsigned HOST_WIDE_INT low)
3904 {
3905   dw_attr_node attr;
3906
3907   attr.dw_attr = attr_kind;
3908   attr.dw_attr_val.val_class = dw_val_class_const_double;
3909   attr.dw_attr_val.val_entry = NULL;
3910   attr.dw_attr_val.v.val_double.high = high;
3911   attr.dw_attr_val.v.val_double.low = low;
3912   add_dwarf_attr (die, &attr);
3913 }
3914
3915 /* Add a floating point attribute value to a DIE and return it.  */
3916
3917 static inline void
3918 add_AT_vec (dw_die_ref die, enum dwarf_attribute attr_kind,
3919             unsigned int length, unsigned int elt_size, unsigned char *array)
3920 {
3921   dw_attr_node attr;
3922
3923   attr.dw_attr = attr_kind;
3924   attr.dw_attr_val.val_class = dw_val_class_vec;
3925   attr.dw_attr_val.val_entry = NULL;
3926   attr.dw_attr_val.v.val_vec.length = length;
3927   attr.dw_attr_val.v.val_vec.elt_size = elt_size;
3928   attr.dw_attr_val.v.val_vec.array = array;
3929   add_dwarf_attr (die, &attr);
3930 }
3931
3932 /* Add an 8-byte data attribute value to a DIE.  */
3933
3934 static inline void
3935 add_AT_data8 (dw_die_ref die, enum dwarf_attribute attr_kind,
3936               unsigned char data8[8])
3937 {
3938   dw_attr_node attr;
3939
3940   attr.dw_attr = attr_kind;
3941   attr.dw_attr_val.val_class = dw_val_class_data8;
3942   attr.dw_attr_val.val_entry = NULL;
3943   memcpy (attr.dw_attr_val.v.val_data8, data8, 8);
3944   add_dwarf_attr (die, &attr);
3945 }
3946
3947 /* Add DW_AT_low_pc and DW_AT_high_pc to a DIE.  When using
3948    dwarf_split_debug_info, address attributes in dies destined for the
3949    final executable have force_direct set to avoid using indexed
3950    references.  */
3951
3952 static inline void
3953 add_AT_low_high_pc (dw_die_ref die, const char *lbl_low, const char *lbl_high,
3954                     bool force_direct)
3955 {
3956   dw_attr_node attr;
3957   char * lbl_id;
3958
3959   lbl_id = xstrdup (lbl_low);
3960   attr.dw_attr = DW_AT_low_pc;
3961   attr.dw_attr_val.val_class = dw_val_class_lbl_id;
3962   attr.dw_attr_val.v.val_lbl_id = lbl_id;
3963   if (dwarf_split_debug_info && !force_direct)
3964     attr.dw_attr_val.val_entry
3965         = add_addr_table_entry (lbl_id, ate_kind_label);
3966   else
3967     attr.dw_attr_val.val_entry = NULL;
3968   add_dwarf_attr (die, &attr);
3969
3970   attr.dw_attr = DW_AT_high_pc;
3971   if (dwarf_version < 4)
3972     attr.dw_attr_val.val_class = dw_val_class_lbl_id;
3973   else
3974     attr.dw_attr_val.val_class = dw_val_class_high_pc;
3975   lbl_id = xstrdup (lbl_high);
3976   attr.dw_attr_val.v.val_lbl_id = lbl_id;
3977   if (attr.dw_attr_val.val_class == dw_val_class_lbl_id
3978       && dwarf_split_debug_info && !force_direct)
3979     attr.dw_attr_val.val_entry
3980         = add_addr_table_entry (lbl_id, ate_kind_label);
3981   else
3982     attr.dw_attr_val.val_entry = NULL;
3983   add_dwarf_attr (die, &attr);
3984 }
3985
3986 /* Hash and equality functions for debug_str_hash.  */
3987
3988 hashval_t
3989 indirect_string_hasher::hash (indirect_string_node *x)
3990 {
3991   return htab_hash_string (x->str);
3992 }
3993
3994 bool
3995 indirect_string_hasher::equal (indirect_string_node *x1, const char *x2)
3996 {
3997   return strcmp (x1->str, x2) == 0;
3998 }
3999
4000 /* Add STR to the given string hash table.  */
4001
4002 static struct indirect_string_node *
4003 find_AT_string_in_table (const char *str,
4004                          hash_table<indirect_string_hasher> *table)
4005 {
4006   struct indirect_string_node *node;
4007
4008   indirect_string_node **slot
4009     = table->find_slot_with_hash (str, htab_hash_string (str), INSERT);
4010   if (*slot == NULL)
4011     {
4012       node = ggc_cleared_alloc<indirect_string_node> ();
4013       node->str = ggc_strdup (str);
4014       *slot = node;
4015     }
4016   else
4017     node = *slot;
4018
4019   node->refcount++;
4020   return node;
4021 }
4022
4023 /* Add STR to the indirect string hash table.  */
4024
4025 static struct indirect_string_node *
4026 find_AT_string (const char *str)
4027 {
4028   if (! debug_str_hash)
4029     debug_str_hash = hash_table<indirect_string_hasher>::create_ggc (10);
4030
4031   return find_AT_string_in_table (str, debug_str_hash);
4032 }
4033
4034 /* Add a string attribute value to a DIE.  */
4035
4036 static inline void
4037 add_AT_string (dw_die_ref die, enum dwarf_attribute attr_kind, const char *str)
4038 {
4039   dw_attr_node attr;
4040   struct indirect_string_node *node;
4041
4042   node = find_AT_string (str);
4043
4044   attr.dw_attr = attr_kind;
4045   attr.dw_attr_val.val_class = dw_val_class_str;
4046   attr.dw_attr_val.val_entry = NULL;
4047   attr.dw_attr_val.v.val_str = node;
4048   add_dwarf_attr (die, &attr);
4049 }
4050
4051 static inline const char *
4052 AT_string (dw_attr_ref a)
4053 {
4054   gcc_assert (a && AT_class (a) == dw_val_class_str);
4055   return a->dw_attr_val.v.val_str->str;
4056 }
4057
4058 /* Call this function directly to bypass AT_string_form's logic to put
4059    the string inline in the die. */
4060
4061 static void
4062 set_indirect_string (struct indirect_string_node *node)
4063 {
4064   char label[32];
4065   /* Already indirect is a no op.  */
4066   if (node->form == DW_FORM_strp || node->form == DW_FORM_GNU_str_index)
4067     {
4068       gcc_assert (node->label);
4069       return;
4070     }
4071   ASM_GENERATE_INTERNAL_LABEL (label, "LASF", dw2_string_counter);
4072   ++dw2_string_counter;
4073   node->label = xstrdup (label);
4074
4075   if (!dwarf_split_debug_info)
4076     {
4077       node->form = DW_FORM_strp;
4078       node->index = NOT_INDEXED;
4079     }
4080   else
4081     {
4082       node->form = DW_FORM_GNU_str_index;
4083       node->index = NO_INDEX_ASSIGNED;
4084     }
4085 }
4086
4087 /* Find out whether a string should be output inline in DIE
4088    or out-of-line in .debug_str section.  */
4089
4090 static enum dwarf_form
4091 find_string_form (struct indirect_string_node *node)
4092 {
4093   unsigned int len;
4094
4095   if (node->form)
4096     return node->form;
4097
4098   len = strlen (node->str) + 1;
4099
4100   /* If the string is shorter or equal to the size of the reference, it is
4101      always better to put it inline.  */
4102   if (len <= DWARF_OFFSET_SIZE || node->refcount == 0)
4103     return node->form = DW_FORM_string;
4104
4105   /* If we cannot expect the linker to merge strings in .debug_str
4106      section, only put it into .debug_str if it is worth even in this
4107      single module.  */
4108   if (DWARF2_INDIRECT_STRING_SUPPORT_MISSING_ON_TARGET
4109       || ((debug_str_section->common.flags & SECTION_MERGE) == 0
4110       && (len - DWARF_OFFSET_SIZE) * node->refcount <= len))
4111     return node->form = DW_FORM_string;
4112
4113   set_indirect_string (node);
4114
4115   return node->form;
4116 }
4117
4118 /* Find out whether the string referenced from the attribute should be
4119    output inline in DIE or out-of-line in .debug_str section.  */
4120
4121 static enum dwarf_form
4122 AT_string_form (dw_attr_ref a)
4123 {
4124   gcc_assert (a && AT_class (a) == dw_val_class_str);
4125   return find_string_form (a->dw_attr_val.v.val_str);
4126 }
4127
4128 /* Add a DIE reference attribute value to a DIE.  */
4129
4130 static inline void
4131 add_AT_die_ref (dw_die_ref die, enum dwarf_attribute attr_kind, dw_die_ref targ_die)
4132 {
4133   dw_attr_node attr;
4134
4135 #ifdef ENABLE_CHECKING
4136   gcc_assert (targ_die != NULL);
4137 #else
4138   /* With LTO we can end up trying to reference something we didn't create
4139      a DIE for.  Avoid crashing later on a NULL referenced DIE.  */
4140   if (targ_die == NULL)
4141     return;
4142 #endif
4143
4144   attr.dw_attr = attr_kind;
4145   attr.dw_attr_val.val_class = dw_val_class_die_ref;
4146   attr.dw_attr_val.val_entry = NULL;
4147   attr.dw_attr_val.v.val_die_ref.die = targ_die;
4148   attr.dw_attr_val.v.val_die_ref.external = 0;
4149   add_dwarf_attr (die, &attr);
4150 }
4151
4152 /* Change DIE reference REF to point to NEW_DIE instead.  */
4153
4154 static inline void
4155 change_AT_die_ref (dw_attr_ref ref, dw_die_ref new_die)
4156 {
4157   gcc_assert (ref->dw_attr_val.val_class == dw_val_class_die_ref);
4158   ref->dw_attr_val.v.val_die_ref.die = new_die;
4159   ref->dw_attr_val.v.val_die_ref.external = 0;
4160 }
4161
4162 /* Add an AT_specification attribute to a DIE, and also make the back
4163    pointer from the specification to the definition.  */
4164
4165 static inline void
4166 add_AT_specification (dw_die_ref die, dw_die_ref targ_die)
4167 {
4168   add_AT_die_ref (die, DW_AT_specification, targ_die);
4169   gcc_assert (!targ_die->die_definition);
4170   targ_die->die_definition = die;
4171 }
4172
4173 static inline dw_die_ref
4174 AT_ref (dw_attr_ref a)
4175 {
4176   gcc_assert (a && AT_class (a) == dw_val_class_die_ref);
4177   return a->dw_attr_val.v.val_die_ref.die;
4178 }
4179
4180 static inline int
4181 AT_ref_external (dw_attr_ref a)
4182 {
4183   if (a && AT_class (a) == dw_val_class_die_ref)
4184     return a->dw_attr_val.v.val_die_ref.external;
4185
4186   return 0;
4187 }
4188
4189 static inline void
4190 set_AT_ref_external (dw_attr_ref a, int i)
4191 {
4192   gcc_assert (a && AT_class (a) == dw_val_class_die_ref);
4193   a->dw_attr_val.v.val_die_ref.external = i;
4194 }
4195
4196 /* Add an FDE reference attribute value to a DIE.  */
4197
4198 static inline void
4199 add_AT_fde_ref (dw_die_ref die, enum dwarf_attribute attr_kind, unsigned int targ_fde)
4200 {
4201   dw_attr_node attr;
4202
4203   attr.dw_attr = attr_kind;
4204   attr.dw_attr_val.val_class = dw_val_class_fde_ref;
4205   attr.dw_attr_val.val_entry = NULL;
4206   attr.dw_attr_val.v.val_fde_index = targ_fde;
4207   add_dwarf_attr (die, &attr);
4208 }
4209
4210 /* Add a location description attribute value to a DIE.  */
4211
4212 static inline void
4213 add_AT_loc (dw_die_ref die, enum dwarf_attribute attr_kind, dw_loc_descr_ref loc)
4214 {
4215   dw_attr_node attr;
4216
4217   attr.dw_attr = attr_kind;
4218   attr.dw_attr_val.val_class = dw_val_class_loc;
4219   attr.dw_attr_val.val_entry = NULL;
4220   attr.dw_attr_val.v.val_loc = loc;
4221   add_dwarf_attr (die, &attr);
4222 }
4223
4224 static inline dw_loc_descr_ref
4225 AT_loc (dw_attr_ref a)
4226 {
4227   gcc_assert (a && AT_class (a) == dw_val_class_loc);
4228   return a->dw_attr_val.v.val_loc;
4229 }
4230
4231 static inline void
4232 add_AT_loc_list (dw_die_ref die, enum dwarf_attribute attr_kind, dw_loc_list_ref loc_list)
4233 {
4234   dw_attr_node attr;
4235
4236   attr.dw_attr = attr_kind;
4237   attr.dw_attr_val.val_class = dw_val_class_loc_list;
4238   attr.dw_attr_val.val_entry = NULL;
4239   attr.dw_attr_val.v.val_loc_list = loc_list;
4240   add_dwarf_attr (die, &attr);
4241   have_location_lists = true;
4242 }
4243
4244 static inline dw_loc_list_ref
4245 AT_loc_list (dw_attr_ref a)
4246 {
4247   gcc_assert (a && AT_class (a) == dw_val_class_loc_list);
4248   return a->dw_attr_val.v.val_loc_list;
4249 }
4250
4251 static inline dw_loc_list_ref *
4252 AT_loc_list_ptr (dw_attr_ref a)
4253 {
4254   gcc_assert (a && AT_class (a) == dw_val_class_loc_list);
4255   return &a->dw_attr_val.v.val_loc_list;
4256 }
4257
4258 struct addr_hasher : ggc_hasher<addr_table_entry *>
4259 {
4260   static hashval_t hash (addr_table_entry *);
4261   static bool equal (addr_table_entry *, addr_table_entry *);
4262 };
4263
4264 /* Table of entries into the .debug_addr section.  */
4265
4266 static GTY (()) hash_table<addr_hasher> *addr_index_table;
4267
4268 /* Hash an address_table_entry.  */
4269
4270 hashval_t
4271 addr_hasher::hash (addr_table_entry *a)
4272 {
4273   inchash::hash hstate;
4274   switch (a->kind)
4275     {
4276       case ate_kind_rtx:
4277         hstate.add_int (0);
4278         break;
4279       case ate_kind_rtx_dtprel:
4280         hstate.add_int (1);
4281         break;
4282       case ate_kind_label:
4283         return htab_hash_string (a->addr.label);
4284       default:
4285         gcc_unreachable ();
4286     }
4287   inchash::add_rtx (a->addr.rtl, hstate);
4288   return hstate.end ();
4289 }
4290
4291 /* Determine equality for two address_table_entries.  */
4292
4293 bool
4294 addr_hasher::equal (addr_table_entry *a1, addr_table_entry *a2)
4295 {
4296   if (a1->kind != a2->kind)
4297     return 0;
4298   switch (a1->kind)
4299     {
4300       case ate_kind_rtx:
4301       case ate_kind_rtx_dtprel:
4302         return rtx_equal_p (a1->addr.rtl, a2->addr.rtl);
4303       case ate_kind_label:
4304         return strcmp (a1->addr.label, a2->addr.label) == 0;
4305       default:
4306         gcc_unreachable ();
4307     }
4308 }
4309
4310 /* Initialize an addr_table_entry.  */
4311
4312 void
4313 init_addr_table_entry (addr_table_entry *e, enum ate_kind kind, void *addr)
4314 {
4315   e->kind = kind;
4316   switch (kind)
4317     {
4318       case ate_kind_rtx:
4319       case ate_kind_rtx_dtprel:
4320         e->addr.rtl = (rtx) addr;
4321         break;
4322       case ate_kind_label:
4323         e->addr.label = (char *) addr;
4324         break;
4325     }
4326   e->refcount = 0;
4327   e->index = NO_INDEX_ASSIGNED;
4328 }
4329
4330 /* Add attr to the address table entry to the table.  Defer setting an
4331    index until output time.  */
4332
4333 static addr_table_entry *
4334 add_addr_table_entry (void *addr, enum ate_kind kind)
4335 {
4336   addr_table_entry *node;
4337   addr_table_entry finder;
4338
4339   gcc_assert (dwarf_split_debug_info);
4340   if (! addr_index_table)
4341     addr_index_table = hash_table<addr_hasher>::create_ggc (10);
4342   init_addr_table_entry (&finder, kind, addr);
4343   addr_table_entry **slot = addr_index_table->find_slot (&finder, INSERT);
4344
4345   if (*slot == HTAB_EMPTY_ENTRY)
4346     {
4347       node = ggc_cleared_alloc<addr_table_entry> ();
4348       init_addr_table_entry (node, kind, addr);
4349       *slot = node;
4350     }
4351   else
4352     node = *slot;
4353
4354   node->refcount++;
4355   return node;
4356 }
4357
4358 /* Remove an entry from the addr table by decrementing its refcount.
4359    Strictly, decrementing the refcount would be enough, but the
4360    assertion that the entry is actually in the table has found
4361    bugs.  */
4362
4363 static void
4364 remove_addr_table_entry (addr_table_entry *entry)
4365 {
4366   gcc_assert (dwarf_split_debug_info && addr_index_table);
4367   /* After an index is assigned, the table is frozen.  */
4368   gcc_assert (entry->refcount > 0 && entry->index == NO_INDEX_ASSIGNED);
4369   entry->refcount--;
4370 }
4371
4372 /* Given a location list, remove all addresses it refers to from the
4373    address_table.  */
4374
4375 static void
4376 remove_loc_list_addr_table_entries (dw_loc_descr_ref descr)
4377 {
4378   for (; descr; descr = descr->dw_loc_next)
4379     if (descr->dw_loc_oprnd1.val_entry != NULL)
4380       {
4381         gcc_assert (descr->dw_loc_oprnd1.val_entry->index == NO_INDEX_ASSIGNED);
4382         remove_addr_table_entry (descr->dw_loc_oprnd1.val_entry);
4383       }
4384 }
4385
4386 /* A helper function for dwarf2out_finish called through
4387    htab_traverse.  Assign an addr_table_entry its index.  All entries
4388    must be collected into the table when this function is called,
4389    because the indexing code relies on htab_traverse to traverse nodes
4390    in the same order for each run. */
4391
4392 int
4393 index_addr_table_entry (addr_table_entry **h, unsigned int *index)
4394 {
4395   addr_table_entry *node = *h;
4396
4397   /* Don't index unreferenced nodes.  */
4398   if (node->refcount == 0)
4399     return 1;
4400
4401   gcc_assert (node->index == NO_INDEX_ASSIGNED);
4402   node->index = *index;
4403   *index += 1;
4404
4405   return 1;
4406 }
4407
4408 /* Add an address constant attribute value to a DIE.  When using
4409    dwarf_split_debug_info, address attributes in dies destined for the
4410    final executable should be direct references--setting the parameter
4411    force_direct ensures this behavior.  */
4412
4413 static inline void
4414 add_AT_addr (dw_die_ref die, enum dwarf_attribute attr_kind, rtx addr,
4415              bool force_direct)
4416 {
4417   dw_attr_node attr;
4418
4419   attr.dw_attr = attr_kind;
4420   attr.dw_attr_val.val_class = dw_val_class_addr;
4421   attr.dw_attr_val.v.val_addr = addr;
4422   if (dwarf_split_debug_info && !force_direct)
4423     attr.dw_attr_val.val_entry = add_addr_table_entry (addr, ate_kind_rtx);
4424   else
4425     attr.dw_attr_val.val_entry = NULL;
4426   add_dwarf_attr (die, &attr);
4427 }
4428
4429 /* Get the RTX from to an address DIE attribute.  */
4430
4431 static inline rtx
4432 AT_addr (dw_attr_ref a)
4433 {
4434   gcc_assert (a && AT_class (a) == dw_val_class_addr);
4435   return a->dw_attr_val.v.val_addr;
4436 }
4437
4438 /* Add a file attribute value to a DIE.  */
4439
4440 static inline void
4441 add_AT_file (dw_die_ref die, enum dwarf_attribute attr_kind,
4442              struct dwarf_file_data *fd)
4443 {
4444   dw_attr_node attr;
4445
4446   attr.dw_attr = attr_kind;
4447   attr.dw_attr_val.val_class = dw_val_class_file;
4448   attr.dw_attr_val.val_entry = NULL;
4449   attr.dw_attr_val.v.val_file = fd;
4450   add_dwarf_attr (die, &attr);
4451 }
4452
4453 /* Get the dwarf_file_data from a file DIE attribute.  */
4454
4455 static inline struct dwarf_file_data *
4456 AT_file (dw_attr_ref a)
4457 {
4458   gcc_assert (a && AT_class (a) == dw_val_class_file);
4459   return a->dw_attr_val.v.val_file;
4460 }
4461
4462 /* Add a vms delta attribute value to a DIE.  */
4463
4464 static inline void
4465 add_AT_vms_delta (dw_die_ref die, enum dwarf_attribute attr_kind,
4466                   const char *lbl1, const char *lbl2)
4467 {
4468   dw_attr_node attr;
4469
4470   attr.dw_attr = attr_kind;
4471   attr.dw_attr_val.val_class = dw_val_class_vms_delta;
4472   attr.dw_attr_val.val_entry = NULL;
4473   attr.dw_attr_val.v.val_vms_delta.lbl1 = xstrdup (lbl1);
4474   attr.dw_attr_val.v.val_vms_delta.lbl2 = xstrdup (lbl2);
4475   add_dwarf_attr (die, &attr);
4476 }
4477
4478 /* Add a label identifier attribute value to a DIE.  */
4479
4480 static inline void
4481 add_AT_lbl_id (dw_die_ref die, enum dwarf_attribute attr_kind,
4482                const char *lbl_id)
4483 {
4484   dw_attr_node attr;
4485
4486   attr.dw_attr = attr_kind;
4487   attr.dw_attr_val.val_class = dw_val_class_lbl_id;
4488   attr.dw_attr_val.val_entry = NULL;
4489   attr.dw_attr_val.v.val_lbl_id = xstrdup (lbl_id);
4490   if (dwarf_split_debug_info)
4491     attr.dw_attr_val.val_entry
4492         = add_addr_table_entry (attr.dw_attr_val.v.val_lbl_id,
4493                                 ate_kind_label);
4494   add_dwarf_attr (die, &attr);
4495 }
4496
4497 /* Add a section offset attribute value to a DIE, an offset into the
4498    debug_line section.  */
4499
4500 static inline void
4501 add_AT_lineptr (dw_die_ref die, enum dwarf_attribute attr_kind,
4502                 const char *label)
4503 {
4504   dw_attr_node attr;
4505
4506   attr.dw_attr = attr_kind;
4507   attr.dw_attr_val.val_class = dw_val_class_lineptr;
4508   attr.dw_attr_val.val_entry = NULL;
4509   attr.dw_attr_val.v.val_lbl_id = xstrdup (label);
4510   add_dwarf_attr (die, &attr);
4511 }
4512
4513 /* Add a section offset attribute value to a DIE, an offset into the
4514    debug_macinfo section.  */
4515
4516 static inline void
4517 add_AT_macptr (dw_die_ref die, enum dwarf_attribute attr_kind,
4518                const char *label)
4519 {
4520   dw_attr_node attr;
4521
4522   attr.dw_attr = attr_kind;
4523   attr.dw_attr_val.val_class = dw_val_class_macptr;
4524   attr.dw_attr_val.val_entry = NULL;
4525   attr.dw_attr_val.v.val_lbl_id = xstrdup (label);
4526   add_dwarf_attr (die, &attr);
4527 }
4528
4529 /* Add an offset attribute value to a DIE.  */
4530
4531 static inline void
4532 add_AT_offset (dw_die_ref die, enum dwarf_attribute attr_kind,
4533                unsigned HOST_WIDE_INT offset)
4534 {
4535   dw_attr_node attr;
4536
4537   attr.dw_attr = attr_kind;
4538   attr.dw_attr_val.val_class = dw_val_class_offset;
4539   attr.dw_attr_val.val_entry = NULL;
4540   attr.dw_attr_val.v.val_offset = offset;
4541   add_dwarf_attr (die, &attr);
4542 }
4543
4544 /* Add a range_list attribute value to a DIE.  When using
4545    dwarf_split_debug_info, address attributes in dies destined for the
4546    final executable should be direct references--setting the parameter
4547    force_direct ensures this behavior.  */
4548
4549 #define UNRELOCATED_OFFSET ((addr_table_entry *) 1)
4550 #define RELOCATED_OFFSET (NULL)
4551
4552 static void
4553 add_AT_range_list (dw_die_ref die, enum dwarf_attribute attr_kind,
4554                    long unsigned int offset, bool force_direct)
4555 {
4556   dw_attr_node attr;
4557
4558   attr.dw_attr = attr_kind;
4559   attr.dw_attr_val.val_class = dw_val_class_range_list;
4560   /* For the range_list attribute, use val_entry to store whether the
4561      offset should follow split-debug-info or normal semantics.  This
4562      value is read in output_range_list_offset.  */
4563   if (dwarf_split_debug_info && !force_direct)
4564     attr.dw_attr_val.val_entry = UNRELOCATED_OFFSET;
4565   else
4566     attr.dw_attr_val.val_entry = RELOCATED_OFFSET;
4567   attr.dw_attr_val.v.val_offset = offset;
4568   add_dwarf_attr (die, &attr);
4569 }
4570
4571 /* Return the start label of a delta attribute.  */
4572
4573 static inline const char *
4574 AT_vms_delta1 (dw_attr_ref a)
4575 {
4576   gcc_assert (a && (AT_class (a) == dw_val_class_vms_delta));
4577   return a->dw_attr_val.v.val_vms_delta.lbl1;
4578 }
4579
4580 /* Return the end label of a delta attribute.  */
4581
4582 static inline const char *
4583 AT_vms_delta2 (dw_attr_ref a)
4584 {
4585   gcc_assert (a && (AT_class (a) == dw_val_class_vms_delta));
4586   return a->dw_attr_val.v.val_vms_delta.lbl2;
4587 }
4588
4589 static inline const char *
4590 AT_lbl (dw_attr_ref a)
4591 {
4592   gcc_assert (a && (AT_class (a) == dw_val_class_lbl_id
4593                     || AT_class (a) == dw_val_class_lineptr
4594                     || AT_class (a) == dw_val_class_macptr
4595                     || AT_class (a) == dw_val_class_high_pc));
4596   return a->dw_attr_val.v.val_lbl_id;
4597 }
4598
4599 /* Get the attribute of type attr_kind.  */
4600
4601 static dw_attr_ref
4602 get_AT (dw_die_ref die, enum dwarf_attribute attr_kind)
4603 {
4604   dw_attr_ref a;
4605   unsigned ix;
4606   dw_die_ref spec = NULL;
4607
4608   if (! die)
4609     return NULL;
4610
4611   FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
4612     if (a->dw_attr == attr_kind)
4613       return a;
4614     else if (a->dw_attr == DW_AT_specification
4615              || a->dw_attr == DW_AT_abstract_origin)
4616       spec = AT_ref (a);
4617
4618   if (spec)
4619     return get_AT (spec, attr_kind);
4620
4621   return NULL;
4622 }
4623
4624 /* Returns the parent of the declaration of DIE.  */
4625
4626 static dw_die_ref
4627 get_die_parent (dw_die_ref die)
4628 {
4629   dw_die_ref t;
4630
4631   if (!die)
4632     return NULL;
4633
4634   if ((t = get_AT_ref (die, DW_AT_abstract_origin))
4635       || (t = get_AT_ref (die, DW_AT_specification)))
4636     die = t;
4637
4638   return die->die_parent;
4639 }
4640
4641 /* Return the "low pc" attribute value, typically associated with a subprogram
4642    DIE.  Return null if the "low pc" attribute is either not present, or if it
4643    cannot be represented as an assembler label identifier.  */
4644
4645 static inline const char *
4646 get_AT_low_pc (dw_die_ref die)
4647 {
4648   dw_attr_ref a = get_AT (die, DW_AT_low_pc);
4649
4650   return a ? AT_lbl (a) : NULL;
4651 }
4652
4653 /* Return the "high pc" attribute value, typically associated with a subprogram
4654    DIE.  Return null if the "high pc" attribute is either not present, or if it
4655    cannot be represented as an assembler label identifier.  */
4656
4657 static inline const char *
4658 get_AT_hi_pc (dw_die_ref die)
4659 {
4660   dw_attr_ref a = get_AT (die, DW_AT_high_pc);
4661
4662   return a ? AT_lbl (a) : NULL;
4663 }
4664
4665 /* Return the value of the string attribute designated by ATTR_KIND, or
4666    NULL if it is not present.  */
4667
4668 static inline const char *
4669 get_AT_string (dw_die_ref die, enum dwarf_attribute attr_kind)
4670 {
4671   dw_attr_ref a = get_AT (die, attr_kind);
4672
4673   return a ? AT_string (a) : NULL;
4674 }
4675
4676 /* Return the value of the flag attribute designated by ATTR_KIND, or -1
4677    if it is not present.  */
4678
4679 static inline int
4680 get_AT_flag (dw_die_ref die, enum dwarf_attribute attr_kind)
4681 {
4682   dw_attr_ref a = get_AT (die, attr_kind);
4683
4684   return a ? AT_flag (a) : 0;
4685 }
4686
4687 /* Return the value of the unsigned attribute designated by ATTR_KIND, or 0
4688    if it is not present.  */
4689
4690 static inline unsigned
4691 get_AT_unsigned (dw_die_ref die, enum dwarf_attribute attr_kind)
4692 {
4693   dw_attr_ref a = get_AT (die, attr_kind);
4694
4695   return a ? AT_unsigned (a) : 0;
4696 }
4697
4698 static inline dw_die_ref
4699 get_AT_ref (dw_die_ref die, enum dwarf_attribute attr_kind)
4700 {
4701   dw_attr_ref a = get_AT (die, attr_kind);
4702
4703   return a ? AT_ref (a) : NULL;
4704 }
4705
4706 static inline struct dwarf_file_data *
4707 get_AT_file (dw_die_ref die, enum dwarf_attribute attr_kind)
4708 {
4709   dw_attr_ref a = get_AT (die, attr_kind);
4710
4711   return a ? AT_file (a) : NULL;
4712 }
4713
4714 /* Return TRUE if the language is C++.  */
4715
4716 static inline bool
4717 is_cxx (void)
4718 {
4719   unsigned int lang = get_AT_unsigned (comp_unit_die (), DW_AT_language);
4720
4721   return (lang == DW_LANG_C_plus_plus || lang == DW_LANG_ObjC_plus_plus
4722           || lang == DW_LANG_C_plus_plus_11 || lang == DW_LANG_C_plus_plus_14);
4723 }
4724
4725 /* Return TRUE if the language is Java.  */
4726
4727 static inline bool
4728 is_java (void)
4729 {
4730   unsigned int lang = get_AT_unsigned (comp_unit_die (), DW_AT_language);
4731
4732   return lang == DW_LANG_Java;
4733 }
4734
4735 /* Return TRUE if the language is Fortran.  */
4736
4737 static inline bool
4738 is_fortran (void)
4739 {
4740   unsigned int lang = get_AT_unsigned (comp_unit_die (), DW_AT_language);
4741
4742   return (lang == DW_LANG_Fortran77
4743           || lang == DW_LANG_Fortran90
4744           || lang == DW_LANG_Fortran95
4745           || lang == DW_LANG_Fortran03
4746           || lang == DW_LANG_Fortran08);
4747 }
4748
4749 /* Return TRUE if the language is Ada.  */
4750
4751 static inline bool
4752 is_ada (void)
4753 {
4754   unsigned int lang = get_AT_unsigned (comp_unit_die (), DW_AT_language);
4755
4756   return lang == DW_LANG_Ada95 || lang == DW_LANG_Ada83;
4757 }
4758
4759 /* Remove the specified attribute if present.  */
4760
4761 static void
4762 remove_AT (dw_die_ref die, enum dwarf_attribute attr_kind)
4763 {
4764   dw_attr_ref a;
4765   unsigned ix;
4766
4767   if (! die)
4768     return;
4769
4770   FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
4771     if (a->dw_attr == attr_kind)
4772       {
4773         if (AT_class (a) == dw_val_class_str)
4774           if (a->dw_attr_val.v.val_str->refcount)
4775             a->dw_attr_val.v.val_str->refcount--;
4776
4777         /* vec::ordered_remove should help reduce the number of abbrevs
4778            that are needed.  */
4779         die->die_attr->ordered_remove (ix);
4780         return;
4781       }
4782 }
4783
4784 /* Remove CHILD from its parent.  PREV must have the property that
4785    PREV->DIE_SIB == CHILD.  Does not alter CHILD.  */
4786
4787 static void
4788 remove_child_with_prev (dw_die_ref child, dw_die_ref prev)
4789 {
4790   gcc_assert (child->die_parent == prev->die_parent);
4791   gcc_assert (prev->die_sib == child);
4792   if (prev == child)
4793     {
4794       gcc_assert (child->die_parent->die_child == child);
4795       prev = NULL;
4796     }
4797   else
4798     prev->die_sib = child->die_sib;
4799   if (child->die_parent->die_child == child)
4800     child->die_parent->die_child = prev;
4801 }
4802
4803 /* Replace OLD_CHILD with NEW_CHILD.  PREV must have the property that
4804    PREV->DIE_SIB == OLD_CHILD.  Does not alter OLD_CHILD.  */
4805
4806 static void
4807 replace_child (dw_die_ref old_child, dw_die_ref new_child, dw_die_ref prev)
4808 {
4809   dw_die_ref parent = old_child->die_parent;
4810
4811   gcc_assert (parent == prev->die_parent);
4812   gcc_assert (prev->die_sib == old_child);
4813
4814   new_child->die_parent = parent;
4815   if (prev == old_child)
4816     {
4817       gcc_assert (parent->die_child == old_child);
4818       new_child->die_sib = new_child;
4819     }
4820   else
4821     {
4822       prev->die_sib = new_child;
4823       new_child->die_sib = old_child->die_sib;
4824     }
4825   if (old_child->die_parent->die_child == old_child)
4826     old_child->die_parent->die_child = new_child;
4827 }
4828
4829 /* Move all children from OLD_PARENT to NEW_PARENT.  */
4830
4831 static void
4832 move_all_children (dw_die_ref old_parent, dw_die_ref new_parent)
4833 {
4834   dw_die_ref c;
4835   new_parent->die_child = old_parent->die_child;
4836   old_parent->die_child = NULL;
4837   FOR_EACH_CHILD (new_parent, c, c->die_parent = new_parent);
4838 }
4839
4840 /* Remove child DIE whose die_tag is TAG.  Do nothing if no child
4841    matches TAG.  */
4842
4843 static void
4844 remove_child_TAG (dw_die_ref die, enum dwarf_tag tag)
4845 {
4846   dw_die_ref c;
4847
4848   c = die->die_child;
4849   if (c) do {
4850     dw_die_ref prev = c;
4851     c = c->die_sib;
4852     while (c->die_tag == tag)
4853       {
4854         remove_child_with_prev (c, prev);
4855         /* Might have removed every child.  */
4856         if (c == c->die_sib)
4857           return;
4858         c = c->die_sib;
4859       }
4860   } while (c != die->die_child);
4861 }
4862
4863 /* Add a CHILD_DIE as the last child of DIE.  */
4864
4865 static void
4866 add_child_die (dw_die_ref die, dw_die_ref child_die)
4867 {
4868   /* FIXME this should probably be an assert.  */
4869   if (! die || ! child_die)
4870     return;
4871   gcc_assert (die != child_die);
4872
4873   child_die->die_parent = die;
4874   if (die->die_child)
4875     {
4876       child_die->die_sib = die->die_child->die_sib;
4877       die->die_child->die_sib = child_die;
4878     }
4879   else
4880     child_die->die_sib = child_die;
4881   die->die_child = child_die;
4882 }
4883
4884 /* Move CHILD, which must be a child of PARENT or the DIE for which PARENT
4885    is the specification, to the end of PARENT's list of children.
4886    This is done by removing and re-adding it.  */
4887
4888 static void
4889 splice_child_die (dw_die_ref parent, dw_die_ref child)
4890 {
4891   dw_die_ref p;
4892
4893   /* We want the declaration DIE from inside the class, not the
4894      specification DIE at toplevel.  */
4895   if (child->die_parent != parent)
4896     {
4897       dw_die_ref tmp = get_AT_ref (child, DW_AT_specification);
4898
4899       if (tmp)
4900         child = tmp;
4901     }
4902
4903   gcc_assert (child->die_parent == parent
4904               || (child->die_parent
4905                   == get_AT_ref (parent, DW_AT_specification)));
4906
4907   for (p = child->die_parent->die_child; ; p = p->die_sib)
4908     if (p->die_sib == child)
4909       {
4910         remove_child_with_prev (child, p);
4911         break;
4912       }
4913
4914   add_child_die (parent, child);
4915 }
4916
4917 /* Return a pointer to a newly created DIE node.  */
4918
4919 static inline dw_die_ref
4920 new_die (enum dwarf_tag tag_value, dw_die_ref parent_die, tree t)
4921 {
4922   dw_die_ref die = ggc_cleared_alloc<die_node> ();
4923
4924   die->die_tag = tag_value;
4925
4926   if (parent_die != NULL)
4927     add_child_die (parent_die, die);
4928   else
4929     {
4930       limbo_die_node *limbo_node;
4931
4932       limbo_node = ggc_cleared_alloc<limbo_die_node> ();
4933       limbo_node->die = die;
4934       limbo_node->created_for = t;
4935       limbo_node->next = limbo_die_list;
4936       limbo_die_list = limbo_node;
4937     }
4938
4939   return die;
4940 }
4941
4942 /* Return the DIE associated with the given type specifier.  */
4943
4944 static inline dw_die_ref
4945 lookup_type_die (tree type)
4946 {
4947   return TYPE_SYMTAB_DIE (type);
4948 }
4949
4950 /* Given a TYPE_DIE representing the type TYPE, if TYPE is an
4951    anonymous type named by the typedef TYPE_DIE, return the DIE of the
4952    anonymous type instead the one of the naming typedef.  */
4953
4954 static inline dw_die_ref
4955 strip_naming_typedef (tree type, dw_die_ref type_die)
4956 {
4957   if (type
4958       && TREE_CODE (type) == RECORD_TYPE
4959       && type_die
4960       && type_die->die_tag == DW_TAG_typedef
4961       && is_naming_typedef_decl (TYPE_NAME (type)))
4962     type_die = get_AT_ref (type_die, DW_AT_type);
4963   return type_die;
4964 }
4965
4966 /* Like lookup_type_die, but if type is an anonymous type named by a
4967    typedef[1], return the DIE of the anonymous type instead the one of
4968    the naming typedef.  This is because in gen_typedef_die, we did
4969    equate the anonymous struct named by the typedef with the DIE of
4970    the naming typedef. So by default, lookup_type_die on an anonymous
4971    struct yields the DIE of the naming typedef.
4972
4973    [1]: Read the comment of is_naming_typedef_decl to learn about what
4974    a naming typedef is.  */
4975
4976 static inline dw_die_ref
4977 lookup_type_die_strip_naming_typedef (tree type)
4978 {
4979   dw_die_ref die = lookup_type_die (type);
4980   return strip_naming_typedef (type, die);
4981 }
4982
4983 /* Equate a DIE to a given type specifier.  */
4984
4985 static inline void
4986 equate_type_number_to_die (tree type, dw_die_ref type_die)
4987 {
4988   TYPE_SYMTAB_DIE (type) = type_die;
4989 }
4990
4991 /* Returns a hash value for X (which really is a die_struct).  */
4992
4993 inline hashval_t
4994 decl_die_hasher::hash (die_node *x)
4995 {
4996   return (hashval_t) x->decl_id;
4997 }
4998
4999 /* Return nonzero if decl_id of die_struct X is the same as UID of decl *Y.  */
5000
5001 inline bool
5002 decl_die_hasher::equal (die_node *x, tree y)
5003 {
5004   return (x->decl_id == DECL_UID (y));
5005 }
5006
5007 /* Return the DIE associated with a given declaration.  */
5008
5009 static inline dw_die_ref
5010 lookup_decl_die (tree decl)
5011 {
5012   return decl_die_table->find_with_hash (decl, DECL_UID (decl));
5013 }
5014
5015 /* Returns a hash value for X (which really is a var_loc_list).  */
5016
5017 inline hashval_t
5018 decl_loc_hasher::hash (var_loc_list *x)
5019 {
5020   return (hashval_t) x->decl_id;
5021 }
5022
5023 /* Return nonzero if decl_id of var_loc_list X is the same as
5024    UID of decl *Y.  */
5025
5026 inline bool
5027 decl_loc_hasher::equal (var_loc_list *x, const_tree y)
5028 {
5029   return (x->decl_id == DECL_UID (y));
5030 }
5031
5032 /* Return the var_loc list associated with a given declaration.  */
5033
5034 static inline var_loc_list *
5035 lookup_decl_loc (const_tree decl)
5036 {
5037   if (!decl_loc_table)
5038     return NULL;
5039   return decl_loc_table->find_with_hash (decl, DECL_UID (decl));
5040 }
5041
5042 /* Returns a hash value for X (which really is a cached_dw_loc_list_list).  */
5043
5044 inline hashval_t
5045 dw_loc_list_hasher::hash (cached_dw_loc_list *x)
5046 {
5047   return (hashval_t) x->decl_id;
5048 }
5049
5050 /* Return nonzero if decl_id of cached_dw_loc_list X is the same as
5051    UID of decl *Y.  */
5052
5053 inline bool
5054 dw_loc_list_hasher::equal (cached_dw_loc_list *x, const_tree y)
5055 {
5056   return (x->decl_id == DECL_UID (y));
5057 }
5058
5059 /* Equate a DIE to a particular declaration.  */
5060
5061 static void
5062 equate_decl_number_to_die (tree decl, dw_die_ref decl_die)
5063 {
5064   unsigned int decl_id = DECL_UID (decl);
5065
5066   *decl_die_table->find_slot_with_hash (decl, decl_id, INSERT) = decl_die;
5067   decl_die->decl_id = decl_id;
5068 }
5069
5070 /* Return how many bits covers PIECE EXPR_LIST.  */
5071
5072 static HOST_WIDE_INT
5073 decl_piece_bitsize (rtx piece)
5074 {
5075   int ret = (int) GET_MODE (piece);
5076   if (ret)
5077     return ret;
5078   gcc_assert (GET_CODE (XEXP (piece, 0)) == CONCAT
5079               && CONST_INT_P (XEXP (XEXP (piece, 0), 0)));
5080   return INTVAL (XEXP (XEXP (piece, 0), 0));
5081 }
5082
5083 /* Return pointer to the location of location note in PIECE EXPR_LIST.  */
5084
5085 static rtx *
5086 decl_piece_varloc_ptr (rtx piece)
5087 {
5088   if ((int) GET_MODE (piece))
5089     return &XEXP (piece, 0);
5090   else
5091     return &XEXP (XEXP (piece, 0), 1);
5092 }
5093
5094 /* Create an EXPR_LIST for location note LOC_NOTE covering BITSIZE bits.
5095    Next is the chain of following piece nodes.  */
5096
5097 static rtx_expr_list *
5098 decl_piece_node (rtx loc_note, HOST_WIDE_INT bitsize, rtx next)
5099 {
5100   if (bitsize > 0 && bitsize <= (int) MAX_MACHINE_MODE)
5101     return alloc_EXPR_LIST (bitsize, loc_note, next);
5102   else
5103     return alloc_EXPR_LIST (0, gen_rtx_CONCAT (VOIDmode,
5104                                                GEN_INT (bitsize),
5105                                                loc_note), next);
5106 }
5107
5108 /* Return rtx that should be stored into loc field for
5109    LOC_NOTE and BITPOS/BITSIZE.  */
5110
5111 static rtx
5112 construct_piece_list (rtx loc_note, HOST_WIDE_INT bitpos,
5113                       HOST_WIDE_INT bitsize)
5114 {
5115   if (bitsize != -1)
5116     {
5117       loc_note = decl_piece_node (loc_note, bitsize, NULL_RTX);
5118       if (bitpos != 0)
5119         loc_note = decl_piece_node (NULL_RTX, bitpos, loc_note);
5120     }
5121   return loc_note;
5122 }
5123
5124 /* This function either modifies location piece list *DEST in
5125    place (if SRC and INNER is NULL), or copies location piece list
5126    *SRC to *DEST while modifying it.  Location BITPOS is modified
5127    to contain LOC_NOTE, any pieces overlapping it are removed resp.
5128    not copied and if needed some padding around it is added.
5129    When modifying in place, DEST should point to EXPR_LIST where
5130    earlier pieces cover PIECE_BITPOS bits, when copying SRC points
5131    to the start of the whole list and INNER points to the EXPR_LIST
5132    where earlier pieces cover PIECE_BITPOS bits.  */
5133
5134 static void
5135 adjust_piece_list (rtx *dest, rtx *src, rtx *inner,
5136                    HOST_WIDE_INT bitpos, HOST_WIDE_INT piece_bitpos,
5137                    HOST_WIDE_INT bitsize, rtx loc_note)
5138 {
5139   HOST_WIDE_INT diff;
5140   bool copy = inner != NULL;
5141
5142   if (copy)
5143     {
5144       /* First copy all nodes preceding the current bitpos.  */
5145       while (src != inner)
5146         {
5147           *dest = decl_piece_node (*decl_piece_varloc_ptr (*src),
5148                                    decl_piece_bitsize (*src), NULL_RTX);
5149           dest = &XEXP (*dest, 1);
5150           src = &XEXP (*src, 1);
5151         }
5152     }
5153   /* Add padding if needed.  */
5154   if (bitpos != piece_bitpos)
5155     {
5156       *dest = decl_piece_node (NULL_RTX, bitpos - piece_bitpos,
5157                                copy ? NULL_RTX : *dest);
5158       dest = &XEXP (*dest, 1);
5159     }
5160   else if (*dest && decl_piece_bitsize (*dest) == bitsize)
5161     {
5162       gcc_assert (!copy);
5163       /* A piece with correct bitpos and bitsize already exist,
5164          just update the location for it and return.  */
5165       *decl_piece_varloc_ptr (*dest) = loc_note;
5166       return;
5167     }
5168   /* Add the piece that changed.  */
5169   *dest = decl_piece_node (loc_note, bitsize, copy ? NULL_RTX : *dest);
5170   dest = &XEXP (*dest, 1);
5171   /* Skip over pieces that overlap it.  */
5172   diff = bitpos - piece_bitpos + bitsize;
5173   if (!copy)
5174     src = dest;
5175   while (diff > 0 && *src)
5176     {
5177       rtx piece = *src;
5178       diff -= decl_piece_bitsize (piece);
5179       if (copy)
5180         src = &XEXP (piece, 1);
5181       else
5182         {
5183           *src = XEXP (piece, 1);
5184           free_EXPR_LIST_node (piece);
5185         }
5186     }
5187   /* Add padding if needed.  */
5188   if (diff < 0 && *src)
5189     {
5190       if (!copy)
5191         dest = src;
5192       *dest = decl_piece_node (NULL_RTX, -diff, copy ? NULL_RTX : *dest);
5193       dest = &XEXP (*dest, 1);
5194     }
5195   if (!copy)
5196     return;
5197   /* Finally copy all nodes following it.  */
5198   while (*src)
5199     {
5200       *dest = decl_piece_node (*decl_piece_varloc_ptr (*src),
5201                                decl_piece_bitsize (*src), NULL_RTX);
5202       dest = &XEXP (*dest, 1);
5203       src = &XEXP (*src, 1);
5204     }
5205 }
5206
5207 /* Add a variable location node to the linked list for DECL.  */
5208
5209 static struct var_loc_node *
5210 add_var_loc_to_decl (tree decl, rtx loc_note, const char *label)
5211 {
5212   unsigned int decl_id;
5213   var_loc_list *temp;
5214   struct var_loc_node *loc = NULL;
5215   HOST_WIDE_INT bitsize = -1, bitpos = -1;
5216
5217   if (TREE_CODE (decl) == VAR_DECL
5218       && DECL_HAS_DEBUG_EXPR_P (decl))
5219     {
5220       tree realdecl = DECL_DEBUG_EXPR (decl);
5221       if (handled_component_p (realdecl)
5222           || (TREE_CODE (realdecl) == MEM_REF
5223               && TREE_CODE (TREE_OPERAND (realdecl, 0)) == ADDR_EXPR))
5224         {
5225           HOST_WIDE_INT maxsize;
5226           tree innerdecl;
5227           innerdecl
5228             = get_ref_base_and_extent (realdecl, &bitpos, &bitsize, &maxsize);
5229           if (!DECL_P (innerdecl)
5230               || DECL_IGNORED_P (innerdecl)
5231               || TREE_STATIC (innerdecl)
5232               || bitsize <= 0
5233               || bitpos + bitsize > 256
5234               || bitsize != maxsize)
5235             return NULL;
5236           decl = innerdecl;
5237         }
5238     }
5239
5240   decl_id = DECL_UID (decl);
5241   var_loc_list **slot
5242     = decl_loc_table->find_slot_with_hash (decl, decl_id, INSERT);
5243   if (*slot == NULL)
5244     {
5245       temp = ggc_cleared_alloc<var_loc_list> ();
5246       temp->decl_id = decl_id;
5247       *slot = temp;
5248     }
5249   else
5250     temp = *slot;
5251
5252   /* For PARM_DECLs try to keep around the original incoming value,
5253      even if that means we'll emit a zero-range .debug_loc entry.  */
5254   if (temp->last
5255       && temp->first == temp->last
5256       && TREE_CODE (decl) == PARM_DECL
5257       && NOTE_P (temp->first->loc)
5258       && NOTE_VAR_LOCATION_DECL (temp->first->loc) == decl
5259       && DECL_INCOMING_RTL (decl)
5260       && NOTE_VAR_LOCATION_LOC (temp->first->loc)
5261       && GET_CODE (NOTE_VAR_LOCATION_LOC (temp->first->loc))
5262          == GET_CODE (DECL_INCOMING_RTL (decl))
5263       && prev_real_insn (temp->first->loc) == NULL_RTX
5264       && (bitsize != -1
5265           || !rtx_equal_p (NOTE_VAR_LOCATION_LOC (temp->first->loc),
5266                            NOTE_VAR_LOCATION_LOC (loc_note))
5267           || (NOTE_VAR_LOCATION_STATUS (temp->first->loc)
5268               != NOTE_VAR_LOCATION_STATUS (loc_note))))
5269     {
5270       loc = ggc_cleared_alloc<var_loc_node> ();
5271       temp->first->next = loc;
5272       temp->last = loc;
5273       loc->loc = construct_piece_list (loc_note, bitpos, bitsize);
5274     }
5275   else if (temp->last)
5276     {
5277       struct var_loc_node *last = temp->last, *unused = NULL;
5278       rtx *piece_loc = NULL, last_loc_note;
5279       HOST_WIDE_INT piece_bitpos = 0;
5280       if (last->next)
5281         {
5282           last = last->next;
5283           gcc_assert (last->next == NULL);
5284         }
5285       if (bitsize != -1 && GET_CODE (last->loc) == EXPR_LIST)
5286         {
5287           piece_loc = &last->loc;
5288           do
5289             {
5290               HOST_WIDE_INT cur_bitsize = decl_piece_bitsize (*piece_loc);
5291               if (piece_bitpos + cur_bitsize > bitpos)
5292                 break;
5293               piece_bitpos += cur_bitsize;
5294               piece_loc = &XEXP (*piece_loc, 1);
5295             }
5296           while (*piece_loc);
5297         }
5298       /* TEMP->LAST here is either pointer to the last but one or
5299          last element in the chained list, LAST is pointer to the
5300          last element.  */
5301       if (label && strcmp (last->label, label) == 0)
5302         {
5303           /* For SRA optimized variables if there weren't any real
5304              insns since last note, just modify the last node.  */
5305           if (piece_loc != NULL)
5306             {
5307               adjust_piece_list (piece_loc, NULL, NULL,
5308                                  bitpos, piece_bitpos, bitsize, loc_note);
5309               return NULL;
5310             }
5311           /* If the last note doesn't cover any instructions, remove it.  */
5312           if (temp->last != last)
5313             {
5314               temp->last->next = NULL;
5315               unused = last;
5316               last = temp->last;
5317               gcc_assert (strcmp (last->label, label) != 0);
5318             }
5319           else
5320             {
5321               gcc_assert (temp->first == temp->last
5322                           || (temp->first->next == temp->last
5323                               && TREE_CODE (decl) == PARM_DECL));
5324               memset (temp->last, '\0', sizeof (*temp->last));
5325               temp->last->loc = construct_piece_list (loc_note, bitpos, bitsize);
5326               return temp->last;
5327             }
5328         }
5329       if (bitsize == -1 && NOTE_P (last->loc))
5330         last_loc_note = last->loc;
5331       else if (piece_loc != NULL
5332                && *piece_loc != NULL_RTX
5333                && piece_bitpos == bitpos
5334                && decl_piece_bitsize (*piece_loc) == bitsize)
5335         last_loc_note = *decl_piece_varloc_ptr (*piece_loc);
5336       else
5337         last_loc_note = NULL_RTX;
5338       /* If the current location is the same as the end of the list,
5339          and either both or neither of the locations is uninitialized,
5340          we have nothing to do.  */
5341       if (last_loc_note == NULL_RTX
5342           || (!rtx_equal_p (NOTE_VAR_LOCATION_LOC (last_loc_note),
5343                             NOTE_VAR_LOCATION_LOC (loc_note)))
5344           || ((NOTE_VAR_LOCATION_STATUS (last_loc_note)
5345                != NOTE_VAR_LOCATION_STATUS (loc_note))
5346               && ((NOTE_VAR_LOCATION_STATUS (last_loc_note)
5347                    == VAR_INIT_STATUS_UNINITIALIZED)
5348                   || (NOTE_VAR_LOCATION_STATUS (loc_note)
5349                       == VAR_INIT_STATUS_UNINITIALIZED))))
5350         {
5351           /* Add LOC to the end of list and update LAST.  If the last
5352              element of the list has been removed above, reuse its
5353              memory for the new node, otherwise allocate a new one.  */
5354           if (unused)
5355             {
5356               loc = unused;
5357               memset (loc, '\0', sizeof (*loc));
5358             }
5359           else
5360             loc = ggc_cleared_alloc<var_loc_node> ();
5361           if (bitsize == -1 || piece_loc == NULL)
5362             loc->loc = construct_piece_list (loc_note, bitpos, bitsize);
5363           else
5364             adjust_piece_list (&loc->loc, &last->loc, piece_loc,
5365                                bitpos, piece_bitpos, bitsize, loc_note);
5366           last->next = loc;
5367           /* Ensure TEMP->LAST will point either to the new last but one
5368              element of the chain, or to the last element in it.  */
5369           if (last != temp->last)
5370             temp->last = last;
5371         }
5372       else if (unused)
5373         ggc_free (unused);
5374     }
5375   else
5376     {
5377       loc = ggc_cleared_alloc<var_loc_node> ();
5378       temp->first = loc;
5379       temp->last = loc;
5380       loc->loc = construct_piece_list (loc_note, bitpos, bitsize);
5381     }
5382   return loc;
5383 }
5384 \f
5385 /* Keep track of the number of spaces used to indent the
5386    output of the debugging routines that print the structure of
5387    the DIE internal representation.  */
5388 static int print_indent;
5389
5390 /* Indent the line the number of spaces given by print_indent.  */
5391
5392 static inline void
5393 print_spaces (FILE *outfile)
5394 {
5395   fprintf (outfile, "%*s", print_indent, "");
5396 }
5397
5398 /* Print a type signature in hex.  */
5399
5400 static inline void
5401 print_signature (FILE *outfile, char *sig)
5402 {
5403   int i;
5404
5405   for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++)
5406     fprintf (outfile, "%02x", sig[i] & 0xff);
5407 }
5408
5409 static void print_loc_descr (dw_loc_descr_ref, FILE *);
5410
5411 /* Print the value associated to the VAL DWARF value node to OUTFILE.  If
5412    RECURSE, output location descriptor operations.  */
5413
5414 static void
5415 print_dw_val (dw_val_node *val, bool recurse, FILE *outfile)
5416 {
5417   switch (val->val_class)
5418     {
5419     case dw_val_class_addr:
5420       fprintf (outfile, "address");
5421       break;
5422     case dw_val_class_offset:
5423       fprintf (outfile, "offset");
5424       break;
5425     case dw_val_class_loc:
5426       fprintf (outfile, "location descriptor");
5427       if (val->v.val_loc == NULL)
5428         fprintf (outfile, " -> <null>\n");
5429       else if (recurse)
5430         {
5431           fprintf (outfile, ":\n");
5432           print_indent += 4;
5433           print_loc_descr (val->v.val_loc, outfile);
5434           print_indent -= 4;
5435         }
5436       else
5437         fprintf (outfile, " (%p)\n", (void *) val->v.val_loc);
5438       break;
5439     case dw_val_class_loc_list:
5440       fprintf (outfile, "location list -> label:%s",
5441                val->v.val_loc_list->ll_symbol);
5442       break;
5443     case dw_val_class_range_list:
5444       fprintf (outfile, "range list");
5445       break;
5446     case dw_val_class_const:
5447       fprintf (outfile, HOST_WIDE_INT_PRINT_DEC, val->v.val_int);
5448       break;
5449     case dw_val_class_unsigned_const:
5450       fprintf (outfile, HOST_WIDE_INT_PRINT_UNSIGNED, val->v.val_unsigned);
5451       break;
5452     case dw_val_class_const_double:
5453       fprintf (outfile, "constant ("HOST_WIDE_INT_PRINT_DEC","\
5454                         HOST_WIDE_INT_PRINT_UNSIGNED")",
5455                val->v.val_double.high,
5456                val->v.val_double.low);
5457       break;
5458     case dw_val_class_wide_int:
5459       {
5460         int i = val->v.val_wide->get_len ();
5461         fprintf (outfile, "constant (");
5462         gcc_assert (i > 0);
5463         if (val->v.val_wide->elt (i - 1) == 0)
5464           fprintf (outfile, "0x");
5465         fprintf (outfile, HOST_WIDE_INT_PRINT_HEX,
5466                  val->v.val_wide->elt (--i));
5467         while (--i >= 0)
5468           fprintf (outfile, HOST_WIDE_INT_PRINT_PADDED_HEX,
5469                    val->v.val_wide->elt (i));
5470         fprintf (outfile, ")");
5471         break;
5472       }
5473     case dw_val_class_vec:
5474       fprintf (outfile, "floating-point or vector constant");
5475       break;
5476     case dw_val_class_flag:
5477       fprintf (outfile, "%u", val->v.val_flag);
5478       break;
5479     case dw_val_class_die_ref:
5480       if (val->v.val_die_ref.die != NULL)
5481         {
5482           dw_die_ref die = val->v.val_die_ref.die;
5483
5484           if (die->comdat_type_p)
5485             {
5486               fprintf (outfile, "die -> signature: ");
5487               print_signature (outfile,
5488                                die->die_id.die_type_node->signature);
5489             }
5490           else if (die->die_id.die_symbol)
5491             fprintf (outfile, "die -> label: %s", die->die_id.die_symbol);
5492           else
5493             fprintf (outfile, "die -> %ld", die->die_offset);
5494           fprintf (outfile, " (%p)", (void *) die);
5495         }
5496       else
5497         fprintf (outfile, "die -> <null>");
5498       break;
5499     case dw_val_class_vms_delta:
5500       fprintf (outfile, "delta: @slotcount(%s-%s)",
5501                val->v.val_vms_delta.lbl2, val->v.val_vms_delta.lbl1);
5502       break;
5503     case dw_val_class_lbl_id:
5504     case dw_val_class_lineptr:
5505     case dw_val_class_macptr:
5506     case dw_val_class_high_pc:
5507       fprintf (outfile, "label: %s", val->v.val_lbl_id);
5508       break;
5509     case dw_val_class_str:
5510       if (val->v.val_str->str != NULL)
5511         fprintf (outfile, "\"%s\"", val->v.val_str->str);
5512       else
5513         fprintf (outfile, "<null>");
5514       break;
5515     case dw_val_class_file:
5516       fprintf (outfile, "\"%s\" (%d)", val->v.val_file->filename,
5517                val->v.val_file->emitted_number);
5518       break;
5519     case dw_val_class_data8:
5520       {
5521         int i;
5522
5523         for (i = 0; i < 8; i++)
5524           fprintf (outfile, "%02x", val->v.val_data8[i]);
5525         break;
5526       }
5527     default:
5528       break;
5529     }
5530 }
5531
5532 /* Likewise, for a DIE attribute.  */
5533
5534 static void
5535 print_attribute (dw_attr_ref a, bool recurse, FILE *outfile)
5536 {
5537   print_dw_val (&a->dw_attr_val, recurse, outfile);
5538 }
5539
5540
5541 /* Print the list of operands in the LOC location description to OUTFILE.  This
5542    routine is a debugging aid only.  */
5543
5544 static void
5545 print_loc_descr (dw_loc_descr_ref loc, FILE *outfile)
5546 {
5547   dw_loc_descr_ref l = loc;
5548
5549   if (loc == NULL)
5550     {
5551       print_spaces (outfile);
5552       fprintf (outfile, "<null>\n");
5553       return;
5554     }
5555
5556   for (l = loc; l != NULL; l = l->dw_loc_next)
5557     {
5558       print_spaces (outfile);
5559       fprintf (outfile, "(%p) %s",
5560                (void *) l,
5561                dwarf_stack_op_name (l->dw_loc_opc));
5562       if (l->dw_loc_oprnd1.val_class != dw_val_class_none)
5563         {
5564           fprintf (outfile, " ");
5565           print_dw_val (&l->dw_loc_oprnd1, false, outfile);
5566         }
5567       if (l->dw_loc_oprnd2.val_class != dw_val_class_none)
5568         {
5569           fprintf (outfile, ", ");
5570           print_dw_val (&l->dw_loc_oprnd2, false, outfile);
5571         }
5572       fprintf (outfile, "\n");
5573     }
5574 }
5575
5576 /* Print the information associated with a given DIE, and its children.
5577    This routine is a debugging aid only.  */
5578
5579 static void
5580 print_die (dw_die_ref die, FILE *outfile)
5581 {
5582   dw_attr_ref a;
5583   dw_die_ref c;
5584   unsigned ix;
5585
5586   print_spaces (outfile);
5587   fprintf (outfile, "DIE %4ld: %s (%p)\n",
5588            die->die_offset, dwarf_tag_name (die->die_tag),
5589            (void*) die);
5590   print_spaces (outfile);
5591   fprintf (outfile, "  abbrev id: %lu", die->die_abbrev);
5592   fprintf (outfile, " offset: %ld", die->die_offset);
5593   fprintf (outfile, " mark: %d\n", die->die_mark);
5594
5595   if (die->comdat_type_p)
5596     {
5597       print_spaces (outfile);
5598       fprintf (outfile, "  signature: ");
5599       print_signature (outfile, die->die_id.die_type_node->signature);
5600       fprintf (outfile, "\n");
5601     }
5602
5603   FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
5604     {
5605       print_spaces (outfile);
5606       fprintf (outfile, "  %s: ", dwarf_attr_name (a->dw_attr));
5607
5608       print_attribute (a, true, outfile);
5609       fprintf (outfile, "\n");
5610     }
5611
5612   if (die->die_child != NULL)
5613     {
5614       print_indent += 4;
5615       FOR_EACH_CHILD (die, c, print_die (c, outfile));
5616       print_indent -= 4;
5617     }
5618   if (print_indent == 0)
5619     fprintf (outfile, "\n");
5620 }
5621
5622 /* Print the list of operations in the LOC location description.  */
5623
5624 DEBUG_FUNCTION void
5625 debug_dwarf_loc_descr (dw_loc_descr_ref loc)
5626 {
5627   print_loc_descr (loc, stderr);
5628 }
5629
5630 /* Print the information collected for a given DIE.  */
5631
5632 DEBUG_FUNCTION void
5633 debug_dwarf_die (dw_die_ref die)
5634 {
5635   print_die (die, stderr);
5636 }
5637
5638 DEBUG_FUNCTION void
5639 debug (die_struct &ref)
5640 {
5641   print_die (&ref, stderr);
5642 }
5643
5644 DEBUG_FUNCTION void
5645 debug (die_struct *ptr)
5646 {
5647   if (ptr)
5648     debug (*ptr);
5649   else
5650     fprintf (stderr, "<nil>\n");
5651 }
5652
5653
5654 /* Print all DWARF information collected for the compilation unit.
5655    This routine is a debugging aid only.  */
5656
5657 DEBUG_FUNCTION void
5658 debug_dwarf (void)
5659 {
5660   print_indent = 0;
5661   print_die (comp_unit_die (), stderr);
5662 }
5663 \f
5664 /* Start a new compilation unit DIE for an include file.  OLD_UNIT is the CU
5665    for the enclosing include file, if any.  BINCL_DIE is the DW_TAG_GNU_BINCL
5666    DIE that marks the start of the DIEs for this include file.  */
5667
5668 static dw_die_ref
5669 push_new_compile_unit (dw_die_ref old_unit, dw_die_ref bincl_die)
5670 {
5671   const char *filename = get_AT_string (bincl_die, DW_AT_name);
5672   dw_die_ref new_unit = gen_compile_unit_die (filename);
5673
5674   new_unit->die_sib = old_unit;
5675   return new_unit;
5676 }
5677
5678 /* Close an include-file CU and reopen the enclosing one.  */
5679
5680 static dw_die_ref
5681 pop_compile_unit (dw_die_ref old_unit)
5682 {
5683   dw_die_ref new_unit = old_unit->die_sib;
5684
5685   old_unit->die_sib = NULL;
5686   return new_unit;
5687 }
5688
5689 #define CHECKSUM(FOO) md5_process_bytes (&(FOO), sizeof (FOO), ctx)
5690 #define CHECKSUM_BLOCK(FOO, SIZE) md5_process_bytes ((FOO), (SIZE), ctx)
5691 #define CHECKSUM_STRING(FOO) md5_process_bytes ((FOO), strlen (FOO), ctx)
5692
5693 /* Calculate the checksum of a location expression.  */
5694
5695 static inline void
5696 loc_checksum (dw_loc_descr_ref loc, struct md5_ctx *ctx)
5697 {
5698   int tem;
5699   inchash::hash hstate;
5700   hashval_t hash;
5701
5702   tem = (loc->dtprel << 8) | ((unsigned int) loc->dw_loc_opc);
5703   CHECKSUM (tem);
5704   hash_loc_operands (loc, hstate);
5705   hash = hstate.end();
5706   CHECKSUM (hash);
5707 }
5708
5709 /* Calculate the checksum of an attribute.  */
5710
5711 static void
5712 attr_checksum (dw_attr_ref at, struct md5_ctx *ctx, int *mark)
5713 {
5714   dw_loc_descr_ref loc;
5715   rtx r;
5716
5717   CHECKSUM (at->dw_attr);
5718
5719   /* We don't care that this was compiled with a different compiler
5720      snapshot; if the output is the same, that's what matters.  */
5721   if (at->dw_attr == DW_AT_producer)
5722     return;
5723
5724   switch (AT_class (at))
5725     {
5726     case dw_val_class_const:
5727       CHECKSUM (at->dw_attr_val.v.val_int);
5728       break;
5729     case dw_val_class_unsigned_const:
5730       CHECKSUM (at->dw_attr_val.v.val_unsigned);
5731       break;
5732     case dw_val_class_const_double:
5733       CHECKSUM (at->dw_attr_val.v.val_double);
5734       break;
5735     case dw_val_class_wide_int:
5736       CHECKSUM_BLOCK (at->dw_attr_val.v.val_wide->get_val (),
5737                       get_full_len (*at->dw_attr_val.v.val_wide)
5738                       * HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR);
5739       break;
5740     case dw_val_class_vec:
5741       CHECKSUM_BLOCK (at->dw_attr_val.v.val_vec.array,
5742                       (at->dw_attr_val.v.val_vec.length
5743                        * at->dw_attr_val.v.val_vec.elt_size));
5744       break;
5745     case dw_val_class_flag:
5746       CHECKSUM (at->dw_attr_val.v.val_flag);
5747       break;
5748     case dw_val_class_str:
5749       CHECKSUM_STRING (AT_string (at));
5750       break;
5751
5752     case dw_val_class_addr:
5753       r = AT_addr (at);
5754       gcc_assert (GET_CODE (r) == SYMBOL_REF);
5755       CHECKSUM_STRING (XSTR (r, 0));
5756       break;
5757
5758     case dw_val_class_offset:
5759       CHECKSUM (at->dw_attr_val.v.val_offset);
5760       break;
5761
5762     case dw_val_class_loc:
5763       for (loc = AT_loc (at); loc; loc = loc->dw_loc_next)
5764         loc_checksum (loc, ctx);
5765       break;
5766
5767     case dw_val_class_die_ref:
5768       die_checksum (AT_ref (at), ctx, mark);
5769       break;
5770
5771     case dw_val_class_fde_ref:
5772     case dw_val_class_vms_delta:
5773     case dw_val_class_lbl_id:
5774     case dw_val_class_lineptr:
5775     case dw_val_class_macptr:
5776     case dw_val_class_high_pc:
5777       break;
5778
5779     case dw_val_class_file:
5780       CHECKSUM_STRING (AT_file (at)->filename);
5781       break;
5782
5783     case dw_val_class_data8:
5784       CHECKSUM (at->dw_attr_val.v.val_data8);
5785       break;
5786
5787     default:
5788       break;
5789     }
5790 }
5791
5792 /* Calculate the checksum of a DIE.  */
5793
5794 static void
5795 die_checksum (dw_die_ref die, struct md5_ctx *ctx, int *mark)
5796 {
5797   dw_die_ref c;
5798   dw_attr_ref a;
5799   unsigned ix;
5800
5801   /* To avoid infinite recursion.  */
5802   if (die->die_mark)
5803     {
5804       CHECKSUM (die->die_mark);
5805       return;
5806     }
5807   die->die_mark = ++(*mark);
5808
5809   CHECKSUM (die->die_tag);
5810
5811   FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
5812     attr_checksum (a, ctx, mark);
5813
5814   FOR_EACH_CHILD (die, c, die_checksum (c, ctx, mark));
5815 }
5816
5817 #undef CHECKSUM
5818 #undef CHECKSUM_BLOCK
5819 #undef CHECKSUM_STRING
5820
5821 /* For DWARF-4 types, include the trailing NULL when checksumming strings.  */
5822 #define CHECKSUM(FOO) md5_process_bytes (&(FOO), sizeof (FOO), ctx)
5823 #define CHECKSUM_BLOCK(FOO, SIZE) md5_process_bytes ((FOO), (SIZE), ctx)
5824 #define CHECKSUM_STRING(FOO) md5_process_bytes ((FOO), strlen (FOO) + 1, ctx)
5825 #define CHECKSUM_SLEB128(FOO) checksum_sleb128 ((FOO), ctx)
5826 #define CHECKSUM_ULEB128(FOO) checksum_uleb128 ((FOO), ctx)
5827 #define CHECKSUM_ATTR(FOO) \
5828   if (FOO) attr_checksum_ordered (die->die_tag, (FOO), ctx, mark)
5829
5830 /* Calculate the checksum of a number in signed LEB128 format.  */
5831
5832 static void
5833 checksum_sleb128 (HOST_WIDE_INT value, struct md5_ctx *ctx)
5834 {
5835   unsigned char byte;
5836   bool more;
5837
5838   while (1)
5839     {
5840       byte = (value & 0x7f);
5841       value >>= 7;
5842       more = !((value == 0 && (byte & 0x40) == 0)
5843                 || (value == -1 && (byte & 0x40) != 0));
5844       if (more)
5845         byte |= 0x80;
5846       CHECKSUM (byte);
5847       if (!more)
5848         break;
5849     }
5850 }
5851
5852 /* Calculate the checksum of a number in unsigned LEB128 format.  */
5853
5854 static void
5855 checksum_uleb128 (unsigned HOST_WIDE_INT value, struct md5_ctx *ctx)
5856 {
5857   while (1)
5858     {
5859       unsigned char byte = (value & 0x7f);
5860       value >>= 7;
5861       if (value != 0)
5862         /* More bytes to follow.  */
5863         byte |= 0x80;
5864       CHECKSUM (byte);
5865       if (value == 0)
5866         break;
5867     }
5868 }
5869
5870 /* Checksum the context of the DIE.  This adds the names of any
5871    surrounding namespaces or structures to the checksum.  */
5872
5873 static void
5874 checksum_die_context (dw_die_ref die, struct md5_ctx *ctx)
5875 {
5876   const char *name;
5877   dw_die_ref spec;
5878   int tag = die->die_tag;
5879
5880   if (tag != DW_TAG_namespace
5881       && tag != DW_TAG_structure_type
5882       && tag != DW_TAG_class_type)
5883     return;
5884
5885   name = get_AT_string (die, DW_AT_name);
5886
5887   spec = get_AT_ref (die, DW_AT_specification);
5888   if (spec != NULL)
5889     die = spec;
5890
5891   if (die->die_parent != NULL)
5892     checksum_die_context (die->die_parent, ctx);
5893
5894   CHECKSUM_ULEB128 ('C');
5895   CHECKSUM_ULEB128 (tag);
5896   if (name != NULL)
5897     CHECKSUM_STRING (name);
5898 }
5899
5900 /* Calculate the checksum of a location expression.  */
5901
5902 static inline void
5903 loc_checksum_ordered (dw_loc_descr_ref loc, struct md5_ctx *ctx)
5904 {
5905   /* Special case for lone DW_OP_plus_uconst: checksum as if the location
5906      were emitted as a DW_FORM_sdata instead of a location expression.  */
5907   if (loc->dw_loc_opc == DW_OP_plus_uconst && loc->dw_loc_next == NULL)
5908     {
5909       CHECKSUM_ULEB128 (DW_FORM_sdata);
5910       CHECKSUM_SLEB128 ((HOST_WIDE_INT) loc->dw_loc_oprnd1.v.val_unsigned);
5911       return;
5912     }
5913
5914   /* Otherwise, just checksum the raw location expression.  */
5915   while (loc != NULL)
5916     {
5917       inchash::hash hstate;
5918       hashval_t hash;
5919
5920       CHECKSUM_ULEB128 (loc->dtprel);
5921       CHECKSUM_ULEB128 (loc->dw_loc_opc);
5922       hash_loc_operands (loc, hstate);
5923       hash = hstate.end ();
5924       CHECKSUM (hash);
5925       loc = loc->dw_loc_next;
5926     }
5927 }
5928
5929 /* Calculate the checksum of an attribute.  */
5930
5931 static void
5932 attr_checksum_ordered (enum dwarf_tag tag, dw_attr_ref at,
5933                        struct md5_ctx *ctx, int *mark)
5934 {
5935   dw_loc_descr_ref loc;
5936   rtx r;
5937
5938   if (AT_class (at) == dw_val_class_die_ref)
5939     {
5940       dw_die_ref target_die = AT_ref (at);
5941
5942       /* For pointer and reference types, we checksum only the (qualified)
5943          name of the target type (if there is a name).  For friend entries,
5944          we checksum only the (qualified) name of the target type or function.
5945          This allows the checksum to remain the same whether the target type
5946          is complete or not.  */
5947       if ((at->dw_attr == DW_AT_type
5948            && (tag == DW_TAG_pointer_type
5949                || tag == DW_TAG_reference_type
5950                || tag == DW_TAG_rvalue_reference_type
5951                || tag == DW_TAG_ptr_to_member_type))
5952           || (at->dw_attr == DW_AT_friend
5953               && tag == DW_TAG_friend))
5954         {
5955           dw_attr_ref name_attr = get_AT (target_die, DW_AT_name);
5956
5957           if (name_attr != NULL)
5958             {
5959               dw_die_ref decl = get_AT_ref (target_die, DW_AT_specification);
5960
5961               if (decl == NULL)
5962                 decl = target_die;
5963               CHECKSUM_ULEB128 ('N');
5964               CHECKSUM_ULEB128 (at->dw_attr);
5965               if (decl->die_parent != NULL)
5966                 checksum_die_context (decl->die_parent, ctx);
5967               CHECKSUM_ULEB128 ('E');
5968               CHECKSUM_STRING (AT_string (name_attr));
5969               return;
5970             }
5971         }
5972
5973       /* For all other references to another DIE, we check to see if the
5974          target DIE has already been visited.  If it has, we emit a
5975          backward reference; if not, we descend recursively.  */
5976       if (target_die->die_mark > 0)
5977         {
5978           CHECKSUM_ULEB128 ('R');
5979           CHECKSUM_ULEB128 (at->dw_attr);
5980           CHECKSUM_ULEB128 (target_die->die_mark);
5981         }
5982       else
5983         {
5984           dw_die_ref decl = get_AT_ref (target_die, DW_AT_specification);
5985
5986           if (decl == NULL)
5987             decl = target_die;
5988           target_die->die_mark = ++(*mark);
5989           CHECKSUM_ULEB128 ('T');
5990           CHECKSUM_ULEB128 (at->dw_attr);
5991           if (decl->die_parent != NULL)
5992             checksum_die_context (decl->die_parent, ctx);
5993           die_checksum_ordered (target_die, ctx, mark);
5994         }
5995       return;
5996     }
5997
5998   CHECKSUM_ULEB128 ('A');
5999   CHECKSUM_ULEB128 (at->dw_attr);
6000
6001   switch (AT_class (at))
6002     {
6003     case dw_val_class_const:
6004       CHECKSUM_ULEB128 (DW_FORM_sdata);
6005       CHECKSUM_SLEB128 (at->dw_attr_val.v.val_int);
6006       break;
6007
6008     case dw_val_class_unsigned_const:
6009       CHECKSUM_ULEB128 (DW_FORM_sdata);
6010       CHECKSUM_SLEB128 ((int) at->dw_attr_val.v.val_unsigned);
6011       break;
6012
6013     case dw_val_class_const_double:
6014       CHECKSUM_ULEB128 (DW_FORM_block);
6015       CHECKSUM_ULEB128 (sizeof (at->dw_attr_val.v.val_double));
6016       CHECKSUM (at->dw_attr_val.v.val_double);
6017       break;
6018
6019     case dw_val_class_wide_int:
6020       CHECKSUM_ULEB128 (DW_FORM_block);
6021       CHECKSUM_ULEB128 (get_full_len (*at->dw_attr_val.v.val_wide)
6022                         * HOST_BITS_PER_WIDE_INT / BITS_PER_UNIT);
6023       CHECKSUM_BLOCK (at->dw_attr_val.v.val_wide->get_val (),
6024                       get_full_len (*at->dw_attr_val.v.val_wide)
6025                       * HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR);
6026       break;
6027
6028     case dw_val_class_vec:
6029       CHECKSUM_ULEB128 (DW_FORM_block);
6030       CHECKSUM_ULEB128 (at->dw_attr_val.v.val_vec.length
6031                         * at->dw_attr_val.v.val_vec.elt_size);
6032       CHECKSUM_BLOCK (at->dw_attr_val.v.val_vec.array,
6033                       (at->dw_attr_val.v.val_vec.length
6034                        * at->dw_attr_val.v.val_vec.elt_size));
6035       break;
6036
6037     case dw_val_class_flag:
6038       CHECKSUM_ULEB128 (DW_FORM_flag);
6039       CHECKSUM_ULEB128 (at->dw_attr_val.v.val_flag ? 1 : 0);
6040       break;
6041
6042     case dw_val_class_str:
6043       CHECKSUM_ULEB128 (DW_FORM_string);
6044       CHECKSUM_STRING (AT_string (at));
6045       break;
6046
6047     case dw_val_class_addr:
6048       r = AT_addr (at);
6049       gcc_assert (GET_CODE (r) == SYMBOL_REF);
6050       CHECKSUM_ULEB128 (DW_FORM_string);
6051       CHECKSUM_STRING (XSTR (r, 0));
6052       break;
6053
6054     case dw_val_class_offset:
6055       CHECKSUM_ULEB128 (DW_FORM_sdata);
6056       CHECKSUM_ULEB128 (at->dw_attr_val.v.val_offset);
6057       break;
6058
6059     case dw_val_class_loc:
6060       for (loc = AT_loc (at); loc; loc = loc->dw_loc_next)
6061         loc_checksum_ordered (loc, ctx);
6062       break;
6063
6064     case dw_val_class_fde_ref:
6065     case dw_val_class_lbl_id:
6066     case dw_val_class_lineptr:
6067     case dw_val_class_macptr:
6068     case dw_val_class_high_pc:
6069       break;
6070
6071     case dw_val_class_file:
6072       CHECKSUM_ULEB128 (DW_FORM_string);
6073       CHECKSUM_STRING (AT_file (at)->filename);
6074       break;
6075
6076     case dw_val_class_data8:
6077       CHECKSUM (at->dw_attr_val.v.val_data8);
6078       break;
6079
6080     default:
6081       break;
6082     }
6083 }
6084
6085 struct checksum_attributes
6086 {
6087   dw_attr_ref at_name;
6088   dw_attr_ref at_type;
6089   dw_attr_ref at_friend;
6090   dw_attr_ref at_accessibility;
6091   dw_attr_ref at_address_class;
6092   dw_attr_ref at_allocated;
6093   dw_attr_ref at_artificial;
6094   dw_attr_ref at_associated;
6095   dw_attr_ref at_binary_scale;
6096   dw_attr_ref at_bit_offset;
6097   dw_attr_ref at_bit_size;
6098   dw_attr_ref at_bit_stride;
6099   dw_attr_ref at_byte_size;
6100   dw_attr_ref at_byte_stride;
6101   dw_attr_ref at_const_value;
6102   dw_attr_ref at_containing_type;
6103   dw_attr_ref at_count;
6104   dw_attr_ref at_data_location;
6105   dw_attr_ref at_data_member_location;
6106   dw_attr_ref at_decimal_scale;
6107   dw_attr_ref at_decimal_sign;
6108   dw_attr_ref at_default_value;
6109   dw_attr_ref at_digit_count;
6110   dw_attr_ref at_discr;
6111   dw_attr_ref at_discr_list;
6112   dw_attr_ref at_discr_value;
6113   dw_attr_ref at_encoding;
6114   dw_attr_ref at_endianity;
6115   dw_attr_ref at_explicit;
6116   dw_attr_ref at_is_optional;
6117   dw_attr_ref at_location;
6118   dw_attr_ref at_lower_bound;
6119   dw_attr_ref at_mutable;
6120   dw_attr_ref at_ordering;
6121   dw_attr_ref at_picture_string;
6122   dw_attr_ref at_prototyped;
6123   dw_attr_ref at_small;
6124   dw_attr_ref at_segment;
6125   dw_attr_ref at_string_length;
6126   dw_attr_ref at_threads_scaled;
6127   dw_attr_ref at_upper_bound;
6128   dw_attr_ref at_use_location;
6129   dw_attr_ref at_use_UTF8;
6130   dw_attr_ref at_variable_parameter;
6131   dw_attr_ref at_virtuality;
6132   dw_attr_ref at_visibility;
6133   dw_attr_ref at_vtable_elem_location;
6134 };
6135
6136 /* Collect the attributes that we will want to use for the checksum.  */
6137
6138 static void
6139 collect_checksum_attributes (struct checksum_attributes *attrs, dw_die_ref die)
6140 {
6141   dw_attr_ref a;
6142   unsigned ix;
6143
6144   FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
6145     {
6146       switch (a->dw_attr)
6147         {
6148         case DW_AT_name:
6149           attrs->at_name = a;
6150           break;
6151         case DW_AT_type:
6152           attrs->at_type = a;
6153           break;
6154         case DW_AT_friend:
6155           attrs->at_friend = a;
6156           break;
6157         case DW_AT_accessibility:
6158           attrs->at_accessibility = a;
6159           break;
6160         case DW_AT_address_class:
6161           attrs->at_address_class = a;
6162           break;
6163         case DW_AT_allocated:
6164           attrs->at_allocated = a;
6165           break;
6166         case DW_AT_artificial:
6167           attrs->at_artificial = a;
6168           break;
6169         case DW_AT_associated:
6170           attrs->at_associated = a;
6171           break;
6172         case DW_AT_binary_scale:
6173           attrs->at_binary_scale = a;
6174           break;
6175         case DW_AT_bit_offset:
6176           attrs->at_bit_offset = a;
6177           break;
6178         case DW_AT_bit_size:
6179           attrs->at_bit_size = a;
6180           break;
6181         case DW_AT_bit_stride:
6182           attrs->at_bit_stride = a;
6183           break;
6184         case DW_AT_byte_size:
6185           attrs->at_byte_size = a;
6186           break;
6187         case DW_AT_byte_stride:
6188           attrs->at_byte_stride = a;
6189           break;
6190         case DW_AT_const_value:
6191           attrs->at_const_value = a;
6192           break;
6193         case DW_AT_containing_type:
6194           attrs->at_containing_type = a;
6195           break;
6196         case DW_AT_count:
6197           attrs->at_count = a;
6198           break;
6199         case DW_AT_data_location:
6200           attrs->at_data_location = a;
6201           break;
6202         case DW_AT_data_member_location:
6203           attrs->at_data_member_location = a;
6204           break;
6205         case DW_AT_decimal_scale:
6206           attrs->at_decimal_scale = a;
6207           break;
6208         case DW_AT_decimal_sign:
6209           attrs->at_decimal_sign = a;
6210           break;
6211         case DW_AT_default_value:
6212           attrs->at_default_value = a;
6213           break;
6214         case DW_AT_digit_count:
6215           attrs->at_digit_count = a;
6216           break;
6217         case DW_AT_discr:
6218           attrs->at_discr = a;
6219           break;
6220         case DW_AT_discr_list:
6221           attrs->at_discr_list = a;
6222           break;
6223         case DW_AT_discr_value:
6224           attrs->at_discr_value = a;
6225           break;
6226         case DW_AT_encoding:
6227           attrs->at_encoding = a;
6228           break;
6229         case DW_AT_endianity:
6230           attrs->at_endianity = a;
6231           break;
6232         case DW_AT_explicit:
6233           attrs->at_explicit = a;
6234           break;
6235         case DW_AT_is_optional:
6236           attrs->at_is_optional = a;
6237           break;
6238         case DW_AT_location:
6239           attrs->at_location = a;
6240           break;
6241         case DW_AT_lower_bound:
6242           attrs->at_lower_bound = a;
6243           break;
6244         case DW_AT_mutable:
6245           attrs->at_mutable = a;
6246           break;
6247         case DW_AT_ordering:
6248           attrs->at_ordering = a;
6249           break;
6250         case DW_AT_picture_string:
6251           attrs->at_picture_string = a;
6252           break;
6253         case DW_AT_prototyped:
6254           attrs->at_prototyped = a;
6255           break;
6256         case DW_AT_small:
6257           attrs->at_small = a;
6258           break;
6259         case DW_AT_segment:
6260           attrs->at_segment = a;
6261           break;
6262         case DW_AT_string_length:
6263           attrs->at_string_length = a;
6264           break;
6265         case DW_AT_threads_scaled:
6266           attrs->at_threads_scaled = a;
6267           break;
6268         case DW_AT_upper_bound:
6269           attrs->at_upper_bound = a;
6270           break;
6271         case DW_AT_use_location:
6272           attrs->at_use_location = a;
6273           break;
6274         case DW_AT_use_UTF8:
6275           attrs->at_use_UTF8 = a;
6276           break;
6277         case DW_AT_variable_parameter:
6278           attrs->at_variable_parameter = a;
6279           break;
6280         case DW_AT_virtuality:
6281           attrs->at_virtuality = a;
6282           break;
6283         case DW_AT_visibility:
6284           attrs->at_visibility = a;
6285           break;
6286         case DW_AT_vtable_elem_location:
6287           attrs->at_vtable_elem_location = a;
6288           break;
6289         default:
6290           break;
6291         }
6292     }
6293 }
6294
6295 /* Calculate the checksum of a DIE, using an ordered subset of attributes.  */
6296
6297 static void
6298 die_checksum_ordered (dw_die_ref die, struct md5_ctx *ctx, int *mark)
6299 {
6300   dw_die_ref c;
6301   dw_die_ref decl;
6302   struct checksum_attributes attrs;
6303
6304   CHECKSUM_ULEB128 ('D');
6305   CHECKSUM_ULEB128 (die->die_tag);
6306
6307   memset (&attrs, 0, sizeof (attrs));
6308
6309   decl = get_AT_ref (die, DW_AT_specification);
6310   if (decl != NULL)
6311     collect_checksum_attributes (&attrs, decl);
6312   collect_checksum_attributes (&attrs, die);
6313
6314   CHECKSUM_ATTR (attrs.at_name);
6315   CHECKSUM_ATTR (attrs.at_accessibility);
6316   CHECKSUM_ATTR (attrs.at_address_class);
6317   CHECKSUM_ATTR (attrs.at_allocated);
6318   CHECKSUM_ATTR (attrs.at_artificial);
6319   CHECKSUM_ATTR (attrs.at_associated);
6320   CHECKSUM_ATTR (attrs.at_binary_scale);
6321   CHECKSUM_ATTR (attrs.at_bit_offset);
6322   CHECKSUM_ATTR (attrs.at_bit_size);
6323   CHECKSUM_ATTR (attrs.at_bit_stride);
6324   CHECKSUM_ATTR (attrs.at_byte_size);
6325   CHECKSUM_ATTR (attrs.at_byte_stride);
6326   CHECKSUM_ATTR (attrs.at_const_value);
6327   CHECKSUM_ATTR (attrs.at_containing_type);
6328   CHECKSUM_ATTR (attrs.at_count);
6329   CHECKSUM_ATTR (attrs.at_data_location);
6330   CHECKSUM_ATTR (attrs.at_data_member_location);
6331   CHECKSUM_ATTR (attrs.at_decimal_scale);
6332   CHECKSUM_ATTR (attrs.at_decimal_sign);
6333   CHECKSUM_ATTR (attrs.at_default_value);
6334   CHECKSUM_ATTR (attrs.at_digit_count);
6335   CHECKSUM_ATTR (attrs.at_discr);
6336   CHECKSUM_ATTR (attrs.at_discr_list);
6337   CHECKSUM_ATTR (attrs.at_discr_value);
6338   CHECKSUM_ATTR (attrs.at_encoding);
6339   CHECKSUM_ATTR (attrs.at_endianity);
6340   CHECKSUM_ATTR (attrs.at_explicit);
6341   CHECKSUM_ATTR (attrs.at_is_optional);
6342   CHECKSUM_ATTR (attrs.at_location);
6343   CHECKSUM_ATTR (attrs.at_lower_bound);
6344   CHECKSUM_ATTR (attrs.at_mutable);
6345   CHECKSUM_ATTR (attrs.at_ordering);
6346   CHECKSUM_ATTR (attrs.at_picture_string);
6347   CHECKSUM_ATTR (attrs.at_prototyped);
6348   CHECKSUM_ATTR (attrs.at_small);
6349   CHECKSUM_ATTR (attrs.at_segment);
6350   CHECKSUM_ATTR (attrs.at_string_length);
6351   CHECKSUM_ATTR (attrs.at_threads_scaled);
6352   CHECKSUM_ATTR (attrs.at_upper_bound);
6353   CHECKSUM_ATTR (attrs.at_use_location);
6354   CHECKSUM_ATTR (attrs.at_use_UTF8);
6355   CHECKSUM_ATTR (attrs.at_variable_parameter);
6356   CHECKSUM_ATTR (attrs.at_virtuality);
6357   CHECKSUM_ATTR (attrs.at_visibility);
6358   CHECKSUM_ATTR (attrs.at_vtable_elem_location);
6359   CHECKSUM_ATTR (attrs.at_type);
6360   CHECKSUM_ATTR (attrs.at_friend);
6361
6362   /* Checksum the child DIEs.  */
6363   c = die->die_child;
6364   if (c) do {
6365     dw_attr_ref name_attr;
6366
6367     c = c->die_sib;
6368     name_attr = get_AT (c, DW_AT_name);
6369     if (is_template_instantiation (c))
6370       {
6371         /* Ignore instantiations of member type and function templates.  */
6372       }
6373     else if (name_attr != NULL
6374              && (is_type_die (c) || c->die_tag == DW_TAG_subprogram))
6375       {
6376         /* Use a shallow checksum for named nested types and member
6377            functions.  */
6378         CHECKSUM_ULEB128 ('S');
6379         CHECKSUM_ULEB128 (c->die_tag);
6380         CHECKSUM_STRING (AT_string (name_attr));
6381       }
6382     else
6383       {
6384         /* Use a deep checksum for other children.  */
6385         /* Mark this DIE so it gets processed when unmarking.  */
6386         if (c->die_mark == 0)
6387           c->die_mark = -1;
6388         die_checksum_ordered (c, ctx, mark);
6389       }
6390   } while (c != die->die_child);
6391
6392   CHECKSUM_ULEB128 (0);
6393 }
6394
6395 /* Add a type name and tag to a hash.  */
6396 static void
6397 die_odr_checksum (int tag, const char *name, md5_ctx *ctx)
6398 {
6399   CHECKSUM_ULEB128 (tag);
6400   CHECKSUM_STRING (name);
6401 }
6402
6403 #undef CHECKSUM
6404 #undef CHECKSUM_STRING
6405 #undef CHECKSUM_ATTR
6406 #undef CHECKSUM_LEB128
6407 #undef CHECKSUM_ULEB128
6408
6409 /* Generate the type signature for DIE.  This is computed by generating an
6410    MD5 checksum over the DIE's tag, its relevant attributes, and its
6411    children.  Attributes that are references to other DIEs are processed
6412    by recursion, using the MARK field to prevent infinite recursion.
6413    If the DIE is nested inside a namespace or another type, we also
6414    need to include that context in the signature.  The lower 64 bits
6415    of the resulting MD5 checksum comprise the signature.  */
6416
6417 static void
6418 generate_type_signature (dw_die_ref die, comdat_type_node *type_node)
6419 {
6420   int mark;
6421   const char *name;
6422   unsigned char checksum[16];
6423   struct md5_ctx ctx;
6424   dw_die_ref decl;
6425   dw_die_ref parent;
6426
6427   name = get_AT_string (die, DW_AT_name);
6428   decl = get_AT_ref (die, DW_AT_specification);
6429   parent = get_die_parent (die);
6430
6431   /* First, compute a signature for just the type name (and its surrounding
6432      context, if any.  This is stored in the type unit DIE for link-time
6433      ODR (one-definition rule) checking.  */
6434
6435   if (is_cxx () && name != NULL)
6436     {
6437       md5_init_ctx (&ctx);
6438
6439       /* Checksum the names of surrounding namespaces and structures.  */
6440       if (parent != NULL)
6441         checksum_die_context (parent, &ctx);
6442
6443       /* Checksum the current DIE. */
6444       die_odr_checksum (die->die_tag, name, &ctx);
6445       md5_finish_ctx (&ctx, checksum);
6446
6447       add_AT_data8 (type_node->root_die, DW_AT_GNU_odr_signature, &checksum[8]);
6448     }
6449
6450   /* Next, compute the complete type signature.  */
6451
6452   md5_init_ctx (&ctx);
6453   mark = 1;
6454   die->die_mark = mark;
6455
6456   /* Checksum the names of surrounding namespaces and structures.  */
6457   if (parent != NULL)
6458     checksum_die_context (parent, &ctx);
6459
6460   /* Checksum the DIE and its children.  */
6461   die_checksum_ordered (die, &ctx, &mark);
6462   unmark_all_dies (die);
6463   md5_finish_ctx (&ctx, checksum);
6464
6465   /* Store the signature in the type node and link the type DIE and the
6466      type node together.  */
6467   memcpy (type_node->signature, &checksum[16 - DWARF_TYPE_SIGNATURE_SIZE],
6468           DWARF_TYPE_SIGNATURE_SIZE);
6469   die->comdat_type_p = true;
6470   die->die_id.die_type_node = type_node;
6471   type_node->type_die = die;
6472
6473   /* If the DIE is a specification, link its declaration to the type node
6474      as well.  */
6475   if (decl != NULL)
6476     {
6477       decl->comdat_type_p = true;
6478       decl->die_id.die_type_node = type_node;
6479     }
6480 }
6481
6482 /* Do the location expressions look same?  */
6483 static inline int
6484 same_loc_p (dw_loc_descr_ref loc1, dw_loc_descr_ref loc2, int *mark)
6485 {
6486   return loc1->dw_loc_opc == loc2->dw_loc_opc
6487          && same_dw_val_p (&loc1->dw_loc_oprnd1, &loc2->dw_loc_oprnd1, mark)
6488          && same_dw_val_p (&loc1->dw_loc_oprnd2, &loc2->dw_loc_oprnd2, mark);
6489 }
6490
6491 /* Do the values look the same?  */
6492 static int
6493 same_dw_val_p (const dw_val_node *v1, const dw_val_node *v2, int *mark)
6494 {
6495   dw_loc_descr_ref loc1, loc2;
6496   rtx r1, r2;
6497
6498   if (v1->val_class != v2->val_class)
6499     return 0;
6500
6501   switch (v1->val_class)
6502     {
6503     case dw_val_class_const:
6504       return v1->v.val_int == v2->v.val_int;
6505     case dw_val_class_unsigned_const:
6506       return v1->v.val_unsigned == v2->v.val_unsigned;
6507     case dw_val_class_const_double:
6508       return v1->v.val_double.high == v2->v.val_double.high
6509              && v1->v.val_double.low == v2->v.val_double.low;
6510     case dw_val_class_wide_int:
6511       return *v1->v.val_wide == *v2->v.val_wide;
6512     case dw_val_class_vec:
6513       if (v1->v.val_vec.length != v2->v.val_vec.length
6514           || v1->v.val_vec.elt_size != v2->v.val_vec.elt_size)
6515         return 0;
6516       if (memcmp (v1->v.val_vec.array, v2->v.val_vec.array,
6517                   v1->v.val_vec.length * v1->v.val_vec.elt_size))
6518         return 0;
6519       return 1;
6520     case dw_val_class_flag:
6521       return v1->v.val_flag == v2->v.val_flag;
6522     case dw_val_class_str:
6523       return !strcmp (v1->v.val_str->str, v2->v.val_str->str);
6524
6525     case dw_val_class_addr:
6526       r1 = v1->v.val_addr;
6527       r2 = v2->v.val_addr;
6528       if (GET_CODE (r1) != GET_CODE (r2))
6529         return 0;
6530       return !rtx_equal_p (r1, r2);
6531
6532     case dw_val_class_offset:
6533       return v1->v.val_offset == v2->v.val_offset;
6534
6535     case dw_val_class_loc:
6536       for (loc1 = v1->v.val_loc, loc2 = v2->v.val_loc;
6537            loc1 && loc2;
6538            loc1 = loc1->dw_loc_next, loc2 = loc2->dw_loc_next)
6539         if (!same_loc_p (loc1, loc2, mark))
6540           return 0;
6541       return !loc1 && !loc2;
6542
6543     case dw_val_class_die_ref:
6544       return same_die_p (v1->v.val_die_ref.die, v2->v.val_die_ref.die, mark);
6545
6546     case dw_val_class_fde_ref:
6547     case dw_val_class_vms_delta:
6548     case dw_val_class_lbl_id:
6549     case dw_val_class_lineptr:
6550     case dw_val_class_macptr:
6551     case dw_val_class_high_pc:
6552       return 1;
6553
6554     case dw_val_class_file:
6555       return v1->v.val_file == v2->v.val_file;
6556
6557     case dw_val_class_data8:
6558       return !memcmp (v1->v.val_data8, v2->v.val_data8, 8);
6559
6560     default:
6561       return 1;
6562     }
6563 }
6564
6565 /* Do the attributes look the same?  */
6566
6567 static int
6568 same_attr_p (dw_attr_ref at1, dw_attr_ref at2, int *mark)
6569 {
6570   if (at1->dw_attr != at2->dw_attr)
6571     return 0;
6572
6573   /* We don't care that this was compiled with a different compiler
6574      snapshot; if the output is the same, that's what matters. */
6575   if (at1->dw_attr == DW_AT_producer)
6576     return 1;
6577
6578   return same_dw_val_p (&at1->dw_attr_val, &at2->dw_attr_val, mark);
6579 }
6580
6581 /* Do the dies look the same?  */
6582
6583 static int
6584 same_die_p (dw_die_ref die1, dw_die_ref die2, int *mark)
6585 {
6586   dw_die_ref c1, c2;
6587   dw_attr_ref a1;
6588   unsigned ix;
6589
6590   /* To avoid infinite recursion.  */
6591   if (die1->die_mark)
6592     return die1->die_mark == die2->die_mark;
6593   die1->die_mark = die2->die_mark = ++(*mark);
6594
6595   if (die1->die_tag != die2->die_tag)
6596     return 0;
6597
6598   if (vec_safe_length (die1->die_attr) != vec_safe_length (die2->die_attr))
6599     return 0;
6600
6601   FOR_EACH_VEC_SAFE_ELT (die1->die_attr, ix, a1)
6602     if (!same_attr_p (a1, &(*die2->die_attr)[ix], mark))
6603       return 0;
6604
6605   c1 = die1->die_child;
6606   c2 = die2->die_child;
6607   if (! c1)
6608     {
6609       if (c2)
6610         return 0;
6611     }
6612   else
6613     for (;;)
6614       {
6615         if (!same_die_p (c1, c2, mark))
6616           return 0;
6617         c1 = c1->die_sib;
6618         c2 = c2->die_sib;
6619         if (c1 == die1->die_child)
6620           {
6621             if (c2 == die2->die_child)
6622               break;
6623             else
6624               return 0;
6625           }
6626     }
6627
6628   return 1;
6629 }
6630
6631 /* Do the dies look the same?  Wrapper around same_die_p.  */
6632
6633 static int
6634 same_die_p_wrap (dw_die_ref die1, dw_die_ref die2)
6635 {
6636   int mark = 0;
6637   int ret = same_die_p (die1, die2, &mark);
6638
6639   unmark_all_dies (die1);
6640   unmark_all_dies (die2);
6641
6642   return ret;
6643 }
6644
6645 /* The prefix to attach to symbols on DIEs in the current comdat debug
6646    info section.  */
6647 static const char *comdat_symbol_id;
6648
6649 /* The index of the current symbol within the current comdat CU.  */
6650 static unsigned int comdat_symbol_number;
6651
6652 /* Calculate the MD5 checksum of the compilation unit DIE UNIT_DIE and its
6653    children, and set comdat_symbol_id accordingly.  */
6654
6655 static void
6656 compute_section_prefix (dw_die_ref unit_die)
6657 {
6658   const char *die_name = get_AT_string (unit_die, DW_AT_name);
6659   const char *base = die_name ? lbasename (die_name) : "anonymous";
6660   char *name = XALLOCAVEC (char, strlen (base) + 64);
6661   char *p;
6662   int i, mark;
6663   unsigned char checksum[16];
6664   struct md5_ctx ctx;
6665
6666   /* Compute the checksum of the DIE, then append part of it as hex digits to
6667      the name filename of the unit.  */
6668
6669   md5_init_ctx (&ctx);
6670   mark = 0;
6671   die_checksum (unit_die, &ctx, &mark);
6672   unmark_all_dies (unit_die);
6673   md5_finish_ctx (&ctx, checksum);
6674
6675   sprintf (name, "%s.", base);
6676   clean_symbol_name (name);
6677
6678   p = name + strlen (name);
6679   for (i = 0; i < 4; i++)
6680     {
6681       sprintf (p, "%.2x", checksum[i]);
6682       p += 2;
6683     }
6684
6685   comdat_symbol_id = unit_die->die_id.die_symbol = xstrdup (name);
6686   comdat_symbol_number = 0;
6687 }
6688
6689 /* Returns nonzero if DIE represents a type, in the sense of TYPE_P.  */
6690
6691 static int
6692 is_type_die (dw_die_ref die)
6693 {
6694   switch (die->die_tag)
6695     {
6696     case DW_TAG_array_type:
6697     case DW_TAG_class_type:
6698     case DW_TAG_interface_type:
6699     case DW_TAG_enumeration_type:
6700     case DW_TAG_pointer_type:
6701     case DW_TAG_reference_type:
6702     case DW_TAG_rvalue_reference_type:
6703     case DW_TAG_string_type:
6704     case DW_TAG_structure_type:
6705     case DW_TAG_subroutine_type:
6706     case DW_TAG_union_type:
6707     case DW_TAG_ptr_to_member_type:
6708     case DW_TAG_set_type:
6709     case DW_TAG_subrange_type:
6710     case DW_TAG_base_type:
6711     case DW_TAG_const_type:
6712     case DW_TAG_file_type:
6713     case DW_TAG_packed_type:
6714     case DW_TAG_volatile_type:
6715     case DW_TAG_typedef:
6716       return 1;
6717     default:
6718       return 0;
6719     }
6720 }
6721
6722 /* Returns 1 iff C is the sort of DIE that should go into a COMDAT CU.
6723    Basically, we want to choose the bits that are likely to be shared between
6724    compilations (types) and leave out the bits that are specific to individual
6725    compilations (functions).  */
6726
6727 static int
6728 is_comdat_die (dw_die_ref c)
6729 {
6730   /* I think we want to leave base types and __vtbl_ptr_type in the main CU, as
6731      we do for stabs.  The advantage is a greater likelihood of sharing between
6732      objects that don't include headers in the same order (and therefore would
6733      put the base types in a different comdat).  jason 8/28/00 */
6734
6735   if (c->die_tag == DW_TAG_base_type)
6736     return 0;
6737
6738   if (c->die_tag == DW_TAG_pointer_type
6739       || c->die_tag == DW_TAG_reference_type
6740       || c->die_tag == DW_TAG_rvalue_reference_type
6741       || c->die_tag == DW_TAG_const_type
6742       || c->die_tag == DW_TAG_volatile_type)
6743     {
6744       dw_die_ref t = get_AT_ref (c, DW_AT_type);
6745
6746       return t ? is_comdat_die (t) : 0;
6747     }
6748
6749   return is_type_die (c);
6750 }
6751
6752 /* Returns 1 iff C is the sort of DIE that might be referred to from another
6753    compilation unit.  */
6754
6755 static int
6756 is_symbol_die (dw_die_ref c)
6757 {
6758   return (is_type_die (c)
6759           || is_declaration_die (c)
6760           || c->die_tag == DW_TAG_namespace
6761           || c->die_tag == DW_TAG_module);
6762 }
6763
6764 /* Returns true iff C is a compile-unit DIE.  */
6765
6766 static inline bool
6767 is_cu_die (dw_die_ref c)
6768 {
6769   return c && c->die_tag == DW_TAG_compile_unit;
6770 }
6771
6772 /* Returns true iff C is a unit DIE of some sort.  */
6773
6774 static inline bool
6775 is_unit_die (dw_die_ref c)
6776 {
6777   return c && (c->die_tag == DW_TAG_compile_unit
6778                || c->die_tag == DW_TAG_partial_unit
6779                || c->die_tag == DW_TAG_type_unit);
6780 }
6781
6782 /* Returns true iff C is a namespace DIE.  */
6783
6784 static inline bool
6785 is_namespace_die (dw_die_ref c)
6786 {
6787   return c && c->die_tag == DW_TAG_namespace;
6788 }
6789
6790 /* Returns true iff C is a class or structure DIE.  */
6791
6792 static inline bool
6793 is_class_die (dw_die_ref c)
6794 {
6795   return c && (c->die_tag == DW_TAG_class_type
6796                || c->die_tag == DW_TAG_structure_type);
6797 }
6798
6799 /* Return non-zero if this DIE is a template parameter.  */
6800
6801 static inline bool
6802 is_template_parameter (dw_die_ref die)
6803 {
6804   switch (die->die_tag)
6805     {
6806     case DW_TAG_template_type_param:
6807     case DW_TAG_template_value_param:
6808     case DW_TAG_GNU_template_template_param:
6809     case DW_TAG_GNU_template_parameter_pack:
6810       return true;
6811     default:
6812       return false;
6813     }
6814 }
6815
6816 /* Return non-zero if this DIE represents a template instantiation.  */
6817
6818 static inline bool
6819 is_template_instantiation (dw_die_ref die)
6820 {
6821   dw_die_ref c;
6822
6823   if (!is_type_die (die) && die->die_tag != DW_TAG_subprogram)
6824     return false;
6825   FOR_EACH_CHILD (die, c, if (is_template_parameter (c)) return true);
6826   return false;
6827 }
6828
6829 static char *
6830 gen_internal_sym (const char *prefix)
6831 {
6832   char buf[256];
6833
6834   ASM_GENERATE_INTERNAL_LABEL (buf, prefix, label_num++);
6835   return xstrdup (buf);
6836 }
6837
6838 /* Assign symbols to all worthy DIEs under DIE.  */
6839
6840 static void
6841 assign_symbol_names (dw_die_ref die)
6842 {
6843   dw_die_ref c;
6844
6845   if (is_symbol_die (die) && !die->comdat_type_p)
6846     {
6847       if (comdat_symbol_id)
6848         {
6849           char *p = XALLOCAVEC (char, strlen (comdat_symbol_id) + 64);
6850
6851           sprintf (p, "%s.%s.%x", DIE_LABEL_PREFIX,
6852                    comdat_symbol_id, comdat_symbol_number++);
6853           die->die_id.die_symbol = xstrdup (p);
6854         }
6855       else
6856         die->die_id.die_symbol = gen_internal_sym ("LDIE");
6857     }
6858
6859   FOR_EACH_CHILD (die, c, assign_symbol_names (c));
6860 }
6861
6862 struct cu_hash_table_entry
6863 {
6864   dw_die_ref cu;
6865   unsigned min_comdat_num, max_comdat_num;
6866   struct cu_hash_table_entry *next;
6867 };
6868
6869 /* Helpers to manipulate hash table of CUs.  */
6870
6871 struct cu_hash_table_entry_hasher
6872 {
6873   typedef cu_hash_table_entry value_type;
6874   typedef die_struct compare_type;
6875   static inline hashval_t hash (const value_type *);
6876   static inline bool equal (const value_type *, const compare_type *);
6877   static inline void remove (value_type *);
6878 };
6879
6880 inline hashval_t
6881 cu_hash_table_entry_hasher::hash (const value_type *entry)
6882 {
6883   return htab_hash_string (entry->cu->die_id.die_symbol);
6884 }
6885
6886 inline bool
6887 cu_hash_table_entry_hasher::equal (const value_type *entry1,
6888                                    const compare_type *entry2)
6889 {
6890   return !strcmp (entry1->cu->die_id.die_symbol, entry2->die_id.die_symbol);
6891 }
6892
6893 inline void
6894 cu_hash_table_entry_hasher::remove (value_type *entry)
6895 {
6896   struct cu_hash_table_entry *next;
6897
6898   while (entry)
6899     {
6900       next = entry->next;
6901       free (entry);
6902       entry = next;
6903     }
6904 }
6905
6906 typedef hash_table<cu_hash_table_entry_hasher> cu_hash_type;
6907
6908 /* Check whether we have already seen this CU and set up SYM_NUM
6909    accordingly.  */
6910 static int
6911 check_duplicate_cu (dw_die_ref cu, cu_hash_type *htable, unsigned int *sym_num)
6912 {
6913   struct cu_hash_table_entry dummy;
6914   struct cu_hash_table_entry **slot, *entry, *last = &dummy;
6915
6916   dummy.max_comdat_num = 0;
6917
6918   slot = htable->find_slot_with_hash (cu,
6919                                       htab_hash_string (cu->die_id.die_symbol),
6920                                       INSERT);
6921   entry = *slot;
6922
6923   for (; entry; last = entry, entry = entry->next)
6924     {
6925       if (same_die_p_wrap (cu, entry->cu))
6926         break;
6927     }
6928
6929   if (entry)
6930     {
6931       *sym_num = entry->min_comdat_num;
6932       return 1;
6933     }
6934
6935   entry = XCNEW (struct cu_hash_table_entry);
6936   entry->cu = cu;
6937   entry->min_comdat_num = *sym_num = last->max_comdat_num;
6938   entry->next = *slot;
6939   *slot = entry;
6940
6941   return 0;
6942 }
6943
6944 /* Record SYM_NUM to record of CU in HTABLE.  */
6945 static void
6946 record_comdat_symbol_number (dw_die_ref cu, cu_hash_type *htable,
6947                              unsigned int sym_num)
6948 {
6949   struct cu_hash_table_entry **slot, *entry;
6950
6951   slot = htable->find_slot_with_hash (cu,
6952                                       htab_hash_string (cu->die_id.die_symbol),
6953                                       NO_INSERT);
6954   entry = *slot;
6955
6956   entry->max_comdat_num = sym_num;
6957 }
6958
6959 /* Traverse the DIE (which is always comp_unit_die), and set up
6960    additional compilation units for each of the include files we see
6961    bracketed by BINCL/EINCL.  */
6962
6963 static void
6964 break_out_includes (dw_die_ref die)
6965 {
6966   dw_die_ref c;
6967   dw_die_ref unit = NULL;
6968   limbo_die_node *node, **pnode;
6969
6970   c = die->die_child;
6971   if (c) do {
6972     dw_die_ref prev = c;
6973     c = c->die_sib;
6974     while (c->die_tag == DW_TAG_GNU_BINCL || c->die_tag == DW_TAG_GNU_EINCL
6975            || (unit && is_comdat_die (c)))
6976       {
6977         dw_die_ref next = c->die_sib;
6978
6979         /* This DIE is for a secondary CU; remove it from the main one.  */
6980         remove_child_with_prev (c, prev);
6981
6982         if (c->die_tag == DW_TAG_GNU_BINCL)
6983           unit = push_new_compile_unit (unit, c);
6984         else if (c->die_tag == DW_TAG_GNU_EINCL)
6985           unit = pop_compile_unit (unit);
6986         else
6987           add_child_die (unit, c);
6988         c = next;
6989         if (c == die->die_child)
6990           break;
6991       }
6992   } while (c != die->die_child);
6993
6994 #if 0
6995   /* We can only use this in debugging, since the frontend doesn't check
6996      to make sure that we leave every include file we enter.  */
6997   gcc_assert (!unit);
6998 #endif
6999
7000   assign_symbol_names (die);
7001   cu_hash_type cu_hash_table (10);
7002   for (node = limbo_die_list, pnode = &limbo_die_list;
7003        node;
7004        node = node->next)
7005     {
7006       int is_dupl;
7007
7008       compute_section_prefix (node->die);
7009       is_dupl = check_duplicate_cu (node->die, &cu_hash_table,
7010                         &comdat_symbol_number);
7011       assign_symbol_names (node->die);
7012       if (is_dupl)
7013         *pnode = node->next;
7014       else
7015         {
7016           pnode = &node->next;
7017           record_comdat_symbol_number (node->die, &cu_hash_table,
7018                 comdat_symbol_number);
7019         }
7020     }
7021 }
7022
7023 /* Return non-zero if this DIE is a declaration.  */
7024
7025 static int
7026 is_declaration_die (dw_die_ref die)
7027 {
7028   dw_attr_ref a;
7029   unsigned ix;
7030
7031   FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
7032     if (a->dw_attr == DW_AT_declaration)
7033       return 1;
7034
7035   return 0;
7036 }
7037
7038 /* Return non-zero if this DIE is nested inside a subprogram.  */
7039
7040 static int
7041 is_nested_in_subprogram (dw_die_ref die)
7042 {
7043   dw_die_ref decl = get_AT_ref (die, DW_AT_specification);
7044
7045   if (decl == NULL)
7046     decl = die;
7047   return local_scope_p (decl);
7048 }
7049
7050 /* Return non-zero if this DIE contains a defining declaration of a
7051    subprogram.  */
7052
7053 static int
7054 contains_subprogram_definition (dw_die_ref die)
7055 {
7056   dw_die_ref c;
7057
7058   if (die->die_tag == DW_TAG_subprogram && ! is_declaration_die (die))
7059     return 1;
7060   FOR_EACH_CHILD (die, c, if (contains_subprogram_definition (c)) return 1);
7061   return 0;
7062 }
7063
7064 /* Return non-zero if this is a type DIE that should be moved to a
7065    COMDAT .debug_types section.  */
7066
7067 static int
7068 should_move_die_to_comdat (dw_die_ref die)
7069 {
7070   switch (die->die_tag)
7071     {
7072     case DW_TAG_class_type:
7073     case DW_TAG_structure_type:
7074     case DW_TAG_enumeration_type:
7075     case DW_TAG_union_type:
7076       /* Don't move declarations, inlined instances, types nested in a
7077          subprogram, or types that contain subprogram definitions.  */
7078       if (is_declaration_die (die)
7079           || get_AT (die, DW_AT_abstract_origin)
7080           || is_nested_in_subprogram (die)
7081           || contains_subprogram_definition (die))
7082         return 0;
7083       return 1;
7084     case DW_TAG_array_type:
7085     case DW_TAG_interface_type:
7086     case DW_TAG_pointer_type:
7087     case DW_TAG_reference_type:
7088     case DW_TAG_rvalue_reference_type:
7089     case DW_TAG_string_type:
7090     case DW_TAG_subroutine_type:
7091     case DW_TAG_ptr_to_member_type:
7092     case DW_TAG_set_type:
7093     case DW_TAG_subrange_type:
7094     case DW_TAG_base_type:
7095     case DW_TAG_const_type:
7096     case DW_TAG_file_type:
7097     case DW_TAG_packed_type:
7098     case DW_TAG_volatile_type:
7099     case DW_TAG_typedef:
7100     default:
7101       return 0;
7102     }
7103 }
7104
7105 /* Make a clone of DIE.  */
7106
7107 static dw_die_ref
7108 clone_die (dw_die_ref die)
7109 {
7110   dw_die_ref clone;
7111   dw_attr_ref a;
7112   unsigned ix;
7113
7114   clone = ggc_cleared_alloc<die_node> ();
7115   clone->die_tag = die->die_tag;
7116
7117   FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
7118     add_dwarf_attr (clone, a);
7119
7120   return clone;
7121 }
7122
7123 /* Make a clone of the tree rooted at DIE.  */
7124
7125 static dw_die_ref
7126 clone_tree (dw_die_ref die)
7127 {
7128   dw_die_ref c;
7129   dw_die_ref clone = clone_die (die);
7130
7131   FOR_EACH_CHILD (die, c, add_child_die (clone, clone_tree (c)));
7132
7133   return clone;
7134 }
7135
7136 /* Make a clone of DIE as a declaration.  */
7137
7138 static dw_die_ref
7139 clone_as_declaration (dw_die_ref die)
7140 {
7141   dw_die_ref clone;
7142   dw_die_ref decl;
7143   dw_attr_ref a;
7144   unsigned ix;
7145
7146   /* If the DIE is already a declaration, just clone it.  */
7147   if (is_declaration_die (die))
7148     return clone_die (die);
7149
7150   /* If the DIE is a specification, just clone its declaration DIE.  */
7151   decl = get_AT_ref (die, DW_AT_specification);
7152   if (decl != NULL)
7153     {
7154       clone = clone_die (decl);
7155       if (die->comdat_type_p)
7156         add_AT_die_ref (clone, DW_AT_signature, die);
7157       return clone;
7158     }
7159
7160   clone = ggc_cleared_alloc<die_node> ();
7161   clone->die_tag = die->die_tag;
7162
7163   FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
7164     {
7165       /* We don't want to copy over all attributes.
7166          For example we don't want DW_AT_byte_size because otherwise we will no
7167          longer have a declaration and GDB will treat it as a definition.  */
7168
7169       switch (a->dw_attr)
7170         {
7171         case DW_AT_abstract_origin:
7172         case DW_AT_artificial:
7173         case DW_AT_containing_type:
7174         case DW_AT_external:
7175         case DW_AT_name:
7176         case DW_AT_type:
7177         case DW_AT_virtuality:
7178         case DW_AT_linkage_name:
7179         case DW_AT_MIPS_linkage_name:
7180           add_dwarf_attr (clone, a);
7181           break;
7182         case DW_AT_byte_size:
7183         default:
7184           break;
7185         }
7186     }
7187
7188   if (die->comdat_type_p)
7189     add_AT_die_ref (clone, DW_AT_signature, die);
7190
7191   add_AT_flag (clone, DW_AT_declaration, 1);
7192   return clone;
7193 }
7194
7195
7196 /* Structure to map a DIE in one CU to its copy in a comdat type unit.  */
7197
7198 struct decl_table_entry
7199 {
7200   dw_die_ref orig;
7201   dw_die_ref copy;
7202 };
7203
7204 /* Helpers to manipulate hash table of copied declarations.  */
7205
7206 /* Hashtable helpers.  */
7207
7208 struct decl_table_entry_hasher : typed_free_remove <decl_table_entry>
7209 {
7210   typedef decl_table_entry value_type;
7211   typedef die_struct compare_type;
7212   static inline hashval_t hash (const value_type *);
7213   static inline bool equal (const value_type *, const compare_type *);
7214 };
7215
7216 inline hashval_t
7217 decl_table_entry_hasher::hash (const value_type *entry)
7218 {
7219   return htab_hash_pointer (entry->orig);
7220 }
7221
7222 inline bool
7223 decl_table_entry_hasher::equal (const value_type *entry1,
7224                                 const compare_type *entry2)
7225 {
7226   return entry1->orig == entry2;
7227 }
7228
7229 typedef hash_table<decl_table_entry_hasher> decl_hash_type;
7230
7231 /* Copy DIE and its ancestors, up to, but not including, the compile unit
7232    or type unit entry, to a new tree.  Adds the new tree to UNIT and returns
7233    a pointer to the copy of DIE.  If DECL_TABLE is provided, it is used
7234    to check if the ancestor has already been copied into UNIT.  */
7235
7236 static dw_die_ref
7237 copy_ancestor_tree (dw_die_ref unit, dw_die_ref die,
7238                     decl_hash_type *decl_table)
7239 {
7240   dw_die_ref parent = die->die_parent;
7241   dw_die_ref new_parent = unit;
7242   dw_die_ref copy;
7243   decl_table_entry **slot = NULL;
7244   struct decl_table_entry *entry = NULL;
7245
7246   if (decl_table)
7247     {
7248       /* Check if the entry has already been copied to UNIT.  */
7249       slot = decl_table->find_slot_with_hash (die, htab_hash_pointer (die),
7250                                               INSERT);
7251       if (*slot != HTAB_EMPTY_ENTRY)
7252         {
7253           entry = *slot;
7254           return entry->copy;
7255         }
7256
7257       /* Record in DECL_TABLE that DIE has been copied to UNIT.  */
7258       entry = XCNEW (struct decl_table_entry);
7259       entry->orig = die;
7260       entry->copy = NULL;
7261       *slot = entry;
7262     }
7263
7264   if (parent != NULL)
7265     {
7266       dw_die_ref spec = get_AT_ref (parent, DW_AT_specification);
7267       if (spec != NULL)
7268         parent = spec;
7269       if (!is_unit_die (parent))
7270         new_parent = copy_ancestor_tree (unit, parent, decl_table);
7271     }
7272
7273   copy = clone_as_declaration (die);
7274   add_child_die (new_parent, copy);
7275
7276   if (decl_table)
7277     {
7278       /* Record the pointer to the copy.  */
7279       entry->copy = copy;
7280     }
7281
7282   return copy;
7283 }
7284 /* Copy the declaration context to the new type unit DIE.  This includes
7285    any surrounding namespace or type declarations.  If the DIE has an
7286    AT_specification attribute, it also includes attributes and children
7287    attached to the specification, and returns a pointer to the original
7288    parent of the declaration DIE.  Returns NULL otherwise.  */
7289
7290 static dw_die_ref
7291 copy_declaration_context (dw_die_ref unit, dw_die_ref die)
7292 {
7293   dw_die_ref decl;
7294   dw_die_ref new_decl;
7295   dw_die_ref orig_parent = NULL;
7296
7297   decl = get_AT_ref (die, DW_AT_specification);
7298   if (decl == NULL)
7299     decl = die;
7300   else
7301     {
7302       unsigned ix;
7303       dw_die_ref c;
7304       dw_attr_ref a;
7305
7306       /* The original DIE will be changed to a declaration, and must
7307          be moved to be a child of the original declaration DIE.  */
7308       orig_parent = decl->die_parent;
7309
7310       /* Copy the type node pointer from the new DIE to the original
7311          declaration DIE so we can forward references later.  */
7312       decl->comdat_type_p = true;
7313       decl->die_id.die_type_node = die->die_id.die_type_node;
7314
7315       remove_AT (die, DW_AT_specification);
7316
7317       FOR_EACH_VEC_SAFE_ELT (decl->die_attr, ix, a)
7318         {
7319           if (a->dw_attr != DW_AT_name
7320               && a->dw_attr != DW_AT_declaration
7321               && a->dw_attr != DW_AT_external)
7322             add_dwarf_attr (die, a);
7323         }
7324
7325       FOR_EACH_CHILD (decl, c, add_child_die (die, clone_tree (c)));
7326     }
7327
7328   if (decl->die_parent != NULL
7329       && !is_unit_die (decl->die_parent))
7330     {
7331       new_decl = copy_ancestor_tree (unit, decl, NULL);
7332       if (new_decl != NULL)
7333         {
7334           remove_AT (new_decl, DW_AT_signature);
7335           add_AT_specification (die, new_decl);
7336         }
7337     }
7338
7339   return orig_parent;
7340 }
7341
7342 /* Generate the skeleton ancestor tree for the given NODE, then clone
7343    the DIE and add the clone into the tree.  */
7344
7345 static void
7346 generate_skeleton_ancestor_tree (skeleton_chain_node *node)
7347 {
7348   if (node->new_die != NULL)
7349     return;
7350
7351   node->new_die = clone_as_declaration (node->old_die);
7352
7353   if (node->parent != NULL)
7354     {
7355       generate_skeleton_ancestor_tree (node->parent);
7356       add_child_die (node->parent->new_die, node->new_die);
7357     }
7358 }
7359
7360 /* Generate a skeleton tree of DIEs containing any declarations that are
7361    found in the original tree.  We traverse the tree looking for declaration
7362    DIEs, and construct the skeleton from the bottom up whenever we find one.  */
7363
7364 static void
7365 generate_skeleton_bottom_up (skeleton_chain_node *parent)
7366 {
7367   skeleton_chain_node node;
7368   dw_die_ref c;
7369   dw_die_ref first;
7370   dw_die_ref prev = NULL;
7371   dw_die_ref next = NULL;
7372
7373   node.parent = parent;
7374
7375   first = c = parent->old_die->die_child;
7376   if (c)
7377     next = c->die_sib;
7378   if (c) do {
7379     if (prev == NULL || prev->die_sib == c)
7380       prev = c;
7381     c = next;
7382     next = (c == first ? NULL : c->die_sib);
7383     node.old_die = c;
7384     node.new_die = NULL;
7385     if (is_declaration_die (c))
7386       {
7387         if (is_template_instantiation (c))
7388           {
7389             /* Instantiated templates do not need to be cloned into the
7390                type unit.  Just move the DIE and its children back to
7391                the skeleton tree (in the main CU).  */
7392             remove_child_with_prev (c, prev);
7393             add_child_die (parent->new_die, c);
7394             c = prev;
7395           }
7396         else
7397           {
7398             /* Clone the existing DIE, move the original to the skeleton
7399                tree (which is in the main CU), and put the clone, with
7400                all the original's children, where the original came from
7401                (which is about to be moved to the type unit).  */
7402             dw_die_ref clone = clone_die (c);
7403             move_all_children (c, clone);
7404
7405             /* If the original has a DW_AT_object_pointer attribute,
7406                it would now point to a child DIE just moved to the
7407                cloned tree, so we need to remove that attribute from
7408                the original.  */
7409             remove_AT (c, DW_AT_object_pointer);
7410
7411             replace_child (c, clone, prev);
7412             generate_skeleton_ancestor_tree (parent);
7413             add_child_die (parent->new_die, c);
7414             node.new_die = c;
7415             c = clone;
7416           }
7417       }
7418     generate_skeleton_bottom_up (&node);
7419   } while (next != NULL);
7420 }
7421
7422 /* Wrapper function for generate_skeleton_bottom_up.  */
7423
7424 static dw_die_ref
7425 generate_skeleton (dw_die_ref die)
7426 {
7427   skeleton_chain_node node;
7428
7429   node.old_die = die;
7430   node.new_die = NULL;
7431   node.parent = NULL;
7432
7433   /* If this type definition is nested inside another type,
7434      and is not an instantiation of a template, always leave
7435      at least a declaration in its place.  */
7436   if (die->die_parent != NULL
7437       && is_type_die (die->die_parent)
7438       && !is_template_instantiation (die))
7439     node.new_die = clone_as_declaration (die);
7440
7441   generate_skeleton_bottom_up (&node);
7442   return node.new_die;
7443 }
7444
7445 /* Remove the CHILD DIE from its parent, possibly replacing it with a cloned
7446    declaration.  The original DIE is moved to a new compile unit so that
7447    existing references to it follow it to the new location.  If any of the
7448    original DIE's descendants is a declaration, we need to replace the
7449    original DIE with a skeleton tree and move the declarations back into the
7450    skeleton tree.  */
7451
7452 static dw_die_ref
7453 remove_child_or_replace_with_skeleton (dw_die_ref unit, dw_die_ref child,
7454                                        dw_die_ref prev)
7455 {
7456   dw_die_ref skeleton, orig_parent;
7457
7458   /* Copy the declaration context to the type unit DIE.  If the returned
7459      ORIG_PARENT is not NULL, the skeleton needs to be added as a child of
7460      that DIE.  */
7461   orig_parent = copy_declaration_context (unit, child);
7462
7463   skeleton = generate_skeleton (child);
7464   if (skeleton == NULL)
7465     remove_child_with_prev (child, prev);
7466   else
7467     {
7468       skeleton->comdat_type_p = true;
7469       skeleton->die_id.die_type_node = child->die_id.die_type_node;
7470
7471       /* If the original DIE was a specification, we need to put
7472          the skeleton under the parent DIE of the declaration.
7473          This leaves the original declaration in the tree, but
7474          it will be pruned later since there are no longer any
7475          references to it.  */
7476       if (orig_parent != NULL)
7477         {
7478           remove_child_with_prev (child, prev);
7479           add_child_die (orig_parent, skeleton);
7480         }
7481       else
7482         replace_child (child, skeleton, prev);
7483     }
7484
7485   return skeleton;
7486 }
7487
7488 /* Traverse the DIE and set up additional .debug_types sections for each
7489    type worthy of being placed in a COMDAT section.  */
7490
7491 static void
7492 break_out_comdat_types (dw_die_ref die)
7493 {
7494   dw_die_ref c;
7495   dw_die_ref first;
7496   dw_die_ref prev = NULL;
7497   dw_die_ref next = NULL;
7498   dw_die_ref unit = NULL;
7499
7500   first = c = die->die_child;
7501   if (c)
7502     next = c->die_sib;
7503   if (c) do {
7504     if (prev == NULL || prev->die_sib == c)
7505       prev = c;
7506     c = next;
7507     next = (c == first ? NULL : c->die_sib);
7508     if (should_move_die_to_comdat (c))
7509       {
7510         dw_die_ref replacement;
7511         comdat_type_node_ref type_node;
7512
7513         /* Break out nested types into their own type units.  */
7514         break_out_comdat_types (c);
7515
7516         /* Create a new type unit DIE as the root for the new tree, and
7517            add it to the list of comdat types.  */
7518         unit = new_die (DW_TAG_type_unit, NULL, NULL);
7519         add_AT_unsigned (unit, DW_AT_language,
7520                          get_AT_unsigned (comp_unit_die (), DW_AT_language));
7521         type_node = ggc_cleared_alloc<comdat_type_node> ();
7522         type_node->root_die = unit;
7523         type_node->next = comdat_type_list;
7524         comdat_type_list = type_node;
7525
7526         /* Generate the type signature.  */
7527         generate_type_signature (c, type_node);
7528
7529         /* Copy the declaration context, attributes, and children of the
7530            declaration into the new type unit DIE, then remove this DIE
7531            from the main CU (or replace it with a skeleton if necessary).  */
7532         replacement = remove_child_or_replace_with_skeleton (unit, c, prev);
7533         type_node->skeleton_die = replacement;
7534
7535         /* Add the DIE to the new compunit.  */
7536         add_child_die (unit, c);
7537
7538         if (replacement != NULL)
7539           c = replacement;
7540       }
7541     else if (c->die_tag == DW_TAG_namespace
7542              || c->die_tag == DW_TAG_class_type
7543              || c->die_tag == DW_TAG_structure_type
7544              || c->die_tag == DW_TAG_union_type)
7545       {
7546         /* Look for nested types that can be broken out.  */
7547         break_out_comdat_types (c);
7548       }
7549   } while (next != NULL);
7550 }
7551
7552 /* Like clone_tree, but copy DW_TAG_subprogram DIEs as declarations.
7553    Enter all the cloned children into the hash table decl_table.  */
7554
7555 static dw_die_ref
7556 clone_tree_partial (dw_die_ref die, decl_hash_type *decl_table)
7557 {
7558   dw_die_ref c;
7559   dw_die_ref clone;
7560   struct decl_table_entry *entry;
7561   decl_table_entry **slot;
7562
7563   if (die->die_tag == DW_TAG_subprogram)
7564     clone = clone_as_declaration (die);
7565   else
7566     clone = clone_die (die);
7567
7568   slot = decl_table->find_slot_with_hash (die,
7569                                           htab_hash_pointer (die), INSERT);
7570
7571   /* Assert that DIE isn't in the hash table yet.  If it would be there
7572      before, the ancestors would be necessarily there as well, therefore
7573      clone_tree_partial wouldn't be called.  */
7574   gcc_assert (*slot == HTAB_EMPTY_ENTRY);
7575
7576   entry = XCNEW (struct decl_table_entry);
7577   entry->orig = die;
7578   entry->copy = clone;
7579   *slot = entry;
7580
7581   if (die->die_tag != DW_TAG_subprogram)
7582     FOR_EACH_CHILD (die, c,
7583                     add_child_die (clone, clone_tree_partial (c, decl_table)));
7584
7585   return clone;
7586 }
7587
7588 /* Walk the DIE and its children, looking for references to incomplete
7589    or trivial types that are unmarked (i.e., that are not in the current
7590    type_unit).  */
7591
7592 static void
7593 copy_decls_walk (dw_die_ref unit, dw_die_ref die, decl_hash_type *decl_table)
7594 {
7595   dw_die_ref c;
7596   dw_attr_ref a;
7597   unsigned ix;
7598
7599   FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
7600     {
7601       if (AT_class (a) == dw_val_class_die_ref)
7602         {
7603           dw_die_ref targ = AT_ref (a);
7604           decl_table_entry **slot;
7605           struct decl_table_entry *entry;
7606
7607           if (targ->die_mark != 0 || targ->comdat_type_p)
7608             continue;
7609
7610           slot = decl_table->find_slot_with_hash (targ,
7611                                                   htab_hash_pointer (targ),
7612                                                   INSERT);
7613
7614           if (*slot != HTAB_EMPTY_ENTRY)
7615             {
7616               /* TARG has already been copied, so we just need to
7617                  modify the reference to point to the copy.  */
7618               entry = *slot;
7619               a->dw_attr_val.v.val_die_ref.die = entry->copy;
7620             }
7621           else
7622             {
7623               dw_die_ref parent = unit;
7624               dw_die_ref copy = clone_die (targ);
7625
7626               /* Record in DECL_TABLE that TARG has been copied.
7627                  Need to do this now, before the recursive call,
7628                  because DECL_TABLE may be expanded and SLOT
7629                  would no longer be a valid pointer.  */
7630               entry = XCNEW (struct decl_table_entry);
7631               entry->orig = targ;
7632               entry->copy = copy;
7633               *slot = entry;
7634
7635               /* If TARG is not a declaration DIE, we need to copy its
7636                  children.  */
7637               if (!is_declaration_die (targ))
7638                 {
7639                   FOR_EACH_CHILD (
7640                       targ, c,
7641                       add_child_die (copy,
7642                                      clone_tree_partial (c, decl_table)));
7643                 }
7644
7645               /* Make sure the cloned tree is marked as part of the
7646                  type unit.  */
7647               mark_dies (copy);
7648
7649               /* If TARG has surrounding context, copy its ancestor tree
7650                  into the new type unit.  */
7651               if (targ->die_parent != NULL
7652                   && !is_unit_die (targ->die_parent))
7653                 parent = copy_ancestor_tree (unit, targ->die_parent,
7654                                              decl_table);
7655
7656               add_child_die (parent, copy);
7657               a->dw_attr_val.v.val_die_ref.die = copy;
7658
7659               /* Make sure the newly-copied DIE is walked.  If it was
7660                  installed in a previously-added context, it won't
7661                  get visited otherwise.  */
7662               if (parent != unit)
7663                 {
7664                   /* Find the highest point of the newly-added tree,
7665                      mark each node along the way, and walk from there.  */
7666                   parent->die_mark = 1;
7667                   while (parent->die_parent
7668                          && parent->die_parent->die_mark == 0)
7669                     {
7670                       parent = parent->die_parent;
7671                       parent->die_mark = 1;
7672                     }
7673                   copy_decls_walk (unit, parent, decl_table);
7674                 }
7675             }
7676         }
7677     }
7678
7679   FOR_EACH_CHILD (die, c, copy_decls_walk (unit, c, decl_table));
7680 }
7681
7682 /* Copy declarations for "unworthy" types into the new comdat section.
7683    Incomplete types, modified types, and certain other types aren't broken
7684    out into comdat sections of their own, so they don't have a signature,
7685    and we need to copy the declaration into the same section so that we
7686    don't have an external reference.  */
7687
7688 static void
7689 copy_decls_for_unworthy_types (dw_die_ref unit)
7690 {
7691   mark_dies (unit);
7692   decl_hash_type decl_table (10);
7693   copy_decls_walk (unit, unit, &decl_table);
7694   unmark_dies (unit);
7695 }
7696
7697 /* Traverse the DIE and add a sibling attribute if it may have the
7698    effect of speeding up access to siblings.  To save some space,
7699    avoid generating sibling attributes for DIE's without children.  */
7700
7701 static void
7702 add_sibling_attributes (dw_die_ref die)
7703 {
7704   dw_die_ref c;
7705
7706   if (! die->die_child)
7707     return;
7708
7709   if (die->die_parent && die != die->die_parent->die_child)
7710     add_AT_die_ref (die, DW_AT_sibling, die->die_sib);
7711
7712   FOR_EACH_CHILD (die, c, add_sibling_attributes (c));
7713 }
7714
7715 /* Output all location lists for the DIE and its children.  */
7716
7717 static void
7718 output_location_lists (dw_die_ref die)
7719 {
7720   dw_die_ref c;
7721   dw_attr_ref a;
7722   unsigned ix;
7723
7724   FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
7725     if (AT_class (a) == dw_val_class_loc_list)
7726       output_loc_list (AT_loc_list (a));
7727
7728   FOR_EACH_CHILD (die, c, output_location_lists (c));
7729 }
7730
7731 /* We want to limit the number of external references, because they are
7732    larger than local references: a relocation takes multiple words, and
7733    even a sig8 reference is always eight bytes, whereas a local reference
7734    can be as small as one byte (though DW_FORM_ref is usually 4 in GCC).
7735    So if we encounter multiple external references to the same type DIE, we
7736    make a local typedef stub for it and redirect all references there.
7737
7738    This is the element of the hash table for keeping track of these
7739    references.  */
7740
7741 struct external_ref
7742 {
7743   dw_die_ref type;
7744   dw_die_ref stub;
7745   unsigned n_refs;
7746 };
7747
7748 /* Hashtable helpers.  */
7749
7750 struct external_ref_hasher : typed_free_remove <external_ref>
7751 {
7752   typedef external_ref value_type;
7753   typedef external_ref compare_type;
7754   static inline hashval_t hash (const value_type *);
7755   static inline bool equal (const value_type *, const compare_type *);
7756 };
7757
7758 inline hashval_t
7759 external_ref_hasher::hash (const value_type *r)
7760 {
7761   dw_die_ref die = r->type;
7762   hashval_t h = 0;
7763
7764   /* We can't use the address of the DIE for hashing, because
7765      that will make the order of the stub DIEs non-deterministic.  */
7766   if (! die->comdat_type_p)
7767     /* We have a symbol; use it to compute a hash.  */
7768     h = htab_hash_string (die->die_id.die_symbol);
7769   else
7770     {
7771       /* We have a type signature; use a subset of the bits as the hash.
7772          The 8-byte signature is at least as large as hashval_t.  */
7773       comdat_type_node_ref type_node = die->die_id.die_type_node;
7774       memcpy (&h, type_node->signature, sizeof (h));
7775     }
7776   return h;
7777 }
7778
7779 inline bool
7780 external_ref_hasher::equal (const value_type *r1, const compare_type *r2)
7781 {
7782   return r1->type == r2->type;
7783 }
7784
7785 typedef hash_table<external_ref_hasher> external_ref_hash_type;
7786
7787 /* Return a pointer to the external_ref for references to DIE.  */
7788
7789 static struct external_ref *
7790 lookup_external_ref (external_ref_hash_type *map, dw_die_ref die)
7791 {
7792   struct external_ref ref, *ref_p;
7793   external_ref **slot;
7794
7795   ref.type = die;
7796   slot = map->find_slot (&ref, INSERT);
7797   if (*slot != HTAB_EMPTY_ENTRY)
7798     return *slot;
7799
7800   ref_p = XCNEW (struct external_ref);
7801   ref_p->type = die;
7802   *slot = ref_p;
7803   return ref_p;
7804 }
7805
7806 /* Subroutine of optimize_external_refs, below.
7807
7808    If we see a type skeleton, record it as our stub.  If we see external
7809    references, remember how many we've seen.  */
7810
7811 static void
7812 optimize_external_refs_1 (dw_die_ref die, external_ref_hash_type *map)
7813 {
7814   dw_die_ref c;
7815   dw_attr_ref a;
7816   unsigned ix;
7817   struct external_ref *ref_p;
7818
7819   if (is_type_die (die)
7820       && (c = get_AT_ref (die, DW_AT_signature)))
7821     {
7822       /* This is a local skeleton; use it for local references.  */
7823       ref_p = lookup_external_ref (map, c);
7824       ref_p->stub = die;
7825     }
7826
7827   /* Scan the DIE references, and remember any that refer to DIEs from
7828      other CUs (i.e. those which are not marked).  */
7829   FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
7830     if (AT_class (a) == dw_val_class_die_ref
7831         && (c = AT_ref (a))->die_mark == 0
7832         && is_type_die (c))
7833       {
7834         ref_p = lookup_external_ref (map, c);
7835         ref_p->n_refs++;
7836       }
7837
7838   FOR_EACH_CHILD (die, c, optimize_external_refs_1 (c, map));
7839 }
7840
7841 /* htab_traverse callback function for optimize_external_refs, below.  SLOT
7842    points to an external_ref, DATA is the CU we're processing.  If we don't
7843    already have a local stub, and we have multiple refs, build a stub.  */
7844
7845 int
7846 dwarf2_build_local_stub (external_ref **slot, dw_die_ref data)
7847 {
7848   struct external_ref *ref_p = *slot;
7849
7850   if (ref_p->stub == NULL && ref_p->n_refs > 1 && !dwarf_strict)
7851     {
7852       /* We have multiple references to this type, so build a small stub.
7853          Both of these forms are a bit dodgy from the perspective of the
7854          DWARF standard, since technically they should have names.  */
7855       dw_die_ref cu = data;
7856       dw_die_ref type = ref_p->type;
7857       dw_die_ref stub = NULL;
7858
7859       if (type->comdat_type_p)
7860         {
7861           /* If we refer to this type via sig8, use AT_signature.  */
7862           stub = new_die (type->die_tag, cu, NULL_TREE);
7863           add_AT_die_ref (stub, DW_AT_signature, type);
7864         }
7865       else
7866         {
7867           /* Otherwise, use a typedef with no name.  */
7868           stub = new_die (DW_TAG_typedef, cu, NULL_TREE);
7869           add_AT_die_ref (stub, DW_AT_type, type);
7870         }
7871
7872       stub->die_mark++;
7873       ref_p->stub = stub;
7874     }
7875   return 1;
7876 }
7877
7878 /* DIE is a unit; look through all the DIE references to see if there are
7879    any external references to types, and if so, create local stubs for
7880    them which will be applied in build_abbrev_table.  This is useful because
7881    references to local DIEs are smaller.  */
7882
7883 static external_ref_hash_type *
7884 optimize_external_refs (dw_die_ref die)
7885 {
7886   external_ref_hash_type *map = new external_ref_hash_type (10);
7887   optimize_external_refs_1 (die, map);
7888   map->traverse <dw_die_ref, dwarf2_build_local_stub> (die);
7889   return map;
7890 }
7891
7892 /* The format of each DIE (and its attribute value pairs) is encoded in an
7893    abbreviation table.  This routine builds the abbreviation table and assigns
7894    a unique abbreviation id for each abbreviation entry.  The children of each
7895    die are visited recursively.  */
7896
7897 static void
7898 build_abbrev_table (dw_die_ref die, external_ref_hash_type *extern_map)
7899 {
7900   unsigned long abbrev_id;
7901   unsigned int n_alloc;
7902   dw_die_ref c;
7903   dw_attr_ref a;
7904   unsigned ix;
7905
7906   /* Scan the DIE references, and replace any that refer to
7907      DIEs from other CUs (i.e. those which are not marked) with
7908      the local stubs we built in optimize_external_refs.  */
7909   FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
7910     if (AT_class (a) == dw_val_class_die_ref
7911         && (c = AT_ref (a))->die_mark == 0)
7912       {
7913         struct external_ref *ref_p;
7914         gcc_assert (AT_ref (a)->comdat_type_p || AT_ref (a)->die_id.die_symbol);
7915
7916         ref_p = lookup_external_ref (extern_map, c);
7917         if (ref_p->stub && ref_p->stub != die)
7918           change_AT_die_ref (a, ref_p->stub);
7919         else
7920           /* We aren't changing this reference, so mark it external.  */
7921           set_AT_ref_external (a, 1);
7922       }
7923
7924   for (abbrev_id = 1; abbrev_id < abbrev_die_table_in_use; ++abbrev_id)
7925     {
7926       dw_die_ref abbrev = abbrev_die_table[abbrev_id];
7927       dw_attr_ref die_a, abbrev_a;
7928       unsigned ix;
7929       bool ok = true;
7930
7931       if (abbrev->die_tag != die->die_tag)
7932         continue;
7933       if ((abbrev->die_child != NULL) != (die->die_child != NULL))
7934         continue;
7935
7936       if (vec_safe_length (abbrev->die_attr) != vec_safe_length (die->die_attr))
7937         continue;
7938
7939       FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, die_a)
7940         {
7941           abbrev_a = &(*abbrev->die_attr)[ix];
7942           if ((abbrev_a->dw_attr != die_a->dw_attr)
7943               || (value_format (abbrev_a) != value_format (die_a)))
7944             {
7945               ok = false;
7946               break;
7947             }
7948         }
7949       if (ok)
7950         break;
7951     }
7952
7953   if (abbrev_id >= abbrev_die_table_in_use)
7954     {
7955       if (abbrev_die_table_in_use >= abbrev_die_table_allocated)
7956         {
7957           n_alloc = abbrev_die_table_allocated + ABBREV_DIE_TABLE_INCREMENT;
7958           abbrev_die_table = GGC_RESIZEVEC (dw_die_ref, abbrev_die_table,
7959                                             n_alloc);
7960
7961           memset (&abbrev_die_table[abbrev_die_table_allocated], 0,
7962                  (n_alloc - abbrev_die_table_allocated) * sizeof (dw_die_ref));
7963           abbrev_die_table_allocated = n_alloc;
7964         }
7965
7966       ++abbrev_die_table_in_use;
7967       abbrev_die_table[abbrev_id] = die;
7968     }
7969
7970   die->die_abbrev = abbrev_id;
7971   FOR_EACH_CHILD (die, c, build_abbrev_table (c, extern_map));
7972 }
7973 \f
7974 /* Return the power-of-two number of bytes necessary to represent VALUE.  */
7975
7976 static int
7977 constant_size (unsigned HOST_WIDE_INT value)
7978 {
7979   int log;
7980
7981   if (value == 0)
7982     log = 0;
7983   else
7984     log = floor_log2 (value);
7985
7986   log = log / 8;
7987   log = 1 << (floor_log2 (log) + 1);
7988
7989   return log;
7990 }
7991
7992 /* Return the size of a DIE as it is represented in the
7993    .debug_info section.  */
7994
7995 static unsigned long
7996 size_of_die (dw_die_ref die)
7997 {
7998   unsigned long size = 0;
7999   dw_attr_ref a;
8000   unsigned ix;
8001   enum dwarf_form form;
8002
8003   size += size_of_uleb128 (die->die_abbrev);
8004   FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
8005     {
8006       switch (AT_class (a))
8007         {
8008         case dw_val_class_addr:
8009           if (dwarf_split_debug_info && AT_index (a) != NOT_INDEXED)
8010             {
8011               gcc_assert (AT_index (a) != NO_INDEX_ASSIGNED);
8012               size += size_of_uleb128 (AT_index (a));
8013             }
8014           else
8015             size += DWARF2_ADDR_SIZE;
8016           break;
8017         case dw_val_class_offset:
8018           size += DWARF_OFFSET_SIZE;
8019           break;
8020         case dw_val_class_loc:
8021           {
8022             unsigned long lsize = size_of_locs (AT_loc (a));
8023
8024             /* Block length.  */
8025             if (dwarf_version >= 4)
8026               size += size_of_uleb128 (lsize);
8027             else
8028               size += constant_size (lsize);
8029             size += lsize;
8030           }
8031           break;
8032         case dw_val_class_loc_list:
8033           if (dwarf_split_debug_info && AT_index (a) != NOT_INDEXED)
8034             {
8035               gcc_assert (AT_index (a) != NO_INDEX_ASSIGNED);
8036               size += size_of_uleb128 (AT_index (a));
8037             }
8038           else
8039             size += DWARF_OFFSET_SIZE;
8040           break;
8041         case dw_val_class_range_list:
8042           size += DWARF_OFFSET_SIZE;
8043           break;
8044         case dw_val_class_const:
8045           size += size_of_sleb128 (AT_int (a));
8046           break;
8047         case dw_val_class_unsigned_const:
8048           {
8049             int csize = constant_size (AT_unsigned (a));
8050             if (dwarf_version == 3
8051                 && a->dw_attr == DW_AT_data_member_location
8052                 && csize >= 4)
8053               size += size_of_uleb128 (AT_unsigned (a));
8054             else
8055               size += csize;
8056           }
8057           break;
8058         case dw_val_class_const_double:
8059           size += HOST_BITS_PER_DOUBLE_INT / HOST_BITS_PER_CHAR;
8060           if (HOST_BITS_PER_WIDE_INT >= 64)
8061             size++; /* block */
8062           break;
8063         case dw_val_class_wide_int:
8064           size += (get_full_len (*a->dw_attr_val.v.val_wide)
8065                    * HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR);
8066           if (get_full_len (*a->dw_attr_val.v.val_wide) * HOST_BITS_PER_WIDE_INT
8067               > 64)
8068             size++; /* block */
8069           break;
8070         case dw_val_class_vec:
8071           size += constant_size (a->dw_attr_val.v.val_vec.length
8072                                  * a->dw_attr_val.v.val_vec.elt_size)
8073                   + a->dw_attr_val.v.val_vec.length
8074                     * a->dw_attr_val.v.val_vec.elt_size; /* block */
8075           break;
8076         case dw_val_class_flag:
8077           if (dwarf_version >= 4)
8078             /* Currently all add_AT_flag calls pass in 1 as last argument,
8079                so DW_FORM_flag_present can be used.  If that ever changes,
8080                we'll need to use DW_FORM_flag and have some optimization
8081                in build_abbrev_table that will change those to
8082                DW_FORM_flag_present if it is set to 1 in all DIEs using
8083                the same abbrev entry.  */
8084             gcc_assert (a->dw_attr_val.v.val_flag == 1);
8085           else
8086             size += 1;
8087           break;
8088         case dw_val_class_die_ref:
8089           if (AT_ref_external (a))
8090             {
8091               /* In DWARF4, we use DW_FORM_ref_sig8; for earlier versions
8092                  we use DW_FORM_ref_addr.  In DWARF2, DW_FORM_ref_addr
8093                  is sized by target address length, whereas in DWARF3
8094                  it's always sized as an offset.  */
8095               if (use_debug_types)
8096                 size += DWARF_TYPE_SIGNATURE_SIZE;
8097               else if (dwarf_version == 2)
8098                 size += DWARF2_ADDR_SIZE;
8099               else
8100                 size += DWARF_OFFSET_SIZE;
8101             }
8102           else
8103             size += DWARF_OFFSET_SIZE;
8104           break;
8105         case dw_val_class_fde_ref:
8106           size += DWARF_OFFSET_SIZE;
8107           break;
8108         case dw_val_class_lbl_id:
8109           if (dwarf_split_debug_info && AT_index (a) != NOT_INDEXED)
8110             {
8111               gcc_assert (AT_index (a) != NO_INDEX_ASSIGNED);
8112               size += size_of_uleb128 (AT_index (a));
8113             }
8114           else
8115             size += DWARF2_ADDR_SIZE;
8116           break;
8117         case dw_val_class_lineptr:
8118         case dw_val_class_macptr:
8119           size += DWARF_OFFSET_SIZE;
8120           break;
8121         case dw_val_class_str:
8122           form = AT_string_form (a);
8123           if (form == DW_FORM_strp)
8124             size += DWARF_OFFSET_SIZE;
8125          else if (form == DW_FORM_GNU_str_index)
8126             size += size_of_uleb128 (AT_index (a));
8127           else
8128             size += strlen (a->dw_attr_val.v.val_str->str) + 1;
8129           break;
8130         case dw_val_class_file:
8131           size += constant_size (maybe_emit_file (a->dw_attr_val.v.val_file));
8132           break;
8133         case dw_val_class_data8:
8134           size += 8;
8135           break;
8136         case dw_val_class_vms_delta:
8137           size += DWARF_OFFSET_SIZE;
8138           break;
8139         case dw_val_class_high_pc:
8140           size += DWARF2_ADDR_SIZE;
8141           break;
8142         default:
8143           gcc_unreachable ();
8144         }
8145     }
8146
8147   return size;
8148 }
8149
8150 /* Size the debugging information associated with a given DIE.  Visits the
8151    DIE's children recursively.  Updates the global variable next_die_offset, on
8152    each time through.  Uses the current value of next_die_offset to update the
8153    die_offset field in each DIE.  */
8154
8155 static void
8156 calc_die_sizes (dw_die_ref die)
8157 {
8158   dw_die_ref c;
8159
8160   gcc_assert (die->die_offset == 0
8161               || (unsigned long int) die->die_offset == next_die_offset);
8162   die->die_offset = next_die_offset;
8163   next_die_offset += size_of_die (die);
8164
8165   FOR_EACH_CHILD (die, c, calc_die_sizes (c));
8166
8167   if (die->die_child != NULL)
8168     /* Count the null byte used to terminate sibling lists.  */
8169     next_die_offset += 1;
8170 }
8171
8172 /* Size just the base type children at the start of the CU.
8173    This is needed because build_abbrev needs to size locs
8174    and sizing of type based stack ops needs to know die_offset
8175    values for the base types.  */
8176
8177 static void
8178 calc_base_type_die_sizes (void)
8179 {
8180   unsigned long die_offset = DWARF_COMPILE_UNIT_HEADER_SIZE;
8181   unsigned int i;
8182   dw_die_ref base_type;
8183 #if ENABLE_ASSERT_CHECKING
8184   dw_die_ref prev = comp_unit_die ()->die_child;
8185 #endif
8186
8187   die_offset += size_of_die (comp_unit_die ());
8188   for (i = 0; base_types.iterate (i, &base_type); i++)
8189     {
8190 #if ENABLE_ASSERT_CHECKING
8191       gcc_assert (base_type->die_offset == 0
8192                   && prev->die_sib == base_type
8193                   && base_type->die_child == NULL
8194                   && base_type->die_abbrev);
8195       prev = base_type;
8196 #endif
8197       base_type->die_offset = die_offset;
8198       die_offset += size_of_die (base_type);
8199     }
8200 }
8201
8202 /* Set the marks for a die and its children.  We do this so
8203    that we know whether or not a reference needs to use FORM_ref_addr; only
8204    DIEs in the same CU will be marked.  We used to clear out the offset
8205    and use that as the flag, but ran into ordering problems.  */
8206
8207 static void
8208 mark_dies (dw_die_ref die)
8209 {
8210   dw_die_ref c;
8211
8212   gcc_assert (!die->die_mark);
8213
8214   die->die_mark = 1;
8215   FOR_EACH_CHILD (die, c, mark_dies (c));
8216 }
8217
8218 /* Clear the marks for a die and its children.  */
8219
8220 static void
8221 unmark_dies (dw_die_ref die)
8222 {
8223   dw_die_ref c;
8224
8225   if (! use_debug_types)
8226     gcc_assert (die->die_mark);
8227
8228   die->die_mark = 0;
8229   FOR_EACH_CHILD (die, c, unmark_dies (c));
8230 }
8231
8232 /* Clear the marks for a die, its children and referred dies.  */
8233
8234 static void
8235 unmark_all_dies (dw_die_ref die)
8236 {
8237   dw_die_ref c;
8238   dw_attr_ref a;
8239   unsigned ix;
8240
8241   if (!die->die_mark)
8242     return;
8243   die->die_mark = 0;
8244
8245   FOR_EACH_CHILD (die, c, unmark_all_dies (c));
8246
8247   FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
8248     if (AT_class (a) == dw_val_class_die_ref)
8249       unmark_all_dies (AT_ref (a));
8250 }
8251
8252 /* Calculate if the entry should appear in the final output file.  It may be
8253    from a pruned a type.  */
8254
8255 static bool
8256 include_pubname_in_output (vec<pubname_entry, va_gc> *table, pubname_entry *p)
8257 {
8258   /* By limiting gnu pubnames to definitions only, gold can generate a
8259      gdb index without entries for declarations, which don't include
8260      enough information to be useful.  */
8261   if (debug_generate_pub_sections == 2 && is_declaration_die (p->die))
8262     return false;
8263
8264   if (table == pubname_table)
8265     {
8266       /* Enumerator names are part of the pubname table, but the
8267          parent DW_TAG_enumeration_type die may have been pruned.
8268          Don't output them if that is the case.  */
8269       if (p->die->die_tag == DW_TAG_enumerator &&
8270           (p->die->die_parent == NULL
8271            || !p->die->die_parent->die_perennial_p))
8272         return false;
8273
8274       /* Everything else in the pubname table is included.  */
8275       return true;
8276     }
8277
8278   /* The pubtypes table shouldn't include types that have been
8279      pruned.  */
8280   return (p->die->die_offset != 0
8281           || !flag_eliminate_unused_debug_types);
8282 }
8283
8284 /* Return the size of the .debug_pubnames or .debug_pubtypes table
8285    generated for the compilation unit.  */
8286
8287 static unsigned long
8288 size_of_pubnames (vec<pubname_entry, va_gc> *names)
8289 {
8290   unsigned long size;
8291   unsigned i;
8292   pubname_ref p;
8293   int space_for_flags = (debug_generate_pub_sections == 2) ? 1 : 0;
8294
8295   size = DWARF_PUBNAMES_HEADER_SIZE;
8296   FOR_EACH_VEC_ELT (*names, i, p)
8297     if (include_pubname_in_output (names, p))
8298       size += strlen (p->name) + DWARF_OFFSET_SIZE + 1 + space_for_flags;
8299
8300   size += DWARF_OFFSET_SIZE;
8301   return size;
8302 }
8303
8304 /* Return the size of the information in the .debug_aranges section.  */
8305
8306 static unsigned long
8307 size_of_aranges (void)
8308 {
8309   unsigned long size;
8310
8311   size = DWARF_ARANGES_HEADER_SIZE;
8312
8313   /* Count the address/length pair for this compilation unit.  */
8314   if (text_section_used)
8315     size += 2 * DWARF2_ADDR_SIZE;
8316   if (cold_text_section_used)
8317     size += 2 * DWARF2_ADDR_SIZE;
8318   if (have_multiple_function_sections)
8319     {
8320       unsigned fde_idx;
8321       dw_fde_ref fde;
8322
8323       FOR_EACH_VEC_ELT (*fde_vec, fde_idx, fde)
8324         {
8325           if (DECL_IGNORED_P (fde->decl))
8326             continue;
8327           if (!fde->in_std_section)
8328             size += 2 * DWARF2_ADDR_SIZE;
8329           if (fde->dw_fde_second_begin && !fde->second_in_std_section)
8330             size += 2 * DWARF2_ADDR_SIZE;
8331         }
8332     }
8333
8334   /* Count the two zero words used to terminated the address range table.  */
8335   size += 2 * DWARF2_ADDR_SIZE;
8336   return size;
8337 }
8338 \f
8339 /* Select the encoding of an attribute value.  */
8340
8341 static enum dwarf_form
8342 value_format (dw_attr_ref a)
8343 {
8344   switch (AT_class (a))
8345     {
8346     case dw_val_class_addr:
8347       /* Only very few attributes allow DW_FORM_addr.  */
8348       switch (a->dw_attr)
8349         {
8350         case DW_AT_low_pc:
8351         case DW_AT_high_pc:
8352         case DW_AT_entry_pc:
8353         case DW_AT_trampoline:
8354           return (AT_index (a) == NOT_INDEXED
8355                   ? DW_FORM_addr : DW_FORM_GNU_addr_index);
8356         default:
8357           break;
8358         }
8359       switch (DWARF2_ADDR_SIZE)
8360         {
8361         case 1:
8362           return DW_FORM_data1;
8363         case 2:
8364           return DW_FORM_data2;
8365         case 4:
8366           return DW_FORM_data4;
8367         case 8:
8368           return DW_FORM_data8;
8369         default:
8370           gcc_unreachable ();
8371         }
8372     case dw_val_class_range_list:
8373     case dw_val_class_loc_list:
8374       if (dwarf_version >= 4)
8375         return DW_FORM_sec_offset;
8376       /* FALLTHRU */
8377     case dw_val_class_vms_delta:
8378     case dw_val_class_offset:
8379       switch (DWARF_OFFSET_SIZE)
8380         {
8381         case 4:
8382           return DW_FORM_data4;
8383         case 8:
8384           return DW_FORM_data8;
8385         default:
8386           gcc_unreachable ();
8387         }
8388     case dw_val_class_loc:
8389       if (dwarf_version >= 4)
8390         return DW_FORM_exprloc;
8391       switch (constant_size (size_of_locs (AT_loc (a))))
8392         {
8393         case 1:
8394           return DW_FORM_block1;
8395         case 2:
8396           return DW_FORM_block2;
8397         case 4:
8398           return DW_FORM_block4;
8399         default:
8400           gcc_unreachable ();
8401         }
8402     case dw_val_class_const:
8403       return DW_FORM_sdata;
8404     case dw_val_class_unsigned_const:
8405       switch (constant_size (AT_unsigned (a)))
8406         {
8407         case 1:
8408           return DW_FORM_data1;
8409         case 2:
8410           return DW_FORM_data2;
8411         case 4:
8412           /* In DWARF3 DW_AT_data_member_location with
8413              DW_FORM_data4 or DW_FORM_data8 is a loclistptr, not
8414              constant, so we need to use DW_FORM_udata if we need
8415              a large constant.  */
8416           if (dwarf_version == 3 && a->dw_attr == DW_AT_data_member_location)
8417             return DW_FORM_udata;
8418           return DW_FORM_data4;
8419         case 8:
8420           if (dwarf_version == 3 && a->dw_attr == DW_AT_data_member_location)
8421             return DW_FORM_udata;
8422           return DW_FORM_data8;
8423         default:
8424           gcc_unreachable ();
8425         }
8426     case dw_val_class_const_double:
8427       switch (HOST_BITS_PER_WIDE_INT)
8428         {
8429         case 8:
8430           return DW_FORM_data2;
8431         case 16:
8432           return DW_FORM_data4;
8433         case 32:
8434           return DW_FORM_data8;
8435         case 64:
8436         default:
8437           return DW_FORM_block1;
8438         }
8439     case dw_val_class_wide_int:
8440       switch (get_full_len (*a->dw_attr_val.v.val_wide) * HOST_BITS_PER_WIDE_INT)
8441         {
8442         case 8:
8443           return DW_FORM_data1;
8444         case 16:
8445           return DW_FORM_data2;
8446         case 32:
8447           return DW_FORM_data4;
8448         case 64:
8449           return DW_FORM_data8;
8450         default:
8451           return DW_FORM_block1;
8452         }
8453     case dw_val_class_vec:
8454       switch (constant_size (a->dw_attr_val.v.val_vec.length
8455                              * a->dw_attr_val.v.val_vec.elt_size))
8456         {
8457         case 1:
8458           return DW_FORM_block1;
8459         case 2:
8460           return DW_FORM_block2;
8461         case 4:
8462           return DW_FORM_block4;
8463         default:
8464           gcc_unreachable ();
8465         }
8466     case dw_val_class_flag:
8467       if (dwarf_version >= 4)
8468         {
8469           /* Currently all add_AT_flag calls pass in 1 as last argument,
8470              so DW_FORM_flag_present can be used.  If that ever changes,
8471              we'll need to use DW_FORM_flag and have some optimization
8472              in build_abbrev_table that will change those to
8473              DW_FORM_flag_present if it is set to 1 in all DIEs using
8474              the same abbrev entry.  */
8475           gcc_assert (a->dw_attr_val.v.val_flag == 1);
8476           return DW_FORM_flag_present;
8477         }
8478       return DW_FORM_flag;
8479     case dw_val_class_die_ref:
8480       if (AT_ref_external (a))
8481         return use_debug_types ? DW_FORM_ref_sig8 : DW_FORM_ref_addr;
8482       else
8483         return DW_FORM_ref;
8484     case dw_val_class_fde_ref:
8485       return DW_FORM_data;
8486     case dw_val_class_lbl_id:
8487       return (AT_index (a) == NOT_INDEXED
8488               ? DW_FORM_addr : DW_FORM_GNU_addr_index);
8489     case dw_val_class_lineptr:
8490     case dw_val_class_macptr:
8491       return dwarf_version >= 4 ? DW_FORM_sec_offset : DW_FORM_data;
8492     case dw_val_class_str:
8493       return AT_string_form (a);
8494     case dw_val_class_file:
8495       switch (constant_size (maybe_emit_file (a->dw_attr_val.v.val_file)))
8496         {
8497         case 1:
8498           return DW_FORM_data1;
8499         case 2:
8500           return DW_FORM_data2;
8501         case 4:
8502           return DW_FORM_data4;
8503         default:
8504           gcc_unreachable ();
8505         }
8506
8507     case dw_val_class_data8:
8508       return DW_FORM_data8;
8509
8510     case dw_val_class_high_pc:
8511       switch (DWARF2_ADDR_SIZE)
8512         {
8513         case 1:
8514           return DW_FORM_data1;
8515         case 2:
8516           return DW_FORM_data2;
8517         case 4:
8518           return DW_FORM_data4;
8519         case 8:
8520           return DW_FORM_data8;
8521         default:
8522           gcc_unreachable ();
8523         }
8524
8525     default:
8526       gcc_unreachable ();
8527     }
8528 }
8529
8530 /* Output the encoding of an attribute value.  */
8531
8532 static void
8533 output_value_format (dw_attr_ref a)
8534 {
8535   enum dwarf_form form = value_format (a);
8536
8537   dw2_asm_output_data_uleb128 (form, "(%s)", dwarf_form_name (form));
8538 }
8539
8540 /* Given a die and id, produce the appropriate abbreviations.  */
8541
8542 static void
8543 output_die_abbrevs (unsigned long abbrev_id, dw_die_ref abbrev)
8544 {
8545   unsigned ix;
8546   dw_attr_ref a_attr;
8547
8548   dw2_asm_output_data_uleb128 (abbrev_id, "(abbrev code)");
8549   dw2_asm_output_data_uleb128 (abbrev->die_tag, "(TAG: %s)",
8550                                dwarf_tag_name (abbrev->die_tag));
8551
8552   if (abbrev->die_child != NULL)
8553     dw2_asm_output_data (1, DW_children_yes, "DW_children_yes");
8554   else
8555     dw2_asm_output_data (1, DW_children_no, "DW_children_no");
8556
8557   for (ix = 0; vec_safe_iterate (abbrev->die_attr, ix, &a_attr); ix++)
8558     {
8559       dw2_asm_output_data_uleb128 (a_attr->dw_attr, "(%s)",
8560                                    dwarf_attr_name (a_attr->dw_attr));
8561       output_value_format (a_attr);
8562     }
8563
8564   dw2_asm_output_data (1, 0, NULL);
8565   dw2_asm_output_data (1, 0, NULL);
8566 }
8567
8568
8569 /* Output the .debug_abbrev section which defines the DIE abbreviation
8570    table.  */
8571
8572 static void
8573 output_abbrev_section (void)
8574 {
8575   unsigned long abbrev_id;
8576
8577   for (abbrev_id = 1; abbrev_id < abbrev_die_table_in_use; ++abbrev_id)
8578     output_die_abbrevs (abbrev_id, abbrev_die_table[abbrev_id]);
8579
8580   /* Terminate the table.  */
8581   dw2_asm_output_data (1, 0, NULL);
8582 }
8583
8584 /* Output a symbol we can use to refer to this DIE from another CU.  */
8585
8586 static inline void
8587 output_die_symbol (dw_die_ref die)
8588 {
8589   const char *sym = die->die_id.die_symbol;
8590
8591   gcc_assert (!die->comdat_type_p);
8592
8593   if (sym == 0)
8594     return;
8595
8596   if (strncmp (sym, DIE_LABEL_PREFIX, sizeof (DIE_LABEL_PREFIX) - 1) == 0)
8597     /* We make these global, not weak; if the target doesn't support
8598        .linkonce, it doesn't support combining the sections, so debugging
8599        will break.  */
8600     targetm.asm_out.globalize_label (asm_out_file, sym);
8601
8602   ASM_OUTPUT_LABEL (asm_out_file, sym);
8603 }
8604
8605 /* Return a new location list, given the begin and end range, and the
8606    expression.  */
8607
8608 static inline dw_loc_list_ref
8609 new_loc_list (dw_loc_descr_ref expr, const char *begin, const char *end,
8610               const char *section)
8611 {
8612   dw_loc_list_ref retlist = ggc_cleared_alloc<dw_loc_list_node> ();
8613
8614   retlist->begin = begin;
8615   retlist->begin_entry = NULL;
8616   retlist->end = end;
8617   retlist->expr = expr;
8618   retlist->section = section;
8619
8620   return retlist;
8621 }
8622
8623 /* Generate a new internal symbol for this location list node, if it
8624    hasn't got one yet.  */
8625
8626 static inline void
8627 gen_llsym (dw_loc_list_ref list)
8628 {
8629   gcc_assert (!list->ll_symbol);
8630   list->ll_symbol = gen_internal_sym ("LLST");
8631 }
8632
8633 /* Output the location list given to us.  */
8634
8635 static void
8636 output_loc_list (dw_loc_list_ref list_head)
8637 {
8638   dw_loc_list_ref curr = list_head;
8639
8640   if (list_head->emitted)
8641     return;
8642   list_head->emitted = true;
8643
8644   ASM_OUTPUT_LABEL (asm_out_file, list_head->ll_symbol);
8645
8646   /* Walk the location list, and output each range + expression.  */
8647   for (curr = list_head; curr != NULL; curr = curr->dw_loc_next)
8648     {
8649       unsigned long size;
8650       /* Don't output an entry that starts and ends at the same address.  */
8651       if (strcmp (curr->begin, curr->end) == 0 && !curr->force)
8652         continue;
8653       size = size_of_locs (curr->expr);
8654       /* If the expression is too large, drop it on the floor.  We could
8655          perhaps put it into DW_TAG_dwarf_procedure and refer to that
8656          in the expression, but >= 64KB expressions for a single value
8657          in a single range are unlikely very useful.  */
8658       if (size > 0xffff)
8659         continue;
8660       if (dwarf_split_debug_info)
8661         {
8662           dw2_asm_output_data (1, DW_LLE_GNU_start_length_entry,
8663                                "Location list start/length entry (%s)",
8664                                list_head->ll_symbol);
8665           dw2_asm_output_data_uleb128 (curr->begin_entry->index,
8666                                        "Location list range start index (%s)",
8667                                        curr->begin);
8668           /* The length field is 4 bytes.  If we ever need to support
8669             an 8-byte length, we can add a new DW_LLE code or fall back
8670             to DW_LLE_GNU_start_end_entry.  */
8671           dw2_asm_output_delta (4, curr->end, curr->begin,
8672                                 "Location list range length (%s)",
8673                                 list_head->ll_symbol);
8674         }
8675       else if (!have_multiple_function_sections)
8676         {
8677           dw2_asm_output_delta (DWARF2_ADDR_SIZE, curr->begin, curr->section,
8678                                 "Location list begin address (%s)",
8679                                 list_head->ll_symbol);
8680           dw2_asm_output_delta (DWARF2_ADDR_SIZE, curr->end, curr->section,
8681                                 "Location list end address (%s)",
8682                                 list_head->ll_symbol);
8683         }
8684       else
8685         {
8686           dw2_asm_output_addr (DWARF2_ADDR_SIZE, curr->begin,
8687                                "Location list begin address (%s)",
8688                                list_head->ll_symbol);
8689           dw2_asm_output_addr (DWARF2_ADDR_SIZE, curr->end,
8690                                "Location list end address (%s)",
8691                                list_head->ll_symbol);
8692         }
8693
8694       /* Output the block length for this list of location operations.  */
8695       gcc_assert (size <= 0xffff);
8696       dw2_asm_output_data (2, size, "%s", "Location expression size");
8697
8698       output_loc_sequence (curr->expr, -1);
8699     }
8700
8701   if (dwarf_split_debug_info)
8702     dw2_asm_output_data (1, DW_LLE_GNU_end_of_list_entry,
8703                          "Location list terminator (%s)",
8704                          list_head->ll_symbol);
8705   else
8706     {
8707       dw2_asm_output_data (DWARF2_ADDR_SIZE, 0,
8708                            "Location list terminator begin (%s)",
8709                            list_head->ll_symbol);
8710       dw2_asm_output_data (DWARF2_ADDR_SIZE, 0,
8711                            "Location list terminator end (%s)",
8712                            list_head->ll_symbol);
8713     }
8714 }
8715
8716 /* Output a range_list offset into the debug_range section.  Emit a
8717    relocated reference if val_entry is NULL, otherwise, emit an
8718    indirect reference.  */
8719
8720 static void
8721 output_range_list_offset (dw_attr_ref a)
8722 {
8723   const char *name = dwarf_attr_name (a->dw_attr);
8724
8725   if (a->dw_attr_val.val_entry == RELOCATED_OFFSET)
8726     {
8727       char *p = strchr (ranges_section_label, '\0');
8728       sprintf (p, "+" HOST_WIDE_INT_PRINT_HEX, a->dw_attr_val.v.val_offset);
8729       dw2_asm_output_offset (DWARF_OFFSET_SIZE, ranges_section_label,
8730                              debug_ranges_section, "%s", name);
8731       *p = '\0';
8732     }
8733   else
8734     dw2_asm_output_data (DWARF_OFFSET_SIZE, a->dw_attr_val.v.val_offset,
8735                          "%s (offset from %s)", name, ranges_section_label);
8736 }
8737
8738 /* Output the offset into the debug_loc section.  */
8739
8740 static void
8741 output_loc_list_offset (dw_attr_ref a)
8742 {
8743   char *sym = AT_loc_list (a)->ll_symbol;
8744
8745   gcc_assert (sym);
8746   if (dwarf_split_debug_info)
8747     dw2_asm_output_delta (DWARF_OFFSET_SIZE, sym, loc_section_label,
8748                           "%s", dwarf_attr_name (a->dw_attr));
8749   else
8750     dw2_asm_output_offset (DWARF_OFFSET_SIZE, sym, debug_loc_section,
8751                            "%s", dwarf_attr_name (a->dw_attr));
8752 }
8753
8754 /* Output an attribute's index or value appropriately.  */
8755
8756 static void
8757 output_attr_index_or_value (dw_attr_ref a)
8758 {
8759   const char *name = dwarf_attr_name (a->dw_attr);
8760
8761   if (dwarf_split_debug_info && AT_index (a) != NOT_INDEXED)
8762     {
8763       dw2_asm_output_data_uleb128 (AT_index (a), "%s", name);
8764       return;
8765     }
8766   switch (AT_class (a))
8767     {
8768       case dw_val_class_addr:
8769         dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE, AT_addr (a), "%s", name);
8770         break;
8771       case dw_val_class_high_pc:
8772       case dw_val_class_lbl_id:
8773         dw2_asm_output_addr (DWARF2_ADDR_SIZE, AT_lbl (a), "%s", name);
8774         break;
8775       case dw_val_class_loc_list:
8776         output_loc_list_offset (a);
8777         break;
8778       default:
8779         gcc_unreachable ();
8780     }
8781 }
8782
8783 /* Output a type signature.  */
8784
8785 static inline void
8786 output_signature (const char *sig, const char *name)
8787 {
8788   int i;
8789
8790   for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++)
8791     dw2_asm_output_data (1, sig[i], i == 0 ? "%s" : NULL, name);
8792 }
8793
8794 /* Output the DIE and its attributes.  Called recursively to generate
8795    the definitions of each child DIE.  */
8796
8797 static void
8798 output_die (dw_die_ref die)
8799 {
8800   dw_attr_ref a;
8801   dw_die_ref c;
8802   unsigned long size;
8803   unsigned ix;
8804
8805   /* If someone in another CU might refer to us, set up a symbol for
8806      them to point to.  */
8807   if (! die->comdat_type_p && die->die_id.die_symbol)
8808     output_die_symbol (die);
8809
8810   dw2_asm_output_data_uleb128 (die->die_abbrev, "(DIE (%#lx) %s)",
8811                                (unsigned long)die->die_offset,
8812                                dwarf_tag_name (die->die_tag));
8813
8814   FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
8815     {
8816       const char *name = dwarf_attr_name (a->dw_attr);
8817
8818       switch (AT_class (a))
8819         {
8820         case dw_val_class_addr:
8821           output_attr_index_or_value (a);
8822           break;
8823
8824         case dw_val_class_offset:
8825           dw2_asm_output_data (DWARF_OFFSET_SIZE, a->dw_attr_val.v.val_offset,
8826                                "%s", name);
8827           break;
8828
8829         case dw_val_class_range_list:
8830           output_range_list_offset (a);
8831           break;
8832
8833         case dw_val_class_loc:
8834           size = size_of_locs (AT_loc (a));
8835
8836           /* Output the block length for this list of location operations.  */
8837           if (dwarf_version >= 4)
8838             dw2_asm_output_data_uleb128 (size, "%s", name);
8839           else
8840             dw2_asm_output_data (constant_size (size), size, "%s", name);
8841
8842           output_loc_sequence (AT_loc (a), -1);
8843           break;
8844
8845         case dw_val_class_const:
8846           /* ??? It would be slightly more efficient to use a scheme like is
8847              used for unsigned constants below, but gdb 4.x does not sign
8848              extend.  Gdb 5.x does sign extend.  */
8849           dw2_asm_output_data_sleb128 (AT_int (a), "%s", name);
8850           break;
8851
8852         case dw_val_class_unsigned_const:
8853           {
8854             int csize = constant_size (AT_unsigned (a));
8855             if (dwarf_version == 3
8856                 && a->dw_attr == DW_AT_data_member_location
8857                 && csize >= 4)
8858               dw2_asm_output_data_uleb128 (AT_unsigned (a), "%s", name);
8859             else
8860               dw2_asm_output_data (csize, AT_unsigned (a), "%s", name);
8861           }
8862           break;
8863
8864         case dw_val_class_const_double:
8865           {
8866             unsigned HOST_WIDE_INT first, second;
8867
8868             if (HOST_BITS_PER_WIDE_INT >= 64)
8869               dw2_asm_output_data (1,
8870                                    HOST_BITS_PER_DOUBLE_INT
8871                                    / HOST_BITS_PER_CHAR,
8872                                    NULL);
8873
8874             if (WORDS_BIG_ENDIAN)
8875               {
8876                 first = a->dw_attr_val.v.val_double.high;
8877                 second = a->dw_attr_val.v.val_double.low;
8878               }
8879             else
8880               {
8881                 first = a->dw_attr_val.v.val_double.low;
8882                 second = a->dw_attr_val.v.val_double.high;
8883               }
8884
8885             dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR,
8886                                  first, "%s", name);
8887             dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR,
8888                                  second, NULL);
8889           }
8890           break;
8891
8892         case dw_val_class_wide_int:
8893           {
8894             int i;
8895             int len = get_full_len (*a->dw_attr_val.v.val_wide);
8896             int l = HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR;
8897             if (len * HOST_BITS_PER_WIDE_INT > 64)
8898               dw2_asm_output_data (1, get_full_len (*a->dw_attr_val.v.val_wide) * l,
8899                                    NULL);
8900
8901             if (WORDS_BIG_ENDIAN)
8902               for (i = len - 1; i >= 0; --i)
8903                 {
8904                   dw2_asm_output_data (l, a->dw_attr_val.v.val_wide->elt (i),
8905                                        "%s", name);
8906                   name = "";
8907                 }
8908             else
8909               for (i = 0; i < len; ++i)
8910                 {
8911                   dw2_asm_output_data (l, a->dw_attr_val.v.val_wide->elt (i),
8912                                        "%s", name);
8913                   name = "";
8914                 }
8915           }
8916           break;
8917
8918         case dw_val_class_vec:
8919           {
8920             unsigned int elt_size = a->dw_attr_val.v.val_vec.elt_size;
8921             unsigned int len = a->dw_attr_val.v.val_vec.length;
8922             unsigned int i;
8923             unsigned char *p;
8924
8925             dw2_asm_output_data (constant_size (len * elt_size),
8926                                  len * elt_size, "%s", name);
8927             if (elt_size > sizeof (HOST_WIDE_INT))
8928               {
8929                 elt_size /= 2;
8930                 len *= 2;
8931               }
8932             for (i = 0, p = a->dw_attr_val.v.val_vec.array;
8933                  i < len;
8934                  i++, p += elt_size)
8935               dw2_asm_output_data (elt_size, extract_int (p, elt_size),
8936                                    "fp or vector constant word %u", i);
8937             break;
8938           }
8939
8940         case dw_val_class_flag:
8941           if (dwarf_version >= 4)
8942             {
8943               /* Currently all add_AT_flag calls pass in 1 as last argument,
8944                  so DW_FORM_flag_present can be used.  If that ever changes,
8945                  we'll need to use DW_FORM_flag and have some optimization
8946                  in build_abbrev_table that will change those to
8947                  DW_FORM_flag_present if it is set to 1 in all DIEs using
8948                  the same abbrev entry.  */
8949               gcc_assert (AT_flag (a) == 1);
8950               if (flag_debug_asm)
8951                 fprintf (asm_out_file, "\t\t\t%s %s\n",
8952                          ASM_COMMENT_START, name);
8953               break;
8954             }
8955           dw2_asm_output_data (1, AT_flag (a), "%s", name);
8956           break;
8957
8958         case dw_val_class_loc_list:
8959           output_attr_index_or_value (a);
8960           break;
8961
8962         case dw_val_class_die_ref:
8963           if (AT_ref_external (a))
8964             {
8965               if (AT_ref (a)->comdat_type_p)
8966                 {
8967                   comdat_type_node_ref type_node =
8968                     AT_ref (a)->die_id.die_type_node;
8969
8970                   gcc_assert (type_node);
8971                   output_signature (type_node->signature, name);
8972                 }
8973               else
8974                 {
8975                   const char *sym = AT_ref (a)->die_id.die_symbol;
8976                   int size;
8977
8978                   gcc_assert (sym);
8979                   /* In DWARF2, DW_FORM_ref_addr is sized by target address
8980                      length, whereas in DWARF3 it's always sized as an
8981                      offset.  */
8982                   if (dwarf_version == 2)
8983                     size = DWARF2_ADDR_SIZE;
8984                   else
8985                     size = DWARF_OFFSET_SIZE;
8986                   dw2_asm_output_offset (size, sym, debug_info_section, "%s",
8987                                          name);
8988                 }
8989             }
8990           else
8991             {
8992               gcc_assert (AT_ref (a)->die_offset);
8993               dw2_asm_output_data (DWARF_OFFSET_SIZE, AT_ref (a)->die_offset,
8994                                    "%s", name);
8995             }
8996           break;
8997
8998         case dw_val_class_fde_ref:
8999           {
9000             char l1[20];
9001
9002             ASM_GENERATE_INTERNAL_LABEL (l1, FDE_LABEL,
9003                                          a->dw_attr_val.v.val_fde_index * 2);
9004             dw2_asm_output_offset (DWARF_OFFSET_SIZE, l1, debug_frame_section,
9005                                    "%s", name);
9006           }
9007           break;
9008
9009         case dw_val_class_vms_delta:
9010 #ifdef ASM_OUTPUT_DWARF_VMS_DELTA
9011           dw2_asm_output_vms_delta (DWARF_OFFSET_SIZE,
9012                                     AT_vms_delta2 (a), AT_vms_delta1 (a),
9013                                     "%s", name);
9014 #else
9015           dw2_asm_output_delta (DWARF_OFFSET_SIZE,
9016                                 AT_vms_delta2 (a), AT_vms_delta1 (a),
9017                                 "%s", name);
9018 #endif
9019           break;
9020
9021         case dw_val_class_lbl_id:
9022           output_attr_index_or_value (a);
9023           break;
9024
9025         case dw_val_class_lineptr:
9026           dw2_asm_output_offset (DWARF_OFFSET_SIZE, AT_lbl (a),
9027                                  debug_line_section, "%s", name);
9028           break;
9029
9030         case dw_val_class_macptr:
9031           dw2_asm_output_offset (DWARF_OFFSET_SIZE, AT_lbl (a),
9032                                  debug_macinfo_section, "%s", name);
9033           break;
9034
9035         case dw_val_class_str:
9036           if (a->dw_attr_val.v.val_str->form == DW_FORM_strp)
9037             dw2_asm_output_offset (DWARF_OFFSET_SIZE,
9038                                    a->dw_attr_val.v.val_str->label,
9039                                    debug_str_section,
9040                                    "%s: \"%s\"", name, AT_string (a));
9041           else if (a->dw_attr_val.v.val_str->form == DW_FORM_GNU_str_index)
9042             dw2_asm_output_data_uleb128 (AT_index (a),
9043                                          "%s: \"%s\"", name, AT_string (a));
9044           else
9045             dw2_asm_output_nstring (AT_string (a), -1, "%s", name);
9046           break;
9047
9048         case dw_val_class_file:
9049           {
9050             int f = maybe_emit_file (a->dw_attr_val.v.val_file);
9051
9052             dw2_asm_output_data (constant_size (f), f, "%s (%s)", name,
9053                                  a->dw_attr_val.v.val_file->filename);
9054             break;
9055           }
9056
9057         case dw_val_class_data8:
9058           {
9059             int i;
9060
9061             for (i = 0; i < 8; i++)
9062               dw2_asm_output_data (1, a->dw_attr_val.v.val_data8[i],
9063                                    i == 0 ? "%s" : NULL, name);
9064             break;
9065           }
9066
9067         case dw_val_class_high_pc:
9068           dw2_asm_output_delta (DWARF2_ADDR_SIZE, AT_lbl (a),
9069                                 get_AT_low_pc (die), "DW_AT_high_pc");
9070           break;
9071
9072         default:
9073           gcc_unreachable ();
9074         }
9075     }
9076
9077   FOR_EACH_CHILD (die, c, output_die (c));
9078
9079   /* Add null byte to terminate sibling list.  */
9080   if (die->die_child != NULL)
9081     dw2_asm_output_data (1, 0, "end of children of DIE %#lx",
9082                          (unsigned long) die->die_offset);
9083 }
9084
9085 /* Output the compilation unit that appears at the beginning of the
9086    .debug_info section, and precedes the DIE descriptions.  */
9087
9088 static void
9089 output_compilation_unit_header (void)
9090 {
9091   /* We don't support actual DWARFv5 units yet, we just use some
9092      DWARFv5 draft DIE tags in DWARFv4 format.  */
9093   int ver = dwarf_version < 5 ? dwarf_version : 4;
9094
9095   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
9096     dw2_asm_output_data (4, 0xffffffff,
9097       "Initial length escape value indicating 64-bit DWARF extension");
9098   dw2_asm_output_data (DWARF_OFFSET_SIZE,
9099                        next_die_offset - DWARF_INITIAL_LENGTH_SIZE,
9100                        "Length of Compilation Unit Info");
9101   dw2_asm_output_data (2, ver, "DWARF version number");
9102   dw2_asm_output_offset (DWARF_OFFSET_SIZE, abbrev_section_label,
9103                          debug_abbrev_section,
9104                          "Offset Into Abbrev. Section");
9105   dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Pointer Size (in bytes)");
9106 }
9107
9108 /* Output the compilation unit DIE and its children.  */
9109
9110 static void
9111 output_comp_unit (dw_die_ref die, int output_if_empty)
9112 {
9113   const char *secname, *oldsym;
9114   char *tmp;
9115
9116   /* Unless we are outputting main CU, we may throw away empty ones.  */
9117   if (!output_if_empty && die->die_child == NULL)
9118     return;
9119
9120   /* Even if there are no children of this DIE, we must output the information
9121      about the compilation unit.  Otherwise, on an empty translation unit, we
9122      will generate a present, but empty, .debug_info section.  IRIX 6.5 `nm'
9123      will then complain when examining the file.  First mark all the DIEs in
9124      this CU so we know which get local refs.  */
9125   mark_dies (die);
9126
9127   external_ref_hash_type *extern_map = optimize_external_refs (die);
9128
9129   build_abbrev_table (die, extern_map);
9130
9131   delete extern_map;
9132
9133   /* Initialize the beginning DIE offset - and calculate sizes/offsets.  */
9134   next_die_offset = DWARF_COMPILE_UNIT_HEADER_SIZE;
9135   calc_die_sizes (die);
9136
9137   oldsym = die->die_id.die_symbol;
9138   if (oldsym)
9139     {
9140       tmp = XALLOCAVEC (char, strlen (oldsym) + 24);
9141
9142       sprintf (tmp, ".gnu.linkonce.wi.%s", oldsym);
9143       secname = tmp;
9144       die->die_id.die_symbol = NULL;
9145       switch_to_section (get_section (secname, SECTION_DEBUG, NULL));
9146     }
9147   else
9148     {
9149       switch_to_section (debug_info_section);
9150       ASM_OUTPUT_LABEL (asm_out_file, debug_info_section_label);
9151       info_section_emitted = true;
9152     }
9153
9154   /* Output debugging information.  */
9155   output_compilation_unit_header ();
9156   output_die (die);
9157
9158   /* Leave the marks on the main CU, so we can check them in
9159      output_pubnames.  */
9160   if (oldsym)
9161     {
9162       unmark_dies (die);
9163       die->die_id.die_symbol = oldsym;
9164     }
9165 }
9166
9167 /* Whether to generate the DWARF accelerator tables in .debug_pubnames
9168    and .debug_pubtypes.  This is configured per-target, but can be
9169    overridden by the -gpubnames or -gno-pubnames options.  */
9170
9171 static inline bool
9172 want_pubnames (void)
9173 {
9174   if (debug_info_level <= DINFO_LEVEL_TERSE)
9175     return false;
9176   if (debug_generate_pub_sections != -1)
9177     return debug_generate_pub_sections;
9178   return targetm.want_debug_pub_sections;
9179 }
9180
9181 /* Add the DW_AT_GNU_pubnames and DW_AT_GNU_pubtypes attributes.  */
9182
9183 static void
9184 add_AT_pubnames (dw_die_ref die)
9185 {
9186   if (want_pubnames ())
9187     add_AT_flag (die, DW_AT_GNU_pubnames, 1);
9188 }
9189
9190 /* Add a string attribute value to a skeleton DIE.  */
9191
9192 static inline void
9193 add_skeleton_AT_string (dw_die_ref die, enum dwarf_attribute attr_kind,
9194                         const char *str)
9195 {
9196   dw_attr_node attr;
9197   struct indirect_string_node *node;
9198
9199   if (! skeleton_debug_str_hash)
9200     skeleton_debug_str_hash
9201       = hash_table<indirect_string_hasher>::create_ggc (10);
9202
9203   node = find_AT_string_in_table (str, skeleton_debug_str_hash);
9204   find_string_form (node);
9205   if (node->form == DW_FORM_GNU_str_index)
9206     node->form = DW_FORM_strp;
9207
9208   attr.dw_attr = attr_kind;
9209   attr.dw_attr_val.val_class = dw_val_class_str;
9210   attr.dw_attr_val.val_entry = NULL;
9211   attr.dw_attr_val.v.val_str = node;
9212   add_dwarf_attr (die, &attr);
9213 }
9214
9215 /* Helper function to generate top-level dies for skeleton debug_info and
9216    debug_types.  */
9217
9218 static void
9219 add_top_level_skeleton_die_attrs (dw_die_ref die)
9220 {
9221   const char *dwo_file_name = concat (aux_base_name, ".dwo", NULL);
9222   const char *comp_dir = comp_dir_string ();
9223
9224   add_skeleton_AT_string (die, DW_AT_GNU_dwo_name, dwo_file_name);
9225   if (comp_dir != NULL)
9226     add_skeleton_AT_string (die, DW_AT_comp_dir, comp_dir);
9227   add_AT_pubnames (die);
9228   add_AT_lineptr (die, DW_AT_GNU_addr_base, debug_addr_section_label);
9229 }
9230
9231 /* Output skeleton debug sections that point to the dwo file.  */
9232
9233 static void
9234 output_skeleton_debug_sections (dw_die_ref comp_unit)
9235 {
9236   /* We don't support actual DWARFv5 units yet, we just use some
9237      DWARFv5 draft DIE tags in DWARFv4 format.  */
9238   int ver = dwarf_version < 5 ? dwarf_version : 4;
9239
9240   /* These attributes will be found in the full debug_info section.  */
9241   remove_AT (comp_unit, DW_AT_producer);
9242   remove_AT (comp_unit, DW_AT_language);
9243
9244   switch_to_section (debug_skeleton_info_section);
9245   ASM_OUTPUT_LABEL (asm_out_file, debug_skeleton_info_section_label);
9246
9247   /* Produce the skeleton compilation-unit header.  This one differs enough from
9248      a normal CU header that it's better not to call output_compilation_unit
9249      header.  */
9250   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
9251     dw2_asm_output_data (4, 0xffffffff,
9252       "Initial length escape value indicating 64-bit DWARF extension");
9253
9254   dw2_asm_output_data (DWARF_OFFSET_SIZE,
9255                        DWARF_COMPILE_UNIT_HEADER_SIZE
9256                        - DWARF_INITIAL_LENGTH_SIZE
9257                        + size_of_die (comp_unit),
9258                       "Length of Compilation Unit Info");
9259   dw2_asm_output_data (2, ver, "DWARF version number");
9260   dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_skeleton_abbrev_section_label,
9261                          debug_abbrev_section,
9262                          "Offset Into Abbrev. Section");
9263   dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Pointer Size (in bytes)");
9264
9265   comp_unit->die_abbrev = SKELETON_COMP_DIE_ABBREV;
9266   output_die (comp_unit);
9267
9268   /* Build the skeleton debug_abbrev section.  */
9269   switch_to_section (debug_skeleton_abbrev_section);
9270   ASM_OUTPUT_LABEL (asm_out_file, debug_skeleton_abbrev_section_label);
9271
9272   output_die_abbrevs (SKELETON_COMP_DIE_ABBREV, comp_unit);
9273
9274   dw2_asm_output_data (1, 0, "end of skeleton .debug_abbrev");
9275 }
9276
9277 /* Output a comdat type unit DIE and its children.  */
9278
9279 static void
9280 output_comdat_type_unit (comdat_type_node *node)
9281 {
9282   const char *secname;
9283   char *tmp;
9284   int i;
9285 #if defined (OBJECT_FORMAT_ELF)
9286   tree comdat_key;
9287 #endif
9288
9289   /* First mark all the DIEs in this CU so we know which get local refs.  */
9290   mark_dies (node->root_die);
9291
9292   external_ref_hash_type *extern_map = optimize_external_refs (node->root_die);
9293
9294   build_abbrev_table (node->root_die, extern_map);
9295
9296   delete extern_map;
9297   extern_map = NULL;
9298
9299   /* Initialize the beginning DIE offset - and calculate sizes/offsets.  */
9300   next_die_offset = DWARF_COMDAT_TYPE_UNIT_HEADER_SIZE;
9301   calc_die_sizes (node->root_die);
9302
9303 #if defined (OBJECT_FORMAT_ELF)
9304   if (!dwarf_split_debug_info)
9305     secname = ".debug_types";
9306   else
9307     secname = ".debug_types.dwo";
9308
9309   tmp = XALLOCAVEC (char, 4 + DWARF_TYPE_SIGNATURE_SIZE * 2);
9310   sprintf (tmp, "wt.");
9311   for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++)
9312     sprintf (tmp + 3 + i * 2, "%02x", node->signature[i] & 0xff);
9313   comdat_key = get_identifier (tmp);
9314   targetm.asm_out.named_section (secname,
9315                                  SECTION_DEBUG | SECTION_LINKONCE,
9316                                  comdat_key);
9317 #else
9318   tmp = XALLOCAVEC (char, 18 + DWARF_TYPE_SIGNATURE_SIZE * 2);
9319   sprintf (tmp, ".gnu.linkonce.wt.");
9320   for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++)
9321     sprintf (tmp + 17 + i * 2, "%02x", node->signature[i] & 0xff);
9322   secname = tmp;
9323   switch_to_section (get_section (secname, SECTION_DEBUG, NULL));
9324 #endif
9325
9326   /* Output debugging information.  */
9327   output_compilation_unit_header ();
9328   output_signature (node->signature, "Type Signature");
9329   dw2_asm_output_data (DWARF_OFFSET_SIZE, node->type_die->die_offset,
9330                        "Offset to Type DIE");
9331   output_die (node->root_die);
9332
9333   unmark_dies (node->root_die);
9334 }
9335
9336 /* Return the DWARF2/3 pubname associated with a decl.  */
9337
9338 static const char *
9339 dwarf2_name (tree decl, int scope)
9340 {
9341   if (DECL_NAMELESS (decl))
9342     return NULL;
9343   return lang_hooks.dwarf_name (decl, scope ? 1 : 0);
9344 }
9345
9346 /* Add a new entry to .debug_pubnames if appropriate.  */
9347
9348 static void
9349 add_pubname_string (const char *str, dw_die_ref die)
9350 {
9351   pubname_entry e;
9352
9353   e.die = die;
9354   e.name = xstrdup (str);
9355   vec_safe_push (pubname_table, e);
9356 }
9357
9358 static void
9359 add_pubname (tree decl, dw_die_ref die)
9360 {
9361   if (!want_pubnames ())
9362     return;
9363
9364   /* Don't add items to the table when we expect that the consumer will have
9365      just read the enclosing die.  For example, if the consumer is looking at a
9366      class_member, it will either be inside the class already, or will have just
9367      looked up the class to find the member.  Either way, searching the class is
9368      faster than searching the index.  */
9369   if ((TREE_PUBLIC (decl) && !class_scope_p (die->die_parent))
9370       || is_cu_die (die->die_parent) || is_namespace_die (die->die_parent))
9371     {
9372       const char *name = dwarf2_name (decl, 1);
9373
9374       if (name)
9375         add_pubname_string (name, die);
9376     }
9377 }
9378
9379 /* Add an enumerator to the pubnames section.  */
9380
9381 static void
9382 add_enumerator_pubname (const char *scope_name, dw_die_ref die)
9383 {
9384   pubname_entry e;
9385
9386   gcc_assert (scope_name);
9387   e.name = concat (scope_name, get_AT_string (die, DW_AT_name), NULL);
9388   e.die = die;
9389   vec_safe_push (pubname_table, e);
9390 }
9391
9392 /* Add a new entry to .debug_pubtypes if appropriate.  */
9393
9394 static void
9395 add_pubtype (tree decl, dw_die_ref die)
9396 {
9397   pubname_entry e;
9398
9399   if (!want_pubnames ())
9400     return;
9401
9402   if ((TREE_PUBLIC (decl)
9403        || is_cu_die (die->die_parent) || is_namespace_die (die->die_parent))
9404       && (die->die_tag == DW_TAG_typedef || COMPLETE_TYPE_P (decl)))
9405     {
9406       tree scope = NULL;
9407       const char *scope_name = "";
9408       const char *sep = is_cxx () ? "::" : ".";
9409       const char *name;
9410
9411       scope = TYPE_P (decl) ? TYPE_CONTEXT (decl) : NULL;
9412       if (scope && TREE_CODE (scope) == NAMESPACE_DECL)
9413         {
9414           scope_name = lang_hooks.dwarf_name (scope, 1);
9415           if (scope_name != NULL && scope_name[0] != '\0')
9416             scope_name = concat (scope_name, sep, NULL);
9417           else
9418             scope_name = "";
9419         }
9420
9421       if (TYPE_P (decl))
9422         name = type_tag (decl);
9423       else
9424         name = lang_hooks.dwarf_name (decl, 1);
9425
9426       /* If we don't have a name for the type, there's no point in adding
9427          it to the table.  */
9428       if (name != NULL && name[0] != '\0')
9429         {
9430           e.die = die;
9431           e.name = concat (scope_name, name, NULL);
9432           vec_safe_push (pubtype_table, e);
9433         }
9434
9435       /* Although it might be more consistent to add the pubinfo for the
9436          enumerators as their dies are created, they should only be added if the
9437          enum type meets the criteria above.  So rather than re-check the parent
9438          enum type whenever an enumerator die is created, just output them all
9439          here.  This isn't protected by the name conditional because anonymous
9440          enums don't have names.  */
9441       if (die->die_tag == DW_TAG_enumeration_type)
9442         {
9443           dw_die_ref c;
9444
9445           FOR_EACH_CHILD (die, c, add_enumerator_pubname (scope_name, c));
9446         }
9447     }
9448 }
9449
9450 /* Output a single entry in the pubnames table.  */
9451
9452 static void
9453 output_pubname (dw_offset die_offset, pubname_entry *entry)
9454 {
9455   dw_die_ref die = entry->die;
9456   int is_static = get_AT_flag (die, DW_AT_external) ? 0 : 1;
9457
9458   dw2_asm_output_data (DWARF_OFFSET_SIZE, die_offset, "DIE offset");
9459
9460   if (debug_generate_pub_sections == 2)
9461     {
9462       /* This logic follows gdb's method for determining the value of the flag
9463          byte.  */
9464       uint32_t flags = GDB_INDEX_SYMBOL_KIND_NONE;
9465       switch (die->die_tag)
9466       {
9467         case DW_TAG_typedef:
9468         case DW_TAG_base_type:
9469         case DW_TAG_subrange_type:
9470           GDB_INDEX_SYMBOL_KIND_SET_VALUE(flags, GDB_INDEX_SYMBOL_KIND_TYPE);
9471           GDB_INDEX_SYMBOL_STATIC_SET_VALUE(flags, 1);
9472           break;
9473         case DW_TAG_enumerator:
9474           GDB_INDEX_SYMBOL_KIND_SET_VALUE(flags,
9475                                           GDB_INDEX_SYMBOL_KIND_VARIABLE);
9476           if (!is_cxx () && !is_java ())
9477             GDB_INDEX_SYMBOL_STATIC_SET_VALUE(flags, 1);
9478           break;
9479         case DW_TAG_subprogram:
9480           GDB_INDEX_SYMBOL_KIND_SET_VALUE(flags,
9481                                           GDB_INDEX_SYMBOL_KIND_FUNCTION);
9482           if (!is_ada ())
9483             GDB_INDEX_SYMBOL_STATIC_SET_VALUE(flags, is_static);
9484           break;
9485         case DW_TAG_constant:
9486           GDB_INDEX_SYMBOL_KIND_SET_VALUE(flags,
9487                                           GDB_INDEX_SYMBOL_KIND_VARIABLE);
9488           GDB_INDEX_SYMBOL_STATIC_SET_VALUE(flags, is_static);
9489           break;
9490         case DW_TAG_variable:
9491           GDB_INDEX_SYMBOL_KIND_SET_VALUE(flags,
9492                                           GDB_INDEX_SYMBOL_KIND_VARIABLE);
9493           GDB_INDEX_SYMBOL_STATIC_SET_VALUE(flags, is_static);
9494           break;
9495         case DW_TAG_namespace:
9496         case DW_TAG_imported_declaration:
9497           GDB_INDEX_SYMBOL_KIND_SET_VALUE(flags, GDB_INDEX_SYMBOL_KIND_TYPE);
9498           break;
9499         case DW_TAG_class_type:
9500         case DW_TAG_interface_type:
9501         case DW_TAG_structure_type:
9502         case DW_TAG_union_type:
9503         case DW_TAG_enumeration_type:
9504           GDB_INDEX_SYMBOL_KIND_SET_VALUE(flags, GDB_INDEX_SYMBOL_KIND_TYPE);
9505           if (!is_cxx () && !is_java ())
9506             GDB_INDEX_SYMBOL_STATIC_SET_VALUE(flags, 1);
9507           break;
9508         default:
9509           /* An unusual tag.  Leave the flag-byte empty.  */
9510           break;
9511       }
9512       dw2_asm_output_data (1, flags >> GDB_INDEX_CU_BITSIZE,
9513                            "GDB-index flags");
9514     }
9515
9516   dw2_asm_output_nstring (entry->name, -1, "external name");
9517 }
9518
9519
9520 /* Output the public names table used to speed up access to externally
9521    visible names; or the public types table used to find type definitions.  */
9522
9523 static void
9524 output_pubnames (vec<pubname_entry, va_gc> *names)
9525 {
9526   unsigned i;
9527   unsigned long pubnames_length = size_of_pubnames (names);
9528   pubname_ref pub;
9529
9530   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
9531     dw2_asm_output_data (4, 0xffffffff,
9532       "Initial length escape value indicating 64-bit DWARF extension");
9533   dw2_asm_output_data (DWARF_OFFSET_SIZE, pubnames_length, "Pub Info Length");
9534
9535   /* Version number for pubnames/pubtypes is independent of dwarf version.  */
9536   dw2_asm_output_data (2, 2, "DWARF Version");
9537
9538   if (dwarf_split_debug_info)
9539     dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_skeleton_info_section_label,
9540                            debug_skeleton_info_section,
9541                            "Offset of Compilation Unit Info");
9542   else
9543     dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_info_section_label,
9544                            debug_info_section,
9545                            "Offset of Compilation Unit Info");
9546   dw2_asm_output_data (DWARF_OFFSET_SIZE, next_die_offset,
9547                        "Compilation Unit Length");
9548
9549   FOR_EACH_VEC_ELT (*names, i, pub)
9550     {
9551       if (include_pubname_in_output (names, pub))
9552         {
9553           dw_offset die_offset = pub->die->die_offset;
9554
9555           /* We shouldn't see pubnames for DIEs outside of the main CU.  */
9556           if (names == pubname_table && pub->die->die_tag != DW_TAG_enumerator)
9557             gcc_assert (pub->die->die_mark);
9558
9559           /* If we're putting types in their own .debug_types sections,
9560              the .debug_pubtypes table will still point to the compile
9561              unit (not the type unit), so we want to use the offset of
9562              the skeleton DIE (if there is one).  */
9563           if (pub->die->comdat_type_p && names == pubtype_table)
9564             {
9565               comdat_type_node_ref type_node = pub->die->die_id.die_type_node;
9566
9567               if (type_node != NULL)
9568                 die_offset = (type_node->skeleton_die != NULL
9569                               ? type_node->skeleton_die->die_offset
9570                               : comp_unit_die ()->die_offset);
9571             }
9572
9573           output_pubname (die_offset, pub);
9574         }
9575     }
9576
9577   dw2_asm_output_data (DWARF_OFFSET_SIZE, 0, NULL);
9578 }
9579
9580 /* Output public names and types tables if necessary.  */
9581
9582 static void
9583 output_pubtables (void)
9584 {
9585   if (!want_pubnames () || !info_section_emitted)
9586     return;
9587
9588   switch_to_section (debug_pubnames_section);
9589   output_pubnames (pubname_table);
9590   /* ??? Only defined by DWARF3, but emitted by Darwin for DWARF2.
9591      It shouldn't hurt to emit it always, since pure DWARF2 consumers
9592      simply won't look for the section.  */
9593   switch_to_section (debug_pubtypes_section);
9594   output_pubnames (pubtype_table);
9595 }
9596
9597
9598 /* Output the information that goes into the .debug_aranges table.
9599    Namely, define the beginning and ending address range of the
9600    text section generated for this compilation unit.  */
9601
9602 static void
9603 output_aranges (unsigned long aranges_length)
9604 {
9605   unsigned i;
9606
9607   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
9608     dw2_asm_output_data (4, 0xffffffff,
9609       "Initial length escape value indicating 64-bit DWARF extension");
9610   dw2_asm_output_data (DWARF_OFFSET_SIZE, aranges_length,
9611                        "Length of Address Ranges Info");
9612   /* Version number for aranges is still 2, even up to DWARF5.  */
9613   dw2_asm_output_data (2, 2, "DWARF Version");
9614   if (dwarf_split_debug_info)
9615     dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_skeleton_info_section_label,
9616                            debug_skeleton_info_section,
9617                            "Offset of Compilation Unit Info");
9618   else
9619     dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_info_section_label,
9620                            debug_info_section,
9621                            "Offset of Compilation Unit Info");
9622   dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Size of Address");
9623   dw2_asm_output_data (1, 0, "Size of Segment Descriptor");
9624
9625   /* We need to align to twice the pointer size here.  */
9626   if (DWARF_ARANGES_PAD_SIZE)
9627     {
9628       /* Pad using a 2 byte words so that padding is correct for any
9629          pointer size.  */
9630       dw2_asm_output_data (2, 0, "Pad to %d byte boundary",
9631                            2 * DWARF2_ADDR_SIZE);
9632       for (i = 2; i < (unsigned) DWARF_ARANGES_PAD_SIZE; i += 2)
9633         dw2_asm_output_data (2, 0, NULL);
9634     }
9635
9636   /* It is necessary not to output these entries if the sections were
9637      not used; if the sections were not used, the length will be 0 and
9638      the address may end up as 0 if the section is discarded by ld
9639      --gc-sections, leaving an invalid (0, 0) entry that can be
9640      confused with the terminator.  */
9641   if (text_section_used)
9642     {
9643       dw2_asm_output_addr (DWARF2_ADDR_SIZE, text_section_label, "Address");
9644       dw2_asm_output_delta (DWARF2_ADDR_SIZE, text_end_label,
9645                             text_section_label, "Length");
9646     }
9647   if (cold_text_section_used)
9648     {
9649       dw2_asm_output_addr (DWARF2_ADDR_SIZE, cold_text_section_label,
9650                            "Address");
9651       dw2_asm_output_delta (DWARF2_ADDR_SIZE, cold_end_label,
9652                             cold_text_section_label, "Length");
9653     }
9654
9655   if (have_multiple_function_sections)
9656     {
9657       unsigned fde_idx;
9658       dw_fde_ref fde;
9659
9660       FOR_EACH_VEC_ELT (*fde_vec, fde_idx, fde)
9661         {
9662           if (DECL_IGNORED_P (fde->decl))
9663             continue;
9664           if (!fde->in_std_section)
9665             {
9666               dw2_asm_output_addr (DWARF2_ADDR_SIZE, fde->dw_fde_begin,
9667                                    "Address");
9668               dw2_asm_output_delta (DWARF2_ADDR_SIZE, fde->dw_fde_end,
9669                                     fde->dw_fde_begin, "Length");
9670             }
9671           if (fde->dw_fde_second_begin && !fde->second_in_std_section)
9672             {
9673               dw2_asm_output_addr (DWARF2_ADDR_SIZE, fde->dw_fde_second_begin,
9674                                    "Address");
9675               dw2_asm_output_delta (DWARF2_ADDR_SIZE, fde->dw_fde_second_end,
9676                                     fde->dw_fde_second_begin, "Length");
9677             }
9678         }
9679     }
9680
9681   /* Output the terminator words.  */
9682   dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
9683   dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
9684 }
9685
9686 /* Add a new entry to .debug_ranges.  Return the offset at which it
9687    was placed.  */
9688
9689 static unsigned int
9690 add_ranges_num (int num)
9691 {
9692   unsigned int in_use = ranges_table_in_use;
9693
9694   if (in_use == ranges_table_allocated)
9695     {
9696       ranges_table_allocated += RANGES_TABLE_INCREMENT;
9697       ranges_table = GGC_RESIZEVEC (struct dw_ranges_struct, ranges_table,
9698                                     ranges_table_allocated);
9699       memset (ranges_table + ranges_table_in_use, 0,
9700               RANGES_TABLE_INCREMENT * sizeof (struct dw_ranges_struct));
9701     }
9702
9703   ranges_table[in_use].num = num;
9704   ranges_table_in_use = in_use + 1;
9705
9706   return in_use * 2 * DWARF2_ADDR_SIZE;
9707 }
9708
9709 /* Add a new entry to .debug_ranges corresponding to a block, or a
9710    range terminator if BLOCK is NULL.  */
9711
9712 static unsigned int
9713 add_ranges (const_tree block)
9714 {
9715   return add_ranges_num (block ? BLOCK_NUMBER (block) : 0);
9716 }
9717
9718 /* Add a new entry to .debug_ranges corresponding to a pair of labels.
9719    When using dwarf_split_debug_info, address attributes in dies destined
9720    for the final executable should be direct references--setting the
9721    parameter force_direct ensures this behavior.  */
9722
9723 static void
9724 add_ranges_by_labels (dw_die_ref die, const char *begin, const char *end,
9725                       bool *added, bool force_direct)
9726 {
9727   unsigned int in_use = ranges_by_label_in_use;
9728   unsigned int offset;
9729
9730   if (in_use == ranges_by_label_allocated)
9731     {
9732       ranges_by_label_allocated += RANGES_TABLE_INCREMENT;
9733       ranges_by_label = GGC_RESIZEVEC (struct dw_ranges_by_label_struct,
9734                                        ranges_by_label,
9735                                        ranges_by_label_allocated);
9736       memset (ranges_by_label + ranges_by_label_in_use, 0,
9737               RANGES_TABLE_INCREMENT
9738               * sizeof (struct dw_ranges_by_label_struct));
9739     }
9740
9741   ranges_by_label[in_use].begin = begin;
9742   ranges_by_label[in_use].end = end;
9743   ranges_by_label_in_use = in_use + 1;
9744
9745   offset = add_ranges_num (-(int)in_use - 1);
9746   if (!*added)
9747     {
9748       add_AT_range_list (die, DW_AT_ranges, offset, force_direct);
9749       *added = true;
9750     }
9751 }
9752
9753 static void
9754 output_ranges (void)
9755 {
9756   unsigned i;
9757   static const char *const start_fmt = "Offset %#x";
9758   const char *fmt = start_fmt;
9759
9760   for (i = 0; i < ranges_table_in_use; i++)
9761     {
9762       int block_num = ranges_table[i].num;
9763
9764       if (block_num > 0)
9765         {
9766           char blabel[MAX_ARTIFICIAL_LABEL_BYTES];
9767           char elabel[MAX_ARTIFICIAL_LABEL_BYTES];
9768
9769           ASM_GENERATE_INTERNAL_LABEL (blabel, BLOCK_BEGIN_LABEL, block_num);
9770           ASM_GENERATE_INTERNAL_LABEL (elabel, BLOCK_END_LABEL, block_num);
9771
9772           /* If all code is in the text section, then the compilation
9773              unit base address defaults to DW_AT_low_pc, which is the
9774              base of the text section.  */
9775           if (!have_multiple_function_sections)
9776             {
9777               dw2_asm_output_delta (DWARF2_ADDR_SIZE, blabel,
9778                                     text_section_label,
9779                                     fmt, i * 2 * DWARF2_ADDR_SIZE);
9780               dw2_asm_output_delta (DWARF2_ADDR_SIZE, elabel,
9781                                     text_section_label, NULL);
9782             }
9783
9784           /* Otherwise, the compilation unit base address is zero,
9785              which allows us to use absolute addresses, and not worry
9786              about whether the target supports cross-section
9787              arithmetic.  */
9788           else
9789             {
9790               dw2_asm_output_addr (DWARF2_ADDR_SIZE, blabel,
9791                                    fmt, i * 2 * DWARF2_ADDR_SIZE);
9792               dw2_asm_output_addr (DWARF2_ADDR_SIZE, elabel, NULL);
9793             }
9794
9795           fmt = NULL;
9796         }
9797
9798       /* Negative block_num stands for an index into ranges_by_label.  */
9799       else if (block_num < 0)
9800         {
9801           int lab_idx = - block_num - 1;
9802
9803           if (!have_multiple_function_sections)
9804             {
9805               gcc_unreachable ();
9806 #if 0
9807               /* If we ever use add_ranges_by_labels () for a single
9808                  function section, all we have to do is to take out
9809                  the #if 0 above.  */
9810               dw2_asm_output_delta (DWARF2_ADDR_SIZE,
9811                                     ranges_by_label[lab_idx].begin,
9812                                     text_section_label,
9813                                     fmt, i * 2 * DWARF2_ADDR_SIZE);
9814               dw2_asm_output_delta (DWARF2_ADDR_SIZE,
9815                                     ranges_by_label[lab_idx].end,
9816                                     text_section_label, NULL);
9817 #endif
9818             }
9819           else
9820             {
9821               dw2_asm_output_addr (DWARF2_ADDR_SIZE,
9822                                    ranges_by_label[lab_idx].begin,
9823                                    fmt, i * 2 * DWARF2_ADDR_SIZE);
9824               dw2_asm_output_addr (DWARF2_ADDR_SIZE,
9825                                    ranges_by_label[lab_idx].end,
9826                                    NULL);
9827             }
9828         }
9829       else
9830         {
9831           dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
9832           dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
9833           fmt = start_fmt;
9834         }
9835     }
9836 }
9837
9838 /* Data structure containing information about input files.  */
9839 struct file_info
9840 {
9841   const char *path;     /* Complete file name.  */
9842   const char *fname;    /* File name part.  */
9843   int length;           /* Length of entire string.  */
9844   struct dwarf_file_data * file_idx;    /* Index in input file table.  */
9845   int dir_idx;          /* Index in directory table.  */
9846 };
9847
9848 /* Data structure containing information about directories with source
9849    files.  */
9850 struct dir_info
9851 {
9852   const char *path;     /* Path including directory name.  */
9853   int length;           /* Path length.  */
9854   int prefix;           /* Index of directory entry which is a prefix.  */
9855   int count;            /* Number of files in this directory.  */
9856   int dir_idx;          /* Index of directory used as base.  */
9857 };
9858
9859 /* Callback function for file_info comparison.  We sort by looking at
9860    the directories in the path.  */
9861
9862 static int
9863 file_info_cmp (const void *p1, const void *p2)
9864 {
9865   const struct file_info *const s1 = (const struct file_info *) p1;
9866   const struct file_info *const s2 = (const struct file_info *) p2;
9867   const unsigned char *cp1;
9868   const unsigned char *cp2;
9869
9870   /* Take care of file names without directories.  We need to make sure that
9871      we return consistent values to qsort since some will get confused if
9872      we return the same value when identical operands are passed in opposite
9873      orders.  So if neither has a directory, return 0 and otherwise return
9874      1 or -1 depending on which one has the directory.  */
9875   if ((s1->path == s1->fname || s2->path == s2->fname))
9876     return (s2->path == s2->fname) - (s1->path == s1->fname);
9877
9878   cp1 = (const unsigned char *) s1->path;
9879   cp2 = (const unsigned char *) s2->path;
9880
9881   while (1)
9882     {
9883       ++cp1;
9884       ++cp2;
9885       /* Reached the end of the first path?  If so, handle like above.  */
9886       if ((cp1 == (const unsigned char *) s1->fname)
9887           || (cp2 == (const unsigned char *) s2->fname))
9888         return ((cp2 == (const unsigned char *) s2->fname)
9889                 - (cp1 == (const unsigned char *) s1->fname));
9890
9891       /* Character of current path component the same?  */
9892       else if (*cp1 != *cp2)
9893         return *cp1 - *cp2;
9894     }
9895 }
9896
9897 struct file_name_acquire_data
9898 {
9899   struct file_info *files;
9900   int used_files;
9901   int max_files;
9902 };
9903
9904 /* Traversal function for the hash table.  */
9905
9906 int
9907 file_name_acquire (dwarf_file_data **slot, file_name_acquire_data *fnad)
9908 {
9909   struct dwarf_file_data *d = *slot;
9910   struct file_info *fi;
9911   const char *f;
9912
9913   gcc_assert (fnad->max_files >= d->emitted_number);
9914
9915   if (! d->emitted_number)
9916     return 1;
9917
9918   gcc_assert (fnad->max_files != fnad->used_files);
9919
9920   fi = fnad->files + fnad->used_files++;
9921
9922   /* Skip all leading "./".  */
9923   f = d->filename;
9924   while (f[0] == '.' && IS_DIR_SEPARATOR (f[1]))
9925     f += 2;
9926
9927   /* Create a new array entry.  */
9928   fi->path = f;
9929   fi->length = strlen (f);
9930   fi->file_idx = d;
9931
9932   /* Search for the file name part.  */
9933   f = strrchr (f, DIR_SEPARATOR);
9934 #if defined (DIR_SEPARATOR_2)
9935   {
9936     char *g = strrchr (fi->path, DIR_SEPARATOR_2);
9937
9938     if (g != NULL)
9939       {
9940         if (f == NULL || f < g)
9941           f = g;
9942       }
9943   }
9944 #endif
9945
9946   fi->fname = f == NULL ? fi->path : f + 1;
9947   return 1;
9948 }
9949
9950 /* Output the directory table and the file name table.  We try to minimize
9951    the total amount of memory needed.  A heuristic is used to avoid large
9952    slowdowns with many input files.  */
9953
9954 static void
9955 output_file_names (void)
9956 {
9957   struct file_name_acquire_data fnad;
9958   int numfiles;
9959   struct file_info *files;
9960   struct dir_info *dirs;
9961   int *saved;
9962   int *savehere;
9963   int *backmap;
9964   int ndirs;
9965   int idx_offset;
9966   int i;
9967
9968   if (!last_emitted_file)
9969     {
9970       dw2_asm_output_data (1, 0, "End directory table");
9971       dw2_asm_output_data (1, 0, "End file name table");
9972       return;
9973     }
9974
9975   numfiles = last_emitted_file->emitted_number;
9976
9977   /* Allocate the various arrays we need.  */
9978   files = XALLOCAVEC (struct file_info, numfiles);
9979   dirs = XALLOCAVEC (struct dir_info, numfiles);
9980
9981   fnad.files = files;
9982   fnad.used_files = 0;
9983   fnad.max_files = numfiles;
9984   file_table->traverse<file_name_acquire_data *, file_name_acquire> (&fnad);
9985   gcc_assert (fnad.used_files == fnad.max_files);
9986
9987   qsort (files, numfiles, sizeof (files[0]), file_info_cmp);
9988
9989   /* Find all the different directories used.  */
9990   dirs[0].path = files[0].path;
9991   dirs[0].length = files[0].fname - files[0].path;
9992   dirs[0].prefix = -1;
9993   dirs[0].count = 1;
9994   dirs[0].dir_idx = 0;
9995   files[0].dir_idx = 0;
9996   ndirs = 1;
9997
9998   for (i = 1; i < numfiles; i++)
9999     if (files[i].fname - files[i].path == dirs[ndirs - 1].length
10000         && memcmp (dirs[ndirs - 1].path, files[i].path,
10001                    dirs[ndirs - 1].length) == 0)
10002       {
10003         /* Same directory as last entry.  */
10004         files[i].dir_idx = ndirs - 1;
10005         ++dirs[ndirs - 1].count;
10006       }
10007     else
10008       {
10009         int j;
10010
10011         /* This is a new directory.  */
10012         dirs[ndirs].path = files[i].path;
10013         dirs[ndirs].length = files[i].fname - files[i].path;
10014         dirs[ndirs].count = 1;
10015         dirs[ndirs].dir_idx = ndirs;
10016         files[i].dir_idx = ndirs;
10017
10018         /* Search for a prefix.  */
10019         dirs[ndirs].prefix = -1;
10020         for (j = 0; j < ndirs; j++)
10021           if (dirs[j].length < dirs[ndirs].length
10022               && dirs[j].length > 1
10023               && (dirs[ndirs].prefix == -1
10024                   || dirs[j].length > dirs[dirs[ndirs].prefix].length)
10025               && memcmp (dirs[j].path, dirs[ndirs].path, dirs[j].length) == 0)
10026             dirs[ndirs].prefix = j;
10027
10028         ++ndirs;
10029       }
10030
10031   /* Now to the actual work.  We have to find a subset of the directories which
10032      allow expressing the file name using references to the directory table
10033      with the least amount of characters.  We do not do an exhaustive search
10034      where we would have to check out every combination of every single
10035      possible prefix.  Instead we use a heuristic which provides nearly optimal
10036      results in most cases and never is much off.  */
10037   saved = XALLOCAVEC (int, ndirs);
10038   savehere = XALLOCAVEC (int, ndirs);
10039
10040   memset (saved, '\0', ndirs * sizeof (saved[0]));
10041   for (i = 0; i < ndirs; i++)
10042     {
10043       int j;
10044       int total;
10045
10046       /* We can always save some space for the current directory.  But this
10047          does not mean it will be enough to justify adding the directory.  */
10048       savehere[i] = dirs[i].length;
10049       total = (savehere[i] - saved[i]) * dirs[i].count;
10050
10051       for (j = i + 1; j < ndirs; j++)
10052         {
10053           savehere[j] = 0;
10054           if (saved[j] < dirs[i].length)
10055             {
10056               /* Determine whether the dirs[i] path is a prefix of the
10057                  dirs[j] path.  */
10058               int k;
10059
10060               k = dirs[j].prefix;
10061               while (k != -1 && k != (int) i)
10062                 k = dirs[k].prefix;
10063
10064               if (k == (int) i)
10065                 {
10066                   /* Yes it is.  We can possibly save some memory by
10067                      writing the filenames in dirs[j] relative to
10068                      dirs[i].  */
10069                   savehere[j] = dirs[i].length;
10070                   total += (savehere[j] - saved[j]) * dirs[j].count;
10071                 }
10072             }
10073         }
10074
10075       /* Check whether we can save enough to justify adding the dirs[i]
10076          directory.  */
10077       if (total > dirs[i].length + 1)
10078         {
10079           /* It's worthwhile adding.  */
10080           for (j = i; j < ndirs; j++)
10081             if (savehere[j] > 0)
10082               {
10083                 /* Remember how much we saved for this directory so far.  */
10084                 saved[j] = savehere[j];
10085
10086                 /* Remember the prefix directory.  */
10087                 dirs[j].dir_idx = i;
10088               }
10089         }
10090     }
10091
10092   /* Emit the directory name table.  */
10093   idx_offset = dirs[0].length > 0 ? 1 : 0;
10094   for (i = 1 - idx_offset; i < ndirs; i++)
10095     dw2_asm_output_nstring (dirs[i].path,
10096                             dirs[i].length
10097                              - !DWARF2_DIR_SHOULD_END_WITH_SEPARATOR,
10098                             "Directory Entry: %#x", i + idx_offset);
10099
10100   dw2_asm_output_data (1, 0, "End directory table");
10101
10102   /* We have to emit them in the order of emitted_number since that's
10103      used in the debug info generation.  To do this efficiently we
10104      generate a back-mapping of the indices first.  */
10105   backmap = XALLOCAVEC (int, numfiles);
10106   for (i = 0; i < numfiles; i++)
10107     backmap[files[i].file_idx->emitted_number - 1] = i;
10108
10109   /* Now write all the file names.  */
10110   for (i = 0; i < numfiles; i++)
10111     {
10112       int file_idx = backmap[i];
10113       int dir_idx = dirs[files[file_idx].dir_idx].dir_idx;
10114
10115 #ifdef VMS_DEBUGGING_INFO
10116 #define MAX_VMS_VERSION_LEN 6 /* ";32768" */
10117
10118       /* Setting these fields can lead to debugger miscomparisons,
10119          but VMS Debug requires them to be set correctly.  */
10120
10121       int ver;
10122       long long cdt;
10123       long siz;
10124       int maxfilelen = strlen (files[file_idx].path)
10125                                + dirs[dir_idx].length
10126                                + MAX_VMS_VERSION_LEN + 1;
10127       char *filebuf = XALLOCAVEC (char, maxfilelen);
10128
10129       vms_file_stats_name (files[file_idx].path, 0, 0, 0, &ver);
10130       snprintf (filebuf, maxfilelen, "%s;%d",
10131                 files[file_idx].path + dirs[dir_idx].length, ver);
10132
10133       dw2_asm_output_nstring
10134         (filebuf, -1, "File Entry: %#x", (unsigned) i + 1);
10135
10136       /* Include directory index.  */
10137       dw2_asm_output_data_uleb128 (dir_idx + idx_offset, NULL);
10138
10139       /* Modification time.  */
10140       dw2_asm_output_data_uleb128
10141         ((vms_file_stats_name (files[file_idx].path, &cdt, 0, 0, 0) == 0)
10142           ? cdt : 0,
10143          NULL);
10144
10145       /* File length in bytes.  */
10146       dw2_asm_output_data_uleb128
10147         ((vms_file_stats_name (files[file_idx].path, 0, &siz, 0, 0) == 0)
10148           ? siz : 0,
10149          NULL);
10150 #else
10151       dw2_asm_output_nstring (files[file_idx].path + dirs[dir_idx].length, -1,
10152                               "File Entry: %#x", (unsigned) i + 1);
10153
10154       /* Include directory index.  */
10155       dw2_asm_output_data_uleb128 (dir_idx + idx_offset, NULL);
10156
10157       /* Modification time.  */
10158       dw2_asm_output_data_uleb128 (0, NULL);
10159
10160       /* File length in bytes.  */
10161       dw2_asm_output_data_uleb128 (0, NULL);
10162 #endif /* VMS_DEBUGGING_INFO */
10163     }
10164
10165   dw2_asm_output_data (1, 0, "End file name table");
10166 }
10167
10168
10169 /* Output one line number table into the .debug_line section.  */
10170
10171 static void
10172 output_one_line_info_table (dw_line_info_table *table)
10173 {
10174   char line_label[MAX_ARTIFICIAL_LABEL_BYTES];
10175   unsigned int current_line = 1;
10176   bool current_is_stmt = DWARF_LINE_DEFAULT_IS_STMT_START;
10177   dw_line_info_entry *ent;
10178   size_t i;
10179
10180   FOR_EACH_VEC_SAFE_ELT (table->entries, i, ent)
10181     {
10182       switch (ent->opcode)
10183         {
10184         case LI_set_address:
10185           /* ??? Unfortunately, we have little choice here currently, and
10186              must always use the most general form.  GCC does not know the
10187              address delta itself, so we can't use DW_LNS_advance_pc.  Many
10188              ports do have length attributes which will give an upper bound
10189              on the address range.  We could perhaps use length attributes
10190              to determine when it is safe to use DW_LNS_fixed_advance_pc.  */
10191           ASM_GENERATE_INTERNAL_LABEL (line_label, LINE_CODE_LABEL, ent->val);
10192
10193           /* This can handle any delta.  This takes
10194              4+DWARF2_ADDR_SIZE bytes.  */
10195           dw2_asm_output_data (1, 0, "set address %s", line_label);
10196           dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
10197           dw2_asm_output_data (1, DW_LNE_set_address, NULL);
10198           dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
10199           break;
10200
10201         case LI_set_line:
10202           if (ent->val == current_line)
10203             {
10204               /* We still need to start a new row, so output a copy insn.  */
10205               dw2_asm_output_data (1, DW_LNS_copy,
10206                                    "copy line %u", current_line);
10207             }
10208           else
10209             {
10210               int line_offset = ent->val - current_line;
10211               int line_delta = line_offset - DWARF_LINE_BASE;
10212
10213               current_line = ent->val;
10214               if (line_delta >= 0 && line_delta < (DWARF_LINE_RANGE - 1))
10215                 {
10216                   /* This can handle deltas from -10 to 234, using the current
10217                      definitions of DWARF_LINE_BASE and DWARF_LINE_RANGE.
10218                      This takes 1 byte.  */
10219                   dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE + line_delta,
10220                                        "line %u", current_line);
10221                 }
10222               else
10223                 {
10224                   /* This can handle any delta.  This takes at least 4 bytes,
10225                      depending on the value being encoded.  */
10226                   dw2_asm_output_data (1, DW_LNS_advance_line,
10227                                        "advance to line %u", current_line);
10228                   dw2_asm_output_data_sleb128 (line_offset, NULL);
10229                   dw2_asm_output_data (1, DW_LNS_copy, NULL);
10230                 }
10231             }
10232           break;
10233
10234         case LI_set_file:
10235           dw2_asm_output_data (1, DW_LNS_set_file, "set file %u", ent->val);
10236           dw2_asm_output_data_uleb128 (ent->val, "%u", ent->val);
10237           break;
10238
10239         case LI_set_column:
10240           dw2_asm_output_data (1, DW_LNS_set_column, "column %u", ent->val);
10241           dw2_asm_output_data_uleb128 (ent->val, "%u", ent->val);
10242           break;
10243
10244         case LI_negate_stmt:
10245           current_is_stmt = !current_is_stmt;
10246           dw2_asm_output_data (1, DW_LNS_negate_stmt,
10247                                "is_stmt %d", current_is_stmt);
10248           break;
10249
10250         case LI_set_prologue_end:
10251           dw2_asm_output_data (1, DW_LNS_set_prologue_end,
10252                                "set prologue end");
10253           break;
10254           
10255         case LI_set_epilogue_begin:
10256           dw2_asm_output_data (1, DW_LNS_set_epilogue_begin,
10257                                "set epilogue begin");
10258           break;
10259
10260         case LI_set_discriminator:
10261           dw2_asm_output_data (1, 0, "discriminator %u", ent->val);
10262           dw2_asm_output_data_uleb128 (1 + size_of_uleb128 (ent->val), NULL);
10263           dw2_asm_output_data (1, DW_LNE_set_discriminator, NULL);
10264           dw2_asm_output_data_uleb128 (ent->val, NULL);
10265           break;
10266         }
10267     }
10268
10269   /* Emit debug info for the address of the end of the table.  */
10270   dw2_asm_output_data (1, 0, "set address %s", table->end_label);
10271   dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
10272   dw2_asm_output_data (1, DW_LNE_set_address, NULL);
10273   dw2_asm_output_addr (DWARF2_ADDR_SIZE, table->end_label, NULL);
10274
10275   dw2_asm_output_data (1, 0, "end sequence");
10276   dw2_asm_output_data_uleb128 (1, NULL);
10277   dw2_asm_output_data (1, DW_LNE_end_sequence, NULL);
10278 }
10279
10280 /* Output the source line number correspondence information.  This
10281    information goes into the .debug_line section.  */
10282
10283 static void
10284 output_line_info (bool prologue_only)
10285 {
10286   char l1[20], l2[20], p1[20], p2[20];
10287   /* We don't support DWARFv5 line tables yet.  */
10288   int ver = dwarf_version < 5 ? dwarf_version : 4;
10289   bool saw_one = false;
10290   int opc;
10291
10292   ASM_GENERATE_INTERNAL_LABEL (l1, LINE_NUMBER_BEGIN_LABEL, 0);
10293   ASM_GENERATE_INTERNAL_LABEL (l2, LINE_NUMBER_END_LABEL, 0);
10294   ASM_GENERATE_INTERNAL_LABEL (p1, LN_PROLOG_AS_LABEL, 0);
10295   ASM_GENERATE_INTERNAL_LABEL (p2, LN_PROLOG_END_LABEL, 0);
10296
10297   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
10298     dw2_asm_output_data (4, 0xffffffff,
10299       "Initial length escape value indicating 64-bit DWARF extension");
10300   dw2_asm_output_delta (DWARF_OFFSET_SIZE, l2, l1,
10301                         "Length of Source Line Info");
10302   ASM_OUTPUT_LABEL (asm_out_file, l1);
10303
10304   dw2_asm_output_data (2, ver, "DWARF Version");
10305   dw2_asm_output_delta (DWARF_OFFSET_SIZE, p2, p1, "Prolog Length");
10306   ASM_OUTPUT_LABEL (asm_out_file, p1);
10307
10308   /* Define the architecture-dependent minimum instruction length (in bytes).
10309      In this implementation of DWARF, this field is used for information
10310      purposes only.  Since GCC generates assembly language, we have no
10311      a priori knowledge of how many instruction bytes are generated for each
10312      source line, and therefore can use only the DW_LNE_set_address and
10313      DW_LNS_fixed_advance_pc line information commands.  Accordingly, we fix
10314      this as '1', which is "correct enough" for all architectures,
10315      and don't let the target override.  */
10316   dw2_asm_output_data (1, 1, "Minimum Instruction Length");
10317
10318   if (ver >= 4)
10319     dw2_asm_output_data (1, DWARF_LINE_DEFAULT_MAX_OPS_PER_INSN,
10320                          "Maximum Operations Per Instruction");
10321   dw2_asm_output_data (1, DWARF_LINE_DEFAULT_IS_STMT_START,
10322                        "Default is_stmt_start flag");
10323   dw2_asm_output_data (1, DWARF_LINE_BASE,
10324                        "Line Base Value (Special Opcodes)");
10325   dw2_asm_output_data (1, DWARF_LINE_RANGE,
10326                        "Line Range Value (Special Opcodes)");
10327   dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE,
10328                        "Special Opcode Base");
10329
10330   for (opc = 1; opc < DWARF_LINE_OPCODE_BASE; opc++)
10331     {
10332       int n_op_args;
10333       switch (opc)
10334         {
10335         case DW_LNS_advance_pc:
10336         case DW_LNS_advance_line:
10337         case DW_LNS_set_file:
10338         case DW_LNS_set_column:
10339         case DW_LNS_fixed_advance_pc:
10340         case DW_LNS_set_isa:
10341           n_op_args = 1;
10342           break;
10343         default:
10344           n_op_args = 0;
10345           break;
10346         }
10347
10348       dw2_asm_output_data (1, n_op_args, "opcode: %#x has %d args",
10349                            opc, n_op_args);
10350     }
10351
10352   /* Write out the information about the files we use.  */
10353   output_file_names ();
10354   ASM_OUTPUT_LABEL (asm_out_file, p2);
10355   if (prologue_only)
10356     {
10357       /* Output the marker for the end of the line number info.  */
10358       ASM_OUTPUT_LABEL (asm_out_file, l2);
10359       return;
10360     }
10361
10362   if (separate_line_info)
10363     {
10364       dw_line_info_table *table;
10365       size_t i;
10366
10367       FOR_EACH_VEC_ELT (*separate_line_info, i, table)
10368         if (table->in_use)
10369           {
10370             output_one_line_info_table (table);
10371             saw_one = true;
10372           }
10373     }
10374   if (cold_text_section_line_info && cold_text_section_line_info->in_use)
10375     {
10376       output_one_line_info_table (cold_text_section_line_info);
10377       saw_one = true;
10378     }
10379
10380   /* ??? Some Darwin linkers crash on a .debug_line section with no
10381      sequences.  Further, merely a DW_LNE_end_sequence entry is not
10382      sufficient -- the address column must also be initialized.
10383      Make sure to output at least one set_address/end_sequence pair,
10384      choosing .text since that section is always present.  */
10385   if (text_section_line_info->in_use || !saw_one)
10386     output_one_line_info_table (text_section_line_info);
10387
10388   /* Output the marker for the end of the line number info.  */
10389   ASM_OUTPUT_LABEL (asm_out_file, l2);
10390 }
10391 \f
10392 /* Given a pointer to a tree node for some base type, return a pointer to
10393    a DIE that describes the given type.
10394
10395    This routine must only be called for GCC type nodes that correspond to
10396    Dwarf base (fundamental) types.  */
10397
10398 static dw_die_ref
10399 base_type_die (tree type)
10400 {
10401   dw_die_ref base_type_result;
10402   enum dwarf_type encoding;
10403
10404   if (TREE_CODE (type) == ERROR_MARK || TREE_CODE (type) == VOID_TYPE)
10405     return 0;
10406
10407   /* If this is a subtype that should not be emitted as a subrange type,
10408      use the base type.  See subrange_type_for_debug_p.  */
10409   if (TREE_CODE (type) == INTEGER_TYPE && TREE_TYPE (type) != NULL_TREE)
10410     type = TREE_TYPE (type);
10411
10412   switch (TREE_CODE (type))
10413     {
10414     case INTEGER_TYPE:
10415       if ((dwarf_version >= 4 || !dwarf_strict)
10416           && TYPE_NAME (type)
10417           && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
10418           && DECL_IS_BUILTIN (TYPE_NAME (type))
10419           && DECL_NAME (TYPE_NAME (type)))
10420         {
10421           const char *name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type)));
10422           if (strcmp (name, "char16_t") == 0
10423               || strcmp (name, "char32_t") == 0)
10424             {
10425               encoding = DW_ATE_UTF;
10426               break;
10427             }
10428         }
10429       if (TYPE_STRING_FLAG (type))
10430         {
10431           if (TYPE_UNSIGNED (type))
10432             encoding = DW_ATE_unsigned_char;
10433           else
10434             encoding = DW_ATE_signed_char;
10435         }
10436       else if (TYPE_UNSIGNED (type))
10437         encoding = DW_ATE_unsigned;
10438       else
10439         encoding = DW_ATE_signed;
10440       break;
10441
10442     case REAL_TYPE:
10443       if (DECIMAL_FLOAT_MODE_P (TYPE_MODE (type)))
10444         {
10445           if (dwarf_version >= 3 || !dwarf_strict)
10446             encoding = DW_ATE_decimal_float;
10447           else
10448             encoding = DW_ATE_lo_user;
10449         }
10450       else
10451         encoding = DW_ATE_float;
10452       break;
10453
10454     case FIXED_POINT_TYPE:
10455       if (!(dwarf_version >= 3 || !dwarf_strict))
10456         encoding = DW_ATE_lo_user;
10457       else if (TYPE_UNSIGNED (type))
10458         encoding = DW_ATE_unsigned_fixed;
10459       else
10460         encoding = DW_ATE_signed_fixed;
10461       break;
10462
10463       /* Dwarf2 doesn't know anything about complex ints, so use
10464          a user defined type for it.  */
10465     case COMPLEX_TYPE:
10466       if (TREE_CODE (TREE_TYPE (type)) == REAL_TYPE)
10467         encoding = DW_ATE_complex_float;
10468       else
10469         encoding = DW_ATE_lo_user;
10470       break;
10471
10472     case BOOLEAN_TYPE:
10473       /* GNU FORTRAN/Ada/C++ BOOLEAN type.  */
10474       encoding = DW_ATE_boolean;
10475       break;
10476
10477     default:
10478       /* No other TREE_CODEs are Dwarf fundamental types.  */
10479       gcc_unreachable ();
10480     }
10481
10482   base_type_result = new_die (DW_TAG_base_type, comp_unit_die (), type);
10483
10484   add_AT_unsigned (base_type_result, DW_AT_byte_size,
10485                    int_size_in_bytes (type));
10486   add_AT_unsigned (base_type_result, DW_AT_encoding, encoding);
10487   add_pubtype (type, base_type_result);
10488
10489   return base_type_result;
10490 }
10491
10492 /* A C++ function with deduced return type can have a TEMPLATE_TYPE_PARM
10493    named 'auto' in its type: return true for it, false otherwise.  */
10494
10495 static inline bool
10496 is_cxx_auto (tree type)
10497 {
10498   if (is_cxx ())
10499     {
10500       tree name = TYPE_IDENTIFIER (type);
10501       if (name == get_identifier ("auto")
10502           || name == get_identifier ("decltype(auto)"))
10503         return true;
10504     }
10505   return false;
10506 }
10507
10508 /* Given a pointer to an arbitrary ..._TYPE tree node, return nonzero if the
10509    given input type is a Dwarf "fundamental" type.  Otherwise return null.  */
10510
10511 static inline int
10512 is_base_type (tree type)
10513 {
10514   switch (TREE_CODE (type))
10515     {
10516     case ERROR_MARK:
10517     case VOID_TYPE:
10518     case INTEGER_TYPE:
10519     case REAL_TYPE:
10520     case FIXED_POINT_TYPE:
10521     case COMPLEX_TYPE:
10522     case BOOLEAN_TYPE:
10523     case POINTER_BOUNDS_TYPE:
10524       return 1;
10525
10526     case ARRAY_TYPE:
10527     case RECORD_TYPE:
10528     case UNION_TYPE:
10529     case QUAL_UNION_TYPE:
10530     case ENUMERAL_TYPE:
10531     case FUNCTION_TYPE:
10532     case METHOD_TYPE:
10533     case POINTER_TYPE:
10534     case REFERENCE_TYPE:
10535     case NULLPTR_TYPE:
10536     case OFFSET_TYPE:
10537     case LANG_TYPE:
10538     case VECTOR_TYPE:
10539       return 0;
10540
10541     default:
10542       if (is_cxx_auto (type))
10543         return 0;
10544       gcc_unreachable ();
10545     }
10546
10547   return 0;
10548 }
10549
10550 /* Given a pointer to a tree node, assumed to be some kind of a ..._TYPE
10551    node, return the size in bits for the type if it is a constant, or else
10552    return the alignment for the type if the type's size is not constant, or
10553    else return BITS_PER_WORD if the type actually turns out to be an
10554    ERROR_MARK node.  */
10555
10556 static inline unsigned HOST_WIDE_INT
10557 simple_type_size_in_bits (const_tree type)
10558 {
10559   if (TREE_CODE (type) == ERROR_MARK)
10560     return BITS_PER_WORD;
10561   else if (TYPE_SIZE (type) == NULL_TREE)
10562     return 0;
10563   else if (tree_fits_uhwi_p (TYPE_SIZE (type)))
10564     return tree_to_uhwi (TYPE_SIZE (type));
10565   else
10566     return TYPE_ALIGN (type);
10567 }
10568
10569 /* Similarly, but return an offset_int instead of UHWI.  */
10570
10571 static inline offset_int
10572 offset_int_type_size_in_bits (const_tree type)
10573 {
10574   if (TREE_CODE (type) == ERROR_MARK)
10575     return BITS_PER_WORD;
10576   else if (TYPE_SIZE (type) == NULL_TREE)
10577     return 0;
10578   else if (TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST)
10579     return wi::to_offset (TYPE_SIZE (type));
10580   else
10581     return TYPE_ALIGN (type);
10582 }
10583
10584 /*  Given a pointer to a tree node for a subrange type, return a pointer
10585     to a DIE that describes the given type.  */
10586
10587 static dw_die_ref
10588 subrange_type_die (tree type, tree low, tree high, dw_die_ref context_die)
10589 {
10590   dw_die_ref subrange_die;
10591   const HOST_WIDE_INT size_in_bytes = int_size_in_bytes (type);
10592
10593   if (context_die == NULL)
10594     context_die = comp_unit_die ();
10595
10596   subrange_die = new_die (DW_TAG_subrange_type, context_die, type);
10597
10598   if (int_size_in_bytes (TREE_TYPE (type)) != size_in_bytes)
10599     {
10600       /* The size of the subrange type and its base type do not match,
10601          so we need to generate a size attribute for the subrange type.  */
10602       add_AT_unsigned (subrange_die, DW_AT_byte_size, size_in_bytes);
10603     }
10604
10605   if (low)
10606     add_bound_info (subrange_die, DW_AT_lower_bound, low, NULL);
10607   if (high)
10608     add_bound_info (subrange_die, DW_AT_upper_bound, high, NULL);
10609
10610   return subrange_die;
10611 }
10612
10613 /* Returns the (const and/or volatile) cv_qualifiers associated with
10614    the decl node.  This will normally be augmented with the
10615    cv_qualifiers of the underlying type in add_type_attribute.  */
10616
10617 static int
10618 decl_quals (const_tree decl)
10619 {
10620   return ((TREE_READONLY (decl)
10621            ? TYPE_QUAL_CONST : TYPE_UNQUALIFIED)
10622           | (TREE_THIS_VOLATILE (decl)
10623              ? TYPE_QUAL_VOLATILE : TYPE_UNQUALIFIED));
10624 }
10625
10626 /* Determine the TYPE whose qualifiers match the largest strict subset
10627    of the given TYPE_QUALS, and return its qualifiers.  Ignore all
10628    qualifiers outside QUAL_MASK.  */
10629
10630 static int
10631 get_nearest_type_subqualifiers (tree type, int type_quals, int qual_mask)
10632 {
10633   tree t;
10634   int best_rank = 0, best_qual = 0, max_rank;
10635
10636   type_quals &= qual_mask;
10637   max_rank = popcount_hwi (type_quals) - 1;
10638
10639   for (t = TYPE_MAIN_VARIANT (type); t && best_rank < max_rank;
10640        t = TYPE_NEXT_VARIANT (t))
10641     {
10642       int q = TYPE_QUALS (t) & qual_mask;
10643
10644       if ((q & type_quals) == q && q != type_quals
10645           && check_base_type (t, type))
10646         {
10647           int rank = popcount_hwi (q);
10648
10649           if (rank > best_rank)
10650             {
10651               best_rank = rank;
10652               best_qual = q;
10653             }
10654         }
10655     }
10656
10657   return best_qual;
10658 }
10659
10660 /* Given a pointer to an arbitrary ..._TYPE tree node, return a debugging
10661    entry that chains various modifiers in front of the given type.  */
10662
10663 static dw_die_ref
10664 modified_type_die (tree type, int cv_quals, dw_die_ref context_die)
10665 {
10666   enum tree_code code = TREE_CODE (type);
10667   dw_die_ref mod_type_die;
10668   dw_die_ref sub_die = NULL;
10669   tree item_type = NULL;
10670   tree qualified_type;
10671   tree name, low, high;
10672   dw_die_ref mod_scope;
10673   /* Only these cv-qualifiers are currently handled.  */
10674   const int cv_qual_mask = (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE
10675                             | TYPE_QUAL_RESTRICT | TYPE_QUAL_ATOMIC);
10676
10677   if (code == ERROR_MARK)
10678     return NULL;
10679
10680   cv_quals &= cv_qual_mask;
10681
10682   /* Don't emit DW_TAG_restrict_type for DWARFv2, since it is a type
10683      tag modifier (and not an attribute) old consumers won't be able
10684      to handle it.  */
10685   if (dwarf_version < 3)
10686     cv_quals &= ~TYPE_QUAL_RESTRICT;
10687
10688   /* Likewise for DW_TAG_atomic_type for DWARFv5.  */
10689   if (dwarf_version < 5)
10690     cv_quals &= ~TYPE_QUAL_ATOMIC;
10691
10692   /* See if we already have the appropriately qualified variant of
10693      this type.  */
10694   qualified_type = get_qualified_type (type, cv_quals);
10695
10696   if (qualified_type == sizetype
10697       && TYPE_NAME (qualified_type)
10698       && TREE_CODE (TYPE_NAME (qualified_type)) == TYPE_DECL)
10699     {
10700       tree t = TREE_TYPE (TYPE_NAME (qualified_type));
10701
10702       gcc_checking_assert (TREE_CODE (t) == INTEGER_TYPE
10703                            && TYPE_PRECISION (t)
10704                            == TYPE_PRECISION (qualified_type)
10705                            && TYPE_UNSIGNED (t)
10706                            == TYPE_UNSIGNED (qualified_type));
10707       qualified_type = t;
10708     }
10709
10710   /* If we do, then we can just use its DIE, if it exists.  */
10711   if (qualified_type)
10712     {
10713       mod_type_die = lookup_type_die (qualified_type);
10714       if (mod_type_die)
10715         return mod_type_die;
10716     }
10717
10718   name = qualified_type ? TYPE_NAME (qualified_type) : NULL;
10719
10720   /* Handle C typedef types.  */
10721   if (name && TREE_CODE (name) == TYPE_DECL && DECL_ORIGINAL_TYPE (name)
10722       && !DECL_ARTIFICIAL (name))
10723     {
10724       tree dtype = TREE_TYPE (name);
10725
10726       if (qualified_type == dtype)
10727         {
10728           /* For a named type, use the typedef.  */
10729           gen_type_die (qualified_type, context_die);
10730           return lookup_type_die (qualified_type);
10731         }
10732       else
10733         {
10734           int dquals = TYPE_QUALS_NO_ADDR_SPACE (dtype);
10735           dquals &= cv_qual_mask;
10736           if ((dquals & ~cv_quals) != TYPE_UNQUALIFIED
10737               || (cv_quals == dquals && DECL_ORIGINAL_TYPE (name) != type))
10738             /* cv-unqualified version of named type.  Just use
10739                the unnamed type to which it refers.  */
10740             return modified_type_die (DECL_ORIGINAL_TYPE (name),
10741                                       cv_quals, context_die);
10742           /* Else cv-qualified version of named type; fall through.  */
10743         }
10744     }
10745
10746   mod_scope = scope_die_for (type, context_die);
10747
10748   if (cv_quals)
10749     {
10750       struct qual_info { int q; enum dwarf_tag t; };
10751       static const struct qual_info qual_info[] =
10752         {
10753           { TYPE_QUAL_ATOMIC, DW_TAG_atomic_type },
10754           { TYPE_QUAL_RESTRICT, DW_TAG_restrict_type },
10755           { TYPE_QUAL_VOLATILE, DW_TAG_volatile_type },
10756           { TYPE_QUAL_CONST, DW_TAG_const_type },
10757         };
10758       int sub_quals;
10759       unsigned i;
10760
10761       /* Determine a lesser qualified type that most closely matches
10762          this one.  Then generate DW_TAG_* entries for the remaining
10763          qualifiers.  */
10764       sub_quals = get_nearest_type_subqualifiers (type, cv_quals,
10765                                                   cv_qual_mask);
10766       mod_type_die = modified_type_die (type, sub_quals, context_die);
10767
10768       for (i = 0; i < sizeof (qual_info) / sizeof (qual_info[0]); i++)
10769         if (qual_info[i].q & cv_quals & ~sub_quals)
10770           {
10771             dw_die_ref d = new_die (qual_info[i].t, mod_scope, type);
10772             if (mod_type_die)
10773               add_AT_die_ref (d, DW_AT_type, mod_type_die);
10774             mod_type_die = d;
10775           }
10776     }
10777   else if (code == POINTER_TYPE)
10778     {
10779       mod_type_die = new_die (DW_TAG_pointer_type, mod_scope, type);
10780       add_AT_unsigned (mod_type_die, DW_AT_byte_size,
10781                        simple_type_size_in_bits (type) / BITS_PER_UNIT);
10782       item_type = TREE_TYPE (type);
10783       if (!ADDR_SPACE_GENERIC_P (TYPE_ADDR_SPACE (item_type)))
10784         add_AT_unsigned (mod_type_die, DW_AT_address_class,
10785                          TYPE_ADDR_SPACE (item_type));
10786     }
10787   else if (code == REFERENCE_TYPE)
10788     {
10789       if (TYPE_REF_IS_RVALUE (type) && dwarf_version >= 4)
10790         mod_type_die = new_die (DW_TAG_rvalue_reference_type, mod_scope,
10791                                 type);
10792       else
10793         mod_type_die = new_die (DW_TAG_reference_type, mod_scope, type);
10794       add_AT_unsigned (mod_type_die, DW_AT_byte_size,
10795                        simple_type_size_in_bits (type) / BITS_PER_UNIT);
10796       item_type = TREE_TYPE (type);
10797       if (!ADDR_SPACE_GENERIC_P (TYPE_ADDR_SPACE (item_type)))
10798         add_AT_unsigned (mod_type_die, DW_AT_address_class,
10799                          TYPE_ADDR_SPACE (item_type));
10800     }
10801   else if (code == INTEGER_TYPE
10802            && TREE_TYPE (type) != NULL_TREE
10803            && subrange_type_for_debug_p (type, &low, &high))
10804     {
10805       mod_type_die = subrange_type_die (type, low, high, context_die);
10806       item_type = TREE_TYPE (type);
10807     }
10808   else if (is_base_type (type))
10809     mod_type_die = base_type_die (type);
10810   else
10811     {
10812       gen_type_die (type, context_die);
10813
10814       /* We have to get the type_main_variant here (and pass that to the
10815          `lookup_type_die' routine) because the ..._TYPE node we have
10816          might simply be a *copy* of some original type node (where the
10817          copy was created to help us keep track of typedef names) and
10818          that copy might have a different TYPE_UID from the original
10819          ..._TYPE node.  */
10820       if (TREE_CODE (type) != VECTOR_TYPE)
10821         return lookup_type_die (type_main_variant (type));
10822       else
10823         /* Vectors have the debugging information in the type,
10824            not the main variant.  */
10825         return lookup_type_die (type);
10826     }
10827
10828   /* Builtin types don't have a DECL_ORIGINAL_TYPE.  For those,
10829      don't output a DW_TAG_typedef, since there isn't one in the
10830      user's program; just attach a DW_AT_name to the type.
10831      Don't attach a DW_AT_name to DW_TAG_const_type or DW_TAG_volatile_type
10832      if the base type already has the same name.  */
10833   if (name
10834       && ((TREE_CODE (name) != TYPE_DECL
10835            && (qualified_type == TYPE_MAIN_VARIANT (type)
10836                || (cv_quals == TYPE_UNQUALIFIED)))
10837           || (TREE_CODE (name) == TYPE_DECL
10838               && TREE_TYPE (name) == qualified_type
10839               && DECL_NAME (name))))
10840     {
10841       if (TREE_CODE (name) == TYPE_DECL)
10842         /* Could just call add_name_and_src_coords_attributes here,
10843            but since this is a builtin type it doesn't have any
10844            useful source coordinates anyway.  */
10845         name = DECL_NAME (name);
10846       add_name_attribute (mod_type_die, IDENTIFIER_POINTER (name));
10847     }
10848   /* This probably indicates a bug.  */
10849   else if (mod_type_die && mod_type_die->die_tag == DW_TAG_base_type)
10850     {
10851       name = TYPE_IDENTIFIER (type);
10852       add_name_attribute (mod_type_die,
10853                           name ? IDENTIFIER_POINTER (name) : "__unknown__");
10854     }
10855
10856   if (qualified_type)
10857     equate_type_number_to_die (qualified_type, mod_type_die);
10858
10859   if (item_type)
10860     /* We must do this after the equate_type_number_to_die call, in case
10861        this is a recursive type.  This ensures that the modified_type_die
10862        recursion will terminate even if the type is recursive.  Recursive
10863        types are possible in Ada.  */
10864     sub_die = modified_type_die (item_type,
10865                                  TYPE_QUALS_NO_ADDR_SPACE (item_type),
10866                                  context_die);
10867
10868   if (sub_die != NULL)
10869     add_AT_die_ref (mod_type_die, DW_AT_type, sub_die);
10870
10871   add_gnat_descriptive_type_attribute (mod_type_die, type, context_die);
10872   if (TYPE_ARTIFICIAL (type))
10873     add_AT_flag (mod_type_die, DW_AT_artificial, 1);
10874
10875   return mod_type_die;
10876 }
10877
10878 /* Generate DIEs for the generic parameters of T.
10879    T must be either a generic type or a generic function.
10880    See http://gcc.gnu.org/wiki/TemplateParmsDwarf for more.  */
10881
10882 static void
10883 gen_generic_params_dies (tree t)
10884 {
10885   tree parms, args;
10886   int parms_num, i;
10887   dw_die_ref die = NULL;
10888   int non_default;
10889
10890   if (!t || (TYPE_P (t) && !COMPLETE_TYPE_P (t)))
10891     return;
10892
10893   if (TYPE_P (t))
10894     die = lookup_type_die (t);
10895   else if (DECL_P (t))
10896     die = lookup_decl_die (t);
10897
10898   gcc_assert (die);
10899
10900   parms = lang_hooks.get_innermost_generic_parms (t);
10901   if (!parms)
10902     /* T has no generic parameter. It means T is neither a generic type
10903        or function. End of story.  */
10904     return;
10905
10906   parms_num = TREE_VEC_LENGTH (parms);
10907   args = lang_hooks.get_innermost_generic_args (t);
10908   if (TREE_CHAIN (args) && TREE_CODE (TREE_CHAIN (args)) == INTEGER_CST)
10909     non_default = int_cst_value (TREE_CHAIN (args));
10910   else
10911     non_default = TREE_VEC_LENGTH (args);
10912   for (i = 0; i < parms_num; i++)
10913     {
10914       tree parm, arg, arg_pack_elems;
10915       dw_die_ref parm_die;
10916
10917       parm = TREE_VEC_ELT (parms, i);
10918       arg = TREE_VEC_ELT (args, i);
10919       arg_pack_elems = lang_hooks.types.get_argument_pack_elems (arg);
10920       gcc_assert (parm && TREE_VALUE (parm) && arg);
10921
10922       if (parm && TREE_VALUE (parm) && arg)
10923         {
10924           /* If PARM represents a template parameter pack,
10925              emit a DW_TAG_GNU_template_parameter_pack DIE, followed
10926              by DW_TAG_template_*_parameter DIEs for the argument
10927              pack elements of ARG. Note that ARG would then be
10928              an argument pack.  */
10929           if (arg_pack_elems)
10930             parm_die = template_parameter_pack_die (TREE_VALUE (parm),
10931                                                     arg_pack_elems,
10932                                                     die);
10933           else
10934             parm_die = generic_parameter_die (TREE_VALUE (parm), arg,
10935                                               true /* emit name */, die);
10936           if (i >= non_default)
10937             add_AT_flag (parm_die, DW_AT_default_value, 1);
10938         }
10939     }
10940 }
10941
10942 /* Create and return a DIE for PARM which should be
10943    the representation of a generic type parameter.
10944    For instance, in the C++ front end, PARM would be a template parameter.
10945    ARG is the argument to PARM.
10946    EMIT_NAME_P if tree, the DIE will have DW_AT_name attribute set to the
10947    name of the PARM.
10948    PARENT_DIE is the parent DIE which the new created DIE should be added to,
10949    as a child node.  */
10950
10951 static dw_die_ref
10952 generic_parameter_die (tree parm, tree arg,
10953                        bool emit_name_p,
10954                        dw_die_ref parent_die)
10955 {
10956   dw_die_ref tmpl_die = NULL;
10957   const char *name = NULL;
10958
10959   if (!parm || !DECL_NAME (parm) || !arg)
10960     return NULL;
10961
10962   /* We support non-type generic parameters and arguments,
10963      type generic parameters and arguments, as well as
10964      generic generic parameters (a.k.a. template template parameters in C++)
10965      and arguments.  */
10966   if (TREE_CODE (parm) == PARM_DECL)
10967     /* PARM is a nontype generic parameter  */
10968     tmpl_die = new_die (DW_TAG_template_value_param, parent_die, parm);
10969   else if (TREE_CODE (parm) == TYPE_DECL)
10970     /* PARM is a type generic parameter.  */
10971     tmpl_die = new_die (DW_TAG_template_type_param, parent_die, parm);
10972   else if (lang_hooks.decls.generic_generic_parameter_decl_p (parm))
10973     /* PARM is a generic generic parameter.
10974        Its DIE is a GNU extension. It shall have a
10975        DW_AT_name attribute to represent the name of the template template
10976        parameter, and a DW_AT_GNU_template_name attribute to represent the
10977        name of the template template argument.  */
10978     tmpl_die = new_die (DW_TAG_GNU_template_template_param,
10979                         parent_die, parm);
10980   else
10981     gcc_unreachable ();
10982
10983   if (tmpl_die)
10984     {
10985       tree tmpl_type;
10986
10987       /* If PARM is a generic parameter pack, it means we are
10988          emitting debug info for a template argument pack element.
10989          In other terms, ARG is a template argument pack element.
10990          In that case, we don't emit any DW_AT_name attribute for
10991          the die.  */
10992       if (emit_name_p)
10993         {
10994           name = IDENTIFIER_POINTER (DECL_NAME (parm));
10995           gcc_assert (name);
10996           add_AT_string (tmpl_die, DW_AT_name, name);
10997         }
10998
10999       if (!lang_hooks.decls.generic_generic_parameter_decl_p (parm))
11000         {
11001           /* DWARF3, 5.6.8 says if PARM is a non-type generic parameter
11002              TMPL_DIE should have a child DW_AT_type attribute that is set
11003              to the type of the argument to PARM, which is ARG.
11004              If PARM is a type generic parameter, TMPL_DIE should have a
11005              child DW_AT_type that is set to ARG.  */
11006           tmpl_type = TYPE_P (arg) ? arg : TREE_TYPE (arg);
11007           add_type_attribute (tmpl_die, tmpl_type,
11008                               (TREE_THIS_VOLATILE (tmpl_type)
11009                                ? TYPE_QUAL_VOLATILE : TYPE_UNQUALIFIED),
11010                               parent_die);
11011         }
11012       else
11013         {
11014           /* So TMPL_DIE is a DIE representing a
11015              a generic generic template parameter, a.k.a template template
11016              parameter in C++ and arg is a template.  */
11017
11018           /* The DW_AT_GNU_template_name attribute of the DIE must be set
11019              to the name of the argument.  */
11020           name = dwarf2_name (TYPE_P (arg) ? TYPE_NAME (arg) : arg, 1);
11021           if (name)
11022             add_AT_string (tmpl_die, DW_AT_GNU_template_name, name);
11023         }
11024
11025       if (TREE_CODE (parm) == PARM_DECL)
11026         /* So PARM is a non-type generic parameter.
11027            DWARF3 5.6.8 says we must set a DW_AT_const_value child
11028            attribute of TMPL_DIE which value represents the value
11029            of ARG.
11030            We must be careful here:
11031            The value of ARG might reference some function decls.
11032            We might currently be emitting debug info for a generic
11033            type and types are emitted before function decls, we don't
11034            know if the function decls referenced by ARG will actually be
11035            emitted after cgraph computations.
11036            So must defer the generation of the DW_AT_const_value to
11037            after cgraph is ready.  */
11038         append_entry_to_tmpl_value_parm_die_table (tmpl_die, arg);
11039     }
11040
11041   return tmpl_die;
11042 }
11043
11044 /* Generate and return a  DW_TAG_GNU_template_parameter_pack DIE representing.
11045    PARM_PACK must be a template parameter pack. The returned DIE
11046    will be child DIE of PARENT_DIE.  */
11047
11048 static dw_die_ref
11049 template_parameter_pack_die (tree parm_pack,
11050                              tree parm_pack_args,
11051                              dw_die_ref parent_die)
11052 {
11053   dw_die_ref die;
11054   int j;
11055
11056   gcc_assert (parent_die && parm_pack);
11057
11058   die = new_die (DW_TAG_GNU_template_parameter_pack, parent_die, parm_pack);
11059   add_name_and_src_coords_attributes (die, parm_pack);
11060   for (j = 0; j < TREE_VEC_LENGTH (parm_pack_args); j++)
11061     generic_parameter_die (parm_pack,
11062                            TREE_VEC_ELT (parm_pack_args, j),
11063                            false /* Don't emit DW_AT_name */,
11064                            die);
11065   return die;
11066 }
11067
11068 /* Given a pointer to an arbitrary ..._TYPE tree node, return true if it is
11069    an enumerated type.  */
11070
11071 static inline int
11072 type_is_enum (const_tree type)
11073 {
11074   return TREE_CODE (type) == ENUMERAL_TYPE;
11075 }
11076
11077 /* Return the DBX register number described by a given RTL node.  */
11078
11079 static unsigned int
11080 dbx_reg_number (const_rtx rtl)
11081 {
11082   unsigned regno = REGNO (rtl);
11083
11084   gcc_assert (regno < FIRST_PSEUDO_REGISTER);
11085
11086 #ifdef LEAF_REG_REMAP
11087   if (crtl->uses_only_leaf_regs)
11088     {
11089       int leaf_reg = LEAF_REG_REMAP (regno);
11090       if (leaf_reg != -1)
11091         regno = (unsigned) leaf_reg;
11092     }
11093 #endif
11094
11095   regno = DBX_REGISTER_NUMBER (regno);
11096   gcc_assert (regno != INVALID_REGNUM);
11097   return regno;
11098 }
11099
11100 /* Optionally add a DW_OP_piece term to a location description expression.
11101    DW_OP_piece is only added if the location description expression already
11102    doesn't end with DW_OP_piece.  */
11103
11104 static void
11105 add_loc_descr_op_piece (dw_loc_descr_ref *list_head, int size)
11106 {
11107   dw_loc_descr_ref loc;
11108
11109   if (*list_head != NULL)
11110     {
11111       /* Find the end of the chain.  */
11112       for (loc = *list_head; loc->dw_loc_next != NULL; loc = loc->dw_loc_next)
11113         ;
11114
11115       if (loc->dw_loc_opc != DW_OP_piece)
11116         loc->dw_loc_next = new_loc_descr (DW_OP_piece, size, 0);
11117     }
11118 }
11119
11120 /* Return a location descriptor that designates a machine register or
11121    zero if there is none.  */
11122
11123 static dw_loc_descr_ref
11124 reg_loc_descriptor (rtx rtl, enum var_init_status initialized)
11125 {
11126   rtx regs;
11127
11128   if (REGNO (rtl) >= FIRST_PSEUDO_REGISTER)
11129     return 0;
11130
11131   /* We only use "frame base" when we're sure we're talking about the
11132      post-prologue local stack frame.  We do this by *not* running
11133      register elimination until this point, and recognizing the special
11134      argument pointer and soft frame pointer rtx's.
11135      Use DW_OP_fbreg offset DW_OP_stack_value in this case.  */
11136   if ((rtl == arg_pointer_rtx || rtl == frame_pointer_rtx)
11137       && eliminate_regs (rtl, VOIDmode, NULL_RTX) != rtl)
11138     {
11139       dw_loc_descr_ref result = NULL;
11140
11141       if (dwarf_version >= 4 || !dwarf_strict)
11142         {
11143           result = mem_loc_descriptor (rtl, GET_MODE (rtl), VOIDmode,
11144                                        initialized);
11145           if (result)
11146             add_loc_descr (&result,
11147                            new_loc_descr (DW_OP_stack_value, 0, 0));
11148         }
11149       return result;
11150     }
11151
11152   regs = targetm.dwarf_register_span (rtl);
11153
11154   if (hard_regno_nregs[REGNO (rtl)][GET_MODE (rtl)] > 1 || regs)
11155     return multiple_reg_loc_descriptor (rtl, regs, initialized);
11156   else
11157     {
11158       unsigned int dbx_regnum = dbx_reg_number (rtl);
11159       if (dbx_regnum == IGNORED_DWARF_REGNUM)
11160         return 0;
11161       return one_reg_loc_descriptor (dbx_regnum, initialized);
11162     }
11163 }
11164
11165 /* Return a location descriptor that designates a machine register for
11166    a given hard register number.  */
11167
11168 static dw_loc_descr_ref
11169 one_reg_loc_descriptor (unsigned int regno, enum var_init_status initialized)
11170 {
11171   dw_loc_descr_ref reg_loc_descr;
11172
11173   if (regno <= 31)
11174     reg_loc_descr
11175       = new_loc_descr ((enum dwarf_location_atom) (DW_OP_reg0 + regno), 0, 0);
11176   else
11177     reg_loc_descr = new_loc_descr (DW_OP_regx, regno, 0);
11178
11179   if (initialized == VAR_INIT_STATUS_UNINITIALIZED)
11180     add_loc_descr (&reg_loc_descr, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
11181
11182   return reg_loc_descr;
11183 }
11184
11185 /* Given an RTL of a register, return a location descriptor that
11186    designates a value that spans more than one register.  */
11187
11188 static dw_loc_descr_ref
11189 multiple_reg_loc_descriptor (rtx rtl, rtx regs,
11190                              enum var_init_status initialized)
11191 {
11192   int size, i;
11193   dw_loc_descr_ref loc_result = NULL;
11194
11195   /* Simple, contiguous registers.  */
11196   if (regs == NULL_RTX)
11197     {
11198       unsigned reg = REGNO (rtl);
11199       int nregs;
11200
11201 #ifdef LEAF_REG_REMAP
11202       if (crtl->uses_only_leaf_regs)
11203         {
11204           int leaf_reg = LEAF_REG_REMAP (reg);
11205           if (leaf_reg != -1)
11206             reg = (unsigned) leaf_reg;
11207         }
11208 #endif
11209
11210       gcc_assert ((unsigned) DBX_REGISTER_NUMBER (reg) == dbx_reg_number (rtl));
11211       nregs = hard_regno_nregs[REGNO (rtl)][GET_MODE (rtl)];
11212
11213       size = GET_MODE_SIZE (GET_MODE (rtl)) / nregs;
11214
11215       loc_result = NULL;
11216       while (nregs--)
11217         {
11218           dw_loc_descr_ref t;
11219
11220           t = one_reg_loc_descriptor (DBX_REGISTER_NUMBER (reg),
11221                                       VAR_INIT_STATUS_INITIALIZED);
11222           add_loc_descr (&loc_result, t);
11223           add_loc_descr_op_piece (&loc_result, size);
11224           ++reg;
11225         }
11226       return loc_result;
11227     }
11228
11229   /* Now onto stupid register sets in non contiguous locations.  */
11230
11231   gcc_assert (GET_CODE (regs) == PARALLEL);
11232
11233   size = GET_MODE_SIZE (GET_MODE (XVECEXP (regs, 0, 0)));
11234   loc_result = NULL;
11235
11236   for (i = 0; i < XVECLEN (regs, 0); ++i)
11237     {
11238       dw_loc_descr_ref t;
11239
11240       t = one_reg_loc_descriptor (dbx_reg_number (XVECEXP (regs, 0, i)),
11241                                   VAR_INIT_STATUS_INITIALIZED);
11242       add_loc_descr (&loc_result, t);
11243       add_loc_descr_op_piece (&loc_result, size);
11244     }
11245
11246   if (loc_result && initialized == VAR_INIT_STATUS_UNINITIALIZED)
11247     add_loc_descr (&loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
11248   return loc_result;
11249 }
11250
11251 static unsigned long size_of_int_loc_descriptor (HOST_WIDE_INT);
11252
11253 /* Return a location descriptor that designates a constant i,
11254    as a compound operation from constant (i >> shift), constant shift
11255    and DW_OP_shl.  */
11256
11257 static dw_loc_descr_ref
11258 int_shift_loc_descriptor (HOST_WIDE_INT i, int shift)
11259 {
11260   dw_loc_descr_ref ret = int_loc_descriptor (i >> shift);
11261   add_loc_descr (&ret, int_loc_descriptor (shift));
11262   add_loc_descr (&ret, new_loc_descr (DW_OP_shl, 0, 0));
11263   return ret;
11264 }
11265
11266 /* Return a location descriptor that designates a constant.  */
11267
11268 static dw_loc_descr_ref
11269 int_loc_descriptor (HOST_WIDE_INT i)
11270 {
11271   enum dwarf_location_atom op;
11272
11273   /* Pick the smallest representation of a constant, rather than just
11274      defaulting to the LEB encoding.  */
11275   if (i >= 0)
11276     {
11277       int clz = clz_hwi (i);
11278       int ctz = ctz_hwi (i);
11279       if (i <= 31)
11280         op = (enum dwarf_location_atom) (DW_OP_lit0 + i);
11281       else if (i <= 0xff)
11282         op = DW_OP_const1u;
11283       else if (i <= 0xffff)
11284         op = DW_OP_const2u;
11285       else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 5
11286                && clz + 5 + 255 >= HOST_BITS_PER_WIDE_INT)
11287         /* DW_OP_litX DW_OP_litY DW_OP_shl takes just 3 bytes and
11288            DW_OP_litX DW_OP_const1u Y DW_OP_shl takes just 4 bytes,
11289            while DW_OP_const4u is 5 bytes.  */
11290         return int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT - clz - 5);
11291       else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 8
11292                && clz + 8 + 31 >= HOST_BITS_PER_WIDE_INT)
11293         /* DW_OP_const1u X DW_OP_litY DW_OP_shl takes just 4 bytes,
11294            while DW_OP_const4u is 5 bytes.  */
11295         return int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT - clz - 8);
11296       else if (HOST_BITS_PER_WIDE_INT == 32 || i <= 0xffffffff)
11297         op = DW_OP_const4u;
11298       else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 8
11299                && clz + 8 + 255 >= HOST_BITS_PER_WIDE_INT)
11300         /* DW_OP_const1u X DW_OP_const1u Y DW_OP_shl takes just 5 bytes,
11301            while DW_OP_constu of constant >= 0x100000000 takes at least
11302            6 bytes.  */
11303         return int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT - clz - 8);
11304       else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 16
11305                && clz + 16 + (size_of_uleb128 (i) > 5 ? 255 : 31)
11306                   >= HOST_BITS_PER_WIDE_INT)
11307         /* DW_OP_const2u X DW_OP_litY DW_OP_shl takes just 5 bytes,
11308            DW_OP_const2u X DW_OP_const1u Y DW_OP_shl takes 6 bytes,
11309            while DW_OP_constu takes in this case at least 6 bytes.  */
11310         return int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT - clz - 16);
11311       else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 32
11312                && clz + 32 + 31 >= HOST_BITS_PER_WIDE_INT
11313                && size_of_uleb128 (i) > 6)
11314         /* DW_OP_const4u X DW_OP_litY DW_OP_shl takes just 7 bytes.  */
11315         return int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT - clz - 32);
11316       else
11317         op = DW_OP_constu;
11318     }
11319   else
11320     {
11321       if (i >= -0x80)
11322         op = DW_OP_const1s;
11323       else if (i >= -0x8000)
11324         op = DW_OP_const2s;
11325       else if (HOST_BITS_PER_WIDE_INT == 32 || i >= -0x80000000)
11326         {
11327           if (size_of_int_loc_descriptor (i) < 5)
11328             {
11329               dw_loc_descr_ref ret = int_loc_descriptor (-i);
11330               add_loc_descr (&ret, new_loc_descr (DW_OP_neg, 0, 0));
11331               return ret;
11332             }
11333           op = DW_OP_const4s;
11334         }
11335       else
11336         {
11337           if (size_of_int_loc_descriptor (i)
11338               < (unsigned long) 1 + size_of_sleb128 (i))
11339             {
11340               dw_loc_descr_ref ret = int_loc_descriptor (-i);
11341               add_loc_descr (&ret, new_loc_descr (DW_OP_neg, 0, 0));
11342               return ret;
11343             }
11344           op = DW_OP_consts;
11345         }
11346     }
11347
11348   return new_loc_descr (op, i, 0);
11349 }
11350
11351 /* Return size_of_locs (int_shift_loc_descriptor (i, shift))
11352    without actually allocating it.  */
11353
11354 static unsigned long
11355 size_of_int_shift_loc_descriptor (HOST_WIDE_INT i, int shift)
11356 {
11357   return size_of_int_loc_descriptor (i >> shift)
11358          + size_of_int_loc_descriptor (shift)
11359          + 1;
11360 }
11361
11362 /* Return size_of_locs (int_loc_descriptor (i)) without
11363    actually allocating it.  */
11364
11365 static unsigned long
11366 size_of_int_loc_descriptor (HOST_WIDE_INT i)
11367 {
11368   unsigned long s;
11369
11370   if (i >= 0)
11371     {
11372       int clz, ctz;
11373       if (i <= 31)
11374         return 1;
11375       else if (i <= 0xff)
11376         return 2;
11377       else if (i <= 0xffff)
11378         return 3;
11379       clz = clz_hwi (i);
11380       ctz = ctz_hwi (i);
11381       if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 5
11382           && clz + 5 + 255 >= HOST_BITS_PER_WIDE_INT)
11383         return size_of_int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT
11384                                                     - clz - 5);
11385       else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 8
11386                && clz + 8 + 31 >= HOST_BITS_PER_WIDE_INT)
11387         return size_of_int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT
11388                                                     - clz - 8);
11389       else if (HOST_BITS_PER_WIDE_INT == 32 || i <= 0xffffffff)
11390         return 5;
11391       s = size_of_uleb128 ((unsigned HOST_WIDE_INT) i);
11392       if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 8
11393           && clz + 8 + 255 >= HOST_BITS_PER_WIDE_INT)
11394         return size_of_int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT
11395                                                     - clz - 8);
11396       else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 16
11397                && clz + 16 + (s > 5 ? 255 : 31) >= HOST_BITS_PER_WIDE_INT)
11398         return size_of_int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT
11399                                                     - clz - 16);
11400       else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 32
11401                && clz + 32 + 31 >= HOST_BITS_PER_WIDE_INT
11402                && s > 6)
11403         return size_of_int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT
11404                                                     - clz - 32);
11405       else
11406         return 1 + s;
11407     }
11408   else
11409     {
11410       if (i >= -0x80)
11411         return 2;
11412       else if (i >= -0x8000)
11413         return 3;
11414       else if (HOST_BITS_PER_WIDE_INT == 32 || i >= -0x80000000)
11415         {
11416           if (-(unsigned HOST_WIDE_INT) i != (unsigned HOST_WIDE_INT) i)
11417             {
11418               s = size_of_int_loc_descriptor (-i) + 1;
11419               if (s < 5)
11420                 return s;
11421             }
11422           return 5;
11423         }
11424       else
11425         {
11426           unsigned long r = 1 + size_of_sleb128 (i);
11427           if (-(unsigned HOST_WIDE_INT) i != (unsigned HOST_WIDE_INT) i)
11428             {
11429               s = size_of_int_loc_descriptor (-i) + 1;
11430               if (s < r)
11431                 return s;
11432             }
11433           return r;
11434         }
11435     }
11436 }
11437
11438 /* Return loc description representing "address" of integer value.
11439    This can appear only as toplevel expression.  */
11440
11441 static dw_loc_descr_ref
11442 address_of_int_loc_descriptor (int size, HOST_WIDE_INT i)
11443 {
11444   int litsize;
11445   dw_loc_descr_ref loc_result = NULL;
11446
11447   if (!(dwarf_version >= 4 || !dwarf_strict))
11448     return NULL;
11449
11450   litsize = size_of_int_loc_descriptor (i);
11451   /* Determine if DW_OP_stack_value or DW_OP_implicit_value
11452      is more compact.  For DW_OP_stack_value we need:
11453      litsize + 1 (DW_OP_stack_value)
11454      and for DW_OP_implicit_value:
11455      1 (DW_OP_implicit_value) + 1 (length) + size.  */
11456   if ((int) DWARF2_ADDR_SIZE >= size && litsize + 1 <= 1 + 1 + size)
11457     {
11458       loc_result = int_loc_descriptor (i);
11459       add_loc_descr (&loc_result,
11460                      new_loc_descr (DW_OP_stack_value, 0, 0));
11461       return loc_result;
11462     }
11463
11464   loc_result = new_loc_descr (DW_OP_implicit_value,
11465                               size, 0);
11466   loc_result->dw_loc_oprnd2.val_class = dw_val_class_const;
11467   loc_result->dw_loc_oprnd2.v.val_int = i;
11468   return loc_result;
11469 }
11470
11471 /* Return a location descriptor that designates a base+offset location.  */
11472
11473 static dw_loc_descr_ref
11474 based_loc_descr (rtx reg, HOST_WIDE_INT offset,
11475                  enum var_init_status initialized)
11476 {
11477   unsigned int regno;
11478   dw_loc_descr_ref result;
11479   dw_fde_ref fde = cfun->fde;
11480
11481   /* We only use "frame base" when we're sure we're talking about the
11482      post-prologue local stack frame.  We do this by *not* running
11483      register elimination until this point, and recognizing the special
11484      argument pointer and soft frame pointer rtx's.  */
11485   if (reg == arg_pointer_rtx || reg == frame_pointer_rtx)
11486     {
11487       rtx elim = (ira_use_lra_p
11488                   ? lra_eliminate_regs (reg, VOIDmode, NULL_RTX)
11489                   : eliminate_regs (reg, VOIDmode, NULL_RTX));
11490
11491       if (elim != reg)
11492         {
11493           if (GET_CODE (elim) == PLUS)
11494             {
11495               offset += INTVAL (XEXP (elim, 1));
11496               elim = XEXP (elim, 0);
11497             }
11498           gcc_assert ((SUPPORTS_STACK_ALIGNMENT
11499                        && (elim == hard_frame_pointer_rtx
11500                            || elim == stack_pointer_rtx))
11501                       || elim == (frame_pointer_needed
11502                                   ? hard_frame_pointer_rtx
11503                                   : stack_pointer_rtx));
11504
11505           /* If drap register is used to align stack, use frame
11506              pointer + offset to access stack variables.  If stack
11507              is aligned without drap, use stack pointer + offset to
11508              access stack variables.  */
11509           if (crtl->stack_realign_tried
11510               && reg == frame_pointer_rtx)
11511             {
11512               int base_reg
11513                 = DWARF_FRAME_REGNUM ((fde && fde->drap_reg != INVALID_REGNUM)
11514                                       ? HARD_FRAME_POINTER_REGNUM
11515                                       : REGNO (elim));
11516               return new_reg_loc_descr (base_reg, offset);
11517             }
11518
11519           gcc_assert (frame_pointer_fb_offset_valid);
11520           offset += frame_pointer_fb_offset;
11521           return new_loc_descr (DW_OP_fbreg, offset, 0);
11522         }
11523     }
11524
11525   regno = REGNO (reg);
11526 #ifdef LEAF_REG_REMAP
11527   if (crtl->uses_only_leaf_regs)
11528     {
11529       int leaf_reg = LEAF_REG_REMAP (regno);
11530       if (leaf_reg != -1)
11531         regno = (unsigned) leaf_reg;
11532     }
11533 #endif
11534   regno = DWARF_FRAME_REGNUM (regno);
11535
11536   if (!optimize && fde
11537       && (fde->drap_reg == regno || fde->vdrap_reg == regno))
11538     {
11539       /* Use cfa+offset to represent the location of arguments passed
11540          on the stack when drap is used to align stack.
11541          Only do this when not optimizing, for optimized code var-tracking
11542          is supposed to track where the arguments live and the register
11543          used as vdrap or drap in some spot might be used for something
11544          else in other part of the routine.  */
11545       return new_loc_descr (DW_OP_fbreg, offset, 0);
11546     }
11547
11548   if (regno <= 31)
11549     result = new_loc_descr ((enum dwarf_location_atom) (DW_OP_breg0 + regno),
11550                             offset, 0);
11551   else
11552     result = new_loc_descr (DW_OP_bregx, regno, offset);
11553
11554   if (initialized == VAR_INIT_STATUS_UNINITIALIZED)
11555     add_loc_descr (&result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
11556
11557   return result;
11558 }
11559
11560 /* Return true if this RTL expression describes a base+offset calculation.  */
11561
11562 static inline int
11563 is_based_loc (const_rtx rtl)
11564 {
11565   return (GET_CODE (rtl) == PLUS
11566           && ((REG_P (XEXP (rtl, 0))
11567                && REGNO (XEXP (rtl, 0)) < FIRST_PSEUDO_REGISTER
11568                && CONST_INT_P (XEXP (rtl, 1)))));
11569 }
11570
11571 /* Try to handle TLS MEMs, for which mem_loc_descriptor on XEXP (mem, 0)
11572    failed.  */
11573
11574 static dw_loc_descr_ref
11575 tls_mem_loc_descriptor (rtx mem)
11576 {
11577   tree base;
11578   dw_loc_descr_ref loc_result;
11579
11580   if (MEM_EXPR (mem) == NULL_TREE || !MEM_OFFSET_KNOWN_P (mem))
11581     return NULL;
11582
11583   base = get_base_address (MEM_EXPR (mem));
11584   if (base == NULL
11585       || TREE_CODE (base) != VAR_DECL
11586       || !DECL_THREAD_LOCAL_P (base))
11587     return NULL;
11588
11589   loc_result = loc_descriptor_from_tree (MEM_EXPR (mem), 1, NULL);
11590   if (loc_result == NULL)
11591     return NULL;
11592
11593   if (MEM_OFFSET (mem))
11594     loc_descr_plus_const (&loc_result, MEM_OFFSET (mem));
11595
11596   return loc_result;
11597 }
11598
11599 /* Output debug info about reason why we failed to expand expression as dwarf
11600    expression.  */
11601
11602 static void
11603 expansion_failed (tree expr, rtx rtl, char const *reason)
11604 {
11605   if (dump_file && (dump_flags & TDF_DETAILS))
11606     {
11607       fprintf (dump_file, "Failed to expand as dwarf: ");
11608       if (expr)
11609         print_generic_expr (dump_file, expr, dump_flags);
11610       if (rtl)
11611         {
11612           fprintf (dump_file, "\n");
11613           print_rtl (dump_file, rtl);
11614         }
11615       fprintf (dump_file, "\nReason: %s\n", reason);
11616     }
11617 }
11618
11619 /* Helper function for const_ok_for_output.  */
11620
11621 static bool
11622 const_ok_for_output_1 (rtx rtl)
11623 {
11624   if (GET_CODE (rtl) == UNSPEC)
11625     {
11626       /* If delegitimize_address couldn't do anything with the UNSPEC, assume
11627          we can't express it in the debug info.  */
11628 #ifdef ENABLE_CHECKING
11629       /* Don't complain about TLS UNSPECs, those are just too hard to
11630          delegitimize.  Note this could be a non-decl SYMBOL_REF such as
11631          one in a constant pool entry, so testing SYMBOL_REF_TLS_MODEL
11632          rather than DECL_THREAD_LOCAL_P is not just an optimization.  */
11633       if (XVECLEN (rtl, 0) == 0
11634           || GET_CODE (XVECEXP (rtl, 0, 0)) != SYMBOL_REF
11635           || SYMBOL_REF_TLS_MODEL (XVECEXP (rtl, 0, 0)) == TLS_MODEL_NONE)
11636         inform (current_function_decl
11637                 ? DECL_SOURCE_LOCATION (current_function_decl)
11638                 : UNKNOWN_LOCATION,
11639 #if NUM_UNSPEC_VALUES > 0
11640                 "non-delegitimized UNSPEC %s (%d) found in variable location",
11641                 ((XINT (rtl, 1) >= 0 && XINT (rtl, 1) < NUM_UNSPEC_VALUES)
11642                  ? unspec_strings[XINT (rtl, 1)] : "unknown"),
11643                 XINT (rtl, 1));
11644 #else
11645                 "non-delegitimized UNSPEC %d found in variable location",
11646                 XINT (rtl, 1));
11647 #endif
11648 #endif
11649       expansion_failed (NULL_TREE, rtl,
11650                         "UNSPEC hasn't been delegitimized.\n");
11651       return false;
11652     }
11653
11654   if (targetm.const_not_ok_for_debug_p (rtl))
11655     {
11656       expansion_failed (NULL_TREE, rtl,
11657                         "Expression rejected for debug by the backend.\n");
11658       return false;
11659     }
11660
11661   /* FIXME: Refer to PR60655. It is possible for simplification
11662      of rtl expressions in var tracking to produce such expressions.
11663      We should really identify / validate expressions
11664      enclosed in CONST that can be handled by assemblers on various
11665      targets and only handle legitimate cases here.  */
11666   if (GET_CODE (rtl) != SYMBOL_REF)
11667     {
11668       if (GET_CODE (rtl) == NOT)
11669         return false;
11670       return true;
11671     }
11672
11673   if (CONSTANT_POOL_ADDRESS_P (rtl))
11674     {
11675       bool marked;
11676       get_pool_constant_mark (rtl, &marked);
11677       /* If all references to this pool constant were optimized away,
11678          it was not output and thus we can't represent it.  */
11679       if (!marked)
11680         {
11681           expansion_failed (NULL_TREE, rtl,
11682                             "Constant was removed from constant pool.\n");
11683           return false;
11684         }
11685     }
11686
11687   if (SYMBOL_REF_TLS_MODEL (rtl) != TLS_MODEL_NONE)
11688     return false;
11689
11690   /* Avoid references to external symbols in debug info, on several targets
11691      the linker might even refuse to link when linking a shared library,
11692      and in many other cases the relocations for .debug_info/.debug_loc are
11693      dropped, so the address becomes zero anyway.  Hidden symbols, guaranteed
11694      to be defined within the same shared library or executable are fine.  */
11695   if (SYMBOL_REF_EXTERNAL_P (rtl))
11696     {
11697       tree decl = SYMBOL_REF_DECL (rtl);
11698
11699       if (decl == NULL || !targetm.binds_local_p (decl))
11700         {
11701           expansion_failed (NULL_TREE, rtl,
11702                             "Symbol not defined in current TU.\n");
11703           return false;
11704         }
11705     }
11706
11707   return true;
11708 }
11709
11710 /* Return true if constant RTL can be emitted in DW_OP_addr or
11711    DW_AT_const_value.  TLS SYMBOL_REFs, external SYMBOL_REFs or
11712    non-marked constant pool SYMBOL_REFs can't be referenced in it.  */
11713
11714 static bool
11715 const_ok_for_output (rtx rtl)
11716 {
11717   if (GET_CODE (rtl) == SYMBOL_REF)
11718     return const_ok_for_output_1 (rtl);
11719
11720   if (GET_CODE (rtl) == CONST)
11721     {
11722       subrtx_var_iterator::array_type array;
11723       FOR_EACH_SUBRTX_VAR (iter, array, XEXP (rtl, 0), ALL)
11724         if (!const_ok_for_output_1 (*iter))
11725           return false;
11726       return true;
11727     }
11728
11729   return true;
11730 }
11731
11732 /* Return a reference to DW_TAG_base_type corresponding to MODE and UNSIGNEDP
11733    if possible, NULL otherwise.  */
11734
11735 static dw_die_ref
11736 base_type_for_mode (machine_mode mode, bool unsignedp)
11737 {
11738   dw_die_ref type_die;
11739   tree type = lang_hooks.types.type_for_mode (mode, unsignedp);
11740
11741   if (type == NULL)
11742     return NULL;
11743   switch (TREE_CODE (type))
11744     {
11745     case INTEGER_TYPE:
11746     case REAL_TYPE:
11747       break;
11748     default:
11749       return NULL;
11750     }
11751   type_die = lookup_type_die (type);
11752   if (!type_die)
11753     type_die = modified_type_die (type, TYPE_UNQUALIFIED, comp_unit_die ());
11754   if (type_die == NULL || type_die->die_tag != DW_TAG_base_type)
11755     return NULL;
11756   return type_die;
11757 }
11758
11759 /* For OP descriptor assumed to be in unsigned MODE, convert it to a unsigned
11760    type matching MODE, or, if MODE is narrower than or as wide as
11761    DWARF2_ADDR_SIZE, untyped.  Return NULL if the conversion is not
11762    possible.  */
11763
11764 static dw_loc_descr_ref
11765 convert_descriptor_to_mode (machine_mode mode, dw_loc_descr_ref op)
11766 {
11767   machine_mode outer_mode = mode;
11768   dw_die_ref type_die;
11769   dw_loc_descr_ref cvt;
11770
11771   if (GET_MODE_SIZE (mode) <= DWARF2_ADDR_SIZE)
11772     {
11773       add_loc_descr (&op, new_loc_descr (DW_OP_GNU_convert, 0, 0));
11774       return op;
11775     }
11776   type_die = base_type_for_mode (outer_mode, 1);
11777   if (type_die == NULL)
11778     return NULL;
11779   cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
11780   cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
11781   cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
11782   cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
11783   add_loc_descr (&op, cvt);
11784   return op;
11785 }
11786
11787 /* Return location descriptor for comparison OP with operands OP0 and OP1.  */
11788
11789 static dw_loc_descr_ref
11790 compare_loc_descriptor (enum dwarf_location_atom op, dw_loc_descr_ref op0,
11791                         dw_loc_descr_ref op1)
11792 {
11793   dw_loc_descr_ref ret = op0;
11794   add_loc_descr (&ret, op1);
11795   add_loc_descr (&ret, new_loc_descr (op, 0, 0));
11796   if (STORE_FLAG_VALUE != 1)
11797     {
11798       add_loc_descr (&ret, int_loc_descriptor (STORE_FLAG_VALUE));
11799       add_loc_descr (&ret, new_loc_descr (DW_OP_mul, 0, 0));
11800     }
11801   return ret;
11802 }
11803
11804 /* Return location descriptor for signed comparison OP RTL.  */
11805
11806 static dw_loc_descr_ref
11807 scompare_loc_descriptor (enum dwarf_location_atom op, rtx rtl,
11808                          machine_mode mem_mode)
11809 {
11810   machine_mode op_mode = GET_MODE (XEXP (rtl, 0));
11811   dw_loc_descr_ref op0, op1;
11812   int shift;
11813
11814   if (op_mode == VOIDmode)
11815     op_mode = GET_MODE (XEXP (rtl, 1));
11816   if (op_mode == VOIDmode)
11817     return NULL;
11818
11819   if (dwarf_strict
11820       && (GET_MODE_CLASS (op_mode) != MODE_INT
11821           || GET_MODE_SIZE (op_mode) > DWARF2_ADDR_SIZE))
11822     return NULL;
11823
11824   op0 = mem_loc_descriptor (XEXP (rtl, 0), op_mode, mem_mode,
11825                             VAR_INIT_STATUS_INITIALIZED);
11826   op1 = mem_loc_descriptor (XEXP (rtl, 1), op_mode, mem_mode,
11827                             VAR_INIT_STATUS_INITIALIZED);
11828
11829   if (op0 == NULL || op1 == NULL)
11830     return NULL;
11831
11832   if (GET_MODE_CLASS (op_mode) != MODE_INT
11833       || GET_MODE_SIZE (op_mode) == DWARF2_ADDR_SIZE)
11834     return compare_loc_descriptor (op, op0, op1);
11835
11836   if (GET_MODE_SIZE (op_mode) > DWARF2_ADDR_SIZE)
11837     {
11838       dw_die_ref type_die = base_type_for_mode (op_mode, 0);
11839       dw_loc_descr_ref cvt;
11840
11841       if (type_die == NULL)
11842         return NULL;
11843       cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
11844       cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
11845       cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
11846       cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
11847       add_loc_descr (&op0, cvt);
11848       cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
11849       cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
11850       cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
11851       cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
11852       add_loc_descr (&op1, cvt);
11853       return compare_loc_descriptor (op, op0, op1);
11854     }
11855
11856   shift = (DWARF2_ADDR_SIZE - GET_MODE_SIZE (op_mode)) * BITS_PER_UNIT;
11857   /* For eq/ne, if the operands are known to be zero-extended,
11858      there is no need to do the fancy shifting up.  */
11859   if (op == DW_OP_eq || op == DW_OP_ne)
11860     {
11861       dw_loc_descr_ref last0, last1;
11862       for (last0 = op0; last0->dw_loc_next != NULL; last0 = last0->dw_loc_next)
11863         ;
11864       for (last1 = op1; last1->dw_loc_next != NULL; last1 = last1->dw_loc_next)
11865         ;
11866       /* deref_size zero extends, and for constants we can check
11867          whether they are zero extended or not.  */
11868       if (((last0->dw_loc_opc == DW_OP_deref_size
11869             && last0->dw_loc_oprnd1.v.val_int <= GET_MODE_SIZE (op_mode))
11870            || (CONST_INT_P (XEXP (rtl, 0))
11871                && (unsigned HOST_WIDE_INT) INTVAL (XEXP (rtl, 0))
11872                   == (INTVAL (XEXP (rtl, 0)) & GET_MODE_MASK (op_mode))))
11873           && ((last1->dw_loc_opc == DW_OP_deref_size
11874                && last1->dw_loc_oprnd1.v.val_int <= GET_MODE_SIZE (op_mode))
11875               || (CONST_INT_P (XEXP (rtl, 1))
11876                   && (unsigned HOST_WIDE_INT) INTVAL (XEXP (rtl, 1))
11877                      == (INTVAL (XEXP (rtl, 1)) & GET_MODE_MASK (op_mode)))))
11878         return compare_loc_descriptor (op, op0, op1);
11879
11880       /* EQ/NE comparison against constant in narrower type than
11881          DWARF2_ADDR_SIZE can be performed either as
11882          DW_OP_const1u <shift> DW_OP_shl DW_OP_const* <cst << shift>
11883          DW_OP_{eq,ne}
11884          or
11885          DW_OP_const*u <mode_mask> DW_OP_and DW_OP_const* <cst & mode_mask>
11886          DW_OP_{eq,ne}.  Pick whatever is shorter.  */
11887       if (CONST_INT_P (XEXP (rtl, 1))
11888           && GET_MODE_BITSIZE (op_mode) < HOST_BITS_PER_WIDE_INT
11889           && (size_of_int_loc_descriptor (shift) + 1
11890               + size_of_int_loc_descriptor (INTVAL (XEXP (rtl, 1)) << shift)
11891               >= size_of_int_loc_descriptor (GET_MODE_MASK (op_mode)) + 1
11892                  + size_of_int_loc_descriptor (INTVAL (XEXP (rtl, 1))
11893                                                & GET_MODE_MASK (op_mode))))
11894         {
11895           add_loc_descr (&op0, int_loc_descriptor (GET_MODE_MASK (op_mode)));
11896           add_loc_descr (&op0, new_loc_descr (DW_OP_and, 0, 0));
11897           op1 = int_loc_descriptor (INTVAL (XEXP (rtl, 1))
11898                                     & GET_MODE_MASK (op_mode));
11899           return compare_loc_descriptor (op, op0, op1);
11900         }
11901     }
11902   add_loc_descr (&op0, int_loc_descriptor (shift));
11903   add_loc_descr (&op0, new_loc_descr (DW_OP_shl, 0, 0));
11904   if (CONST_INT_P (XEXP (rtl, 1)))
11905     op1 = int_loc_descriptor (INTVAL (XEXP (rtl, 1)) << shift);
11906   else
11907     {
11908       add_loc_descr (&op1, int_loc_descriptor (shift));
11909       add_loc_descr (&op1, new_loc_descr (DW_OP_shl, 0, 0));
11910     }
11911   return compare_loc_descriptor (op, op0, op1);
11912 }
11913
11914 /* Return location descriptor for unsigned comparison OP RTL.  */
11915
11916 static dw_loc_descr_ref
11917 ucompare_loc_descriptor (enum dwarf_location_atom op, rtx rtl,
11918                          machine_mode mem_mode)
11919 {
11920   machine_mode op_mode = GET_MODE (XEXP (rtl, 0));
11921   dw_loc_descr_ref op0, op1;
11922
11923   if (op_mode == VOIDmode)
11924     op_mode = GET_MODE (XEXP (rtl, 1));
11925   if (op_mode == VOIDmode)
11926     return NULL;
11927   if (GET_MODE_CLASS (op_mode) != MODE_INT)
11928     return NULL;
11929
11930   if (dwarf_strict && GET_MODE_SIZE (op_mode) > DWARF2_ADDR_SIZE)
11931     return NULL;
11932
11933   op0 = mem_loc_descriptor (XEXP (rtl, 0), op_mode, mem_mode,
11934                             VAR_INIT_STATUS_INITIALIZED);
11935   op1 = mem_loc_descriptor (XEXP (rtl, 1), op_mode, mem_mode,
11936                             VAR_INIT_STATUS_INITIALIZED);
11937
11938   if (op0 == NULL || op1 == NULL)
11939     return NULL;
11940
11941   if (GET_MODE_SIZE (op_mode) < DWARF2_ADDR_SIZE)
11942     {
11943       HOST_WIDE_INT mask = GET_MODE_MASK (op_mode);
11944       dw_loc_descr_ref last0, last1;
11945       for (last0 = op0; last0->dw_loc_next != NULL; last0 = last0->dw_loc_next)
11946         ;
11947       for (last1 = op1; last1->dw_loc_next != NULL; last1 = last1->dw_loc_next)
11948         ;
11949       if (CONST_INT_P (XEXP (rtl, 0)))
11950         op0 = int_loc_descriptor (INTVAL (XEXP (rtl, 0)) & mask);
11951       /* deref_size zero extends, so no need to mask it again.  */
11952       else if (last0->dw_loc_opc != DW_OP_deref_size
11953                || last0->dw_loc_oprnd1.v.val_int > GET_MODE_SIZE (op_mode))
11954         {
11955           add_loc_descr (&op0, int_loc_descriptor (mask));
11956           add_loc_descr (&op0, new_loc_descr (DW_OP_and, 0, 0));
11957         }
11958       if (CONST_INT_P (XEXP (rtl, 1)))
11959         op1 = int_loc_descriptor (INTVAL (XEXP (rtl, 1)) & mask);
11960       /* deref_size zero extends, so no need to mask it again.  */
11961       else if (last1->dw_loc_opc != DW_OP_deref_size
11962                || last1->dw_loc_oprnd1.v.val_int > GET_MODE_SIZE (op_mode))
11963         {
11964           add_loc_descr (&op1, int_loc_descriptor (mask));
11965           add_loc_descr (&op1, new_loc_descr (DW_OP_and, 0, 0));
11966         }
11967     }
11968   else if (GET_MODE_SIZE (op_mode) == DWARF2_ADDR_SIZE)
11969     {
11970       HOST_WIDE_INT bias = 1;
11971       bias <<= (DWARF2_ADDR_SIZE * BITS_PER_UNIT - 1);
11972       add_loc_descr (&op0, new_loc_descr (DW_OP_plus_uconst, bias, 0));
11973       if (CONST_INT_P (XEXP (rtl, 1)))
11974         op1 = int_loc_descriptor ((unsigned HOST_WIDE_INT) bias
11975                                   + INTVAL (XEXP (rtl, 1)));
11976       else
11977         add_loc_descr (&op1, new_loc_descr (DW_OP_plus_uconst,
11978                                             bias, 0));
11979     }
11980   return compare_loc_descriptor (op, op0, op1);
11981 }
11982
11983 /* Return location descriptor for {U,S}{MIN,MAX}.  */
11984
11985 static dw_loc_descr_ref
11986 minmax_loc_descriptor (rtx rtl, machine_mode mode,
11987                        machine_mode mem_mode)
11988 {
11989   enum dwarf_location_atom op;
11990   dw_loc_descr_ref op0, op1, ret;
11991   dw_loc_descr_ref bra_node, drop_node;
11992
11993   if (dwarf_strict
11994       && (GET_MODE_CLASS (mode) != MODE_INT
11995           || GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE))
11996     return NULL;
11997
11998   op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
11999                             VAR_INIT_STATUS_INITIALIZED);
12000   op1 = mem_loc_descriptor (XEXP (rtl, 1), mode, mem_mode,
12001                             VAR_INIT_STATUS_INITIALIZED);
12002
12003   if (op0 == NULL || op1 == NULL)
12004     return NULL;
12005
12006   add_loc_descr (&op0, new_loc_descr (DW_OP_dup, 0, 0));
12007   add_loc_descr (&op1, new_loc_descr (DW_OP_swap, 0, 0));
12008   add_loc_descr (&op1, new_loc_descr (DW_OP_over, 0, 0));
12009   if (GET_CODE (rtl) == UMIN || GET_CODE (rtl) == UMAX)
12010     {
12011       if (GET_MODE_SIZE (mode) < DWARF2_ADDR_SIZE)
12012         {
12013           HOST_WIDE_INT mask = GET_MODE_MASK (mode);
12014           add_loc_descr (&op0, int_loc_descriptor (mask));
12015           add_loc_descr (&op0, new_loc_descr (DW_OP_and, 0, 0));
12016           add_loc_descr (&op1, int_loc_descriptor (mask));
12017           add_loc_descr (&op1, new_loc_descr (DW_OP_and, 0, 0));
12018         }
12019       else if (GET_MODE_SIZE (mode) == DWARF2_ADDR_SIZE)
12020         {
12021           HOST_WIDE_INT bias = 1;
12022           bias <<= (DWARF2_ADDR_SIZE * BITS_PER_UNIT - 1);
12023           add_loc_descr (&op0, new_loc_descr (DW_OP_plus_uconst, bias, 0));
12024           add_loc_descr (&op1, new_loc_descr (DW_OP_plus_uconst, bias, 0));
12025         }
12026     }
12027   else if (GET_MODE_CLASS (mode) == MODE_INT
12028            && GET_MODE_SIZE (mode) < DWARF2_ADDR_SIZE)
12029     {
12030       int shift = (DWARF2_ADDR_SIZE - GET_MODE_SIZE (mode)) * BITS_PER_UNIT;
12031       add_loc_descr (&op0, int_loc_descriptor (shift));
12032       add_loc_descr (&op0, new_loc_descr (DW_OP_shl, 0, 0));
12033       add_loc_descr (&op1, int_loc_descriptor (shift));
12034       add_loc_descr (&op1, new_loc_descr (DW_OP_shl, 0, 0));
12035     }
12036   else if (GET_MODE_CLASS (mode) == MODE_INT
12037            && GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE)
12038     {
12039       dw_die_ref type_die = base_type_for_mode (mode, 0);
12040       dw_loc_descr_ref cvt;
12041       if (type_die == NULL)
12042         return NULL;
12043       cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
12044       cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
12045       cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
12046       cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
12047       add_loc_descr (&op0, cvt);
12048       cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
12049       cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
12050       cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
12051       cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
12052       add_loc_descr (&op1, cvt);
12053     }
12054
12055   if (GET_CODE (rtl) == SMIN || GET_CODE (rtl) == UMIN)
12056     op = DW_OP_lt;
12057   else
12058     op = DW_OP_gt;
12059   ret = op0;
12060   add_loc_descr (&ret, op1);
12061   add_loc_descr (&ret, new_loc_descr (op, 0, 0));
12062   bra_node = new_loc_descr (DW_OP_bra, 0, 0);
12063   add_loc_descr (&ret, bra_node);
12064   add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
12065   drop_node = new_loc_descr (DW_OP_drop, 0, 0);
12066   add_loc_descr (&ret, drop_node);
12067   bra_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
12068   bra_node->dw_loc_oprnd1.v.val_loc = drop_node;
12069   if ((GET_CODE (rtl) == SMIN || GET_CODE (rtl) == SMAX)
12070       && GET_MODE_CLASS (mode) == MODE_INT
12071       && GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE)
12072     ret = convert_descriptor_to_mode (mode, ret);
12073   return ret;
12074 }
12075
12076 /* Helper function for mem_loc_descriptor.  Perform OP binary op,
12077    but after converting arguments to type_die, afterwards
12078    convert back to unsigned.  */
12079
12080 static dw_loc_descr_ref
12081 typed_binop (enum dwarf_location_atom op, rtx rtl, dw_die_ref type_die,
12082              machine_mode mode, machine_mode mem_mode)
12083 {
12084   dw_loc_descr_ref cvt, op0, op1;
12085
12086   if (type_die == NULL)
12087     return NULL;
12088   op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
12089                             VAR_INIT_STATUS_INITIALIZED);
12090   op1 = mem_loc_descriptor (XEXP (rtl, 1), mode, mem_mode,
12091                             VAR_INIT_STATUS_INITIALIZED);
12092   if (op0 == NULL || op1 == NULL)
12093     return NULL;
12094   cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
12095   cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
12096   cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
12097   cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
12098   add_loc_descr (&op0, cvt);
12099   cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
12100   cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
12101   cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
12102   cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
12103   add_loc_descr (&op1, cvt);
12104   add_loc_descr (&op0, op1);
12105   add_loc_descr (&op0, new_loc_descr (op, 0, 0));
12106   return convert_descriptor_to_mode (mode, op0);
12107 }
12108
12109 /* CLZ (where constV is CLZ_DEFINED_VALUE_AT_ZERO computed value,
12110    const0 is DW_OP_lit0 or corresponding typed constant,
12111    const1 is DW_OP_lit1 or corresponding typed constant
12112    and constMSB is constant with just the MSB bit set
12113    for the mode):
12114        DW_OP_dup DW_OP_bra <L1> DW_OP_drop constV DW_OP_skip <L4>
12115    L1: const0 DW_OP_swap
12116    L2: DW_OP_dup constMSB DW_OP_and DW_OP_bra <L3> const1 DW_OP_shl
12117        DW_OP_swap DW_OP_plus_uconst <1> DW_OP_swap DW_OP_skip <L2>
12118    L3: DW_OP_drop
12119    L4: DW_OP_nop
12120
12121    CTZ is similar:
12122        DW_OP_dup DW_OP_bra <L1> DW_OP_drop constV DW_OP_skip <L4>
12123    L1: const0 DW_OP_swap
12124    L2: DW_OP_dup const1 DW_OP_and DW_OP_bra <L3> const1 DW_OP_shr
12125        DW_OP_swap DW_OP_plus_uconst <1> DW_OP_swap DW_OP_skip <L2>
12126    L3: DW_OP_drop
12127    L4: DW_OP_nop
12128
12129    FFS is similar:
12130        DW_OP_dup DW_OP_bra <L1> DW_OP_drop const0 DW_OP_skip <L4>
12131    L1: const1 DW_OP_swap
12132    L2: DW_OP_dup const1 DW_OP_and DW_OP_bra <L3> const1 DW_OP_shr
12133        DW_OP_swap DW_OP_plus_uconst <1> DW_OP_swap DW_OP_skip <L2>
12134    L3: DW_OP_drop
12135    L4: DW_OP_nop  */
12136
12137 static dw_loc_descr_ref
12138 clz_loc_descriptor (rtx rtl, machine_mode mode,
12139                     machine_mode mem_mode)
12140 {
12141   dw_loc_descr_ref op0, ret, tmp;
12142   HOST_WIDE_INT valv;
12143   dw_loc_descr_ref l1jump, l1label;
12144   dw_loc_descr_ref l2jump, l2label;
12145   dw_loc_descr_ref l3jump, l3label;
12146   dw_loc_descr_ref l4jump, l4label;
12147   rtx msb;
12148
12149   if (GET_MODE_CLASS (mode) != MODE_INT
12150       || GET_MODE (XEXP (rtl, 0)) != mode)
12151     return NULL;
12152
12153   op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
12154                             VAR_INIT_STATUS_INITIALIZED);
12155   if (op0 == NULL)
12156     return NULL;
12157   ret = op0;
12158   if (GET_CODE (rtl) == CLZ)
12159     {
12160       if (!CLZ_DEFINED_VALUE_AT_ZERO (mode, valv))
12161         valv = GET_MODE_BITSIZE (mode);
12162     }
12163   else if (GET_CODE (rtl) == FFS)
12164     valv = 0;
12165   else if (!CTZ_DEFINED_VALUE_AT_ZERO (mode, valv))
12166     valv = GET_MODE_BITSIZE (mode);
12167   add_loc_descr (&ret, new_loc_descr (DW_OP_dup, 0, 0));
12168   l1jump = new_loc_descr (DW_OP_bra, 0, 0);
12169   add_loc_descr (&ret, l1jump);
12170   add_loc_descr (&ret, new_loc_descr (DW_OP_drop, 0, 0));
12171   tmp = mem_loc_descriptor (GEN_INT (valv), mode, mem_mode,
12172                             VAR_INIT_STATUS_INITIALIZED);
12173   if (tmp == NULL)
12174     return NULL;
12175   add_loc_descr (&ret, tmp);
12176   l4jump = new_loc_descr (DW_OP_skip, 0, 0);
12177   add_loc_descr (&ret, l4jump);
12178   l1label = mem_loc_descriptor (GET_CODE (rtl) == FFS
12179                                 ? const1_rtx : const0_rtx,
12180                                 mode, mem_mode,
12181                                 VAR_INIT_STATUS_INITIALIZED);
12182   if (l1label == NULL)
12183     return NULL;
12184   add_loc_descr (&ret, l1label);
12185   add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
12186   l2label = new_loc_descr (DW_OP_dup, 0, 0);
12187   add_loc_descr (&ret, l2label);
12188   if (GET_CODE (rtl) != CLZ)
12189     msb = const1_rtx;
12190   else if (GET_MODE_BITSIZE (mode) <= HOST_BITS_PER_WIDE_INT)
12191     msb = GEN_INT ((unsigned HOST_WIDE_INT) 1
12192                    << (GET_MODE_BITSIZE (mode) - 1));
12193   else
12194     msb = immed_wide_int_const
12195       (wi::set_bit_in_zero (GET_MODE_PRECISION (mode) - 1,
12196                             GET_MODE_PRECISION (mode)), mode);
12197   if (GET_CODE (msb) == CONST_INT && INTVAL (msb) < 0)
12198     tmp = new_loc_descr (HOST_BITS_PER_WIDE_INT == 32
12199                          ? DW_OP_const4u : HOST_BITS_PER_WIDE_INT == 64
12200                          ? DW_OP_const8u : DW_OP_constu, INTVAL (msb), 0);
12201   else
12202     tmp = mem_loc_descriptor (msb, mode, mem_mode,
12203                               VAR_INIT_STATUS_INITIALIZED);
12204   if (tmp == NULL)
12205     return NULL;
12206   add_loc_descr (&ret, tmp);
12207   add_loc_descr (&ret, new_loc_descr (DW_OP_and, 0, 0));
12208   l3jump = new_loc_descr (DW_OP_bra, 0, 0);
12209   add_loc_descr (&ret, l3jump);
12210   tmp = mem_loc_descriptor (const1_rtx, mode, mem_mode,
12211                             VAR_INIT_STATUS_INITIALIZED);
12212   if (tmp == NULL)
12213     return NULL;
12214   add_loc_descr (&ret, tmp);
12215   add_loc_descr (&ret, new_loc_descr (GET_CODE (rtl) == CLZ
12216                                       ? DW_OP_shl : DW_OP_shr, 0, 0));
12217   add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
12218   add_loc_descr (&ret, new_loc_descr (DW_OP_plus_uconst, 1, 0));
12219   add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
12220   l2jump = new_loc_descr (DW_OP_skip, 0, 0);
12221   add_loc_descr (&ret, l2jump);
12222   l3label = new_loc_descr (DW_OP_drop, 0, 0);
12223   add_loc_descr (&ret, l3label);
12224   l4label = new_loc_descr (DW_OP_nop, 0, 0);
12225   add_loc_descr (&ret, l4label);
12226   l1jump->dw_loc_oprnd1.val_class = dw_val_class_loc;
12227   l1jump->dw_loc_oprnd1.v.val_loc = l1label;
12228   l2jump->dw_loc_oprnd1.val_class = dw_val_class_loc;
12229   l2jump->dw_loc_oprnd1.v.val_loc = l2label;
12230   l3jump->dw_loc_oprnd1.val_class = dw_val_class_loc;
12231   l3jump->dw_loc_oprnd1.v.val_loc = l3label;
12232   l4jump->dw_loc_oprnd1.val_class = dw_val_class_loc;
12233   l4jump->dw_loc_oprnd1.v.val_loc = l4label;
12234   return ret;
12235 }
12236
12237 /* POPCOUNT (const0 is DW_OP_lit0 or corresponding typed constant,
12238    const1 is DW_OP_lit1 or corresponding typed constant):
12239        const0 DW_OP_swap
12240    L1: DW_OP_dup DW_OP_bra <L2> DW_OP_dup DW_OP_rot const1 DW_OP_and
12241        DW_OP_plus DW_OP_swap const1 DW_OP_shr DW_OP_skip <L1>
12242    L2: DW_OP_drop
12243
12244    PARITY is similar:
12245    L1: DW_OP_dup DW_OP_bra <L2> DW_OP_dup DW_OP_rot const1 DW_OP_and
12246        DW_OP_xor DW_OP_swap const1 DW_OP_shr DW_OP_skip <L1>
12247    L2: DW_OP_drop  */
12248
12249 static dw_loc_descr_ref
12250 popcount_loc_descriptor (rtx rtl, machine_mode mode,
12251                          machine_mode mem_mode)
12252 {
12253   dw_loc_descr_ref op0, ret, tmp;
12254   dw_loc_descr_ref l1jump, l1label;
12255   dw_loc_descr_ref l2jump, l2label;
12256
12257   if (GET_MODE_CLASS (mode) != MODE_INT
12258       || GET_MODE (XEXP (rtl, 0)) != mode)
12259     return NULL;
12260
12261   op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
12262                             VAR_INIT_STATUS_INITIALIZED);
12263   if (op0 == NULL)
12264     return NULL;
12265   ret = op0;
12266   tmp = mem_loc_descriptor (const0_rtx, mode, mem_mode,
12267                             VAR_INIT_STATUS_INITIALIZED);
12268   if (tmp == NULL)
12269     return NULL;
12270   add_loc_descr (&ret, tmp);
12271   add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
12272   l1label = new_loc_descr (DW_OP_dup, 0, 0);
12273   add_loc_descr (&ret, l1label);
12274   l2jump = new_loc_descr (DW_OP_bra, 0, 0);
12275   add_loc_descr (&ret, l2jump);
12276   add_loc_descr (&ret, new_loc_descr (DW_OP_dup, 0, 0));
12277   add_loc_descr (&ret, new_loc_descr (DW_OP_rot, 0, 0));
12278   tmp = mem_loc_descriptor (const1_rtx, mode, mem_mode,
12279                             VAR_INIT_STATUS_INITIALIZED);
12280   if (tmp == NULL)
12281     return NULL;
12282   add_loc_descr (&ret, tmp);
12283   add_loc_descr (&ret, new_loc_descr (DW_OP_and, 0, 0));
12284   add_loc_descr (&ret, new_loc_descr (GET_CODE (rtl) == POPCOUNT
12285                                       ? DW_OP_plus : DW_OP_xor, 0, 0));
12286   add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
12287   tmp = mem_loc_descriptor (const1_rtx, mode, mem_mode,
12288                             VAR_INIT_STATUS_INITIALIZED);
12289   add_loc_descr (&ret, tmp);
12290   add_loc_descr (&ret, new_loc_descr (DW_OP_shr, 0, 0));
12291   l1jump = new_loc_descr (DW_OP_skip, 0, 0);
12292   add_loc_descr (&ret, l1jump);
12293   l2label = new_loc_descr (DW_OP_drop, 0, 0);
12294   add_loc_descr (&ret, l2label);
12295   l1jump->dw_loc_oprnd1.val_class = dw_val_class_loc;
12296   l1jump->dw_loc_oprnd1.v.val_loc = l1label;
12297   l2jump->dw_loc_oprnd1.val_class = dw_val_class_loc;
12298   l2jump->dw_loc_oprnd1.v.val_loc = l2label;
12299   return ret;
12300 }
12301
12302 /* BSWAP (constS is initial shift count, either 56 or 24):
12303        constS const0
12304    L1: DW_OP_pick <2> constS DW_OP_pick <3> DW_OP_minus DW_OP_shr
12305        const255 DW_OP_and DW_OP_pick <2> DW_OP_shl DW_OP_or
12306        DW_OP_swap DW_OP_dup const0 DW_OP_eq DW_OP_bra <L2> const8
12307        DW_OP_minus DW_OP_swap DW_OP_skip <L1>
12308    L2: DW_OP_drop DW_OP_swap DW_OP_drop  */
12309
12310 static dw_loc_descr_ref
12311 bswap_loc_descriptor (rtx rtl, machine_mode mode,
12312                       machine_mode mem_mode)
12313 {
12314   dw_loc_descr_ref op0, ret, tmp;
12315   dw_loc_descr_ref l1jump, l1label;
12316   dw_loc_descr_ref l2jump, l2label;
12317
12318   if (GET_MODE_CLASS (mode) != MODE_INT
12319       || BITS_PER_UNIT != 8
12320       || (GET_MODE_BITSIZE (mode) != 32
12321           &&  GET_MODE_BITSIZE (mode) != 64))
12322     return NULL;
12323
12324   op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
12325                             VAR_INIT_STATUS_INITIALIZED);
12326   if (op0 == NULL)
12327     return NULL;
12328
12329   ret = op0;
12330   tmp = mem_loc_descriptor (GEN_INT (GET_MODE_BITSIZE (mode) - 8),
12331                             mode, mem_mode,
12332                             VAR_INIT_STATUS_INITIALIZED);
12333   if (tmp == NULL)
12334     return NULL;
12335   add_loc_descr (&ret, tmp);
12336   tmp = mem_loc_descriptor (const0_rtx, mode, mem_mode,
12337                             VAR_INIT_STATUS_INITIALIZED);
12338   if (tmp == NULL)
12339     return NULL;
12340   add_loc_descr (&ret, tmp);
12341   l1label = new_loc_descr (DW_OP_pick, 2, 0);
12342   add_loc_descr (&ret, l1label);
12343   tmp = mem_loc_descriptor (GEN_INT (GET_MODE_BITSIZE (mode) - 8),
12344                             mode, mem_mode,
12345                             VAR_INIT_STATUS_INITIALIZED);
12346   add_loc_descr (&ret, tmp);
12347   add_loc_descr (&ret, new_loc_descr (DW_OP_pick, 3, 0));
12348   add_loc_descr (&ret, new_loc_descr (DW_OP_minus, 0, 0));
12349   add_loc_descr (&ret, new_loc_descr (DW_OP_shr, 0, 0));
12350   tmp = mem_loc_descriptor (GEN_INT (255), mode, mem_mode,
12351                             VAR_INIT_STATUS_INITIALIZED);
12352   if (tmp == NULL)
12353     return NULL;
12354   add_loc_descr (&ret, tmp);
12355   add_loc_descr (&ret, new_loc_descr (DW_OP_and, 0, 0));
12356   add_loc_descr (&ret, new_loc_descr (DW_OP_pick, 2, 0));
12357   add_loc_descr (&ret, new_loc_descr (DW_OP_shl, 0, 0));
12358   add_loc_descr (&ret, new_loc_descr (DW_OP_or, 0, 0));
12359   add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
12360   add_loc_descr (&ret, new_loc_descr (DW_OP_dup, 0, 0));
12361   tmp = mem_loc_descriptor (const0_rtx, mode, mem_mode,
12362                             VAR_INIT_STATUS_INITIALIZED);
12363   add_loc_descr (&ret, tmp);
12364   add_loc_descr (&ret, new_loc_descr (DW_OP_eq, 0, 0));
12365   l2jump = new_loc_descr (DW_OP_bra, 0, 0);
12366   add_loc_descr (&ret, l2jump);
12367   tmp = mem_loc_descriptor (GEN_INT (8), mode, mem_mode,
12368                             VAR_INIT_STATUS_INITIALIZED);
12369   add_loc_descr (&ret, tmp);
12370   add_loc_descr (&ret, new_loc_descr (DW_OP_minus, 0, 0));
12371   add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
12372   l1jump = new_loc_descr (DW_OP_skip, 0, 0);
12373   add_loc_descr (&ret, l1jump);
12374   l2label = new_loc_descr (DW_OP_drop, 0, 0);
12375   add_loc_descr (&ret, l2label);
12376   add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
12377   add_loc_descr (&ret, new_loc_descr (DW_OP_drop, 0, 0));
12378   l1jump->dw_loc_oprnd1.val_class = dw_val_class_loc;
12379   l1jump->dw_loc_oprnd1.v.val_loc = l1label;
12380   l2jump->dw_loc_oprnd1.val_class = dw_val_class_loc;
12381   l2jump->dw_loc_oprnd1.v.val_loc = l2label;
12382   return ret;
12383 }
12384
12385 /* ROTATE (constMASK is mode mask, BITSIZE is bitsize of mode):
12386    DW_OP_over DW_OP_over DW_OP_shl [ constMASK DW_OP_and ] DW_OP_rot
12387    [ DW_OP_swap constMASK DW_OP_and DW_OP_swap ] DW_OP_neg
12388    DW_OP_plus_uconst <BITSIZE> DW_OP_shr DW_OP_or
12389
12390    ROTATERT is similar:
12391    DW_OP_over DW_OP_over DW_OP_neg DW_OP_plus_uconst <BITSIZE>
12392    DW_OP_shl [ constMASK DW_OP_and ] DW_OP_rot
12393    [ DW_OP_swap constMASK DW_OP_and DW_OP_swap ] DW_OP_shr DW_OP_or  */
12394
12395 static dw_loc_descr_ref
12396 rotate_loc_descriptor (rtx rtl, machine_mode mode,
12397                        machine_mode mem_mode)
12398 {
12399   rtx rtlop1 = XEXP (rtl, 1);
12400   dw_loc_descr_ref op0, op1, ret, mask[2] = { NULL, NULL };
12401   int i;
12402
12403   if (GET_MODE_CLASS (mode) != MODE_INT)
12404     return NULL;
12405
12406   if (GET_MODE (rtlop1) != VOIDmode
12407       && GET_MODE_BITSIZE (GET_MODE (rtlop1)) < GET_MODE_BITSIZE (mode))
12408     rtlop1 = gen_rtx_ZERO_EXTEND (mode, rtlop1);
12409   op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
12410                             VAR_INIT_STATUS_INITIALIZED);
12411   op1 = mem_loc_descriptor (rtlop1, mode, mem_mode,
12412                             VAR_INIT_STATUS_INITIALIZED);
12413   if (op0 == NULL || op1 == NULL)
12414     return NULL;
12415   if (GET_MODE_SIZE (mode) < DWARF2_ADDR_SIZE)
12416     for (i = 0; i < 2; i++)
12417       {
12418         if (GET_MODE_BITSIZE (mode) < HOST_BITS_PER_WIDE_INT)
12419           mask[i] = mem_loc_descriptor (GEN_INT (GET_MODE_MASK (mode)),
12420                                         mode, mem_mode,
12421                                         VAR_INIT_STATUS_INITIALIZED);
12422         else if (GET_MODE_BITSIZE (mode) == HOST_BITS_PER_WIDE_INT)
12423           mask[i] = new_loc_descr (HOST_BITS_PER_WIDE_INT == 32
12424                                    ? DW_OP_const4u
12425                                    : HOST_BITS_PER_WIDE_INT == 64
12426                                    ? DW_OP_const8u : DW_OP_constu,
12427                                    GET_MODE_MASK (mode), 0);
12428         else
12429           mask[i] = NULL;
12430         if (mask[i] == NULL)
12431           return NULL;
12432         add_loc_descr (&mask[i], new_loc_descr (DW_OP_and, 0, 0));
12433       }
12434   ret = op0;
12435   add_loc_descr (&ret, op1);
12436   add_loc_descr (&ret, new_loc_descr (DW_OP_over, 0, 0));
12437   add_loc_descr (&ret, new_loc_descr (DW_OP_over, 0, 0));
12438   if (GET_CODE (rtl) == ROTATERT)
12439     {
12440       add_loc_descr (&ret, new_loc_descr (DW_OP_neg, 0, 0));
12441       add_loc_descr (&ret, new_loc_descr (DW_OP_plus_uconst,
12442                                           GET_MODE_BITSIZE (mode), 0));
12443     }
12444   add_loc_descr (&ret, new_loc_descr (DW_OP_shl, 0, 0));
12445   if (mask[0] != NULL)
12446     add_loc_descr (&ret, mask[0]);
12447   add_loc_descr (&ret, new_loc_descr (DW_OP_rot, 0, 0));
12448   if (mask[1] != NULL)
12449     {
12450       add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
12451       add_loc_descr (&ret, mask[1]);
12452       add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
12453     }
12454   if (GET_CODE (rtl) == ROTATE)
12455     {
12456       add_loc_descr (&ret, new_loc_descr (DW_OP_neg, 0, 0));
12457       add_loc_descr (&ret, new_loc_descr (DW_OP_plus_uconst,
12458                                           GET_MODE_BITSIZE (mode), 0));
12459     }
12460   add_loc_descr (&ret, new_loc_descr (DW_OP_shr, 0, 0));
12461   add_loc_descr (&ret, new_loc_descr (DW_OP_or, 0, 0));
12462   return ret;
12463 }
12464
12465 /* Helper function for mem_loc_descriptor.  Return DW_OP_GNU_parameter_ref
12466    for DEBUG_PARAMETER_REF RTL.  */
12467
12468 static dw_loc_descr_ref
12469 parameter_ref_descriptor (rtx rtl)
12470 {
12471   dw_loc_descr_ref ret;
12472   dw_die_ref ref;
12473
12474   if (dwarf_strict)
12475     return NULL;
12476   gcc_assert (TREE_CODE (DEBUG_PARAMETER_REF_DECL (rtl)) == PARM_DECL);
12477   ref = lookup_decl_die (DEBUG_PARAMETER_REF_DECL (rtl));
12478   ret = new_loc_descr (DW_OP_GNU_parameter_ref, 0, 0);
12479   if (ref)
12480     {
12481       ret->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
12482       ret->dw_loc_oprnd1.v.val_die_ref.die = ref;
12483       ret->dw_loc_oprnd1.v.val_die_ref.external = 0;
12484     }
12485   else
12486     {
12487       ret->dw_loc_oprnd1.val_class = dw_val_class_decl_ref;
12488       ret->dw_loc_oprnd1.v.val_decl_ref = DEBUG_PARAMETER_REF_DECL (rtl);
12489     }
12490   return ret;
12491 }
12492
12493 /* The following routine converts the RTL for a variable or parameter
12494    (resident in memory) into an equivalent Dwarf representation of a
12495    mechanism for getting the address of that same variable onto the top of a
12496    hypothetical "address evaluation" stack.
12497
12498    When creating memory location descriptors, we are effectively transforming
12499    the RTL for a memory-resident object into its Dwarf postfix expression
12500    equivalent.  This routine recursively descends an RTL tree, turning
12501    it into Dwarf postfix code as it goes.
12502
12503    MODE is the mode that should be assumed for the rtl if it is VOIDmode.
12504
12505    MEM_MODE is the mode of the memory reference, needed to handle some
12506    autoincrement addressing modes.
12507
12508    Return 0 if we can't represent the location.  */
12509
12510 dw_loc_descr_ref
12511 mem_loc_descriptor (rtx rtl, machine_mode mode,
12512                     machine_mode mem_mode,
12513                     enum var_init_status initialized)
12514 {
12515   dw_loc_descr_ref mem_loc_result = NULL;
12516   enum dwarf_location_atom op;
12517   dw_loc_descr_ref op0, op1;
12518   rtx inner = NULL_RTX;
12519
12520   if (mode == VOIDmode)
12521     mode = GET_MODE (rtl);
12522
12523   /* Note that for a dynamically sized array, the location we will generate a
12524      description of here will be the lowest numbered location which is
12525      actually within the array.  That's *not* necessarily the same as the
12526      zeroth element of the array.  */
12527
12528   rtl = targetm.delegitimize_address (rtl);
12529
12530   if (mode != GET_MODE (rtl) && GET_MODE (rtl) != VOIDmode)
12531     return NULL;
12532
12533   switch (GET_CODE (rtl))
12534     {
12535     case POST_INC:
12536     case POST_DEC:
12537     case POST_MODIFY:
12538       return mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode, initialized);
12539
12540     case SUBREG:
12541       /* The case of a subreg may arise when we have a local (register)
12542          variable or a formal (register) parameter which doesn't quite fill
12543          up an entire register.  For now, just assume that it is
12544          legitimate to make the Dwarf info refer to the whole register which
12545          contains the given subreg.  */
12546       if (!subreg_lowpart_p (rtl))
12547         break;
12548       inner = SUBREG_REG (rtl);
12549     case TRUNCATE:
12550       if (inner == NULL_RTX)
12551         inner = XEXP (rtl, 0);
12552       if (GET_MODE_CLASS (mode) == MODE_INT
12553           && GET_MODE_CLASS (GET_MODE (inner)) == MODE_INT
12554           && (GET_MODE_SIZE (mode) <= DWARF2_ADDR_SIZE
12555 #ifdef POINTERS_EXTEND_UNSIGNED
12556               || (mode == Pmode && mem_mode != VOIDmode)
12557 #endif
12558              )
12559           && GET_MODE_SIZE (GET_MODE (inner)) <= DWARF2_ADDR_SIZE)
12560         {
12561           mem_loc_result = mem_loc_descriptor (inner,
12562                                                GET_MODE (inner),
12563                                                mem_mode, initialized);
12564           break;
12565         }
12566       if (dwarf_strict)
12567         break;
12568       if (GET_MODE_SIZE (mode) > GET_MODE_SIZE (GET_MODE (inner)))
12569         break;
12570       if (GET_MODE_SIZE (mode) != GET_MODE_SIZE (GET_MODE (inner))
12571           && (GET_MODE_CLASS (mode) != MODE_INT
12572               || GET_MODE_CLASS (GET_MODE (inner)) != MODE_INT))
12573         break;
12574       else
12575         {
12576           dw_die_ref type_die;
12577           dw_loc_descr_ref cvt;
12578
12579           mem_loc_result = mem_loc_descriptor (inner,
12580                                                GET_MODE (inner),
12581                                                mem_mode, initialized);
12582           if (mem_loc_result == NULL)
12583             break;
12584           type_die = base_type_for_mode (mode,
12585                                          GET_MODE_CLASS (mode) == MODE_INT);
12586           if (type_die == NULL)
12587             {
12588               mem_loc_result = NULL;
12589               break;
12590             }
12591           if (GET_MODE_SIZE (mode)
12592               != GET_MODE_SIZE (GET_MODE (inner)))
12593             cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
12594           else
12595             cvt = new_loc_descr (DW_OP_GNU_reinterpret, 0, 0);
12596           cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
12597           cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
12598           cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
12599           add_loc_descr (&mem_loc_result, cvt);
12600         }
12601       break;
12602
12603     case REG:
12604       if (GET_MODE_CLASS (mode) != MODE_INT
12605           || (GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE
12606               && rtl != arg_pointer_rtx
12607               && rtl != frame_pointer_rtx
12608 #ifdef POINTERS_EXTEND_UNSIGNED
12609               && (mode != Pmode || mem_mode == VOIDmode)
12610 #endif
12611               ))
12612         {
12613           dw_die_ref type_die;
12614           unsigned int dbx_regnum;
12615
12616           if (dwarf_strict)
12617             break;
12618           if (REGNO (rtl) > FIRST_PSEUDO_REGISTER)
12619             break;
12620           type_die = base_type_for_mode (mode,
12621                                          GET_MODE_CLASS (mode) == MODE_INT);
12622           if (type_die == NULL)
12623             break;
12624
12625           dbx_regnum = dbx_reg_number (rtl);
12626           if (dbx_regnum == IGNORED_DWARF_REGNUM)
12627             break;
12628           mem_loc_result = new_loc_descr (DW_OP_GNU_regval_type,
12629                                           dbx_regnum, 0);
12630           mem_loc_result->dw_loc_oprnd2.val_class = dw_val_class_die_ref;
12631           mem_loc_result->dw_loc_oprnd2.v.val_die_ref.die = type_die;
12632           mem_loc_result->dw_loc_oprnd2.v.val_die_ref.external = 0;
12633           break;
12634         }
12635       /* Whenever a register number forms a part of the description of the
12636          method for calculating the (dynamic) address of a memory resident
12637          object, DWARF rules require the register number be referred to as
12638          a "base register".  This distinction is not based in any way upon
12639          what category of register the hardware believes the given register
12640          belongs to.  This is strictly DWARF terminology we're dealing with
12641          here. Note that in cases where the location of a memory-resident
12642          data object could be expressed as: OP_ADD (OP_BASEREG (basereg),
12643          OP_CONST (0)) the actual DWARF location descriptor that we generate
12644          may just be OP_BASEREG (basereg).  This may look deceptively like
12645          the object in question was allocated to a register (rather than in
12646          memory) so DWARF consumers need to be aware of the subtle
12647          distinction between OP_REG and OP_BASEREG.  */
12648       if (REGNO (rtl) < FIRST_PSEUDO_REGISTER)
12649         mem_loc_result = based_loc_descr (rtl, 0, VAR_INIT_STATUS_INITIALIZED);
12650       else if (stack_realign_drap
12651                && crtl->drap_reg
12652                && crtl->args.internal_arg_pointer == rtl
12653                && REGNO (crtl->drap_reg) < FIRST_PSEUDO_REGISTER)
12654         {
12655           /* If RTL is internal_arg_pointer, which has been optimized
12656              out, use DRAP instead.  */
12657           mem_loc_result = based_loc_descr (crtl->drap_reg, 0,
12658                                             VAR_INIT_STATUS_INITIALIZED);
12659         }
12660       break;
12661
12662     case SIGN_EXTEND:
12663     case ZERO_EXTEND:
12664       if (GET_MODE_CLASS (mode) != MODE_INT)
12665         break;
12666       op0 = mem_loc_descriptor (XEXP (rtl, 0), GET_MODE (XEXP (rtl, 0)),
12667                                 mem_mode, VAR_INIT_STATUS_INITIALIZED);
12668       if (op0 == 0)
12669         break;
12670       else if (GET_CODE (rtl) == ZERO_EXTEND
12671                && GET_MODE_SIZE (mode) <= DWARF2_ADDR_SIZE
12672                && GET_MODE_BITSIZE (GET_MODE (XEXP (rtl, 0)))
12673                   < HOST_BITS_PER_WIDE_INT
12674                /* If DW_OP_const{1,2,4}u won't be used, it is shorter
12675                   to expand zero extend as two shifts instead of
12676                   masking.  */
12677                && GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0))) <= 4)
12678         {
12679           machine_mode imode = GET_MODE (XEXP (rtl, 0));
12680           mem_loc_result = op0;
12681           add_loc_descr (&mem_loc_result,
12682                          int_loc_descriptor (GET_MODE_MASK (imode)));
12683           add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_and, 0, 0));
12684         }
12685       else if (GET_MODE_SIZE (mode) <= DWARF2_ADDR_SIZE)
12686         {
12687           int shift = DWARF2_ADDR_SIZE
12688                       - GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0)));
12689           shift *= BITS_PER_UNIT;
12690           if (GET_CODE (rtl) == SIGN_EXTEND)
12691             op = DW_OP_shra;
12692           else
12693             op = DW_OP_shr;
12694           mem_loc_result = op0;
12695           add_loc_descr (&mem_loc_result, int_loc_descriptor (shift));
12696           add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_shl, 0, 0));
12697           add_loc_descr (&mem_loc_result, int_loc_descriptor (shift));
12698           add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
12699         }
12700       else if (!dwarf_strict)
12701         {
12702           dw_die_ref type_die1, type_die2;
12703           dw_loc_descr_ref cvt;
12704
12705           type_die1 = base_type_for_mode (GET_MODE (XEXP (rtl, 0)),
12706                                           GET_CODE (rtl) == ZERO_EXTEND);
12707           if (type_die1 == NULL)
12708             break;
12709           type_die2 = base_type_for_mode (mode, 1);
12710           if (type_die2 == NULL)
12711             break;
12712           mem_loc_result = op0;
12713           cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
12714           cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
12715           cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die1;
12716           cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
12717           add_loc_descr (&mem_loc_result, cvt);
12718           cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
12719           cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
12720           cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die2;
12721           cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
12722           add_loc_descr (&mem_loc_result, cvt);
12723         }
12724       break;
12725
12726     case MEM:
12727       {
12728         rtx new_rtl = avoid_constant_pool_reference (rtl);
12729         if (new_rtl != rtl)
12730           {
12731             mem_loc_result = mem_loc_descriptor (new_rtl, mode, mem_mode,
12732                                                  initialized);
12733             if (mem_loc_result != NULL)
12734               return mem_loc_result;
12735           }
12736       }
12737       mem_loc_result = mem_loc_descriptor (XEXP (rtl, 0),
12738                                            get_address_mode (rtl), mode,
12739                                            VAR_INIT_STATUS_INITIALIZED);
12740       if (mem_loc_result == NULL)
12741         mem_loc_result = tls_mem_loc_descriptor (rtl);
12742       if (mem_loc_result != NULL)
12743         {
12744           if (GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE
12745               || GET_MODE_CLASS (mode) != MODE_INT)
12746             {
12747               dw_die_ref type_die;
12748               dw_loc_descr_ref deref;
12749
12750               if (dwarf_strict)
12751                 return NULL;
12752               type_die
12753                 = base_type_for_mode (mode, GET_MODE_CLASS (mode) == MODE_INT);
12754               if (type_die == NULL)
12755                 return NULL;
12756               deref = new_loc_descr (DW_OP_GNU_deref_type,
12757                                      GET_MODE_SIZE (mode), 0);
12758               deref->dw_loc_oprnd2.val_class = dw_val_class_die_ref;
12759               deref->dw_loc_oprnd2.v.val_die_ref.die = type_die;
12760               deref->dw_loc_oprnd2.v.val_die_ref.external = 0;
12761               add_loc_descr (&mem_loc_result, deref);
12762             }
12763           else if (GET_MODE_SIZE (mode) == DWARF2_ADDR_SIZE)
12764             add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_deref, 0, 0));
12765           else
12766             add_loc_descr (&mem_loc_result,
12767                            new_loc_descr (DW_OP_deref_size,
12768                                           GET_MODE_SIZE (mode), 0));
12769         }
12770       break;
12771
12772     case LO_SUM:
12773       return mem_loc_descriptor (XEXP (rtl, 1), mode, mem_mode, initialized);
12774
12775     case LABEL_REF:
12776       /* Some ports can transform a symbol ref into a label ref, because
12777          the symbol ref is too far away and has to be dumped into a constant
12778          pool.  */
12779     case CONST:
12780     case SYMBOL_REF:
12781       if ((GET_MODE_CLASS (mode) != MODE_INT
12782            && GET_MODE_CLASS (mode) != MODE_PARTIAL_INT)
12783           || (GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE
12784 #ifdef POINTERS_EXTEND_UNSIGNED
12785               && (mode != Pmode || mem_mode == VOIDmode)
12786 #endif
12787               ))
12788         break;
12789       if (GET_CODE (rtl) == SYMBOL_REF
12790           && SYMBOL_REF_TLS_MODEL (rtl) != TLS_MODEL_NONE)
12791         {
12792           dw_loc_descr_ref temp;
12793
12794           /* If this is not defined, we have no way to emit the data.  */
12795           if (!targetm.have_tls || !targetm.asm_out.output_dwarf_dtprel)
12796             break;
12797
12798           temp = new_addr_loc_descr (rtl, dtprel_true);
12799
12800           mem_loc_result = new_loc_descr (DW_OP_GNU_push_tls_address, 0, 0);
12801           add_loc_descr (&mem_loc_result, temp);
12802
12803           break;
12804         }
12805
12806       if (!const_ok_for_output (rtl))
12807         break;
12808
12809     symref:
12810       mem_loc_result = new_addr_loc_descr (rtl, dtprel_false);
12811       vec_safe_push (used_rtx_array, rtl);
12812       break;
12813
12814     case CONCAT:
12815     case CONCATN:
12816     case VAR_LOCATION:
12817     case DEBUG_IMPLICIT_PTR:
12818       expansion_failed (NULL_TREE, rtl,
12819                         "CONCAT/CONCATN/VAR_LOCATION is handled only by loc_descriptor");
12820       return 0;
12821
12822     case ENTRY_VALUE:
12823       if (dwarf_strict)
12824         return NULL;
12825       if (REG_P (ENTRY_VALUE_EXP (rtl)))
12826         {
12827           if (GET_MODE_CLASS (mode) != MODE_INT
12828               || GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE)
12829             op0 = mem_loc_descriptor (ENTRY_VALUE_EXP (rtl), mode,
12830                                       VOIDmode, VAR_INIT_STATUS_INITIALIZED);
12831           else
12832             {
12833               unsigned int dbx_regnum = dbx_reg_number (ENTRY_VALUE_EXP (rtl));
12834               if (dbx_regnum == IGNORED_DWARF_REGNUM)
12835                 return NULL;
12836               op0 = one_reg_loc_descriptor (dbx_regnum,
12837                                             VAR_INIT_STATUS_INITIALIZED);
12838             }
12839         }
12840       else if (MEM_P (ENTRY_VALUE_EXP (rtl))
12841                && REG_P (XEXP (ENTRY_VALUE_EXP (rtl), 0)))
12842         {
12843           op0 = mem_loc_descriptor (ENTRY_VALUE_EXP (rtl), mode,
12844                                     VOIDmode, VAR_INIT_STATUS_INITIALIZED);
12845           if (op0 && op0->dw_loc_opc == DW_OP_fbreg)
12846             return NULL;
12847         }
12848       else
12849         gcc_unreachable ();
12850       if (op0 == NULL)
12851         return NULL;
12852       mem_loc_result = new_loc_descr (DW_OP_GNU_entry_value, 0, 0);
12853       mem_loc_result->dw_loc_oprnd1.val_class = dw_val_class_loc;
12854       mem_loc_result->dw_loc_oprnd1.v.val_loc = op0;
12855       break;
12856
12857     case DEBUG_PARAMETER_REF:
12858       mem_loc_result = parameter_ref_descriptor (rtl);
12859       break;
12860
12861     case PRE_MODIFY:
12862       /* Extract the PLUS expression nested inside and fall into
12863          PLUS code below.  */
12864       rtl = XEXP (rtl, 1);
12865       goto plus;
12866
12867     case PRE_INC:
12868     case PRE_DEC:
12869       /* Turn these into a PLUS expression and fall into the PLUS code
12870          below.  */
12871       rtl = gen_rtx_PLUS (mode, XEXP (rtl, 0),
12872                           gen_int_mode (GET_CODE (rtl) == PRE_INC
12873                                         ? GET_MODE_UNIT_SIZE (mem_mode)
12874                                         : -GET_MODE_UNIT_SIZE (mem_mode),
12875                                         mode));
12876
12877       /* ... fall through ...  */
12878
12879     case PLUS:
12880     plus:
12881       if (is_based_loc (rtl)
12882           && (GET_MODE_SIZE (mode) <= DWARF2_ADDR_SIZE
12883               || XEXP (rtl, 0) == arg_pointer_rtx
12884               || XEXP (rtl, 0) == frame_pointer_rtx)
12885           && GET_MODE_CLASS (mode) == MODE_INT)
12886         mem_loc_result = based_loc_descr (XEXP (rtl, 0),
12887                                           INTVAL (XEXP (rtl, 1)),
12888                                           VAR_INIT_STATUS_INITIALIZED);
12889       else
12890         {
12891           mem_loc_result = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
12892                                                VAR_INIT_STATUS_INITIALIZED);
12893           if (mem_loc_result == 0)
12894             break;
12895
12896           if (CONST_INT_P (XEXP (rtl, 1))
12897               && GET_MODE_SIZE (mode) <= DWARF2_ADDR_SIZE)
12898             loc_descr_plus_const (&mem_loc_result, INTVAL (XEXP (rtl, 1)));
12899           else
12900             {
12901               op1 = mem_loc_descriptor (XEXP (rtl, 1), mode, mem_mode,
12902                                         VAR_INIT_STATUS_INITIALIZED);
12903               if (op1 == 0)
12904                 return NULL;
12905               add_loc_descr (&mem_loc_result, op1);
12906               add_loc_descr (&mem_loc_result,
12907                              new_loc_descr (DW_OP_plus, 0, 0));
12908             }
12909         }
12910       break;
12911
12912     /* If a pseudo-reg is optimized away, it is possible for it to
12913        be replaced with a MEM containing a multiply or shift.  */
12914     case MINUS:
12915       op = DW_OP_minus;
12916       goto do_binop;
12917
12918     case MULT:
12919       op = DW_OP_mul;
12920       goto do_binop;
12921
12922     case DIV:
12923       if (!dwarf_strict
12924           && GET_MODE_CLASS (mode) == MODE_INT
12925           && GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE)
12926         {
12927           mem_loc_result = typed_binop (DW_OP_div, rtl,
12928                                         base_type_for_mode (mode, 0),
12929                                         mode, mem_mode);
12930           break;
12931         }
12932       op = DW_OP_div;
12933       goto do_binop;
12934
12935     case UMOD:
12936       op = DW_OP_mod;
12937       goto do_binop;
12938
12939     case ASHIFT:
12940       op = DW_OP_shl;
12941       goto do_shift;
12942
12943     case ASHIFTRT:
12944       op = DW_OP_shra;
12945       goto do_shift;
12946
12947     case LSHIFTRT:
12948       op = DW_OP_shr;
12949       goto do_shift;
12950
12951     do_shift:
12952       if (GET_MODE_CLASS (mode) != MODE_INT)
12953         break;
12954       op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
12955                                 VAR_INIT_STATUS_INITIALIZED);
12956       {
12957         rtx rtlop1 = XEXP (rtl, 1);
12958         if (GET_MODE (rtlop1) != VOIDmode
12959             && GET_MODE_BITSIZE (GET_MODE (rtlop1))
12960                < GET_MODE_BITSIZE (mode))
12961           rtlop1 = gen_rtx_ZERO_EXTEND (mode, rtlop1);
12962         op1 = mem_loc_descriptor (rtlop1, mode, mem_mode,
12963                                   VAR_INIT_STATUS_INITIALIZED);
12964       }
12965
12966       if (op0 == 0 || op1 == 0)
12967         break;
12968
12969       mem_loc_result = op0;
12970       add_loc_descr (&mem_loc_result, op1);
12971       add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
12972       break;
12973
12974     case AND:
12975       op = DW_OP_and;
12976       goto do_binop;
12977
12978     case IOR:
12979       op = DW_OP_or;
12980       goto do_binop;
12981
12982     case XOR:
12983       op = DW_OP_xor;
12984       goto do_binop;
12985
12986     do_binop:
12987       op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
12988                                 VAR_INIT_STATUS_INITIALIZED);
12989       op1 = mem_loc_descriptor (XEXP (rtl, 1), mode, mem_mode,
12990                                 VAR_INIT_STATUS_INITIALIZED);
12991
12992       if (op0 == 0 || op1 == 0)
12993         break;
12994
12995       mem_loc_result = op0;
12996       add_loc_descr (&mem_loc_result, op1);
12997       add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
12998       break;
12999
13000     case MOD:
13001       if (GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE && !dwarf_strict)
13002         {
13003           mem_loc_result = typed_binop (DW_OP_mod, rtl,
13004                                         base_type_for_mode (mode, 0),
13005                                         mode, mem_mode);
13006           break;
13007         }
13008
13009       op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
13010                                 VAR_INIT_STATUS_INITIALIZED);
13011       op1 = mem_loc_descriptor (XEXP (rtl, 1), mode, mem_mode,
13012                                 VAR_INIT_STATUS_INITIALIZED);
13013
13014       if (op0 == 0 || op1 == 0)
13015         break;
13016
13017       mem_loc_result = op0;
13018       add_loc_descr (&mem_loc_result, op1);
13019       add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_over, 0, 0));
13020       add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_over, 0, 0));
13021       add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_div, 0, 0));
13022       add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_mul, 0, 0));
13023       add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_minus, 0, 0));
13024       break;
13025
13026     case UDIV:
13027       if (!dwarf_strict && GET_MODE_CLASS (mode) == MODE_INT)
13028         {
13029           if (GET_MODE_CLASS (mode) > DWARF2_ADDR_SIZE)
13030             {
13031               op = DW_OP_div;
13032               goto do_binop;
13033             }
13034           mem_loc_result = typed_binop (DW_OP_div, rtl,
13035                                         base_type_for_mode (mode, 1),
13036                                         mode, mem_mode);
13037         }
13038       break;
13039
13040     case NOT:
13041       op = DW_OP_not;
13042       goto do_unop;
13043
13044     case ABS:
13045       op = DW_OP_abs;
13046       goto do_unop;
13047
13048     case NEG:
13049       op = DW_OP_neg;
13050       goto do_unop;
13051
13052     do_unop:
13053       op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
13054                                 VAR_INIT_STATUS_INITIALIZED);
13055
13056       if (op0 == 0)
13057         break;
13058
13059       mem_loc_result = op0;
13060       add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
13061       break;
13062
13063     case CONST_INT:
13064       if (GET_MODE_SIZE (mode) <= DWARF2_ADDR_SIZE
13065 #ifdef POINTERS_EXTEND_UNSIGNED
13066           || (mode == Pmode
13067               && mem_mode != VOIDmode
13068               && trunc_int_for_mode (INTVAL (rtl), ptr_mode) == INTVAL (rtl))
13069 #endif
13070           )
13071         {
13072           mem_loc_result = int_loc_descriptor (INTVAL (rtl));
13073           break;
13074         }
13075       if (!dwarf_strict
13076           && (GET_MODE_BITSIZE (mode) == HOST_BITS_PER_WIDE_INT
13077               || GET_MODE_BITSIZE (mode) == HOST_BITS_PER_DOUBLE_INT))
13078         {
13079           dw_die_ref type_die = base_type_for_mode (mode, 1);
13080           machine_mode amode;
13081           if (type_die == NULL)
13082             return NULL;
13083           amode = mode_for_size (DWARF2_ADDR_SIZE * BITS_PER_UNIT,
13084                                  MODE_INT, 0);
13085           if (INTVAL (rtl) >= 0
13086               && amode != BLKmode
13087               && trunc_int_for_mode (INTVAL (rtl), amode) == INTVAL (rtl)
13088               /* const DW_OP_GNU_convert <XXX> vs.
13089                  DW_OP_GNU_const_type <XXX, 1, const>.  */
13090               && size_of_int_loc_descriptor (INTVAL (rtl)) + 1 + 1
13091                  < (unsigned long) 1 + 1 + 1 + GET_MODE_SIZE (mode))
13092             {
13093               mem_loc_result = int_loc_descriptor (INTVAL (rtl));
13094               op0 = new_loc_descr (DW_OP_GNU_convert, 0, 0);
13095               op0->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
13096               op0->dw_loc_oprnd1.v.val_die_ref.die = type_die;
13097               op0->dw_loc_oprnd1.v.val_die_ref.external = 0;
13098               add_loc_descr (&mem_loc_result, op0);
13099               return mem_loc_result;
13100             }
13101           mem_loc_result = new_loc_descr (DW_OP_GNU_const_type, 0,
13102                                           INTVAL (rtl));
13103           mem_loc_result->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
13104           mem_loc_result->dw_loc_oprnd1.v.val_die_ref.die = type_die;
13105           mem_loc_result->dw_loc_oprnd1.v.val_die_ref.external = 0;
13106           if (GET_MODE_BITSIZE (mode) == HOST_BITS_PER_WIDE_INT)
13107             mem_loc_result->dw_loc_oprnd2.val_class = dw_val_class_const;
13108           else
13109             {
13110               mem_loc_result->dw_loc_oprnd2.val_class
13111                 = dw_val_class_const_double;
13112               mem_loc_result->dw_loc_oprnd2.v.val_double
13113                 = double_int::from_shwi (INTVAL (rtl));
13114             }
13115         }
13116       break;
13117
13118     case CONST_DOUBLE:
13119       if (!dwarf_strict)
13120         {
13121           dw_die_ref type_die;
13122
13123           /* Note that if TARGET_SUPPORTS_WIDE_INT == 0, a
13124              CONST_DOUBLE rtx could represent either a large integer
13125              or a floating-point constant.  If TARGET_SUPPORTS_WIDE_INT != 0,
13126              the value is always a floating point constant.
13127
13128              When it is an integer, a CONST_DOUBLE is used whenever
13129              the constant requires 2 HWIs to be adequately represented.
13130              We output CONST_DOUBLEs as blocks.  */
13131           if (mode == VOIDmode
13132               || (GET_MODE (rtl) == VOIDmode
13133                   && GET_MODE_BITSIZE (mode) != HOST_BITS_PER_DOUBLE_INT))
13134             break;
13135           type_die = base_type_for_mode (mode,
13136                                          GET_MODE_CLASS (mode) == MODE_INT);
13137           if (type_die == NULL)
13138             return NULL;
13139           mem_loc_result = new_loc_descr (DW_OP_GNU_const_type, 0, 0);
13140           mem_loc_result->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
13141           mem_loc_result->dw_loc_oprnd1.v.val_die_ref.die = type_die;
13142           mem_loc_result->dw_loc_oprnd1.v.val_die_ref.external = 0;
13143 #if TARGET_SUPPORTS_WIDE_INT == 0
13144           if (!SCALAR_FLOAT_MODE_P (mode))
13145             {
13146               mem_loc_result->dw_loc_oprnd2.val_class
13147                 = dw_val_class_const_double;
13148               mem_loc_result->dw_loc_oprnd2.v.val_double
13149                 = rtx_to_double_int (rtl);
13150             }
13151           else
13152 #endif
13153             {
13154               unsigned int length = GET_MODE_SIZE (mode);
13155               unsigned char *array = ggc_vec_alloc<unsigned char> (length);
13156
13157               insert_float (rtl, array);
13158               mem_loc_result->dw_loc_oprnd2.val_class = dw_val_class_vec;
13159               mem_loc_result->dw_loc_oprnd2.v.val_vec.length = length / 4;
13160               mem_loc_result->dw_loc_oprnd2.v.val_vec.elt_size = 4;
13161               mem_loc_result->dw_loc_oprnd2.v.val_vec.array = array;
13162             }
13163         }
13164       break;
13165
13166     case CONST_WIDE_INT:
13167       if (!dwarf_strict)
13168         {
13169           dw_die_ref type_die;
13170
13171           type_die = base_type_for_mode (mode,
13172                                          GET_MODE_CLASS (mode) == MODE_INT);
13173           if (type_die == NULL)
13174             return NULL;
13175           mem_loc_result = new_loc_descr (DW_OP_GNU_const_type, 0, 0);
13176           mem_loc_result->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
13177           mem_loc_result->dw_loc_oprnd1.v.val_die_ref.die = type_die;
13178           mem_loc_result->dw_loc_oprnd1.v.val_die_ref.external = 0;
13179           mem_loc_result->dw_loc_oprnd2.val_class
13180             = dw_val_class_wide_int;
13181           mem_loc_result->dw_loc_oprnd2.v.val_wide = ggc_alloc<wide_int> ();
13182           *mem_loc_result->dw_loc_oprnd2.v.val_wide = std::make_pair (rtl, mode);
13183         }
13184       break;
13185
13186     case EQ:
13187       mem_loc_result = scompare_loc_descriptor (DW_OP_eq, rtl, mem_mode);
13188       break;
13189
13190     case GE:
13191       mem_loc_result = scompare_loc_descriptor (DW_OP_ge, rtl, mem_mode);
13192       break;
13193
13194     case GT:
13195       mem_loc_result = scompare_loc_descriptor (DW_OP_gt, rtl, mem_mode);
13196       break;
13197
13198     case LE:
13199       mem_loc_result = scompare_loc_descriptor (DW_OP_le, rtl, mem_mode);
13200       break;
13201
13202     case LT:
13203       mem_loc_result = scompare_loc_descriptor (DW_OP_lt, rtl, mem_mode);
13204       break;
13205
13206     case NE:
13207       mem_loc_result = scompare_loc_descriptor (DW_OP_ne, rtl, mem_mode);
13208       break;
13209
13210     case GEU:
13211       mem_loc_result = ucompare_loc_descriptor (DW_OP_ge, rtl, mem_mode);
13212       break;
13213
13214     case GTU:
13215       mem_loc_result = ucompare_loc_descriptor (DW_OP_gt, rtl, mem_mode);
13216       break;
13217
13218     case LEU:
13219       mem_loc_result = ucompare_loc_descriptor (DW_OP_le, rtl, mem_mode);
13220       break;
13221
13222     case LTU:
13223       mem_loc_result = ucompare_loc_descriptor (DW_OP_lt, rtl, mem_mode);
13224       break;
13225
13226     case UMIN:
13227     case UMAX:
13228       if (GET_MODE_CLASS (mode) != MODE_INT)
13229         break;
13230       /* FALLTHRU */
13231     case SMIN:
13232     case SMAX:
13233       mem_loc_result = minmax_loc_descriptor (rtl, mode, mem_mode);
13234       break;
13235
13236     case ZERO_EXTRACT:
13237     case SIGN_EXTRACT:
13238       if (CONST_INT_P (XEXP (rtl, 1))
13239           && CONST_INT_P (XEXP (rtl, 2))
13240           && ((unsigned) INTVAL (XEXP (rtl, 1))
13241               + (unsigned) INTVAL (XEXP (rtl, 2))
13242               <= GET_MODE_BITSIZE (mode))
13243           && GET_MODE_CLASS (mode) == MODE_INT
13244           && GET_MODE_SIZE (mode) <= DWARF2_ADDR_SIZE
13245           && GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0))) <= DWARF2_ADDR_SIZE)
13246         {
13247           int shift, size;
13248           op0 = mem_loc_descriptor (XEXP (rtl, 0), GET_MODE (XEXP (rtl, 0)),
13249                                     mem_mode, VAR_INIT_STATUS_INITIALIZED);
13250           if (op0 == 0)
13251             break;
13252           if (GET_CODE (rtl) == SIGN_EXTRACT)
13253             op = DW_OP_shra;
13254           else
13255             op = DW_OP_shr;
13256           mem_loc_result = op0;
13257           size = INTVAL (XEXP (rtl, 1));
13258           shift = INTVAL (XEXP (rtl, 2));
13259           if (BITS_BIG_ENDIAN)
13260             shift = GET_MODE_BITSIZE (GET_MODE (XEXP (rtl, 0)))
13261                     - shift - size;
13262           if (shift + size != (int) DWARF2_ADDR_SIZE)
13263             {
13264               add_loc_descr (&mem_loc_result,
13265                              int_loc_descriptor (DWARF2_ADDR_SIZE
13266                                                  - shift - size));
13267               add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_shl, 0, 0));
13268             }
13269           if (size != (int) DWARF2_ADDR_SIZE)
13270             {
13271               add_loc_descr (&mem_loc_result,
13272                              int_loc_descriptor (DWARF2_ADDR_SIZE - size));
13273               add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
13274             }
13275         }
13276       break;
13277
13278     case IF_THEN_ELSE:
13279       {
13280         dw_loc_descr_ref op2, bra_node, drop_node;
13281         op0 = mem_loc_descriptor (XEXP (rtl, 0),
13282                                   GET_MODE (XEXP (rtl, 0)) == VOIDmode
13283                                   ? word_mode : GET_MODE (XEXP (rtl, 0)),
13284                                   mem_mode, VAR_INIT_STATUS_INITIALIZED);
13285         op1 = mem_loc_descriptor (XEXP (rtl, 1), mode, mem_mode,
13286                                   VAR_INIT_STATUS_INITIALIZED);
13287         op2 = mem_loc_descriptor (XEXP (rtl, 2), mode, mem_mode,
13288                                   VAR_INIT_STATUS_INITIALIZED);
13289         if (op0 == NULL || op1 == NULL || op2 == NULL)
13290           break;
13291
13292         mem_loc_result = op1;
13293         add_loc_descr (&mem_loc_result, op2);
13294         add_loc_descr (&mem_loc_result, op0);
13295         bra_node = new_loc_descr (DW_OP_bra, 0, 0);
13296         add_loc_descr (&mem_loc_result, bra_node);
13297         add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_swap, 0, 0));
13298         drop_node = new_loc_descr (DW_OP_drop, 0, 0);
13299         add_loc_descr (&mem_loc_result, drop_node);
13300         bra_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
13301         bra_node->dw_loc_oprnd1.v.val_loc = drop_node;
13302       }
13303       break;
13304
13305     case FLOAT_EXTEND:
13306     case FLOAT_TRUNCATE:
13307     case FLOAT:
13308     case UNSIGNED_FLOAT:
13309     case FIX:
13310     case UNSIGNED_FIX:
13311       if (!dwarf_strict)
13312         {
13313           dw_die_ref type_die;
13314           dw_loc_descr_ref cvt;
13315
13316           op0 = mem_loc_descriptor (XEXP (rtl, 0), GET_MODE (XEXP (rtl, 0)),
13317                                     mem_mode, VAR_INIT_STATUS_INITIALIZED);
13318           if (op0 == NULL)
13319             break;
13320           if (GET_MODE_CLASS (GET_MODE (XEXP (rtl, 0))) == MODE_INT
13321               && (GET_CODE (rtl) == FLOAT
13322                   || GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0)))
13323                      <= DWARF2_ADDR_SIZE))
13324             {
13325               type_die = base_type_for_mode (GET_MODE (XEXP (rtl, 0)),
13326                                              GET_CODE (rtl) == UNSIGNED_FLOAT);
13327               if (type_die == NULL)
13328                 break;
13329               cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
13330               cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
13331               cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
13332               cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
13333               add_loc_descr (&op0, cvt);
13334             }
13335           type_die = base_type_for_mode (mode, GET_CODE (rtl) == UNSIGNED_FIX);
13336           if (type_die == NULL)
13337             break;
13338           cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
13339           cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
13340           cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
13341           cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
13342           add_loc_descr (&op0, cvt);
13343           if (GET_MODE_CLASS (mode) == MODE_INT
13344               && (GET_CODE (rtl) == FIX
13345                   || GET_MODE_SIZE (mode) < DWARF2_ADDR_SIZE))
13346             {
13347               op0 = convert_descriptor_to_mode (mode, op0);
13348               if (op0 == NULL)
13349                 break;
13350             }
13351           mem_loc_result = op0;
13352         }
13353       break;
13354
13355     case CLZ:
13356     case CTZ:
13357     case FFS:
13358       mem_loc_result = clz_loc_descriptor (rtl, mode, mem_mode);
13359       break;
13360
13361     case POPCOUNT:
13362     case PARITY:
13363       mem_loc_result = popcount_loc_descriptor (rtl, mode, mem_mode);
13364       break;
13365
13366     case BSWAP:
13367       mem_loc_result = bswap_loc_descriptor (rtl, mode, mem_mode);
13368       break;
13369
13370     case ROTATE:
13371     case ROTATERT:
13372       mem_loc_result = rotate_loc_descriptor (rtl, mode, mem_mode);
13373       break;
13374
13375     case COMPARE:
13376       /* In theory, we could implement the above.  */
13377       /* DWARF cannot represent the unsigned compare operations
13378          natively.  */
13379     case SS_MULT:
13380     case US_MULT:
13381     case SS_DIV:
13382     case US_DIV:
13383     case SS_PLUS:
13384     case US_PLUS:
13385     case SS_MINUS:
13386     case US_MINUS:
13387     case SS_NEG:
13388     case US_NEG:
13389     case SS_ABS:
13390     case SS_ASHIFT:
13391     case US_ASHIFT:
13392     case SS_TRUNCATE:
13393     case US_TRUNCATE:
13394     case UNORDERED:
13395     case ORDERED:
13396     case UNEQ:
13397     case UNGE:
13398     case UNGT:
13399     case UNLE:
13400     case UNLT:
13401     case LTGT:
13402     case FRACT_CONVERT:
13403     case UNSIGNED_FRACT_CONVERT:
13404     case SAT_FRACT:
13405     case UNSIGNED_SAT_FRACT:
13406     case SQRT:
13407     case ASM_OPERANDS:
13408     case VEC_MERGE:
13409     case VEC_SELECT:
13410     case VEC_CONCAT:
13411     case VEC_DUPLICATE:
13412     case UNSPEC:
13413     case HIGH:
13414     case FMA:
13415     case STRICT_LOW_PART:
13416     case CONST_VECTOR:
13417     case CONST_FIXED:
13418     case CLRSB:
13419     case CLOBBER:
13420       /* If delegitimize_address couldn't do anything with the UNSPEC, we
13421          can't express it in the debug info.  This can happen e.g. with some
13422          TLS UNSPECs.  */
13423       break;
13424
13425     case CONST_STRING:
13426       resolve_one_addr (&rtl);
13427       goto symref;
13428
13429     default:
13430 #ifdef ENABLE_CHECKING
13431       print_rtl (stderr, rtl);
13432       gcc_unreachable ();
13433 #else
13434       break;
13435 #endif
13436     }
13437
13438   if (mem_loc_result && initialized == VAR_INIT_STATUS_UNINITIALIZED)
13439     add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
13440
13441   return mem_loc_result;
13442 }
13443
13444 /* Return a descriptor that describes the concatenation of two locations.
13445    This is typically a complex variable.  */
13446
13447 static dw_loc_descr_ref
13448 concat_loc_descriptor (rtx x0, rtx x1, enum var_init_status initialized)
13449 {
13450   dw_loc_descr_ref cc_loc_result = NULL;
13451   dw_loc_descr_ref x0_ref
13452     = loc_descriptor (x0, VOIDmode, VAR_INIT_STATUS_INITIALIZED);
13453   dw_loc_descr_ref x1_ref
13454     = loc_descriptor (x1, VOIDmode, VAR_INIT_STATUS_INITIALIZED);
13455
13456   if (x0_ref == 0 || x1_ref == 0)
13457     return 0;
13458
13459   cc_loc_result = x0_ref;
13460   add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x0)));
13461
13462   add_loc_descr (&cc_loc_result, x1_ref);
13463   add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x1)));
13464
13465   if (initialized == VAR_INIT_STATUS_UNINITIALIZED)
13466     add_loc_descr (&cc_loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
13467
13468   return cc_loc_result;
13469 }
13470
13471 /* Return a descriptor that describes the concatenation of N
13472    locations.  */
13473
13474 static dw_loc_descr_ref
13475 concatn_loc_descriptor (rtx concatn, enum var_init_status initialized)
13476 {
13477   unsigned int i;
13478   dw_loc_descr_ref cc_loc_result = NULL;
13479   unsigned int n = XVECLEN (concatn, 0);
13480
13481   for (i = 0; i < n; ++i)
13482     {
13483       dw_loc_descr_ref ref;
13484       rtx x = XVECEXP (concatn, 0, i);
13485
13486       ref = loc_descriptor (x, VOIDmode, VAR_INIT_STATUS_INITIALIZED);
13487       if (ref == NULL)
13488         return NULL;
13489
13490       add_loc_descr (&cc_loc_result, ref);
13491       add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x)));
13492     }
13493
13494   if (cc_loc_result && initialized == VAR_INIT_STATUS_UNINITIALIZED)
13495     add_loc_descr (&cc_loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
13496
13497   return cc_loc_result;
13498 }
13499
13500 /* Helper function for loc_descriptor.  Return DW_OP_GNU_implicit_pointer
13501    for DEBUG_IMPLICIT_PTR RTL.  */
13502
13503 static dw_loc_descr_ref
13504 implicit_ptr_descriptor (rtx rtl, HOST_WIDE_INT offset)
13505 {
13506   dw_loc_descr_ref ret;
13507   dw_die_ref ref;
13508
13509   if (dwarf_strict)
13510     return NULL;
13511   gcc_assert (TREE_CODE (DEBUG_IMPLICIT_PTR_DECL (rtl)) == VAR_DECL
13512               || TREE_CODE (DEBUG_IMPLICIT_PTR_DECL (rtl)) == PARM_DECL
13513               || TREE_CODE (DEBUG_IMPLICIT_PTR_DECL (rtl)) == RESULT_DECL);
13514   ref = lookup_decl_die (DEBUG_IMPLICIT_PTR_DECL (rtl));
13515   ret = new_loc_descr (DW_OP_GNU_implicit_pointer, 0, offset);
13516   ret->dw_loc_oprnd2.val_class = dw_val_class_const;
13517   if (ref)
13518     {
13519       ret->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
13520       ret->dw_loc_oprnd1.v.val_die_ref.die = ref;
13521       ret->dw_loc_oprnd1.v.val_die_ref.external = 0;
13522     }
13523   else
13524     {
13525       ret->dw_loc_oprnd1.val_class = dw_val_class_decl_ref;
13526       ret->dw_loc_oprnd1.v.val_decl_ref = DEBUG_IMPLICIT_PTR_DECL (rtl);
13527     }
13528   return ret;
13529 }
13530
13531 /* Output a proper Dwarf location descriptor for a variable or parameter
13532    which is either allocated in a register or in a memory location.  For a
13533    register, we just generate an OP_REG and the register number.  For a
13534    memory location we provide a Dwarf postfix expression describing how to
13535    generate the (dynamic) address of the object onto the address stack.
13536
13537    MODE is mode of the decl if this loc_descriptor is going to be used in
13538    .debug_loc section where DW_OP_stack_value and DW_OP_implicit_value are
13539    allowed, VOIDmode otherwise.
13540
13541    If we don't know how to describe it, return 0.  */
13542
13543 static dw_loc_descr_ref
13544 loc_descriptor (rtx rtl, machine_mode mode,
13545                 enum var_init_status initialized)
13546 {
13547   dw_loc_descr_ref loc_result = NULL;
13548
13549   switch (GET_CODE (rtl))
13550     {
13551     case SUBREG:
13552       /* The case of a subreg may arise when we have a local (register)
13553          variable or a formal (register) parameter which doesn't quite fill
13554          up an entire register.  For now, just assume that it is
13555          legitimate to make the Dwarf info refer to the whole register which
13556          contains the given subreg.  */
13557       if (REG_P (SUBREG_REG (rtl)) && subreg_lowpart_p (rtl))
13558         loc_result = loc_descriptor (SUBREG_REG (rtl),
13559                                      GET_MODE (SUBREG_REG (rtl)), initialized);
13560       else
13561         goto do_default;
13562       break;
13563
13564     case REG:
13565       loc_result = reg_loc_descriptor (rtl, initialized);
13566       break;
13567
13568     case MEM:
13569       loc_result = mem_loc_descriptor (XEXP (rtl, 0), get_address_mode (rtl),
13570                                        GET_MODE (rtl), initialized);
13571       if (loc_result == NULL)
13572         loc_result = tls_mem_loc_descriptor (rtl);
13573       if (loc_result == NULL)
13574         {
13575           rtx new_rtl = avoid_constant_pool_reference (rtl);
13576           if (new_rtl != rtl)
13577             loc_result = loc_descriptor (new_rtl, mode, initialized);
13578         }
13579       break;
13580
13581     case CONCAT:
13582       loc_result = concat_loc_descriptor (XEXP (rtl, 0), XEXP (rtl, 1),
13583                                           initialized);
13584       break;
13585
13586     case CONCATN:
13587       loc_result = concatn_loc_descriptor (rtl, initialized);
13588       break;
13589
13590     case VAR_LOCATION:
13591       /* Single part.  */
13592       if (GET_CODE (PAT_VAR_LOCATION_LOC (rtl)) != PARALLEL)
13593         {
13594           rtx loc = PAT_VAR_LOCATION_LOC (rtl);
13595           if (GET_CODE (loc) == EXPR_LIST)
13596             loc = XEXP (loc, 0);
13597           loc_result = loc_descriptor (loc, mode, initialized);
13598           break;
13599         }
13600
13601       rtl = XEXP (rtl, 1);
13602       /* FALLTHRU */
13603
13604     case PARALLEL:
13605       {
13606         rtvec par_elems = XVEC (rtl, 0);
13607         int num_elem = GET_NUM_ELEM (par_elems);
13608         machine_mode mode;
13609         int i;
13610
13611         /* Create the first one, so we have something to add to.  */
13612         loc_result = loc_descriptor (XEXP (RTVEC_ELT (par_elems, 0), 0),
13613                                      VOIDmode, initialized);
13614         if (loc_result == NULL)
13615           return NULL;
13616         mode = GET_MODE (XEXP (RTVEC_ELT (par_elems, 0), 0));
13617         add_loc_descr_op_piece (&loc_result, GET_MODE_SIZE (mode));
13618         for (i = 1; i < num_elem; i++)
13619           {
13620             dw_loc_descr_ref temp;
13621
13622             temp = loc_descriptor (XEXP (RTVEC_ELT (par_elems, i), 0),
13623                                    VOIDmode, initialized);
13624             if (temp == NULL)
13625               return NULL;
13626             add_loc_descr (&loc_result, temp);
13627             mode = GET_MODE (XEXP (RTVEC_ELT (par_elems, i), 0));
13628             add_loc_descr_op_piece (&loc_result, GET_MODE_SIZE (mode));
13629           }
13630       }
13631       break;
13632
13633     case CONST_INT:
13634       if (mode != VOIDmode && mode != BLKmode)
13635         loc_result = address_of_int_loc_descriptor (GET_MODE_SIZE (mode),
13636                                                     INTVAL (rtl));
13637       break;
13638
13639     case CONST_DOUBLE:
13640       if (mode == VOIDmode)
13641         mode = GET_MODE (rtl);
13642
13643       if (mode != VOIDmode && (dwarf_version >= 4 || !dwarf_strict))
13644         {
13645           gcc_assert (mode == GET_MODE (rtl) || VOIDmode == GET_MODE (rtl));
13646
13647           /* Note that a CONST_DOUBLE rtx could represent either an integer
13648              or a floating-point constant.  A CONST_DOUBLE is used whenever
13649              the constant requires more than one word in order to be
13650              adequately represented.  We output CONST_DOUBLEs as blocks.  */
13651           loc_result = new_loc_descr (DW_OP_implicit_value,
13652                                       GET_MODE_SIZE (mode), 0);
13653 #if TARGET_SUPPORTS_WIDE_INT == 0
13654           if (!SCALAR_FLOAT_MODE_P (mode))
13655             {
13656               loc_result->dw_loc_oprnd2.val_class = dw_val_class_const_double;
13657               loc_result->dw_loc_oprnd2.v.val_double
13658                 = rtx_to_double_int (rtl);
13659             }
13660           else
13661 #endif
13662             {
13663               unsigned int length = GET_MODE_SIZE (mode);
13664               unsigned char *array = ggc_vec_alloc<unsigned char> (length);
13665
13666               insert_float (rtl, array);
13667               loc_result->dw_loc_oprnd2.val_class = dw_val_class_vec;
13668               loc_result->dw_loc_oprnd2.v.val_vec.length = length / 4;
13669               loc_result->dw_loc_oprnd2.v.val_vec.elt_size = 4;
13670               loc_result->dw_loc_oprnd2.v.val_vec.array = array;
13671             }
13672         }
13673       break;
13674
13675     case CONST_WIDE_INT:
13676       if (mode == VOIDmode)
13677         mode = GET_MODE (rtl);
13678
13679       if (mode != VOIDmode && (dwarf_version >= 4 || !dwarf_strict))
13680         {
13681           loc_result = new_loc_descr (DW_OP_implicit_value,
13682                                       GET_MODE_SIZE (mode), 0);
13683           loc_result->dw_loc_oprnd2.val_class = dw_val_class_wide_int;
13684           loc_result->dw_loc_oprnd2.v.val_wide = ggc_alloc<wide_int> ();
13685           *loc_result->dw_loc_oprnd2.v.val_wide = std::make_pair (rtl, mode);
13686         }
13687       break;
13688
13689     case CONST_VECTOR:
13690       if (mode == VOIDmode)
13691         mode = GET_MODE (rtl);
13692
13693       if (mode != VOIDmode && (dwarf_version >= 4 || !dwarf_strict))
13694         {
13695           unsigned int elt_size = GET_MODE_UNIT_SIZE (GET_MODE (rtl));
13696           unsigned int length = CONST_VECTOR_NUNITS (rtl);
13697           unsigned char *array
13698             = ggc_vec_alloc<unsigned char> (length * elt_size);
13699           unsigned int i;
13700           unsigned char *p;
13701           machine_mode imode = GET_MODE_INNER (mode);
13702
13703           gcc_assert (mode == GET_MODE (rtl) || VOIDmode == GET_MODE (rtl));
13704           switch (GET_MODE_CLASS (mode))
13705             {
13706             case MODE_VECTOR_INT:
13707               for (i = 0, p = array; i < length; i++, p += elt_size)
13708                 {
13709                   rtx elt = CONST_VECTOR_ELT (rtl, i);
13710                   insert_wide_int (std::make_pair (elt, imode), p, elt_size);
13711                 }
13712               break;
13713
13714             case MODE_VECTOR_FLOAT:
13715               for (i = 0, p = array; i < length; i++, p += elt_size)
13716                 {
13717                   rtx elt = CONST_VECTOR_ELT (rtl, i);
13718                   insert_float (elt, p);
13719                 }
13720               break;
13721
13722             default:
13723               gcc_unreachable ();
13724             }
13725
13726           loc_result = new_loc_descr (DW_OP_implicit_value,
13727                                       length * elt_size, 0);
13728           loc_result->dw_loc_oprnd2.val_class = dw_val_class_vec;
13729           loc_result->dw_loc_oprnd2.v.val_vec.length = length;
13730           loc_result->dw_loc_oprnd2.v.val_vec.elt_size = elt_size;
13731           loc_result->dw_loc_oprnd2.v.val_vec.array = array;
13732         }
13733       break;
13734
13735     case CONST:
13736       if (mode == VOIDmode
13737           || CONST_SCALAR_INT_P (XEXP (rtl, 0))
13738           || CONST_DOUBLE_AS_FLOAT_P (XEXP (rtl, 0))
13739           || GET_CODE (XEXP (rtl, 0)) == CONST_VECTOR)
13740         {
13741           loc_result = loc_descriptor (XEXP (rtl, 0), mode, initialized);
13742           break;
13743         }
13744       /* FALLTHROUGH */
13745     case SYMBOL_REF:
13746       if (!const_ok_for_output (rtl))
13747         break;
13748     case LABEL_REF:
13749       if (mode != VOIDmode && GET_MODE_SIZE (mode) == DWARF2_ADDR_SIZE
13750           && (dwarf_version >= 4 || !dwarf_strict))
13751         {
13752          loc_result = new_addr_loc_descr (rtl, dtprel_false);
13753           add_loc_descr (&loc_result, new_loc_descr (DW_OP_stack_value, 0, 0));
13754           vec_safe_push (used_rtx_array, rtl);
13755         }
13756       break;
13757
13758     case DEBUG_IMPLICIT_PTR:
13759       loc_result = implicit_ptr_descriptor (rtl, 0);
13760       break;
13761
13762     case PLUS:
13763       if (GET_CODE (XEXP (rtl, 0)) == DEBUG_IMPLICIT_PTR
13764           && CONST_INT_P (XEXP (rtl, 1)))
13765         {
13766           loc_result
13767             = implicit_ptr_descriptor (XEXP (rtl, 0), INTVAL (XEXP (rtl, 1)));
13768           break;
13769         }
13770       /* FALLTHRU */
13771     do_default:
13772     default:
13773       if ((GET_MODE_CLASS (mode) == MODE_INT && GET_MODE (rtl) == mode
13774            && GET_MODE_SIZE (GET_MODE (rtl)) <= DWARF2_ADDR_SIZE
13775            && dwarf_version >= 4)
13776           || (!dwarf_strict && mode != VOIDmode && mode != BLKmode))
13777         {
13778           /* Value expression.  */
13779           loc_result = mem_loc_descriptor (rtl, mode, VOIDmode, initialized);
13780           if (loc_result)
13781             add_loc_descr (&loc_result,
13782                            new_loc_descr (DW_OP_stack_value, 0, 0));
13783         }
13784       break;
13785     }
13786
13787   return loc_result;
13788 }
13789
13790 /* We need to figure out what section we should use as the base for the
13791    address ranges where a given location is valid.
13792    1. If this particular DECL has a section associated with it, use that.
13793    2. If this function has a section associated with it, use that.
13794    3. Otherwise, use the text section.
13795    XXX: If you split a variable across multiple sections, we won't notice.  */
13796
13797 static const char *
13798 secname_for_decl (const_tree decl)
13799 {
13800   const char *secname;
13801
13802   if (VAR_OR_FUNCTION_DECL_P (decl)
13803       && (DECL_EXTERNAL (decl) || TREE_PUBLIC (decl) || TREE_STATIC (decl))
13804       && DECL_SECTION_NAME (decl))
13805     secname = DECL_SECTION_NAME (decl);
13806   else if (current_function_decl && DECL_SECTION_NAME (current_function_decl))
13807     secname = DECL_SECTION_NAME (current_function_decl);
13808   else if (cfun && in_cold_section_p)
13809     secname = crtl->subsections.cold_section_label;
13810   else
13811     secname = text_section_label;
13812
13813   return secname;
13814 }
13815
13816 /* Return true when DECL_BY_REFERENCE is defined and set for DECL.  */
13817
13818 static bool
13819 decl_by_reference_p (tree decl)
13820 {
13821   return ((TREE_CODE (decl) == PARM_DECL || TREE_CODE (decl) == RESULT_DECL
13822            || TREE_CODE (decl) == VAR_DECL)
13823           && DECL_BY_REFERENCE (decl));
13824 }
13825
13826 /* Helper function for dw_loc_list.  Compute proper Dwarf location descriptor
13827    for VARLOC.  */
13828
13829 static dw_loc_descr_ref
13830 dw_loc_list_1 (tree loc, rtx varloc, int want_address,
13831                enum var_init_status initialized)
13832 {
13833   int have_address = 0;
13834   dw_loc_descr_ref descr;
13835   machine_mode mode;
13836
13837   if (want_address != 2)
13838     {
13839       gcc_assert (GET_CODE (varloc) == VAR_LOCATION);
13840       /* Single part.  */
13841       if (GET_CODE (PAT_VAR_LOCATION_LOC (varloc)) != PARALLEL)
13842         {
13843           varloc = PAT_VAR_LOCATION_LOC (varloc);
13844           if (GET_CODE (varloc) == EXPR_LIST)
13845             varloc = XEXP (varloc, 0);
13846           mode = GET_MODE (varloc);
13847           if (MEM_P (varloc))
13848             {
13849               rtx addr = XEXP (varloc, 0);
13850               descr = mem_loc_descriptor (addr, get_address_mode (varloc),
13851                                           mode, initialized);
13852               if (descr)
13853                 have_address = 1;
13854               else
13855                 {
13856                   rtx x = avoid_constant_pool_reference (varloc);
13857                   if (x != varloc)
13858                     descr = mem_loc_descriptor (x, mode, VOIDmode,
13859                                                 initialized);
13860                 }
13861             }
13862           else
13863             descr = mem_loc_descriptor (varloc, mode, VOIDmode, initialized);
13864         }
13865       else
13866         return 0;
13867     }
13868   else
13869     {
13870       if (GET_CODE (varloc) == VAR_LOCATION)
13871         mode = DECL_MODE (PAT_VAR_LOCATION_DECL (varloc));
13872       else
13873         mode = DECL_MODE (loc);
13874       descr = loc_descriptor (varloc, mode, initialized);
13875       have_address = 1;
13876     }
13877
13878   if (!descr)
13879     return 0;
13880
13881   if (want_address == 2 && !have_address
13882       && (dwarf_version >= 4 || !dwarf_strict))
13883     {
13884       if (int_size_in_bytes (TREE_TYPE (loc)) > DWARF2_ADDR_SIZE)
13885         {
13886           expansion_failed (loc, NULL_RTX,
13887                             "DWARF address size mismatch");
13888           return 0;
13889         }
13890       add_loc_descr (&descr, new_loc_descr (DW_OP_stack_value, 0, 0));
13891       have_address = 1;
13892     }
13893   /* Show if we can't fill the request for an address.  */
13894   if (want_address && !have_address)
13895     {
13896       expansion_failed (loc, NULL_RTX,
13897                         "Want address and only have value");
13898       return 0;
13899     }
13900
13901   /* If we've got an address and don't want one, dereference.  */
13902   if (!want_address && have_address)
13903     {
13904       HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (loc));
13905       enum dwarf_location_atom op;
13906
13907       if (size > DWARF2_ADDR_SIZE || size == -1)
13908         {
13909           expansion_failed (loc, NULL_RTX,
13910                             "DWARF address size mismatch");
13911           return 0;
13912         }
13913       else if (size == DWARF2_ADDR_SIZE)
13914         op = DW_OP_deref;
13915       else
13916         op = DW_OP_deref_size;
13917
13918       add_loc_descr (&descr, new_loc_descr (op, size, 0));
13919     }
13920
13921   return descr;
13922 }
13923
13924 /* Create a DW_OP_piece or DW_OP_bit_piece for bitsize, or return NULL
13925    if it is not possible.  */
13926
13927 static dw_loc_descr_ref
13928 new_loc_descr_op_bit_piece (HOST_WIDE_INT bitsize, HOST_WIDE_INT offset)
13929 {
13930   if ((bitsize % BITS_PER_UNIT) == 0 && offset == 0)
13931     return new_loc_descr (DW_OP_piece, bitsize / BITS_PER_UNIT, 0);
13932   else if (dwarf_version >= 3 || !dwarf_strict)
13933     return new_loc_descr (DW_OP_bit_piece, bitsize, offset);
13934   else
13935     return NULL;
13936 }
13937
13938 /* Helper function for dw_loc_list.  Compute proper Dwarf location descriptor
13939    for VAR_LOC_NOTE for variable DECL that has been optimized by SRA.  */
13940
13941 static dw_loc_descr_ref
13942 dw_sra_loc_expr (tree decl, rtx loc)
13943 {
13944   rtx p;
13945   unsigned HOST_WIDE_INT padsize = 0;
13946   dw_loc_descr_ref descr, *descr_tail;
13947   unsigned HOST_WIDE_INT decl_size;
13948   rtx varloc;
13949   enum var_init_status initialized;
13950
13951   if (DECL_SIZE (decl) == NULL
13952       || !tree_fits_uhwi_p (DECL_SIZE (decl)))
13953     return NULL;
13954
13955   decl_size = tree_to_uhwi (DECL_SIZE (decl));
13956   descr = NULL;
13957   descr_tail = &descr;
13958
13959   for (p = loc; p; p = XEXP (p, 1))
13960     {
13961       unsigned HOST_WIDE_INT bitsize = decl_piece_bitsize (p);
13962       rtx loc_note = *decl_piece_varloc_ptr (p);
13963       dw_loc_descr_ref cur_descr;
13964       dw_loc_descr_ref *tail, last = NULL;
13965       unsigned HOST_WIDE_INT opsize = 0;
13966
13967       if (loc_note == NULL_RTX
13968           || NOTE_VAR_LOCATION_LOC (loc_note) == NULL_RTX)
13969         {
13970           padsize += bitsize;
13971           continue;
13972         }
13973       initialized = NOTE_VAR_LOCATION_STATUS (loc_note);
13974       varloc = NOTE_VAR_LOCATION (loc_note);
13975       cur_descr = dw_loc_list_1 (decl, varloc, 2, initialized);
13976       if (cur_descr == NULL)
13977         {
13978           padsize += bitsize;
13979           continue;
13980         }
13981
13982       /* Check that cur_descr either doesn't use
13983          DW_OP_*piece operations, or their sum is equal
13984          to bitsize.  Otherwise we can't embed it.  */
13985       for (tail = &cur_descr; *tail != NULL;
13986            tail = &(*tail)->dw_loc_next)
13987         if ((*tail)->dw_loc_opc == DW_OP_piece)
13988           {
13989             opsize += (*tail)->dw_loc_oprnd1.v.val_unsigned
13990                       * BITS_PER_UNIT;
13991             last = *tail;
13992           }
13993         else if ((*tail)->dw_loc_opc == DW_OP_bit_piece)
13994           {
13995             opsize += (*tail)->dw_loc_oprnd1.v.val_unsigned;
13996             last = *tail;
13997           }
13998
13999       if (last != NULL && opsize != bitsize)
14000         {
14001           padsize += bitsize;
14002           /* Discard the current piece of the descriptor and release any
14003              addr_table entries it uses.  */
14004           remove_loc_list_addr_table_entries (cur_descr);
14005           continue;
14006         }
14007
14008       /* If there is a hole, add DW_OP_*piece after empty DWARF
14009          expression, which means that those bits are optimized out.  */
14010       if (padsize)
14011         {
14012           if (padsize > decl_size)
14013             {
14014               remove_loc_list_addr_table_entries (cur_descr);
14015               goto discard_descr;
14016             }
14017           decl_size -= padsize;
14018           *descr_tail = new_loc_descr_op_bit_piece (padsize, 0);
14019           if (*descr_tail == NULL)
14020             {
14021               remove_loc_list_addr_table_entries (cur_descr);
14022               goto discard_descr;
14023             }
14024           descr_tail = &(*descr_tail)->dw_loc_next;
14025           padsize = 0;
14026         }
14027       *descr_tail = cur_descr;
14028       descr_tail = tail;
14029       if (bitsize > decl_size)
14030         goto discard_descr;
14031       decl_size -= bitsize;
14032       if (last == NULL)
14033         {
14034           HOST_WIDE_INT offset = 0;
14035           if (GET_CODE (varloc) == VAR_LOCATION
14036               && GET_CODE (PAT_VAR_LOCATION_LOC (varloc)) != PARALLEL)
14037             {
14038               varloc = PAT_VAR_LOCATION_LOC (varloc);
14039               if (GET_CODE (varloc) == EXPR_LIST)
14040                 varloc = XEXP (varloc, 0);
14041             }
14042           do 
14043             {
14044               if (GET_CODE (varloc) == CONST
14045                   || GET_CODE (varloc) == SIGN_EXTEND
14046                   || GET_CODE (varloc) == ZERO_EXTEND)
14047                 varloc = XEXP (varloc, 0);
14048               else if (GET_CODE (varloc) == SUBREG)
14049                 varloc = SUBREG_REG (varloc);
14050               else
14051                 break;
14052             }
14053           while (1);
14054           /* DW_OP_bit_size offset should be zero for register
14055              or implicit location descriptions and empty location
14056              descriptions, but for memory addresses needs big endian
14057              adjustment.  */
14058           if (MEM_P (varloc))
14059             {
14060               unsigned HOST_WIDE_INT memsize
14061                 = MEM_SIZE (varloc) * BITS_PER_UNIT;
14062               if (memsize != bitsize)
14063                 {
14064                   if (BYTES_BIG_ENDIAN != WORDS_BIG_ENDIAN
14065                       && (memsize > BITS_PER_WORD || bitsize > BITS_PER_WORD))
14066                     goto discard_descr;
14067                   if (memsize < bitsize)
14068                     goto discard_descr;
14069                   if (BITS_BIG_ENDIAN)
14070                     offset = memsize - bitsize;
14071                 }
14072             }
14073
14074           *descr_tail = new_loc_descr_op_bit_piece (bitsize, offset);
14075           if (*descr_tail == NULL)
14076             goto discard_descr;
14077           descr_tail = &(*descr_tail)->dw_loc_next;
14078         }
14079     }
14080
14081   /* If there were any non-empty expressions, add padding till the end of
14082      the decl.  */
14083   if (descr != NULL && decl_size != 0)
14084     {
14085       *descr_tail = new_loc_descr_op_bit_piece (decl_size, 0);
14086       if (*descr_tail == NULL)
14087         goto discard_descr;
14088     }
14089   return descr;
14090
14091 discard_descr:
14092   /* Discard the descriptor and release any addr_table entries it uses.  */
14093   remove_loc_list_addr_table_entries (descr);
14094   return NULL;
14095 }
14096
14097 /* Return the dwarf representation of the location list LOC_LIST of
14098    DECL.  WANT_ADDRESS has the same meaning as in loc_list_from_tree
14099    function.  */
14100
14101 static dw_loc_list_ref
14102 dw_loc_list (var_loc_list *loc_list, tree decl, int want_address)
14103 {
14104   const char *endname, *secname;
14105   rtx varloc;
14106   enum var_init_status initialized;
14107   struct var_loc_node *node;
14108   dw_loc_descr_ref descr;
14109   char label_id[MAX_ARTIFICIAL_LABEL_BYTES];
14110   dw_loc_list_ref list = NULL;
14111   dw_loc_list_ref *listp = &list;
14112
14113   /* Now that we know what section we are using for a base,
14114      actually construct the list of locations.
14115      The first location information is what is passed to the
14116      function that creates the location list, and the remaining
14117      locations just get added on to that list.
14118      Note that we only know the start address for a location
14119      (IE location changes), so to build the range, we use
14120      the range [current location start, next location start].
14121      This means we have to special case the last node, and generate
14122      a range of [last location start, end of function label].  */
14123
14124   secname = secname_for_decl (decl);
14125
14126   for (node = loc_list->first; node; node = node->next)
14127     if (GET_CODE (node->loc) == EXPR_LIST
14128         || NOTE_VAR_LOCATION_LOC (node->loc) != NULL_RTX)
14129       {
14130         if (GET_CODE (node->loc) == EXPR_LIST)
14131           {
14132             /* This requires DW_OP_{,bit_}piece, which is not usable
14133                inside DWARF expressions.  */
14134             if (want_address != 2)
14135               continue;
14136             descr = dw_sra_loc_expr (decl, node->loc);
14137             if (descr == NULL)
14138               continue;
14139           }
14140         else
14141           {
14142             initialized = NOTE_VAR_LOCATION_STATUS (node->loc);
14143             varloc = NOTE_VAR_LOCATION (node->loc);
14144             descr = dw_loc_list_1 (decl, varloc, want_address, initialized);
14145           }
14146         if (descr)
14147           {
14148             bool range_across_switch = false;
14149             /* If section switch happens in between node->label
14150                and node->next->label (or end of function) and
14151                we can't emit it as a single entry list,
14152                emit two ranges, first one ending at the end
14153                of first partition and second one starting at the
14154                beginning of second partition.  */
14155             if (node == loc_list->last_before_switch
14156                 && (node != loc_list->first || loc_list->first->next)
14157                 && current_function_decl)
14158               {
14159                 endname = cfun->fde->dw_fde_end;
14160                 range_across_switch = true;
14161               }
14162             /* The variable has a location between NODE->LABEL and
14163                NODE->NEXT->LABEL.  */
14164             else if (node->next)
14165               endname = node->next->label;
14166             /* If the variable has a location at the last label
14167                it keeps its location until the end of function.  */
14168             else if (!current_function_decl)
14169               endname = text_end_label;
14170             else
14171               {
14172                 ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_END_LABEL,
14173                                              current_function_funcdef_no);
14174                 endname = ggc_strdup (label_id);
14175               }
14176
14177             *listp = new_loc_list (descr, node->label, endname, secname);
14178             if (TREE_CODE (decl) == PARM_DECL
14179                 && node == loc_list->first
14180                 && NOTE_P (node->loc)
14181                 && strcmp (node->label, endname) == 0)
14182               (*listp)->force = true;
14183             listp = &(*listp)->dw_loc_next;
14184
14185             if (range_across_switch)
14186               {
14187                 if (GET_CODE (node->loc) == EXPR_LIST)
14188                   descr = dw_sra_loc_expr (decl, node->loc);
14189                 else
14190                   {
14191                     initialized = NOTE_VAR_LOCATION_STATUS (node->loc);
14192                     varloc = NOTE_VAR_LOCATION (node->loc);
14193                     descr = dw_loc_list_1 (decl, varloc, want_address,
14194                                            initialized);
14195                   }
14196                 gcc_assert (descr);
14197                 /* The variable has a location between NODE->LABEL and
14198                    NODE->NEXT->LABEL.  */
14199                 if (node->next)
14200                   endname = node->next->label;
14201                 else
14202                   endname = cfun->fde->dw_fde_second_end;
14203                 *listp = new_loc_list (descr,
14204                                        cfun->fde->dw_fde_second_begin,
14205                                        endname, secname);
14206                 listp = &(*listp)->dw_loc_next;
14207               }
14208           }
14209       }
14210
14211   /* Try to avoid the overhead of a location list emitting a location
14212      expression instead, but only if we didn't have more than one
14213      location entry in the first place.  If some entries were not
14214      representable, we don't want to pretend a single entry that was
14215      applies to the entire scope in which the variable is
14216      available.  */
14217   if (list && loc_list->first->next)
14218     gen_llsym (list);
14219
14220   return list;
14221 }
14222
14223 /* Return if the loc_list has only single element and thus can be represented
14224    as location description.   */
14225
14226 static bool
14227 single_element_loc_list_p (dw_loc_list_ref list)
14228 {
14229   gcc_assert (!list->dw_loc_next || list->ll_symbol);
14230   return !list->ll_symbol;
14231 }
14232
14233 /* To each location in list LIST add loc descr REF.  */
14234
14235 static void
14236 add_loc_descr_to_each (dw_loc_list_ref list, dw_loc_descr_ref ref)
14237 {
14238   dw_loc_descr_ref copy;
14239   add_loc_descr (&list->expr, ref);
14240   list = list->dw_loc_next;
14241   while (list)
14242     {
14243       copy = ggc_alloc<dw_loc_descr_node> ();
14244       memcpy (copy, ref, sizeof (dw_loc_descr_node));
14245       add_loc_descr (&list->expr, copy);
14246       while (copy->dw_loc_next)
14247         {
14248           dw_loc_descr_ref new_copy = ggc_alloc<dw_loc_descr_node> ();
14249           memcpy (new_copy, copy->dw_loc_next, sizeof (dw_loc_descr_node));
14250           copy->dw_loc_next = new_copy;
14251           copy = new_copy;
14252         }
14253       list = list->dw_loc_next;
14254     }
14255 }
14256
14257 /* Given two lists RET and LIST
14258    produce location list that is result of adding expression in LIST
14259    to expression in RET on each position in program.
14260    Might be destructive on both RET and LIST.
14261
14262    TODO: We handle only simple cases of RET or LIST having at most one
14263    element. General case would inolve sorting the lists in program order
14264    and merging them that will need some additional work.
14265    Adding that will improve quality of debug info especially for SRA-ed
14266    structures.  */
14267
14268 static void
14269 add_loc_list (dw_loc_list_ref *ret, dw_loc_list_ref list)
14270 {
14271   if (!list)
14272     return;
14273   if (!*ret)
14274     {
14275       *ret = list;
14276       return;
14277     }
14278   if (!list->dw_loc_next)
14279     {
14280       add_loc_descr_to_each (*ret, list->expr);
14281       return;
14282     }
14283   if (!(*ret)->dw_loc_next)
14284     {
14285       add_loc_descr_to_each (list, (*ret)->expr);
14286       *ret = list;
14287       return;
14288     }
14289   expansion_failed (NULL_TREE, NULL_RTX,
14290                     "Don't know how to merge two non-trivial"
14291                     " location lists.\n");
14292   *ret = NULL;
14293   return;
14294 }
14295
14296 /* LOC is constant expression.  Try a luck, look it up in constant
14297    pool and return its loc_descr of its address.  */
14298
14299 static dw_loc_descr_ref
14300 cst_pool_loc_descr (tree loc)
14301 {
14302   /* Get an RTL for this, if something has been emitted.  */
14303   rtx rtl = lookup_constant_def (loc);
14304
14305   if (!rtl || !MEM_P (rtl))
14306     {
14307       gcc_assert (!rtl);
14308       return 0;
14309     }
14310   gcc_assert (GET_CODE (XEXP (rtl, 0)) == SYMBOL_REF);
14311
14312   /* TODO: We might get more coverage if we was actually delaying expansion
14313      of all expressions till end of compilation when constant pools are fully
14314      populated.  */
14315   if (!TREE_ASM_WRITTEN (SYMBOL_REF_DECL (XEXP (rtl, 0))))
14316     {
14317       expansion_failed (loc, NULL_RTX,
14318                         "CST value in contant pool but not marked.");
14319       return 0;
14320     }
14321   return mem_loc_descriptor (XEXP (rtl, 0), get_address_mode (rtl),
14322                              GET_MODE (rtl), VAR_INIT_STATUS_INITIALIZED);
14323 }
14324
14325 /* Return dw_loc_list representing address of addr_expr LOC
14326    by looking for inner INDIRECT_REF expression and turning
14327    it into simple arithmetics.
14328
14329    See loc_list_from_tree for the meaning of CONTEXT.  */
14330
14331 static dw_loc_list_ref
14332 loc_list_for_address_of_addr_expr_of_indirect_ref (tree loc, bool toplev,
14333                                                    const loc_descr_context *context)
14334 {
14335   tree obj, offset;
14336   HOST_WIDE_INT bitsize, bitpos, bytepos;
14337   machine_mode mode;
14338   int unsignedp, volatilep = 0;
14339   dw_loc_list_ref list_ret = NULL, list_ret1 = NULL;
14340
14341   obj = get_inner_reference (TREE_OPERAND (loc, 0),
14342                              &bitsize, &bitpos, &offset, &mode,
14343                              &unsignedp, &volatilep, false);
14344   STRIP_NOPS (obj);
14345   if (bitpos % BITS_PER_UNIT)
14346     {
14347       expansion_failed (loc, NULL_RTX, "bitfield access");
14348       return 0;
14349     }
14350   if (!INDIRECT_REF_P (obj))
14351     {
14352       expansion_failed (obj,
14353                         NULL_RTX, "no indirect ref in inner refrence");
14354       return 0;
14355     }
14356   if (!offset && !bitpos)
14357     list_ret = loc_list_from_tree (TREE_OPERAND (obj, 0), toplev ? 2 : 1,
14358                                    context);
14359   else if (toplev
14360            && int_size_in_bytes (TREE_TYPE (loc)) <= DWARF2_ADDR_SIZE
14361            && (dwarf_version >= 4 || !dwarf_strict))
14362     {
14363       list_ret = loc_list_from_tree (TREE_OPERAND (obj, 0), 0, context);
14364       if (!list_ret)
14365         return 0;
14366       if (offset)
14367         {
14368           /* Variable offset.  */
14369           list_ret1 = loc_list_from_tree (offset, 0, context);
14370           if (list_ret1 == 0)
14371             return 0;
14372           add_loc_list (&list_ret, list_ret1);
14373           if (!list_ret)
14374             return 0;
14375           add_loc_descr_to_each (list_ret,
14376                                  new_loc_descr (DW_OP_plus, 0, 0));
14377         }
14378       bytepos = bitpos / BITS_PER_UNIT;
14379       if (bytepos > 0)
14380         add_loc_descr_to_each (list_ret,
14381                                new_loc_descr (DW_OP_plus_uconst,
14382                                               bytepos, 0));
14383       else if (bytepos < 0)
14384         loc_list_plus_const (list_ret, bytepos);
14385       add_loc_descr_to_each (list_ret,
14386                              new_loc_descr (DW_OP_stack_value, 0, 0));
14387     }
14388   return list_ret;
14389 }
14390
14391
14392 /* Helper structure for location descriptions generation.  */
14393 struct loc_descr_context
14394 {
14395   /* The type that is implicitly referenced by DW_OP_push_object_address, or
14396      NULL_TREE if DW_OP_push_object_address in invalid for this location
14397      description.  This is used when processing PLACEHOLDER_EXPR nodes.  */
14398   tree context_type;
14399   /* The ..._DECL node that should be translated as a
14400      DW_OP_push_object_address operation.  */
14401   tree base_decl;
14402 };
14403
14404 /* Generate Dwarf location list representing LOC.
14405    If WANT_ADDRESS is false, expression computing LOC will be computed
14406    If WANT_ADDRESS is 1, expression computing address of LOC will be returned
14407    if WANT_ADDRESS is 2, expression computing address useable in location
14408      will be returned (i.e. DW_OP_reg can be used
14409      to refer to register values).
14410
14411    CONTEXT provides information to customize the location descriptions
14412    generation.  Its context_type field specifies what type is implicitly
14413    referenced by DW_OP_push_object_address.  If it is NULL_TREE, this operation
14414    will not be generated.
14415
14416    If CONTEXT is NULL, the behavior is the same as if both context_type and
14417    base_decl fields were NULL_TREE.  */
14418
14419 static dw_loc_list_ref
14420 loc_list_from_tree (tree loc, int want_address,
14421                     const struct loc_descr_context *context)
14422 {
14423   dw_loc_descr_ref ret = NULL, ret1 = NULL;
14424   dw_loc_list_ref list_ret = NULL, list_ret1 = NULL;
14425   int have_address = 0;
14426   enum dwarf_location_atom op;
14427
14428   /* ??? Most of the time we do not take proper care for sign/zero
14429      extending the values properly.  Hopefully this won't be a real
14430      problem...  */
14431
14432   if (context != NULL
14433       && context->base_decl == loc
14434       && want_address == 0)
14435     {
14436       if (dwarf_version >= 3 || !dwarf_strict)
14437         return new_loc_list (new_loc_descr (DW_OP_push_object_address, 0, 0),
14438                              NULL, NULL, NULL);
14439       else
14440         return NULL;
14441     }
14442
14443   switch (TREE_CODE (loc))
14444     {
14445     case ERROR_MARK:
14446       expansion_failed (loc, NULL_RTX, "ERROR_MARK");
14447       return 0;
14448
14449     case PLACEHOLDER_EXPR:
14450       /* This case involves extracting fields from an object to determine the
14451          position of other fields. It is supposed to appear only as the first
14452          operand of COMPONENT_REF nodes and to reference precisely the type
14453          that the context allows.  */
14454       if (context != NULL
14455           && TREE_TYPE (loc) == context->context_type
14456           && want_address >= 1)
14457         {
14458           if (dwarf_version >= 3 || !dwarf_strict)
14459             {
14460               ret = new_loc_descr (DW_OP_push_object_address, 0, 0);
14461               have_address = 1;
14462               break;
14463             }
14464           else
14465             return NULL;
14466         }
14467       else
14468         expansion_failed (loc, NULL_RTX,
14469                           "PLACEHOLDER_EXPR for an unexpected type");
14470       break;
14471
14472     case CALL_EXPR:
14473       expansion_failed (loc, NULL_RTX, "CALL_EXPR");
14474       /* There are no opcodes for these operations.  */
14475       return 0;
14476
14477     case PREINCREMENT_EXPR:
14478     case PREDECREMENT_EXPR:
14479     case POSTINCREMENT_EXPR:
14480     case POSTDECREMENT_EXPR:
14481       expansion_failed (loc, NULL_RTX, "PRE/POST INDCREMENT/DECREMENT");
14482       /* There are no opcodes for these operations.  */
14483       return 0;
14484
14485     case ADDR_EXPR:
14486       /* If we already want an address, see if there is INDIRECT_REF inside
14487          e.g. for &this->field.  */
14488       if (want_address)
14489         {
14490           list_ret = loc_list_for_address_of_addr_expr_of_indirect_ref
14491                        (loc, want_address == 2, context);
14492           if (list_ret)
14493             have_address = 1;
14494           else if (decl_address_ip_invariant_p (TREE_OPERAND (loc, 0))
14495                    && (ret = cst_pool_loc_descr (loc)))
14496             have_address = 1;
14497         }
14498         /* Otherwise, process the argument and look for the address.  */
14499       if (!list_ret && !ret)
14500         list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 1, context);
14501       else
14502         {
14503           if (want_address)
14504             expansion_failed (loc, NULL_RTX, "need address of ADDR_EXPR");
14505           return NULL;
14506         }
14507       break;
14508
14509     case VAR_DECL:
14510       if (DECL_THREAD_LOCAL_P (loc))
14511         {
14512           rtx rtl;
14513          enum dwarf_location_atom tls_op;
14514          enum dtprel_bool dtprel = dtprel_false;
14515
14516           if (targetm.have_tls)
14517             {
14518               /* If this is not defined, we have no way to emit the
14519                  data.  */
14520               if (!targetm.asm_out.output_dwarf_dtprel)
14521                 return 0;
14522
14523                /* The way DW_OP_GNU_push_tls_address is specified, we
14524                   can only look up addresses of objects in the current
14525                   module.  We used DW_OP_addr as first op, but that's
14526                   wrong, because DW_OP_addr is relocated by the debug
14527                   info consumer, while DW_OP_GNU_push_tls_address
14528                   operand shouldn't be.  */
14529               if (DECL_EXTERNAL (loc) && !targetm.binds_local_p (loc))
14530                 return 0;
14531              dtprel = dtprel_true;
14532              tls_op = DW_OP_GNU_push_tls_address;
14533             }
14534           else
14535             {
14536               if (!targetm.emutls.debug_form_tls_address
14537                   || !(dwarf_version >= 3 || !dwarf_strict))
14538                 return 0;
14539               /* We stuffed the control variable into the DECL_VALUE_EXPR
14540                  to signal (via DECL_HAS_VALUE_EXPR_P) that the decl should
14541                  no longer appear in gimple code.  We used the control
14542                  variable in specific so that we could pick it up here.  */
14543               loc = DECL_VALUE_EXPR (loc);
14544               tls_op = DW_OP_form_tls_address;
14545             }
14546
14547           rtl = rtl_for_decl_location (loc);
14548           if (rtl == NULL_RTX)
14549             return 0;
14550
14551           if (!MEM_P (rtl))
14552             return 0;
14553           rtl = XEXP (rtl, 0);
14554           if (! CONSTANT_P (rtl))
14555             return 0;
14556
14557           ret = new_addr_loc_descr (rtl, dtprel);
14558           ret1 = new_loc_descr (tls_op, 0, 0);
14559           add_loc_descr (&ret, ret1);
14560
14561           have_address = 1;
14562           break;
14563         }
14564       /* FALLTHRU */
14565
14566     case PARM_DECL:
14567     case RESULT_DECL:
14568       if (DECL_HAS_VALUE_EXPR_P (loc))
14569         return loc_list_from_tree (DECL_VALUE_EXPR (loc),
14570                                    want_address, context);
14571       /* FALLTHRU */
14572
14573     case FUNCTION_DECL:
14574       {
14575         rtx rtl;
14576         var_loc_list *loc_list = lookup_decl_loc (loc);
14577
14578         if (loc_list && loc_list->first)
14579           {
14580             list_ret = dw_loc_list (loc_list, loc, want_address);
14581             have_address = want_address != 0;
14582             break;
14583           }
14584         rtl = rtl_for_decl_location (loc);
14585         if (rtl == NULL_RTX)
14586           {
14587             expansion_failed (loc, NULL_RTX, "DECL has no RTL");
14588             return 0;
14589           }
14590         else if (CONST_INT_P (rtl))
14591           {
14592             HOST_WIDE_INT val = INTVAL (rtl);
14593             if (TYPE_UNSIGNED (TREE_TYPE (loc)))
14594               val &= GET_MODE_MASK (DECL_MODE (loc));
14595             ret = int_loc_descriptor (val);
14596           }
14597         else if (GET_CODE (rtl) == CONST_STRING)
14598           {
14599             expansion_failed (loc, NULL_RTX, "CONST_STRING");
14600             return 0;
14601           }
14602         else if (CONSTANT_P (rtl) && const_ok_for_output (rtl))
14603           ret = new_addr_loc_descr (rtl, dtprel_false);
14604         else
14605           {
14606             machine_mode mode, mem_mode;
14607
14608             /* Certain constructs can only be represented at top-level.  */
14609             if (want_address == 2)
14610               {
14611                 ret = loc_descriptor (rtl, VOIDmode,
14612                                       VAR_INIT_STATUS_INITIALIZED);
14613                 have_address = 1;
14614               }
14615             else
14616               {
14617                 mode = GET_MODE (rtl);
14618                 mem_mode = VOIDmode;
14619                 if (MEM_P (rtl))
14620                   {
14621                     mem_mode = mode;
14622                     mode = get_address_mode (rtl);
14623                     rtl = XEXP (rtl, 0);
14624                     have_address = 1;
14625                   }
14626                 ret = mem_loc_descriptor (rtl, mode, mem_mode,
14627                                           VAR_INIT_STATUS_INITIALIZED);
14628               }
14629             if (!ret)
14630               expansion_failed (loc, rtl,
14631                                 "failed to produce loc descriptor for rtl");
14632           }
14633       }
14634       break;
14635
14636     case MEM_REF:
14637       if (!integer_zerop (TREE_OPERAND (loc, 1)))
14638         {
14639           have_address = 1;
14640           goto do_plus;
14641         }
14642       /* Fallthru.  */
14643     case INDIRECT_REF:
14644       list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0, context);
14645       have_address = 1;
14646       break;
14647
14648     case TARGET_MEM_REF:
14649     case SSA_NAME:
14650     case DEBUG_EXPR_DECL:
14651       return NULL;
14652
14653     case COMPOUND_EXPR:
14654       return loc_list_from_tree (TREE_OPERAND (loc, 1), want_address, context);
14655
14656     CASE_CONVERT:
14657     case VIEW_CONVERT_EXPR:
14658     case SAVE_EXPR:
14659     case MODIFY_EXPR:
14660       return loc_list_from_tree (TREE_OPERAND (loc, 0), want_address, context);
14661
14662     case COMPONENT_REF:
14663     case BIT_FIELD_REF:
14664     case ARRAY_REF:
14665     case ARRAY_RANGE_REF:
14666     case REALPART_EXPR:
14667     case IMAGPART_EXPR:
14668       {
14669         tree obj, offset;
14670         HOST_WIDE_INT bitsize, bitpos, bytepos;
14671         machine_mode mode;
14672         int unsignedp, volatilep = 0;
14673
14674         obj = get_inner_reference (loc, &bitsize, &bitpos, &offset, &mode,
14675                                    &unsignedp, &volatilep, false);
14676
14677         gcc_assert (obj != loc);
14678
14679         list_ret = loc_list_from_tree (obj,
14680                                        want_address == 2
14681                                        && !bitpos && !offset ? 2 : 1,
14682                                        context);
14683         /* TODO: We can extract value of the small expression via shifting even
14684            for nonzero bitpos.  */
14685         if (list_ret == 0)
14686           return 0;
14687         if (bitpos % BITS_PER_UNIT != 0 || bitsize % BITS_PER_UNIT != 0)
14688           {
14689             expansion_failed (loc, NULL_RTX,
14690                               "bitfield access");
14691             return 0;
14692           }
14693
14694         if (offset != NULL_TREE)
14695           {
14696             /* Variable offset.  */
14697             list_ret1 = loc_list_from_tree (offset, 0, context);
14698             if (list_ret1 == 0)
14699               return 0;
14700             add_loc_list (&list_ret, list_ret1);
14701             if (!list_ret)
14702               return 0;
14703             add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_plus, 0, 0));
14704           }
14705
14706         bytepos = bitpos / BITS_PER_UNIT;
14707         if (bytepos > 0)
14708           add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_plus_uconst, bytepos, 0));
14709         else if (bytepos < 0)
14710           loc_list_plus_const (list_ret, bytepos);
14711
14712         have_address = 1;
14713         break;
14714       }
14715
14716     case INTEGER_CST:
14717       if ((want_address || !tree_fits_shwi_p (loc))
14718           && (ret = cst_pool_loc_descr (loc)))
14719         have_address = 1;
14720       else if (want_address == 2
14721                && tree_fits_shwi_p (loc)
14722                && (ret = address_of_int_loc_descriptor
14723                            (int_size_in_bytes (TREE_TYPE (loc)),
14724                             tree_to_shwi (loc))))
14725         have_address = 1;
14726       else if (tree_fits_shwi_p (loc))
14727         ret = int_loc_descriptor (tree_to_shwi (loc));
14728       else
14729         {
14730           expansion_failed (loc, NULL_RTX,
14731                             "Integer operand is not host integer");
14732           return 0;
14733         }
14734       break;
14735
14736     case CONSTRUCTOR:
14737     case REAL_CST:
14738     case STRING_CST:
14739     case COMPLEX_CST:
14740       if ((ret = cst_pool_loc_descr (loc)))
14741         have_address = 1;
14742       else
14743       /* We can construct small constants here using int_loc_descriptor.  */
14744         expansion_failed (loc, NULL_RTX,
14745                           "constructor or constant not in constant pool");
14746       break;
14747
14748     case TRUTH_AND_EXPR:
14749     case TRUTH_ANDIF_EXPR:
14750     case BIT_AND_EXPR:
14751       op = DW_OP_and;
14752       goto do_binop;
14753
14754     case TRUTH_XOR_EXPR:
14755     case BIT_XOR_EXPR:
14756       op = DW_OP_xor;
14757       goto do_binop;
14758
14759     case TRUTH_OR_EXPR:
14760     case TRUTH_ORIF_EXPR:
14761     case BIT_IOR_EXPR:
14762       op = DW_OP_or;
14763       goto do_binop;
14764
14765     case FLOOR_DIV_EXPR:
14766     case CEIL_DIV_EXPR:
14767     case ROUND_DIV_EXPR:
14768     case TRUNC_DIV_EXPR:
14769       if (TYPE_UNSIGNED (TREE_TYPE (loc)))
14770         return 0;
14771       op = DW_OP_div;
14772       goto do_binop;
14773
14774     case MINUS_EXPR:
14775       op = DW_OP_minus;
14776       goto do_binop;
14777
14778     case FLOOR_MOD_EXPR:
14779     case CEIL_MOD_EXPR:
14780     case ROUND_MOD_EXPR:
14781     case TRUNC_MOD_EXPR:
14782       if (TYPE_UNSIGNED (TREE_TYPE (loc)))
14783         {
14784           op = DW_OP_mod;
14785           goto do_binop;
14786         }
14787       list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0, context);
14788       list_ret1 = loc_list_from_tree (TREE_OPERAND (loc, 1), 0, context);
14789       if (list_ret == 0 || list_ret1 == 0)
14790         return 0;
14791
14792       add_loc_list (&list_ret, list_ret1);
14793       if (list_ret == 0)
14794         return 0;
14795       add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_over, 0, 0));
14796       add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_over, 0, 0));
14797       add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_div, 0, 0));
14798       add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_mul, 0, 0));
14799       add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_minus, 0, 0));
14800       break;
14801
14802     case MULT_EXPR:
14803       op = DW_OP_mul;
14804       goto do_binop;
14805
14806     case LSHIFT_EXPR:
14807       op = DW_OP_shl;
14808       goto do_binop;
14809
14810     case RSHIFT_EXPR:
14811       op = (TYPE_UNSIGNED (TREE_TYPE (loc)) ? DW_OP_shr : DW_OP_shra);
14812       goto do_binop;
14813
14814     case POINTER_PLUS_EXPR:
14815     case PLUS_EXPR:
14816     do_plus:
14817       if (tree_fits_shwi_p (TREE_OPERAND (loc, 1)))
14818         {
14819           list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0, context);
14820           if (list_ret == 0)
14821             return 0;
14822
14823           loc_list_plus_const (list_ret, tree_to_shwi (TREE_OPERAND (loc, 1)));
14824           break;
14825         }
14826
14827       op = DW_OP_plus;
14828       goto do_binop;
14829
14830     case LE_EXPR:
14831       if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
14832         return 0;
14833
14834       op = DW_OP_le;
14835       goto do_binop;
14836
14837     case GE_EXPR:
14838       if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
14839         return 0;
14840
14841       op = DW_OP_ge;
14842       goto do_binop;
14843
14844     case LT_EXPR:
14845       if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
14846         return 0;
14847
14848       op = DW_OP_lt;
14849       goto do_binop;
14850
14851     case GT_EXPR:
14852       if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
14853         return 0;
14854
14855       op = DW_OP_gt;
14856       goto do_binop;
14857
14858     case EQ_EXPR:
14859       op = DW_OP_eq;
14860       goto do_binop;
14861
14862     case NE_EXPR:
14863       op = DW_OP_ne;
14864       goto do_binop;
14865
14866     do_binop:
14867       list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0, context);
14868       list_ret1 = loc_list_from_tree (TREE_OPERAND (loc, 1), 0, context);
14869       if (list_ret == 0 || list_ret1 == 0)
14870         return 0;
14871
14872       add_loc_list (&list_ret, list_ret1);
14873       if (list_ret == 0)
14874         return 0;
14875       add_loc_descr_to_each (list_ret, new_loc_descr (op, 0, 0));
14876       break;
14877
14878     case TRUTH_NOT_EXPR:
14879     case BIT_NOT_EXPR:
14880       op = DW_OP_not;
14881       goto do_unop;
14882
14883     case ABS_EXPR:
14884       op = DW_OP_abs;
14885       goto do_unop;
14886
14887     case NEGATE_EXPR:
14888       op = DW_OP_neg;
14889       goto do_unop;
14890
14891     do_unop:
14892       list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0, context);
14893       if (list_ret == 0)
14894         return 0;
14895
14896       add_loc_descr_to_each (list_ret, new_loc_descr (op, 0, 0));
14897       break;
14898
14899     case MIN_EXPR:
14900     case MAX_EXPR:
14901       {
14902         const enum tree_code code =
14903           TREE_CODE (loc) == MIN_EXPR ? GT_EXPR : LT_EXPR;
14904
14905         loc = build3 (COND_EXPR, TREE_TYPE (loc),
14906                       build2 (code, integer_type_node,
14907                               TREE_OPERAND (loc, 0), TREE_OPERAND (loc, 1)),
14908                       TREE_OPERAND (loc, 1), TREE_OPERAND (loc, 0));
14909       }
14910
14911       /* ... fall through ...  */
14912
14913     case COND_EXPR:
14914       {
14915         dw_loc_descr_ref lhs
14916           = loc_descriptor_from_tree (TREE_OPERAND (loc, 1), 0, context);
14917         dw_loc_list_ref rhs
14918           = loc_list_from_tree (TREE_OPERAND (loc, 2), 0, context);
14919         dw_loc_descr_ref bra_node, jump_node, tmp;
14920
14921         list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0, context);
14922         if (list_ret == 0 || lhs == 0 || rhs == 0)
14923           return 0;
14924
14925         bra_node = new_loc_descr (DW_OP_bra, 0, 0);
14926         add_loc_descr_to_each (list_ret, bra_node);
14927
14928         add_loc_list (&list_ret, rhs);
14929         jump_node = new_loc_descr (DW_OP_skip, 0, 0);
14930         add_loc_descr_to_each (list_ret, jump_node);
14931
14932         add_loc_descr_to_each (list_ret, lhs);
14933         bra_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
14934         bra_node->dw_loc_oprnd1.v.val_loc = lhs;
14935
14936         /* ??? Need a node to point the skip at.  Use a nop.  */
14937         tmp = new_loc_descr (DW_OP_nop, 0, 0);
14938         add_loc_descr_to_each (list_ret, tmp);
14939         jump_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
14940         jump_node->dw_loc_oprnd1.v.val_loc = tmp;
14941       }
14942       break;
14943
14944     case FIX_TRUNC_EXPR:
14945       return 0;
14946
14947     default:
14948       /* Leave front-end specific codes as simply unknown.  This comes
14949          up, for instance, with the C STMT_EXPR.  */
14950       if ((unsigned int) TREE_CODE (loc)
14951           >= (unsigned int) LAST_AND_UNUSED_TREE_CODE)
14952         {
14953           expansion_failed (loc, NULL_RTX,
14954                             "language specific tree node");
14955           return 0;
14956         }
14957
14958 #ifdef ENABLE_CHECKING
14959       /* Otherwise this is a generic code; we should just lists all of
14960          these explicitly.  We forgot one.  */
14961       gcc_unreachable ();
14962 #else
14963       /* In a release build, we want to degrade gracefully: better to
14964          generate incomplete debugging information than to crash.  */
14965       return NULL;
14966 #endif
14967     }
14968
14969   if (!ret && !list_ret)
14970     return 0;
14971
14972   if (want_address == 2 && !have_address
14973       && (dwarf_version >= 4 || !dwarf_strict))
14974     {
14975       if (int_size_in_bytes (TREE_TYPE (loc)) > DWARF2_ADDR_SIZE)
14976         {
14977           expansion_failed (loc, NULL_RTX,
14978                             "DWARF address size mismatch");
14979           return 0;
14980         }
14981       if (ret)
14982         add_loc_descr (&ret, new_loc_descr (DW_OP_stack_value, 0, 0));
14983       else
14984         add_loc_descr_to_each (list_ret,
14985                                new_loc_descr (DW_OP_stack_value, 0, 0));
14986       have_address = 1;
14987     }
14988   /* Show if we can't fill the request for an address.  */
14989   if (want_address && !have_address)
14990     {
14991       expansion_failed (loc, NULL_RTX,
14992                         "Want address and only have value");
14993       return 0;
14994     }
14995
14996   gcc_assert (!ret || !list_ret);
14997
14998   /* If we've got an address and don't want one, dereference.  */
14999   if (!want_address && have_address)
15000     {
15001       HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (loc));
15002
15003       if (size > DWARF2_ADDR_SIZE || size == -1)
15004         {
15005           expansion_failed (loc, NULL_RTX,
15006                             "DWARF address size mismatch");
15007           return 0;
15008         }
15009       else if (size == DWARF2_ADDR_SIZE)
15010         op = DW_OP_deref;
15011       else
15012         op = DW_OP_deref_size;
15013
15014       if (ret)
15015         add_loc_descr (&ret, new_loc_descr (op, size, 0));
15016       else
15017         add_loc_descr_to_each (list_ret, new_loc_descr (op, size, 0));
15018     }
15019   if (ret)
15020     list_ret = new_loc_list (ret, NULL, NULL, NULL);
15021
15022   return list_ret;
15023 }
15024
15025 /* Same as above but return only single location expression.  */
15026 static dw_loc_descr_ref
15027 loc_descriptor_from_tree (tree loc, int want_address,
15028                           const struct loc_descr_context *context)
15029 {
15030   dw_loc_list_ref ret = loc_list_from_tree (loc, want_address, context);
15031   if (!ret)
15032     return NULL;
15033   if (ret->dw_loc_next)
15034     {
15035       expansion_failed (loc, NULL_RTX,
15036                         "Location list where only loc descriptor needed");
15037       return NULL;
15038     }
15039   return ret->expr;
15040 }
15041
15042 /* Given a value, round it up to the lowest multiple of `boundary'
15043    which is not less than the value itself.  */
15044
15045 static inline HOST_WIDE_INT
15046 ceiling (HOST_WIDE_INT value, unsigned int boundary)
15047 {
15048   return (((value + boundary - 1) / boundary) * boundary);
15049 }
15050
15051 /* Given a pointer to what is assumed to be a FIELD_DECL node, return a
15052    pointer to the declared type for the relevant field variable, or return
15053    `integer_type_node' if the given node turns out to be an
15054    ERROR_MARK node.  */
15055
15056 static inline tree
15057 field_type (const_tree decl)
15058 {
15059   tree type;
15060
15061   if (TREE_CODE (decl) == ERROR_MARK)
15062     return integer_type_node;
15063
15064   type = DECL_BIT_FIELD_TYPE (decl);
15065   if (type == NULL_TREE)
15066     type = TREE_TYPE (decl);
15067
15068   return type;
15069 }
15070
15071 /* Given a pointer to a tree node, return the alignment in bits for
15072    it, or else return BITS_PER_WORD if the node actually turns out to
15073    be an ERROR_MARK node.  */
15074
15075 static inline unsigned
15076 simple_type_align_in_bits (const_tree type)
15077 {
15078   return (TREE_CODE (type) != ERROR_MARK) ? TYPE_ALIGN (type) : BITS_PER_WORD;
15079 }
15080
15081 static inline unsigned
15082 simple_decl_align_in_bits (const_tree decl)
15083 {
15084   return (TREE_CODE (decl) != ERROR_MARK) ? DECL_ALIGN (decl) : BITS_PER_WORD;
15085 }
15086
15087 /* Return the result of rounding T up to ALIGN.  */
15088
15089 static inline offset_int
15090 round_up_to_align (const offset_int &t, unsigned int align)
15091 {
15092   return wi::udiv_trunc (t + align - 1, align) * align;
15093 }
15094
15095 /* Given a pointer to a FIELD_DECL, compute and return the byte offset of the
15096    lowest addressed byte of the "containing object" for the given FIELD_DECL,
15097    or return 0 if we are unable to determine what that offset is, either
15098    because the argument turns out to be a pointer to an ERROR_MARK node, or
15099    because the offset is actually variable.  (We can't handle the latter case
15100    just yet).  */
15101
15102 static HOST_WIDE_INT
15103 field_byte_offset (const_tree decl)
15104 {
15105   offset_int object_offset_in_bits;
15106   offset_int object_offset_in_bytes;
15107   offset_int bitpos_int;
15108
15109   if (TREE_CODE (decl) == ERROR_MARK)
15110     return 0;
15111
15112   gcc_assert (TREE_CODE (decl) == FIELD_DECL);
15113
15114   /* We cannot yet cope with fields whose positions are variable, so
15115      for now, when we see such things, we simply return 0.  Someday, we may
15116      be able to handle such cases, but it will be damn difficult.  */
15117   if (TREE_CODE (bit_position (decl)) != INTEGER_CST)
15118     return 0;
15119
15120   bitpos_int = wi::to_offset (bit_position (decl));
15121
15122 #ifdef PCC_BITFIELD_TYPE_MATTERS
15123   if (PCC_BITFIELD_TYPE_MATTERS)
15124     {
15125       tree type;
15126       tree field_size_tree;
15127       offset_int deepest_bitpos;
15128       offset_int field_size_in_bits;
15129       unsigned int type_align_in_bits;
15130       unsigned int decl_align_in_bits;
15131       offset_int type_size_in_bits;
15132
15133       type = field_type (decl);
15134       type_size_in_bits = offset_int_type_size_in_bits (type);
15135       type_align_in_bits = simple_type_align_in_bits (type);
15136
15137       field_size_tree = DECL_SIZE (decl);
15138
15139       /* The size could be unspecified if there was an error, or for
15140          a flexible array member.  */
15141       if (!field_size_tree)
15142         field_size_tree = bitsize_zero_node;
15143
15144       /* If the size of the field is not constant, use the type size.  */
15145       if (TREE_CODE (field_size_tree) == INTEGER_CST)
15146         field_size_in_bits = wi::to_offset (field_size_tree);
15147       else
15148         field_size_in_bits = type_size_in_bits;
15149
15150       decl_align_in_bits = simple_decl_align_in_bits (decl);
15151
15152       /* The GCC front-end doesn't make any attempt to keep track of the
15153          starting bit offset (relative to the start of the containing
15154          structure type) of the hypothetical "containing object" for a
15155          bit-field.  Thus, when computing the byte offset value for the
15156          start of the "containing object" of a bit-field, we must deduce
15157          this information on our own. This can be rather tricky to do in
15158          some cases.  For example, handling the following structure type
15159          definition when compiling for an i386/i486 target (which only
15160          aligns long long's to 32-bit boundaries) can be very tricky:
15161
15162          struct S { int field1; long long field2:31; };
15163
15164          Fortunately, there is a simple rule-of-thumb which can be used
15165          in such cases.  When compiling for an i386/i486, GCC will
15166          allocate 8 bytes for the structure shown above.  It decides to
15167          do this based upon one simple rule for bit-field allocation.
15168          GCC allocates each "containing object" for each bit-field at
15169          the first (i.e. lowest addressed) legitimate alignment boundary
15170          (based upon the required minimum alignment for the declared
15171          type of the field) which it can possibly use, subject to the
15172          condition that there is still enough available space remaining
15173          in the containing object (when allocated at the selected point)
15174          to fully accommodate all of the bits of the bit-field itself.
15175
15176          This simple rule makes it obvious why GCC allocates 8 bytes for
15177          each object of the structure type shown above.  When looking
15178          for a place to allocate the "containing object" for `field2',
15179          the compiler simply tries to allocate a 64-bit "containing
15180          object" at each successive 32-bit boundary (starting at zero)
15181          until it finds a place to allocate that 64- bit field such that
15182          at least 31 contiguous (and previously unallocated) bits remain
15183          within that selected 64 bit field.  (As it turns out, for the
15184          example above, the compiler finds it is OK to allocate the
15185          "containing object" 64-bit field at bit-offset zero within the
15186          structure type.)
15187
15188          Here we attempt to work backwards from the limited set of facts
15189          we're given, and we try to deduce from those facts, where GCC
15190          must have believed that the containing object started (within
15191          the structure type). The value we deduce is then used (by the
15192          callers of this routine) to generate DW_AT_location and
15193          DW_AT_bit_offset attributes for fields (both bit-fields and, in
15194          the case of DW_AT_location, regular fields as well).  */
15195
15196       /* Figure out the bit-distance from the start of the structure to
15197          the "deepest" bit of the bit-field.  */
15198       deepest_bitpos = bitpos_int + field_size_in_bits;
15199
15200       /* This is the tricky part.  Use some fancy footwork to deduce
15201          where the lowest addressed bit of the containing object must
15202          be.  */
15203       object_offset_in_bits = deepest_bitpos - type_size_in_bits;
15204
15205       /* Round up to type_align by default.  This works best for
15206          bitfields.  */
15207       object_offset_in_bits
15208         = round_up_to_align (object_offset_in_bits, type_align_in_bits);
15209
15210       if (wi::gtu_p (object_offset_in_bits, bitpos_int))
15211         {
15212           object_offset_in_bits = deepest_bitpos - type_size_in_bits;
15213
15214           /* Round up to decl_align instead.  */
15215           object_offset_in_bits
15216             = round_up_to_align (object_offset_in_bits, decl_align_in_bits);
15217         }
15218     }
15219   else
15220 #endif /* PCC_BITFIELD_TYPE_MATTERS */
15221     object_offset_in_bits = bitpos_int;
15222
15223   object_offset_in_bytes
15224     = wi::lrshift (object_offset_in_bits, LOG2_BITS_PER_UNIT);
15225   return object_offset_in_bytes.to_shwi ();
15226 }
15227 \f
15228 /* The following routines define various Dwarf attributes and any data
15229    associated with them.  */
15230
15231 /* Add a location description attribute value to a DIE.
15232
15233    This emits location attributes suitable for whole variables and
15234    whole parameters.  Note that the location attributes for struct fields are
15235    generated by the routine `data_member_location_attribute' below.  */
15236
15237 static inline void
15238 add_AT_location_description (dw_die_ref die, enum dwarf_attribute attr_kind,
15239                              dw_loc_list_ref descr)
15240 {
15241   if (descr == 0)
15242     return;
15243   if (single_element_loc_list_p (descr))
15244     add_AT_loc (die, attr_kind, descr->expr);
15245   else
15246     add_AT_loc_list (die, attr_kind, descr);
15247 }
15248
15249 /* Add DW_AT_accessibility attribute to DIE if needed.  */
15250
15251 static void
15252 add_accessibility_attribute (dw_die_ref die, tree decl)
15253 {
15254   /* In DWARF3+ the default is DW_ACCESS_private only in DW_TAG_class_type
15255      children, otherwise the default is DW_ACCESS_public.  In DWARF2
15256      the default has always been DW_ACCESS_public.  */
15257   if (TREE_PROTECTED (decl))
15258     add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_protected);
15259   else if (TREE_PRIVATE (decl))
15260     {
15261       if (dwarf_version == 2
15262           || die->die_parent == NULL
15263           || die->die_parent->die_tag != DW_TAG_class_type)
15264         add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_private);
15265     }
15266   else if (dwarf_version > 2
15267            && die->die_parent
15268            && die->die_parent->die_tag == DW_TAG_class_type)
15269     add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_public);
15270 }
15271
15272 /* Attach the specialized form of location attribute used for data members of
15273    struct and union types.  In the special case of a FIELD_DECL node which
15274    represents a bit-field, the "offset" part of this special location
15275    descriptor must indicate the distance in bytes from the lowest-addressed
15276    byte of the containing struct or union type to the lowest-addressed byte of
15277    the "containing object" for the bit-field.  (See the `field_byte_offset'
15278    function above).
15279
15280    For any given bit-field, the "containing object" is a hypothetical object
15281    (of some integral or enum type) within which the given bit-field lives.  The
15282    type of this hypothetical "containing object" is always the same as the
15283    declared type of the individual bit-field itself (for GCC anyway... the
15284    DWARF spec doesn't actually mandate this).  Note that it is the size (in
15285    bytes) of the hypothetical "containing object" which will be given in the
15286    DW_AT_byte_size attribute for this bit-field.  (See the
15287    `byte_size_attribute' function below.)  It is also used when calculating the
15288    value of the DW_AT_bit_offset attribute.  (See the `bit_offset_attribute'
15289    function below.)  */
15290
15291 static void
15292 add_data_member_location_attribute (dw_die_ref die, tree decl)
15293 {
15294   HOST_WIDE_INT offset;
15295   dw_loc_descr_ref loc_descr = 0;
15296
15297   if (TREE_CODE (decl) == TREE_BINFO)
15298     {
15299       /* We're working on the TAG_inheritance for a base class.  */
15300       if (BINFO_VIRTUAL_P (decl) && is_cxx ())
15301         {
15302           /* For C++ virtual bases we can't just use BINFO_OFFSET, as they
15303              aren't at a fixed offset from all (sub)objects of the same
15304              type.  We need to extract the appropriate offset from our
15305              vtable.  The following dwarf expression means
15306
15307                BaseAddr = ObAddr + *((*ObAddr) - Offset)
15308
15309              This is specific to the V3 ABI, of course.  */
15310
15311           dw_loc_descr_ref tmp;
15312
15313           /* Make a copy of the object address.  */
15314           tmp = new_loc_descr (DW_OP_dup, 0, 0);
15315           add_loc_descr (&loc_descr, tmp);
15316
15317           /* Extract the vtable address.  */
15318           tmp = new_loc_descr (DW_OP_deref, 0, 0);
15319           add_loc_descr (&loc_descr, tmp);
15320
15321           /* Calculate the address of the offset.  */
15322           offset = tree_to_shwi (BINFO_VPTR_FIELD (decl));
15323           gcc_assert (offset < 0);
15324
15325           tmp = int_loc_descriptor (-offset);
15326           add_loc_descr (&loc_descr, tmp);
15327           tmp = new_loc_descr (DW_OP_minus, 0, 0);
15328           add_loc_descr (&loc_descr, tmp);
15329
15330           /* Extract the offset.  */
15331           tmp = new_loc_descr (DW_OP_deref, 0, 0);
15332           add_loc_descr (&loc_descr, tmp);
15333
15334           /* Add it to the object address.  */
15335           tmp = new_loc_descr (DW_OP_plus, 0, 0);
15336           add_loc_descr (&loc_descr, tmp);
15337         }
15338       else
15339         offset = tree_to_shwi (BINFO_OFFSET (decl));
15340     }
15341   else
15342     offset = field_byte_offset (decl);
15343
15344   if (! loc_descr)
15345     {
15346       if (dwarf_version > 2)
15347         {
15348           /* Don't need to output a location expression, just the constant. */
15349           if (offset < 0)
15350             add_AT_int (die, DW_AT_data_member_location, offset);
15351           else
15352             add_AT_unsigned (die, DW_AT_data_member_location, offset);
15353           return;
15354         }
15355       else
15356         {
15357           enum dwarf_location_atom op;
15358
15359           /* The DWARF2 standard says that we should assume that the structure
15360              address is already on the stack, so we can specify a structure
15361              field address by using DW_OP_plus_uconst.  */
15362           op = DW_OP_plus_uconst;
15363           loc_descr = new_loc_descr (op, offset, 0);
15364         }
15365     }
15366
15367   add_AT_loc (die, DW_AT_data_member_location, loc_descr);
15368 }
15369
15370 /* Writes integer values to dw_vec_const array.  */
15371
15372 static void
15373 insert_int (HOST_WIDE_INT val, unsigned int size, unsigned char *dest)
15374 {
15375   while (size != 0)
15376     {
15377       *dest++ = val & 0xff;
15378       val >>= 8;
15379       --size;
15380     }
15381 }
15382
15383 /* Reads integers from dw_vec_const array.  Inverse of insert_int.  */
15384
15385 static HOST_WIDE_INT
15386 extract_int (const unsigned char *src, unsigned int size)
15387 {
15388   HOST_WIDE_INT val = 0;
15389
15390   src += size;
15391   while (size != 0)
15392     {
15393       val <<= 8;
15394       val |= *--src & 0xff;
15395       --size;
15396     }
15397   return val;
15398 }
15399
15400 /* Writes wide_int values to dw_vec_const array.  */
15401
15402 static void
15403 insert_wide_int (const wide_int &val, unsigned char *dest, int elt_size)
15404 {
15405   int i;
15406
15407   if (elt_size <= HOST_BITS_PER_WIDE_INT/BITS_PER_UNIT)
15408     {
15409       insert_int ((HOST_WIDE_INT) val.elt (0), elt_size, dest);
15410       return;
15411     }
15412
15413   /* We'd have to extend this code to support odd sizes.  */
15414   gcc_assert (elt_size % (HOST_BITS_PER_WIDE_INT / BITS_PER_UNIT) == 0);
15415
15416   int n = elt_size / (HOST_BITS_PER_WIDE_INT / BITS_PER_UNIT);
15417
15418   if (WORDS_BIG_ENDIAN)
15419     for (i = n - 1; i >= 0; i--)
15420       {
15421         insert_int ((HOST_WIDE_INT) val.elt (i), sizeof (HOST_WIDE_INT), dest);
15422         dest += sizeof (HOST_WIDE_INT);
15423       }
15424   else
15425     for (i = 0; i < n; i++)
15426       {
15427         insert_int ((HOST_WIDE_INT) val.elt (i), sizeof (HOST_WIDE_INT), dest);
15428         dest += sizeof (HOST_WIDE_INT);
15429       }
15430 }
15431
15432 /* Writes floating point values to dw_vec_const array.  */
15433
15434 static void
15435 insert_float (const_rtx rtl, unsigned char *array)
15436 {
15437   REAL_VALUE_TYPE rv;
15438   long val[4];
15439   int i;
15440
15441   REAL_VALUE_FROM_CONST_DOUBLE (rv, rtl);
15442   real_to_target (val, &rv, GET_MODE (rtl));
15443
15444   /* real_to_target puts 32-bit pieces in each long.  Pack them.  */
15445   for (i = 0; i < GET_MODE_SIZE (GET_MODE (rtl)) / 4; i++)
15446     {
15447       insert_int (val[i], 4, array);
15448       array += 4;
15449     }
15450 }
15451
15452 /* Attach a DW_AT_const_value attribute for a variable or a parameter which
15453    does not have a "location" either in memory or in a register.  These
15454    things can arise in GNU C when a constant is passed as an actual parameter
15455    to an inlined function.  They can also arise in C++ where declared
15456    constants do not necessarily get memory "homes".  */
15457
15458 static bool
15459 add_const_value_attribute (dw_die_ref die, rtx rtl)
15460 {
15461   switch (GET_CODE (rtl))
15462     {
15463     case CONST_INT:
15464       {
15465         HOST_WIDE_INT val = INTVAL (rtl);
15466
15467         if (val < 0)
15468           add_AT_int (die, DW_AT_const_value, val);
15469         else
15470           add_AT_unsigned (die, DW_AT_const_value, (unsigned HOST_WIDE_INT) val);
15471       }
15472       return true;
15473
15474     case CONST_WIDE_INT:
15475       {
15476         wide_int w1 = std::make_pair (rtl, MAX_MODE_INT);
15477         unsigned int prec = MIN (wi::min_precision (w1, UNSIGNED),
15478                                  (unsigned int)CONST_WIDE_INT_NUNITS (rtl) * HOST_BITS_PER_WIDE_INT);
15479         wide_int w = wi::zext (w1, prec);
15480         add_AT_wide (die, DW_AT_const_value, w);
15481       }
15482       return true;
15483
15484     case CONST_DOUBLE:
15485       /* Note that a CONST_DOUBLE rtx could represent either an integer or a
15486          floating-point constant.  A CONST_DOUBLE is used whenever the
15487          constant requires more than one word in order to be adequately
15488          represented.  */
15489       {
15490         machine_mode mode = GET_MODE (rtl);
15491
15492         if (TARGET_SUPPORTS_WIDE_INT == 0 && !SCALAR_FLOAT_MODE_P (mode))
15493           add_AT_double (die, DW_AT_const_value,
15494                          CONST_DOUBLE_HIGH (rtl), CONST_DOUBLE_LOW (rtl));
15495         else
15496           {
15497             unsigned int length = GET_MODE_SIZE (mode);
15498             unsigned char *array = ggc_vec_alloc<unsigned char> (length);
15499
15500             insert_float (rtl, array);
15501             add_AT_vec (die, DW_AT_const_value, length / 4, 4, array);
15502           }
15503       }
15504       return true;
15505
15506     case CONST_VECTOR:
15507       {
15508         machine_mode mode = GET_MODE (rtl);
15509         unsigned int elt_size = GET_MODE_UNIT_SIZE (mode);
15510         unsigned int length = CONST_VECTOR_NUNITS (rtl);
15511         unsigned char *array
15512           = ggc_vec_alloc<unsigned char> (length * elt_size);
15513         unsigned int i;
15514         unsigned char *p;
15515         machine_mode imode = GET_MODE_INNER (mode);
15516
15517         switch (GET_MODE_CLASS (mode))
15518           {
15519           case MODE_VECTOR_INT:
15520             for (i = 0, p = array; i < length; i++, p += elt_size)
15521               {
15522                 rtx elt = CONST_VECTOR_ELT (rtl, i);
15523                 insert_wide_int (std::make_pair (elt, imode), p, elt_size);
15524               }
15525             break;
15526
15527           case MODE_VECTOR_FLOAT:
15528             for (i = 0, p = array; i < length; i++, p += elt_size)
15529               {
15530                 rtx elt = CONST_VECTOR_ELT (rtl, i);
15531                 insert_float (elt, p);
15532               }
15533             break;
15534
15535           default:
15536             gcc_unreachable ();
15537           }
15538
15539         add_AT_vec (die, DW_AT_const_value, length, elt_size, array);
15540       }
15541       return true;
15542
15543     case CONST_STRING:
15544       if (dwarf_version >= 4 || !dwarf_strict)
15545         {
15546           dw_loc_descr_ref loc_result;
15547           resolve_one_addr (&rtl);
15548         rtl_addr:
15549           loc_result = new_addr_loc_descr (rtl, dtprel_false);
15550           add_loc_descr (&loc_result, new_loc_descr (DW_OP_stack_value, 0, 0));
15551           add_AT_loc (die, DW_AT_location, loc_result);
15552           vec_safe_push (used_rtx_array, rtl);
15553           return true;
15554         }
15555       return false;
15556
15557     case CONST:
15558       if (CONSTANT_P (XEXP (rtl, 0)))
15559         return add_const_value_attribute (die, XEXP (rtl, 0));
15560       /* FALLTHROUGH */
15561     case SYMBOL_REF:
15562       if (!const_ok_for_output (rtl))
15563         return false;
15564     case LABEL_REF:
15565       if (dwarf_version >= 4 || !dwarf_strict)
15566         goto rtl_addr;
15567       return false;
15568
15569     case PLUS:
15570       /* In cases where an inlined instance of an inline function is passed
15571          the address of an `auto' variable (which is local to the caller) we
15572          can get a situation where the DECL_RTL of the artificial local
15573          variable (for the inlining) which acts as a stand-in for the
15574          corresponding formal parameter (of the inline function) will look
15575          like (plus:SI (reg:SI FRAME_PTR) (const_int ...)).  This is not
15576          exactly a compile-time constant expression, but it isn't the address
15577          of the (artificial) local variable either.  Rather, it represents the
15578          *value* which the artificial local variable always has during its
15579          lifetime.  We currently have no way to represent such quasi-constant
15580          values in Dwarf, so for now we just punt and generate nothing.  */
15581       return false;
15582
15583     case HIGH:
15584     case CONST_FIXED:
15585       return false;
15586
15587     case MEM:
15588       if (GET_CODE (XEXP (rtl, 0)) == CONST_STRING
15589           && MEM_READONLY_P (rtl)
15590           && GET_MODE (rtl) == BLKmode)
15591         {
15592           add_AT_string (die, DW_AT_const_value, XSTR (XEXP (rtl, 0), 0));
15593           return true;
15594         }
15595       return false;
15596
15597     default:
15598       /* No other kinds of rtx should be possible here.  */
15599       gcc_unreachable ();
15600     }
15601   return false;
15602 }
15603
15604 /* Determine whether the evaluation of EXPR references any variables
15605    or functions which aren't otherwise used (and therefore may not be
15606    output).  */
15607 static tree
15608 reference_to_unused (tree * tp, int * walk_subtrees,
15609                      void * data ATTRIBUTE_UNUSED)
15610 {
15611   if (! EXPR_P (*tp) && ! CONSTANT_CLASS_P (*tp))
15612     *walk_subtrees = 0;
15613
15614   if (DECL_P (*tp) && ! TREE_PUBLIC (*tp) && ! TREE_USED (*tp)
15615       && ! TREE_ASM_WRITTEN (*tp))
15616     return *tp;
15617   /* ???  The C++ FE emits debug information for using decls, so
15618      putting gcc_unreachable here falls over.  See PR31899.  For now
15619      be conservative.  */
15620   else if (!symtab->global_info_ready
15621            && (TREE_CODE (*tp) == VAR_DECL || TREE_CODE (*tp) == FUNCTION_DECL))
15622     return *tp;
15623   else if (TREE_CODE (*tp) == VAR_DECL)
15624     {
15625       varpool_node *node = varpool_node::get (*tp);
15626       if (!node || !node->definition)
15627         return *tp;
15628     }
15629   else if (TREE_CODE (*tp) == FUNCTION_DECL
15630            && (!DECL_EXTERNAL (*tp) || DECL_DECLARED_INLINE_P (*tp)))
15631     {
15632       /* The call graph machinery must have finished analyzing,
15633          optimizing and gimplifying the CU by now.
15634          So if *TP has no call graph node associated
15635          to it, it means *TP will not be emitted.  */
15636       if (!cgraph_node::get (*tp))
15637         return *tp;
15638     }
15639   else if (TREE_CODE (*tp) == STRING_CST && !TREE_ASM_WRITTEN (*tp))
15640     return *tp;
15641
15642   return NULL_TREE;
15643 }
15644
15645 /* Generate an RTL constant from a decl initializer INIT with decl type TYPE,
15646    for use in a later add_const_value_attribute call.  */
15647
15648 static rtx
15649 rtl_for_decl_init (tree init, tree type)
15650 {
15651   rtx rtl = NULL_RTX;
15652
15653   STRIP_NOPS (init);
15654
15655   /* If a variable is initialized with a string constant without embedded
15656      zeros, build CONST_STRING.  */
15657   if (TREE_CODE (init) == STRING_CST && TREE_CODE (type) == ARRAY_TYPE)
15658     {
15659       tree enttype = TREE_TYPE (type);
15660       tree domain = TYPE_DOMAIN (type);
15661       machine_mode mode = TYPE_MODE (enttype);
15662
15663       if (GET_MODE_CLASS (mode) == MODE_INT && GET_MODE_SIZE (mode) == 1
15664           && domain
15665           && integer_zerop (TYPE_MIN_VALUE (domain))
15666           && compare_tree_int (TYPE_MAX_VALUE (domain),
15667                                TREE_STRING_LENGTH (init) - 1) == 0
15668           && ((size_t) TREE_STRING_LENGTH (init)
15669               == strlen (TREE_STRING_POINTER (init)) + 1))
15670         {
15671           rtl = gen_rtx_CONST_STRING (VOIDmode,
15672                                       ggc_strdup (TREE_STRING_POINTER (init)));
15673           rtl = gen_rtx_MEM (BLKmode, rtl);
15674           MEM_READONLY_P (rtl) = 1;
15675         }
15676     }
15677   /* Other aggregates, and complex values, could be represented using
15678      CONCAT: FIXME!  */
15679   else if (AGGREGATE_TYPE_P (type)
15680            || (TREE_CODE (init) == VIEW_CONVERT_EXPR
15681                && AGGREGATE_TYPE_P (TREE_TYPE (TREE_OPERAND (init, 0))))
15682            || TREE_CODE (type) == COMPLEX_TYPE)
15683     ;
15684   /* Vectors only work if their mode is supported by the target.
15685      FIXME: generic vectors ought to work too.  */
15686   else if (TREE_CODE (type) == VECTOR_TYPE
15687            && !VECTOR_MODE_P (TYPE_MODE (type)))
15688     ;
15689   /* If the initializer is something that we know will expand into an
15690      immediate RTL constant, expand it now.  We must be careful not to
15691      reference variables which won't be output.  */
15692   else if (initializer_constant_valid_p (init, type)
15693            && ! walk_tree (&init, reference_to_unused, NULL, NULL))
15694     {
15695       /* Convert vector CONSTRUCTOR initializers to VECTOR_CST if
15696          possible.  */
15697       if (TREE_CODE (type) == VECTOR_TYPE)
15698         switch (TREE_CODE (init))
15699           {
15700           case VECTOR_CST:
15701             break;
15702           case CONSTRUCTOR:
15703             if (TREE_CONSTANT (init))
15704               {
15705                 vec<constructor_elt, va_gc> *elts = CONSTRUCTOR_ELTS (init);
15706                 bool constant_p = true;
15707                 tree value;
15708                 unsigned HOST_WIDE_INT ix;
15709
15710                 /* Even when ctor is constant, it might contain non-*_CST
15711                    elements (e.g. { 1.0/0.0 - 1.0/0.0, 0.0 }) and those don't
15712                    belong into VECTOR_CST nodes.  */
15713                 FOR_EACH_CONSTRUCTOR_VALUE (elts, ix, value)
15714                   if (!CONSTANT_CLASS_P (value))
15715                     {
15716                       constant_p = false;
15717                       break;
15718                     }
15719
15720                 if (constant_p)
15721                   {
15722                     init = build_vector_from_ctor (type, elts);
15723                     break;
15724                   }
15725               }
15726             /* FALLTHRU */
15727
15728           default:
15729             return NULL;
15730           }
15731
15732       rtl = expand_expr (init, NULL_RTX, VOIDmode, EXPAND_INITIALIZER);
15733
15734       /* If expand_expr returns a MEM, it wasn't immediate.  */
15735       gcc_assert (!rtl || !MEM_P (rtl));
15736     }
15737
15738   return rtl;
15739 }
15740
15741 /* Generate RTL for the variable DECL to represent its location.  */
15742
15743 static rtx
15744 rtl_for_decl_location (tree decl)
15745 {
15746   rtx rtl;
15747
15748   /* Here we have to decide where we are going to say the parameter "lives"
15749      (as far as the debugger is concerned).  We only have a couple of
15750      choices.  GCC provides us with DECL_RTL and with DECL_INCOMING_RTL.
15751
15752      DECL_RTL normally indicates where the parameter lives during most of the
15753      activation of the function.  If optimization is enabled however, this
15754      could be either NULL or else a pseudo-reg.  Both of those cases indicate
15755      that the parameter doesn't really live anywhere (as far as the code
15756      generation parts of GCC are concerned) during most of the function's
15757      activation.  That will happen (for example) if the parameter is never
15758      referenced within the function.
15759
15760      We could just generate a location descriptor here for all non-NULL
15761      non-pseudo values of DECL_RTL and ignore all of the rest, but we can be
15762      a little nicer than that if we also consider DECL_INCOMING_RTL in cases
15763      where DECL_RTL is NULL or is a pseudo-reg.
15764
15765      Note however that we can only get away with using DECL_INCOMING_RTL as
15766      a backup substitute for DECL_RTL in certain limited cases.  In cases
15767      where DECL_ARG_TYPE (decl) indicates the same type as TREE_TYPE (decl),
15768      we can be sure that the parameter was passed using the same type as it is
15769      declared to have within the function, and that its DECL_INCOMING_RTL
15770      points us to a place where a value of that type is passed.
15771
15772      In cases where DECL_ARG_TYPE (decl) and TREE_TYPE (decl) are different,
15773      we cannot (in general) use DECL_INCOMING_RTL as a substitute for DECL_RTL
15774      because in these cases DECL_INCOMING_RTL points us to a value of some
15775      type which is *different* from the type of the parameter itself.  Thus,
15776      if we tried to use DECL_INCOMING_RTL to generate a location attribute in
15777      such cases, the debugger would end up (for example) trying to fetch a
15778      `float' from a place which actually contains the first part of a
15779      `double'.  That would lead to really incorrect and confusing
15780      output at debug-time.
15781
15782      So, in general, we *do not* use DECL_INCOMING_RTL as a backup for DECL_RTL
15783      in cases where DECL_ARG_TYPE (decl) != TREE_TYPE (decl).  There
15784      are a couple of exceptions however.  On little-endian machines we can
15785      get away with using DECL_INCOMING_RTL even when DECL_ARG_TYPE (decl) is
15786      not the same as TREE_TYPE (decl), but only when DECL_ARG_TYPE (decl) is
15787      an integral type that is smaller than TREE_TYPE (decl). These cases arise
15788      when (on a little-endian machine) a non-prototyped function has a
15789      parameter declared to be of type `short' or `char'.  In such cases,
15790      TREE_TYPE (decl) will be `short' or `char', DECL_ARG_TYPE (decl) will
15791      be `int', and DECL_INCOMING_RTL will point to the lowest-order byte of the
15792      passed `int' value.  If the debugger then uses that address to fetch
15793      a `short' or a `char' (on a little-endian machine) the result will be
15794      the correct data, so we allow for such exceptional cases below.
15795
15796      Note that our goal here is to describe the place where the given formal
15797      parameter lives during most of the function's activation (i.e. between the
15798      end of the prologue and the start of the epilogue).  We'll do that as best
15799      as we can. Note however that if the given formal parameter is modified
15800      sometime during the execution of the function, then a stack backtrace (at
15801      debug-time) will show the function as having been called with the *new*
15802      value rather than the value which was originally passed in.  This happens
15803      rarely enough that it is not a major problem, but it *is* a problem, and
15804      I'd like to fix it.
15805
15806      A future version of dwarf2out.c may generate two additional attributes for
15807      any given DW_TAG_formal_parameter DIE which will describe the "passed
15808      type" and the "passed location" for the given formal parameter in addition
15809      to the attributes we now generate to indicate the "declared type" and the
15810      "active location" for each parameter.  This additional set of attributes
15811      could be used by debuggers for stack backtraces. Separately, note that
15812      sometimes DECL_RTL can be NULL and DECL_INCOMING_RTL can be NULL also.
15813      This happens (for example) for inlined-instances of inline function formal
15814      parameters which are never referenced.  This really shouldn't be
15815      happening.  All PARM_DECL nodes should get valid non-NULL
15816      DECL_INCOMING_RTL values.  FIXME.  */
15817
15818   /* Use DECL_RTL as the "location" unless we find something better.  */
15819   rtl = DECL_RTL_IF_SET (decl);
15820
15821   /* When generating abstract instances, ignore everything except
15822      constants, symbols living in memory, and symbols living in
15823      fixed registers.  */
15824   if (! reload_completed)
15825     {
15826       if (rtl
15827           && (CONSTANT_P (rtl)
15828               || (MEM_P (rtl)
15829                   && CONSTANT_P (XEXP (rtl, 0)))
15830               || (REG_P (rtl)
15831                   && TREE_CODE (decl) == VAR_DECL
15832                   && TREE_STATIC (decl))))
15833         {
15834           rtl = targetm.delegitimize_address (rtl);
15835           return rtl;
15836         }
15837       rtl = NULL_RTX;
15838     }
15839   else if (TREE_CODE (decl) == PARM_DECL)
15840     {
15841       if (rtl == NULL_RTX
15842           || is_pseudo_reg (rtl)
15843           || (MEM_P (rtl)
15844               && is_pseudo_reg (XEXP (rtl, 0))
15845               && DECL_INCOMING_RTL (decl)
15846               && MEM_P (DECL_INCOMING_RTL (decl))
15847               && GET_MODE (rtl) == GET_MODE (DECL_INCOMING_RTL (decl))))
15848         {
15849           tree declared_type = TREE_TYPE (decl);
15850           tree passed_type = DECL_ARG_TYPE (decl);
15851           machine_mode dmode = TYPE_MODE (declared_type);
15852           machine_mode pmode = TYPE_MODE (passed_type);
15853
15854           /* This decl represents a formal parameter which was optimized out.
15855              Note that DECL_INCOMING_RTL may be NULL in here, but we handle
15856              all cases where (rtl == NULL_RTX) just below.  */
15857           if (dmode == pmode)
15858             rtl = DECL_INCOMING_RTL (decl);
15859           else if ((rtl == NULL_RTX || is_pseudo_reg (rtl))
15860                    && SCALAR_INT_MODE_P (dmode)
15861                    && GET_MODE_SIZE (dmode) <= GET_MODE_SIZE (pmode)
15862                    && DECL_INCOMING_RTL (decl))
15863             {
15864               rtx inc = DECL_INCOMING_RTL (decl);
15865               if (REG_P (inc))
15866                 rtl = inc;
15867               else if (MEM_P (inc))
15868                 {
15869                   if (BYTES_BIG_ENDIAN)
15870                     rtl = adjust_address_nv (inc, dmode,
15871                                              GET_MODE_SIZE (pmode)
15872                                              - GET_MODE_SIZE (dmode));
15873                   else
15874                     rtl = inc;
15875                 }
15876             }
15877         }
15878
15879       /* If the parm was passed in registers, but lives on the stack, then
15880          make a big endian correction if the mode of the type of the
15881          parameter is not the same as the mode of the rtl.  */
15882       /* ??? This is the same series of checks that are made in dbxout.c before
15883          we reach the big endian correction code there.  It isn't clear if all
15884          of these checks are necessary here, but keeping them all is the safe
15885          thing to do.  */
15886       else if (MEM_P (rtl)
15887                && XEXP (rtl, 0) != const0_rtx
15888                && ! CONSTANT_P (XEXP (rtl, 0))
15889                /* Not passed in memory.  */
15890                && !MEM_P (DECL_INCOMING_RTL (decl))
15891                /* Not passed by invisible reference.  */
15892                && (!REG_P (XEXP (rtl, 0))
15893                    || REGNO (XEXP (rtl, 0)) == HARD_FRAME_POINTER_REGNUM
15894                    || REGNO (XEXP (rtl, 0)) == STACK_POINTER_REGNUM
15895 #if !HARD_FRAME_POINTER_IS_ARG_POINTER
15896                    || REGNO (XEXP (rtl, 0)) == ARG_POINTER_REGNUM
15897 #endif
15898                      )
15899                /* Big endian correction check.  */
15900                && BYTES_BIG_ENDIAN
15901                && TYPE_MODE (TREE_TYPE (decl)) != GET_MODE (rtl)
15902                && (GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl)))
15903                    < UNITS_PER_WORD))
15904         {
15905           machine_mode addr_mode = get_address_mode (rtl);
15906           int offset = (UNITS_PER_WORD
15907                         - GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl))));
15908
15909           rtl = gen_rtx_MEM (TYPE_MODE (TREE_TYPE (decl)),
15910                              plus_constant (addr_mode, XEXP (rtl, 0), offset));
15911         }
15912     }
15913   else if (TREE_CODE (decl) == VAR_DECL
15914            && rtl
15915            && MEM_P (rtl)
15916            && GET_MODE (rtl) != TYPE_MODE (TREE_TYPE (decl))
15917            && BYTES_BIG_ENDIAN)
15918     {
15919       machine_mode addr_mode = get_address_mode (rtl);
15920       int rsize = GET_MODE_SIZE (GET_MODE (rtl));
15921       int dsize = GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl)));
15922
15923       /* If a variable is declared "register" yet is smaller than
15924          a register, then if we store the variable to memory, it
15925          looks like we're storing a register-sized value, when in
15926          fact we are not.  We need to adjust the offset of the
15927          storage location to reflect the actual value's bytes,
15928          else gdb will not be able to display it.  */
15929       if (rsize > dsize)
15930         rtl = gen_rtx_MEM (TYPE_MODE (TREE_TYPE (decl)),
15931                            plus_constant (addr_mode, XEXP (rtl, 0),
15932                                           rsize - dsize));
15933     }
15934
15935   /* A variable with no DECL_RTL but a DECL_INITIAL is a compile-time constant,
15936      and will have been substituted directly into all expressions that use it.
15937      C does not have such a concept, but C++ and other languages do.  */
15938   if (!rtl && TREE_CODE (decl) == VAR_DECL && DECL_INITIAL (decl))
15939     rtl = rtl_for_decl_init (DECL_INITIAL (decl), TREE_TYPE (decl));
15940
15941   if (rtl)
15942     rtl = targetm.delegitimize_address (rtl);
15943
15944   /* If we don't look past the constant pool, we risk emitting a
15945      reference to a constant pool entry that isn't referenced from
15946      code, and thus is not emitted.  */
15947   if (rtl)
15948     rtl = avoid_constant_pool_reference (rtl);
15949
15950   /* Try harder to get a rtl.  If this symbol ends up not being emitted
15951      in the current CU, resolve_addr will remove the expression referencing
15952      it.  */
15953   if (rtl == NULL_RTX
15954       && TREE_CODE (decl) == VAR_DECL
15955       && !DECL_EXTERNAL (decl)
15956       && TREE_STATIC (decl)
15957       && DECL_NAME (decl)
15958       && !DECL_HARD_REGISTER (decl)
15959       && DECL_MODE (decl) != VOIDmode)
15960     {
15961       rtl = make_decl_rtl_for_debug (decl);
15962       if (!MEM_P (rtl)
15963           || GET_CODE (XEXP (rtl, 0)) != SYMBOL_REF
15964           || SYMBOL_REF_DECL (XEXP (rtl, 0)) != decl)
15965         rtl = NULL_RTX;
15966     }
15967
15968   return rtl;
15969 }
15970
15971 /* Check whether decl is a Fortran COMMON symbol.  If not, NULL_TREE is
15972    returned.  If so, the decl for the COMMON block is returned, and the
15973    value is the offset into the common block for the symbol.  */
15974
15975 static tree
15976 fortran_common (tree decl, HOST_WIDE_INT *value)
15977 {
15978   tree val_expr, cvar;
15979   machine_mode mode;
15980   HOST_WIDE_INT bitsize, bitpos;
15981   tree offset;
15982   int unsignedp, volatilep = 0;
15983
15984   /* If the decl isn't a VAR_DECL, or if it isn't static, or if
15985      it does not have a value (the offset into the common area), or if it
15986      is thread local (as opposed to global) then it isn't common, and shouldn't
15987      be handled as such.  */
15988   if (TREE_CODE (decl) != VAR_DECL
15989       || !TREE_STATIC (decl)
15990       || !DECL_HAS_VALUE_EXPR_P (decl)
15991       || !is_fortran ())
15992     return NULL_TREE;
15993
15994   val_expr = DECL_VALUE_EXPR (decl);
15995   if (TREE_CODE (val_expr) != COMPONENT_REF)
15996     return NULL_TREE;
15997
15998   cvar = get_inner_reference (val_expr, &bitsize, &bitpos, &offset,
15999                               &mode, &unsignedp, &volatilep, true);
16000
16001   if (cvar == NULL_TREE
16002       || TREE_CODE (cvar) != VAR_DECL
16003       || DECL_ARTIFICIAL (cvar)
16004       || !TREE_PUBLIC (cvar))
16005     return NULL_TREE;
16006
16007   *value = 0;
16008   if (offset != NULL)
16009     {
16010       if (!tree_fits_shwi_p (offset))
16011         return NULL_TREE;
16012       *value = tree_to_shwi (offset);
16013     }
16014   if (bitpos != 0)
16015     *value += bitpos / BITS_PER_UNIT;
16016
16017   return cvar;
16018 }
16019
16020 /* Generate *either* a DW_AT_location attribute or else a DW_AT_const_value
16021    data attribute for a variable or a parameter.  We generate the
16022    DW_AT_const_value attribute only in those cases where the given variable
16023    or parameter does not have a true "location" either in memory or in a
16024    register.  This can happen (for example) when a constant is passed as an
16025    actual argument in a call to an inline function.  (It's possible that
16026    these things can crop up in other ways also.)  Note that one type of
16027    constant value which can be passed into an inlined function is a constant
16028    pointer.  This can happen for example if an actual argument in an inlined
16029    function call evaluates to a compile-time constant address.
16030
16031    CACHE_P is true if it is worth caching the location list for DECL,
16032    so that future calls can reuse it rather than regenerate it from scratch.
16033    This is true for BLOCK_NONLOCALIZED_VARS in inlined subroutines,
16034    since we will need to refer to them each time the function is inlined.  */
16035
16036 static bool
16037 add_location_or_const_value_attribute (dw_die_ref die, tree decl, bool cache_p,
16038                                        enum dwarf_attribute attr)
16039 {
16040   rtx rtl;
16041   dw_loc_list_ref list;
16042   var_loc_list *loc_list;
16043   cached_dw_loc_list *cache;
16044
16045   if (TREE_CODE (decl) == ERROR_MARK)
16046     return false;
16047
16048   gcc_assert (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == PARM_DECL
16049               || TREE_CODE (decl) == RESULT_DECL);
16050
16051   /* Try to get some constant RTL for this decl, and use that as the value of
16052      the location.  */
16053
16054   rtl = rtl_for_decl_location (decl);
16055   if (rtl && (CONSTANT_P (rtl) || GET_CODE (rtl) == CONST_STRING)
16056       && add_const_value_attribute (die, rtl))
16057     return true;
16058
16059   /* See if we have single element location list that is equivalent to
16060      a constant value.  That way we are better to use add_const_value_attribute
16061      rather than expanding constant value equivalent.  */
16062   loc_list = lookup_decl_loc (decl);
16063   if (loc_list
16064       && loc_list->first
16065       && loc_list->first->next == NULL
16066       && NOTE_P (loc_list->first->loc)
16067       && NOTE_VAR_LOCATION (loc_list->first->loc)
16068       && NOTE_VAR_LOCATION_LOC (loc_list->first->loc))
16069     {
16070       struct var_loc_node *node;
16071
16072       node = loc_list->first;
16073       rtl = NOTE_VAR_LOCATION_LOC (node->loc);
16074       if (GET_CODE (rtl) == EXPR_LIST)
16075         rtl = XEXP (rtl, 0);
16076       if ((CONSTANT_P (rtl) || GET_CODE (rtl) == CONST_STRING)
16077           && add_const_value_attribute (die, rtl))
16078          return true;
16079     }
16080   /* If this decl is from BLOCK_NONLOCALIZED_VARS, we might need its
16081      list several times.  See if we've already cached the contents.  */
16082   list = NULL;
16083   if (loc_list == NULL || cached_dw_loc_list_table == NULL)
16084     cache_p = false;
16085   if (cache_p)
16086     {
16087       cache = cached_dw_loc_list_table->find_with_hash (decl, DECL_UID (decl));
16088       if (cache)
16089         list = cache->loc_list;
16090     }
16091   if (list == NULL)
16092     {
16093       list = loc_list_from_tree (decl, decl_by_reference_p (decl) ? 0 : 2,
16094                                  NULL);
16095       /* It is usually worth caching this result if the decl is from
16096          BLOCK_NONLOCALIZED_VARS and if the list has at least two elements.  */
16097       if (cache_p && list && list->dw_loc_next)
16098         {
16099           cached_dw_loc_list **slot
16100             = cached_dw_loc_list_table->find_slot_with_hash (decl,
16101                                                              DECL_UID (decl),
16102                                                              INSERT);
16103           cache = ggc_cleared_alloc<cached_dw_loc_list> ();
16104           cache->decl_id = DECL_UID (decl);
16105           cache->loc_list = list;
16106           *slot = cache;
16107         }
16108     }
16109   if (list)
16110     {
16111       add_AT_location_description (die, attr, list);
16112       return true;
16113     }
16114   /* None of that worked, so it must not really have a location;
16115      try adding a constant value attribute from the DECL_INITIAL.  */
16116   return tree_add_const_value_attribute_for_decl (die, decl);
16117 }
16118
16119 /* Add VARIABLE and DIE into deferred locations list.  */
16120
16121 static void
16122 defer_location (tree variable, dw_die_ref die)
16123 {
16124   deferred_locations entry;
16125   entry.variable = variable;
16126   entry.die = die;
16127   vec_safe_push (deferred_locations_list, entry);
16128 }
16129
16130 /* Helper function for tree_add_const_value_attribute.  Natively encode
16131    initializer INIT into an array.  Return true if successful.  */
16132
16133 static bool
16134 native_encode_initializer (tree init, unsigned char *array, int size)
16135 {
16136   tree type;
16137
16138   if (init == NULL_TREE)
16139     return false;
16140
16141   STRIP_NOPS (init);
16142   switch (TREE_CODE (init))
16143     {
16144     case STRING_CST:
16145       type = TREE_TYPE (init);
16146       if (TREE_CODE (type) == ARRAY_TYPE)
16147         {
16148           tree enttype = TREE_TYPE (type);
16149           machine_mode mode = TYPE_MODE (enttype);
16150
16151           if (GET_MODE_CLASS (mode) != MODE_INT || GET_MODE_SIZE (mode) != 1)
16152             return false;
16153           if (int_size_in_bytes (type) != size)
16154             return false;
16155           if (size > TREE_STRING_LENGTH (init))
16156             {
16157               memcpy (array, TREE_STRING_POINTER (init),
16158                       TREE_STRING_LENGTH (init));
16159               memset (array + TREE_STRING_LENGTH (init),
16160                       '\0', size - TREE_STRING_LENGTH (init));
16161             }
16162           else
16163             memcpy (array, TREE_STRING_POINTER (init), size);
16164           return true;
16165         }
16166       return false;
16167     case CONSTRUCTOR:
16168       type = TREE_TYPE (init);
16169       if (int_size_in_bytes (type) != size)
16170         return false;
16171       if (TREE_CODE (type) == ARRAY_TYPE)
16172         {
16173           HOST_WIDE_INT min_index;
16174           unsigned HOST_WIDE_INT cnt;
16175           int curpos = 0, fieldsize;
16176           constructor_elt *ce;
16177
16178           if (TYPE_DOMAIN (type) == NULL_TREE
16179               || !tree_fits_shwi_p (TYPE_MIN_VALUE (TYPE_DOMAIN (type))))
16180             return false;
16181
16182           fieldsize = int_size_in_bytes (TREE_TYPE (type));
16183           if (fieldsize <= 0)
16184             return false;
16185
16186           min_index = tree_to_shwi (TYPE_MIN_VALUE (TYPE_DOMAIN (type)));
16187           memset (array, '\0', size);
16188           FOR_EACH_VEC_SAFE_ELT (CONSTRUCTOR_ELTS (init), cnt, ce)
16189             {
16190               tree val = ce->value;
16191               tree index = ce->index;
16192               int pos = curpos;
16193               if (index && TREE_CODE (index) == RANGE_EXPR)
16194                 pos = (tree_to_shwi (TREE_OPERAND (index, 0)) - min_index)
16195                       * fieldsize;
16196               else if (index)
16197                 pos = (tree_to_shwi (index) - min_index) * fieldsize;
16198
16199               if (val)
16200                 {
16201                   STRIP_NOPS (val);
16202                   if (!native_encode_initializer (val, array + pos, fieldsize))
16203                     return false;
16204                 }
16205               curpos = pos + fieldsize;
16206               if (index && TREE_CODE (index) == RANGE_EXPR)
16207                 {
16208                   int count = tree_to_shwi (TREE_OPERAND (index, 1))
16209                               - tree_to_shwi (TREE_OPERAND (index, 0));
16210                   while (count-- > 0)
16211                     {
16212                       if (val)
16213                         memcpy (array + curpos, array + pos, fieldsize);
16214                       curpos += fieldsize;
16215                     }
16216                 }
16217               gcc_assert (curpos <= size);
16218             }
16219           return true;
16220         }
16221       else if (TREE_CODE (type) == RECORD_TYPE
16222                || TREE_CODE (type) == UNION_TYPE)
16223         {
16224           tree field = NULL_TREE;
16225           unsigned HOST_WIDE_INT cnt;
16226           constructor_elt *ce;
16227
16228           if (int_size_in_bytes (type) != size)
16229             return false;
16230
16231           if (TREE_CODE (type) == RECORD_TYPE)
16232             field = TYPE_FIELDS (type);
16233
16234           FOR_EACH_VEC_SAFE_ELT (CONSTRUCTOR_ELTS (init), cnt, ce)
16235             {
16236               tree val = ce->value;
16237               int pos, fieldsize;
16238
16239               if (ce->index != 0)
16240                 field = ce->index;
16241
16242               if (val)
16243                 STRIP_NOPS (val);
16244
16245               if (field == NULL_TREE || DECL_BIT_FIELD (field))
16246                 return false;
16247
16248               if (TREE_CODE (TREE_TYPE (field)) == ARRAY_TYPE
16249                   && TYPE_DOMAIN (TREE_TYPE (field))
16250                   && ! TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (field))))
16251                 return false;
16252               else if (DECL_SIZE_UNIT (field) == NULL_TREE
16253                        || !tree_fits_shwi_p (DECL_SIZE_UNIT (field)))
16254                 return false;
16255               fieldsize = tree_to_shwi (DECL_SIZE_UNIT (field));
16256               pos = int_byte_position (field);
16257               gcc_assert (pos + fieldsize <= size);
16258               if (val && fieldsize != 0
16259                   && !native_encode_initializer (val, array + pos, fieldsize))
16260                 return false;
16261             }
16262           return true;
16263         }
16264       return false;
16265     case VIEW_CONVERT_EXPR:
16266     case NON_LVALUE_EXPR:
16267       return native_encode_initializer (TREE_OPERAND (init, 0), array, size);
16268     default:
16269       return native_encode_expr (init, array, size) == size;
16270     }
16271 }
16272
16273 /* Attach a DW_AT_const_value attribute to DIE. The value of the
16274    attribute is the const value T.  */
16275
16276 static bool
16277 tree_add_const_value_attribute (dw_die_ref die, tree t)
16278 {
16279   tree init;
16280   tree type = TREE_TYPE (t);
16281   rtx rtl;
16282
16283   if (!t || !TREE_TYPE (t) || TREE_TYPE (t) == error_mark_node)
16284     return false;
16285
16286   init = t;
16287   gcc_assert (!DECL_P (init));
16288
16289   rtl = rtl_for_decl_init (init, type);
16290   if (rtl)
16291     return add_const_value_attribute (die, rtl);
16292   /* If the host and target are sane, try harder.  */
16293   else if (CHAR_BIT == 8 && BITS_PER_UNIT == 8
16294            && initializer_constant_valid_p (init, type))
16295     {
16296       HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (init));
16297       if (size > 0 && (int) size == size)
16298         {
16299           unsigned char *array = ggc_cleared_vec_alloc<unsigned char> (size);
16300
16301           if (native_encode_initializer (init, array, size))
16302             {
16303               add_AT_vec (die, DW_AT_const_value, size, 1, array);
16304               return true;
16305             }
16306           ggc_free (array);
16307         }
16308     }
16309   return false;
16310 }
16311
16312 /* Attach a DW_AT_const_value attribute to VAR_DIE. The value of the
16313    attribute is the const value of T, where T is an integral constant
16314    variable with static storage duration
16315    (so it can't be a PARM_DECL or a RESULT_DECL).  */
16316
16317 static bool
16318 tree_add_const_value_attribute_for_decl (dw_die_ref var_die, tree decl)
16319 {
16320
16321   if (!decl
16322       || (TREE_CODE (decl) != VAR_DECL
16323           && TREE_CODE (decl) != CONST_DECL)
16324       || (TREE_CODE (decl) == VAR_DECL
16325           && !TREE_STATIC (decl)))
16326     return false;
16327
16328     if (TREE_READONLY (decl)
16329         && ! TREE_THIS_VOLATILE (decl)
16330         && DECL_INITIAL (decl))
16331       /* OK */;
16332     else
16333       return false;
16334
16335   /* Don't add DW_AT_const_value if abstract origin already has one.  */
16336   if (get_AT (var_die, DW_AT_const_value))
16337     return false;
16338
16339   return tree_add_const_value_attribute (var_die, DECL_INITIAL (decl));
16340 }
16341
16342 /* Convert the CFI instructions for the current function into a
16343    location list.  This is used for DW_AT_frame_base when we targeting
16344    a dwarf2 consumer that does not support the dwarf3
16345    DW_OP_call_frame_cfa.  OFFSET is a constant to be added to all CFA
16346    expressions.  */
16347
16348 static dw_loc_list_ref
16349 convert_cfa_to_fb_loc_list (HOST_WIDE_INT offset)
16350 {
16351   int ix;
16352   dw_fde_ref fde;
16353   dw_loc_list_ref list, *list_tail;
16354   dw_cfi_ref cfi;
16355   dw_cfa_location last_cfa, next_cfa;
16356   const char *start_label, *last_label, *section;
16357   dw_cfa_location remember;
16358
16359   fde = cfun->fde;
16360   gcc_assert (fde != NULL);
16361
16362   section = secname_for_decl (current_function_decl);
16363   list_tail = &list;
16364   list = NULL;
16365
16366   memset (&next_cfa, 0, sizeof (next_cfa));
16367   next_cfa.reg = INVALID_REGNUM;
16368   remember = next_cfa;
16369
16370   start_label = fde->dw_fde_begin;
16371
16372   /* ??? Bald assumption that the CIE opcode list does not contain
16373      advance opcodes.  */
16374   FOR_EACH_VEC_ELT (*cie_cfi_vec, ix, cfi)
16375     lookup_cfa_1 (cfi, &next_cfa, &remember);
16376
16377   last_cfa = next_cfa;
16378   last_label = start_label;
16379
16380   if (fde->dw_fde_second_begin && fde->dw_fde_switch_cfi_index == 0)
16381     {
16382       /* If the first partition contained no CFI adjustments, the
16383          CIE opcodes apply to the whole first partition.  */
16384       *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset),
16385                                  fde->dw_fde_begin, fde->dw_fde_end, section);
16386       list_tail =&(*list_tail)->dw_loc_next;
16387       start_label = last_label = fde->dw_fde_second_begin;
16388     }
16389
16390   FOR_EACH_VEC_SAFE_ELT (fde->dw_fde_cfi, ix, cfi)
16391     {
16392       switch (cfi->dw_cfi_opc)
16393         {
16394         case DW_CFA_set_loc:
16395         case DW_CFA_advance_loc1:
16396         case DW_CFA_advance_loc2:
16397         case DW_CFA_advance_loc4:
16398           if (!cfa_equal_p (&last_cfa, &next_cfa))
16399             {
16400               *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset),
16401                                          start_label, last_label, section);
16402
16403               list_tail = &(*list_tail)->dw_loc_next;
16404               last_cfa = next_cfa;
16405               start_label = last_label;
16406             }
16407           last_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
16408           break;
16409
16410         case DW_CFA_advance_loc:
16411           /* The encoding is complex enough that we should never emit this.  */
16412           gcc_unreachable ();
16413
16414         default:
16415           lookup_cfa_1 (cfi, &next_cfa, &remember);
16416           break;
16417         }
16418       if (ix + 1 == fde->dw_fde_switch_cfi_index)
16419         {
16420           if (!cfa_equal_p (&last_cfa, &next_cfa))
16421             {
16422               *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset),
16423                                          start_label, last_label, section);
16424
16425               list_tail = &(*list_tail)->dw_loc_next;
16426               last_cfa = next_cfa;
16427               start_label = last_label;
16428             }
16429           *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset),
16430                                      start_label, fde->dw_fde_end, section);
16431           list_tail = &(*list_tail)->dw_loc_next;
16432           start_label = last_label = fde->dw_fde_second_begin;
16433         }
16434     }
16435
16436   if (!cfa_equal_p (&last_cfa, &next_cfa))
16437     {
16438       *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset),
16439                                  start_label, last_label, section);
16440       list_tail = &(*list_tail)->dw_loc_next;
16441       start_label = last_label;
16442     }
16443
16444   *list_tail = new_loc_list (build_cfa_loc (&next_cfa, offset),
16445                              start_label,
16446                              fde->dw_fde_second_begin
16447                              ? fde->dw_fde_second_end : fde->dw_fde_end,
16448                              section);
16449
16450   if (list && list->dw_loc_next)
16451     gen_llsym (list);
16452
16453   return list;
16454 }
16455
16456 /* Compute a displacement from the "steady-state frame pointer" to the
16457    frame base (often the same as the CFA), and store it in
16458    frame_pointer_fb_offset.  OFFSET is added to the displacement
16459    before the latter is negated.  */
16460
16461 static void
16462 compute_frame_pointer_to_fb_displacement (HOST_WIDE_INT offset)
16463 {
16464   rtx reg, elim;
16465
16466 #ifdef FRAME_POINTER_CFA_OFFSET
16467   reg = frame_pointer_rtx;
16468   offset += FRAME_POINTER_CFA_OFFSET (current_function_decl);
16469 #else
16470   reg = arg_pointer_rtx;
16471   offset += ARG_POINTER_CFA_OFFSET (current_function_decl);
16472 #endif
16473
16474   elim = (ira_use_lra_p
16475           ? lra_eliminate_regs (reg, VOIDmode, NULL_RTX)
16476           : eliminate_regs (reg, VOIDmode, NULL_RTX));
16477   if (GET_CODE (elim) == PLUS)
16478     {
16479       offset += INTVAL (XEXP (elim, 1));
16480       elim = XEXP (elim, 0);
16481     }
16482
16483   frame_pointer_fb_offset = -offset;
16484
16485   /* ??? AVR doesn't set up valid eliminations when there is no stack frame
16486      in which to eliminate.  This is because it's stack pointer isn't 
16487      directly accessible as a register within the ISA.  To work around
16488      this, assume that while we cannot provide a proper value for
16489      frame_pointer_fb_offset, we won't need one either.  */
16490   frame_pointer_fb_offset_valid
16491     = ((SUPPORTS_STACK_ALIGNMENT
16492         && (elim == hard_frame_pointer_rtx
16493             || elim == stack_pointer_rtx))
16494        || elim == (frame_pointer_needed
16495                    ? hard_frame_pointer_rtx
16496                    : stack_pointer_rtx));
16497 }
16498
16499 /* Generate a DW_AT_name attribute given some string value to be included as
16500    the value of the attribute.  */
16501
16502 static void
16503 add_name_attribute (dw_die_ref die, const char *name_string)
16504 {
16505   if (name_string != NULL && *name_string != 0)
16506     {
16507       if (demangle_name_func)
16508         name_string = (*demangle_name_func) (name_string);
16509
16510       add_AT_string (die, DW_AT_name, name_string);
16511     }
16512 }
16513
16514 /* Retrieve the descriptive type of TYPE, if any, make sure it has a
16515    DIE and attach a DW_AT_GNAT_descriptive_type attribute to the DIE
16516    of TYPE accordingly.
16517
16518    ??? This is a temporary measure until after we're able to generate
16519    regular DWARF for the complex Ada type system.  */
16520
16521 static void 
16522 add_gnat_descriptive_type_attribute (dw_die_ref die, tree type,
16523                                      dw_die_ref context_die)
16524 {
16525   tree dtype;
16526   dw_die_ref dtype_die;
16527
16528   if (!lang_hooks.types.descriptive_type)
16529     return;
16530
16531   dtype = lang_hooks.types.descriptive_type (type);
16532   if (!dtype)
16533     return;
16534
16535   dtype_die = lookup_type_die (dtype);
16536   if (!dtype_die)
16537     {
16538       gen_type_die (dtype, context_die);
16539       dtype_die = lookup_type_die (dtype);
16540       gcc_assert (dtype_die);
16541     }
16542
16543   add_AT_die_ref (die, DW_AT_GNAT_descriptive_type, dtype_die);
16544 }
16545
16546 /* Retrieve the comp_dir string suitable for use with DW_AT_comp_dir.  */
16547
16548 static const char *
16549 comp_dir_string (void)
16550 {
16551   const char *wd;
16552   char *wd1;
16553   static const char *cached_wd = NULL;
16554
16555   if (cached_wd != NULL)
16556     return cached_wd;
16557
16558   wd = get_src_pwd ();
16559   if (wd == NULL)
16560     return NULL;
16561
16562   if (DWARF2_DIR_SHOULD_END_WITH_SEPARATOR)
16563     {
16564       int wdlen;
16565
16566       wdlen = strlen (wd);
16567       wd1 = ggc_vec_alloc<char> (wdlen + 2);
16568       strcpy (wd1, wd);
16569       wd1 [wdlen] = DIR_SEPARATOR;
16570       wd1 [wdlen + 1] = 0;
16571       wd = wd1;
16572     }
16573
16574   cached_wd = remap_debug_filename (wd);
16575   return cached_wd;
16576 }
16577
16578 /* Generate a DW_AT_comp_dir attribute for DIE.  */
16579
16580 static void
16581 add_comp_dir_attribute (dw_die_ref die)
16582 {
16583   const char * wd = comp_dir_string ();
16584   if (wd != NULL)
16585     add_AT_string (die, DW_AT_comp_dir, wd);
16586 }
16587
16588 /* Given a tree node VALUE describing a scalar attribute ATTR (i.e. a bound, a
16589    pointer computation, ...), output a representation for that bound according
16590    to the accepted FORMS (see enum dw_scalar_form) and add it to DIE.  See
16591    loc_list_from_tree for the meaning of CONTEXT.  */
16592
16593 static void
16594 add_scalar_info (dw_die_ref die, enum dwarf_attribute attr, tree value,
16595                  int forms, const struct loc_descr_context *context)
16596 {
16597   dw_die_ref ctx, decl_die;
16598   dw_loc_list_ref list;
16599
16600   bool strip_conversions = true;
16601
16602   while (strip_conversions)
16603     switch (TREE_CODE (value))
16604       {
16605       case ERROR_MARK:
16606       case SAVE_EXPR:
16607         return;
16608
16609       CASE_CONVERT:
16610       case VIEW_CONVERT_EXPR:
16611         value = TREE_OPERAND (value, 0);
16612         break;
16613
16614       default:
16615         strip_conversions = false;
16616         break;
16617       }
16618
16619   /* If possible and permitted, output the attribute as a constant.  */
16620   if ((forms & dw_scalar_form_constant) != 0
16621       && TREE_CODE (value) == INTEGER_CST)
16622     {
16623       unsigned int prec = simple_type_size_in_bits (TREE_TYPE (value));
16624
16625       /* If HOST_WIDE_INT is big enough then represent the bound as
16626          a constant value.  We need to choose a form based on
16627          whether the type is signed or unsigned.  We cannot just
16628          call add_AT_unsigned if the value itself is positive
16629          (add_AT_unsigned might add the unsigned value encoded as
16630          DW_FORM_data[1248]).  Some DWARF consumers will lookup the
16631          bounds type and then sign extend any unsigned values found
16632          for signed types.  This is needed only for
16633          DW_AT_{lower,upper}_bound, since for most other attributes,
16634          consumers will treat DW_FORM_data[1248] as unsigned values,
16635          regardless of the underlying type.  */
16636       if (prec <= HOST_BITS_PER_WIDE_INT
16637           || tree_fits_uhwi_p (value))
16638         {
16639           if (TYPE_UNSIGNED (TREE_TYPE (value)))
16640             add_AT_unsigned (die, attr, TREE_INT_CST_LOW (value));
16641           else
16642             add_AT_int (die, attr, TREE_INT_CST_LOW (value));
16643         }
16644       else
16645         /* Otherwise represent the bound as an unsigned value with
16646            the precision of its type.  The precision and signedness
16647            of the type will be necessary to re-interpret it
16648            unambiguously.  */
16649         add_AT_wide (die, attr, value);
16650       return;
16651     }
16652
16653   /* Otherwise, if it's possible and permitted too, output a reference to
16654      another DIE.  */
16655   if ((forms & dw_scalar_form_reference) != 0)
16656     {
16657       tree decl = NULL_TREE;
16658
16659       /* Some type attributes reference an outer type.  For instance, the upper
16660          bound of an array may reference an embedding record (this happens in
16661          Ada).  */
16662       if (TREE_CODE (value) == COMPONENT_REF
16663           && TREE_CODE (TREE_OPERAND (value, 0)) == PLACEHOLDER_EXPR
16664           && TREE_CODE (TREE_OPERAND (value, 1)) == FIELD_DECL)
16665         decl = TREE_OPERAND (value, 1);
16666
16667       else if (TREE_CODE (value) == VAR_DECL
16668                || TREE_CODE (value) == PARM_DECL
16669                || TREE_CODE (value) == RESULT_DECL)
16670         decl = value;
16671
16672       if (decl != NULL_TREE)
16673         {
16674           dw_die_ref decl_die = lookup_decl_die (decl);
16675
16676           /* ??? Can this happen, or should the variable have been bound
16677              first?  Probably it can, since I imagine that we try to create
16678              the types of parameters in the order in which they exist in
16679              the list, and won't have created a forward reference to a
16680              later parameter.  */
16681           if (decl_die != NULL)
16682             {
16683               add_AT_die_ref (die, attr, decl_die);
16684               return;
16685             }
16686         }
16687     }
16688
16689   /* Last chance: try to create a stack operation procedure to evaluate the
16690      value.  Do nothing if even that is not possible or permitted.  */
16691   if ((forms & dw_scalar_form_exprloc) == 0)
16692     return;
16693
16694   list = loc_list_from_tree (value, 2, context);
16695   if (list == NULL || single_element_loc_list_p (list))
16696     {
16697       /* If this attribute is not a reference nor constant, it is
16698          a DWARF expression rather than location description.  For that
16699          loc_list_from_tree (value, 0, &context) is needed.  */
16700       dw_loc_list_ref list2 = loc_list_from_tree (value, 0, context);
16701       if (list2 && single_element_loc_list_p (list2))
16702         {
16703           add_AT_loc (die, attr, list2->expr);
16704           return;
16705         }
16706     }
16707
16708   /* If that failed to give a single element location list, fall back to
16709      outputting this as a reference... still if permitted.  */
16710   if (list == NULL || (forms & dw_scalar_form_reference) == 0)
16711     return;
16712
16713   if (current_function_decl == 0)
16714     ctx = comp_unit_die ();
16715   else
16716     ctx = lookup_decl_die (current_function_decl);
16717
16718   decl_die = new_die (DW_TAG_variable, ctx, value);
16719   add_AT_flag (decl_die, DW_AT_artificial, 1);
16720   add_type_attribute (decl_die, TREE_TYPE (value), TYPE_QUAL_CONST, ctx);
16721   add_AT_location_description (decl_die, DW_AT_location, list);
16722   add_AT_die_ref (die, attr, decl_die);
16723 }
16724
16725 /* Return the default for DW_AT_lower_bound, or -1 if there is not any
16726    default.  */
16727
16728 static int
16729 lower_bound_default (void)
16730 {
16731   switch (get_AT_unsigned (comp_unit_die (), DW_AT_language))
16732     {
16733     case DW_LANG_C:
16734     case DW_LANG_C89:
16735     case DW_LANG_C99:
16736     case DW_LANG_C11:
16737     case DW_LANG_C_plus_plus:
16738     case DW_LANG_C_plus_plus_11:
16739     case DW_LANG_C_plus_plus_14:
16740     case DW_LANG_ObjC:
16741     case DW_LANG_ObjC_plus_plus:
16742     case DW_LANG_Java:
16743       return 0;
16744     case DW_LANG_Fortran77:
16745     case DW_LANG_Fortran90:
16746     case DW_LANG_Fortran95:
16747     case DW_LANG_Fortran03:
16748     case DW_LANG_Fortran08:
16749       return 1;
16750     case DW_LANG_UPC:
16751     case DW_LANG_D:
16752     case DW_LANG_Python:
16753       return dwarf_version >= 4 ? 0 : -1;
16754     case DW_LANG_Ada95:
16755     case DW_LANG_Ada83:
16756     case DW_LANG_Cobol74:
16757     case DW_LANG_Cobol85:
16758     case DW_LANG_Pascal83:
16759     case DW_LANG_Modula2:
16760     case DW_LANG_PLI:
16761       return dwarf_version >= 4 ? 1 : -1;
16762     default:
16763       return -1;
16764     }
16765 }
16766
16767 /* Given a tree node describing an array bound (either lower or upper) output
16768    a representation for that bound.  */
16769
16770 static void
16771 add_bound_info (dw_die_ref subrange_die, enum dwarf_attribute bound_attr,
16772                 tree bound, const struct loc_descr_context *context)
16773 {
16774   int dflt;
16775
16776   while (1)
16777     switch (TREE_CODE (bound))
16778       {
16779       /* Strip all conversions.  */
16780       CASE_CONVERT:
16781       case VIEW_CONVERT_EXPR:
16782         bound = TREE_OPERAND (bound, 0);
16783         break;
16784
16785       /* All fixed-bounds are represented by INTEGER_CST nodes.  Lower bounds
16786          are even omitted when they are the default.  */
16787       case INTEGER_CST:
16788         /* If the value for this bound is the default one, we can even omit the
16789            attribute.  */
16790         if (bound_attr == DW_AT_lower_bound
16791             && tree_fits_shwi_p (bound)
16792             && (dflt = lower_bound_default ()) != -1
16793             && tree_to_shwi (bound) == dflt)
16794           return;
16795
16796         /* FALLTHRU */
16797
16798       default:
16799         add_scalar_info (subrange_die, bound_attr, bound,
16800                          dw_scalar_form_constant
16801                          | dw_scalar_form_exprloc
16802                          | dw_scalar_form_reference,
16803                          context);
16804         return;
16805       }
16806 }
16807
16808 /* Add subscript info to TYPE_DIE, describing an array TYPE, collapsing
16809    possibly nested array subscripts in a flat sequence if COLLAPSE_P is true.
16810    Note that the block of subscript information for an array type also
16811    includes information about the element type of the given array type.  */
16812
16813 static void
16814 add_subscript_info (dw_die_ref type_die, tree type, bool collapse_p)
16815 {
16816   unsigned dimension_number;
16817   tree lower, upper;
16818   dw_die_ref subrange_die;
16819
16820   for (dimension_number = 0;
16821        TREE_CODE (type) == ARRAY_TYPE && (dimension_number == 0 || collapse_p);
16822        type = TREE_TYPE (type), dimension_number++)
16823     {
16824       tree domain = TYPE_DOMAIN (type);
16825
16826       if (TYPE_STRING_FLAG (type) && is_fortran () && dimension_number > 0)
16827         break;
16828
16829       /* Arrays come in three flavors: Unspecified bounds, fixed bounds,
16830          and (in GNU C only) variable bounds.  Handle all three forms
16831          here.  */
16832       subrange_die = new_die (DW_TAG_subrange_type, type_die, NULL);
16833       if (domain)
16834         {
16835           /* We have an array type with specified bounds.  */
16836           lower = TYPE_MIN_VALUE (domain);
16837           upper = TYPE_MAX_VALUE (domain);
16838
16839           /* Define the index type.  */
16840           if (TREE_TYPE (domain))
16841             {
16842               /* ??? This is probably an Ada unnamed subrange type.  Ignore the
16843                  TREE_TYPE field.  We can't emit debug info for this
16844                  because it is an unnamed integral type.  */
16845               if (TREE_CODE (domain) == INTEGER_TYPE
16846                   && TYPE_NAME (domain) == NULL_TREE
16847                   && TREE_CODE (TREE_TYPE (domain)) == INTEGER_TYPE
16848                   && TYPE_NAME (TREE_TYPE (domain)) == NULL_TREE)
16849                 ;
16850               else
16851                 add_type_attribute (subrange_die, TREE_TYPE (domain),
16852                                     TYPE_UNQUALIFIED, type_die);
16853             }
16854
16855           /* ??? If upper is NULL, the array has unspecified length,
16856              but it does have a lower bound.  This happens with Fortran
16857                dimension arr(N:*)
16858              Since the debugger is definitely going to need to know N
16859              to produce useful results, go ahead and output the lower
16860              bound solo, and hope the debugger can cope.  */
16861
16862           add_bound_info (subrange_die, DW_AT_lower_bound, lower, NULL);
16863           if (upper)
16864             add_bound_info (subrange_die, DW_AT_upper_bound, upper, NULL);
16865         }
16866
16867       /* Otherwise we have an array type with an unspecified length.  The
16868          DWARF-2 spec does not say how to handle this; let's just leave out the
16869          bounds.  */
16870     }
16871 }
16872
16873 /* Add a DW_AT_byte_size attribute to DIE with TREE_NODE's size.  */
16874
16875 static void
16876 add_byte_size_attribute (dw_die_ref die, tree tree_node)
16877 {
16878   dw_die_ref decl_die;
16879   HOST_WIDE_INT size;
16880
16881   switch (TREE_CODE (tree_node))
16882     {
16883     case ERROR_MARK:
16884       size = 0;
16885       break;
16886     case ENUMERAL_TYPE:
16887     case RECORD_TYPE:
16888     case UNION_TYPE:
16889     case QUAL_UNION_TYPE:
16890       if (TREE_CODE (TYPE_SIZE_UNIT (tree_node)) == VAR_DECL
16891           && (decl_die = lookup_decl_die (TYPE_SIZE_UNIT (tree_node))))
16892         {
16893           add_AT_die_ref (die, DW_AT_byte_size, decl_die);
16894           return;
16895         }
16896       size = int_size_in_bytes (tree_node);
16897       break;
16898     case FIELD_DECL:
16899       /* For a data member of a struct or union, the DW_AT_byte_size is
16900          generally given as the number of bytes normally allocated for an
16901          object of the *declared* type of the member itself.  This is true
16902          even for bit-fields.  */
16903       size = int_size_in_bytes (field_type (tree_node));
16904       break;
16905     default:
16906       gcc_unreachable ();
16907     }
16908
16909   /* Note that `size' might be -1 when we get to this point.  If it is, that
16910      indicates that the byte size of the entity in question is variable.  We
16911      have no good way of expressing this fact in Dwarf at the present time,
16912      when location description was not used by the caller code instead.  */
16913   if (size >= 0)
16914     add_AT_unsigned (die, DW_AT_byte_size, size);
16915 }
16916
16917 /* For a FIELD_DECL node which represents a bit-field, output an attribute
16918    which specifies the distance in bits from the highest order bit of the
16919    "containing object" for the bit-field to the highest order bit of the
16920    bit-field itself.
16921
16922    For any given bit-field, the "containing object" is a hypothetical object
16923    (of some integral or enum type) within which the given bit-field lives.  The
16924    type of this hypothetical "containing object" is always the same as the
16925    declared type of the individual bit-field itself.  The determination of the
16926    exact location of the "containing object" for a bit-field is rather
16927    complicated.  It's handled by the `field_byte_offset' function (above).
16928
16929    Note that it is the size (in bytes) of the hypothetical "containing object"
16930    which will be given in the DW_AT_byte_size attribute for this bit-field.
16931    (See `byte_size_attribute' above).  */
16932
16933 static inline void
16934 add_bit_offset_attribute (dw_die_ref die, tree decl)
16935 {
16936   HOST_WIDE_INT object_offset_in_bytes = field_byte_offset (decl);
16937   tree type = DECL_BIT_FIELD_TYPE (decl);
16938   HOST_WIDE_INT bitpos_int;
16939   HOST_WIDE_INT highest_order_object_bit_offset;
16940   HOST_WIDE_INT highest_order_field_bit_offset;
16941   HOST_WIDE_INT bit_offset;
16942
16943   /* Must be a field and a bit field.  */
16944   gcc_assert (type && TREE_CODE (decl) == FIELD_DECL);
16945
16946   /* We can't yet handle bit-fields whose offsets are variable, so if we
16947      encounter such things, just return without generating any attribute
16948      whatsoever.  Likewise for variable or too large size.  */
16949   if (! tree_fits_shwi_p (bit_position (decl))
16950       || ! tree_fits_uhwi_p (DECL_SIZE (decl)))
16951     return;
16952
16953   bitpos_int = int_bit_position (decl);
16954
16955   /* Note that the bit offset is always the distance (in bits) from the
16956      highest-order bit of the "containing object" to the highest-order bit of
16957      the bit-field itself.  Since the "high-order end" of any object or field
16958      is different on big-endian and little-endian machines, the computation
16959      below must take account of these differences.  */
16960   highest_order_object_bit_offset = object_offset_in_bytes * BITS_PER_UNIT;
16961   highest_order_field_bit_offset = bitpos_int;
16962
16963   if (! BYTES_BIG_ENDIAN)
16964     {
16965       highest_order_field_bit_offset += tree_to_shwi (DECL_SIZE (decl));
16966       highest_order_object_bit_offset += simple_type_size_in_bits (type);
16967     }
16968
16969   bit_offset
16970     = (! BYTES_BIG_ENDIAN
16971        ? highest_order_object_bit_offset - highest_order_field_bit_offset
16972        : highest_order_field_bit_offset - highest_order_object_bit_offset);
16973
16974   if (bit_offset < 0)
16975     add_AT_int (die, DW_AT_bit_offset, bit_offset);
16976   else
16977     add_AT_unsigned (die, DW_AT_bit_offset, (unsigned HOST_WIDE_INT) bit_offset);
16978 }
16979
16980 /* For a FIELD_DECL node which represents a bit field, output an attribute
16981    which specifies the length in bits of the given field.  */
16982
16983 static inline void
16984 add_bit_size_attribute (dw_die_ref die, tree decl)
16985 {
16986   /* Must be a field and a bit field.  */
16987   gcc_assert (TREE_CODE (decl) == FIELD_DECL
16988               && DECL_BIT_FIELD_TYPE (decl));
16989
16990   if (tree_fits_uhwi_p (DECL_SIZE (decl)))
16991     add_AT_unsigned (die, DW_AT_bit_size, tree_to_uhwi (DECL_SIZE (decl)));
16992 }
16993
16994 /* If the compiled language is ANSI C, then add a 'prototyped'
16995    attribute, if arg types are given for the parameters of a function.  */
16996
16997 static inline void
16998 add_prototyped_attribute (dw_die_ref die, tree func_type)
16999 {
17000   switch (get_AT_unsigned (comp_unit_die (), DW_AT_language))
17001     {
17002     case DW_LANG_C:
17003     case DW_LANG_C89:
17004     case DW_LANG_C99:
17005     case DW_LANG_C11:
17006     case DW_LANG_ObjC:
17007       if (prototype_p (func_type))
17008         add_AT_flag (die, DW_AT_prototyped, 1);
17009       break;
17010     default:
17011       break;
17012     }
17013 }
17014
17015 /* Add an 'abstract_origin' attribute below a given DIE.  The DIE is found
17016    by looking in either the type declaration or object declaration
17017    equate table.  */
17018
17019 static inline dw_die_ref
17020 add_abstract_origin_attribute (dw_die_ref die, tree origin)
17021 {
17022   dw_die_ref origin_die = NULL;
17023
17024   if (TREE_CODE (origin) != FUNCTION_DECL)
17025     {
17026       /* We may have gotten separated from the block for the inlined
17027          function, if we're in an exception handler or some such; make
17028          sure that the abstract function has been written out.
17029
17030          Doing this for nested functions is wrong, however; functions are
17031          distinct units, and our context might not even be inline.  */
17032       tree fn = origin;
17033
17034       if (TYPE_P (fn))
17035         fn = TYPE_STUB_DECL (fn);
17036
17037       fn = decl_function_context (fn);
17038       if (fn)
17039         dwarf2out_abstract_function (fn);
17040     }
17041
17042   if (DECL_P (origin))
17043     origin_die = lookup_decl_die (origin);
17044   else if (TYPE_P (origin))
17045     origin_die = lookup_type_die (origin);
17046
17047   /* XXX: Functions that are never lowered don't always have correct block
17048      trees (in the case of java, they simply have no block tree, in some other
17049      languages).  For these functions, there is nothing we can really do to
17050      output correct debug info for inlined functions in all cases.  Rather
17051      than die, we'll just produce deficient debug info now, in that we will
17052      have variables without a proper abstract origin.  In the future, when all
17053      functions are lowered, we should re-add a gcc_assert (origin_die)
17054      here.  */
17055
17056   if (origin_die)
17057     add_AT_die_ref (die, DW_AT_abstract_origin, origin_die);
17058   return origin_die;
17059 }
17060
17061 /* We do not currently support the pure_virtual attribute.  */
17062
17063 static inline void
17064 add_pure_or_virtual_attribute (dw_die_ref die, tree func_decl)
17065 {
17066   if (DECL_VINDEX (func_decl))
17067     {
17068       add_AT_unsigned (die, DW_AT_virtuality, DW_VIRTUALITY_virtual);
17069
17070       if (tree_fits_shwi_p (DECL_VINDEX (func_decl)))
17071         add_AT_loc (die, DW_AT_vtable_elem_location,
17072                     new_loc_descr (DW_OP_constu,
17073                                    tree_to_shwi (DECL_VINDEX (func_decl)),
17074                                    0));
17075
17076       /* GNU extension: Record what type this method came from originally.  */
17077       if (debug_info_level > DINFO_LEVEL_TERSE
17078           && DECL_CONTEXT (func_decl))
17079         add_AT_die_ref (die, DW_AT_containing_type,
17080                         lookup_type_die (DECL_CONTEXT (func_decl)));
17081     }
17082 }
17083 \f
17084 /* Add a DW_AT_linkage_name or DW_AT_MIPS_linkage_name attribute for the
17085    given decl.  This used to be a vendor extension until after DWARF 4
17086    standardized it.  */
17087
17088 static void
17089 add_linkage_attr (dw_die_ref die, tree decl)
17090 {
17091   const char *name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
17092
17093   /* Mimic what assemble_name_raw does with a leading '*'.  */
17094   if (name[0] == '*')
17095     name = &name[1];
17096
17097   if (dwarf_version >= 4)
17098     add_AT_string (die, DW_AT_linkage_name, name);
17099   else
17100     add_AT_string (die, DW_AT_MIPS_linkage_name, name);
17101 }
17102
17103 /* Add source coordinate attributes for the given decl.  */
17104
17105 static void
17106 add_src_coords_attributes (dw_die_ref die, tree decl)
17107 {
17108   expanded_location s;
17109
17110   if (LOCATION_LOCUS (DECL_SOURCE_LOCATION (decl)) == UNKNOWN_LOCATION)
17111     return;
17112   s = expand_location (DECL_SOURCE_LOCATION (decl));
17113   add_AT_file (die, DW_AT_decl_file, lookup_filename (s.file));
17114   add_AT_unsigned (die, DW_AT_decl_line, s.line);
17115 }
17116
17117 /* Add DW_AT_{,MIPS_}linkage_name attribute for the given decl.  */
17118
17119 static void
17120 add_linkage_name (dw_die_ref die, tree decl)
17121 {
17122   if (debug_info_level > DINFO_LEVEL_NONE
17123       && (TREE_CODE (decl) == FUNCTION_DECL || TREE_CODE (decl) == VAR_DECL)
17124       && TREE_PUBLIC (decl)
17125       && !(TREE_CODE (decl) == VAR_DECL && DECL_REGISTER (decl))
17126       && die->die_tag != DW_TAG_member)
17127     {
17128       /* Defer until we have an assembler name set.  */
17129       if (!DECL_ASSEMBLER_NAME_SET_P (decl))
17130         {
17131           limbo_die_node *asm_name;
17132
17133           asm_name = ggc_cleared_alloc<limbo_die_node> ();
17134           asm_name->die = die;
17135           asm_name->created_for = decl;
17136           asm_name->next = deferred_asm_name;
17137           deferred_asm_name = asm_name;
17138         }
17139       else if (DECL_ASSEMBLER_NAME (decl) != DECL_NAME (decl))
17140         add_linkage_attr (die, decl);
17141     }
17142 }
17143
17144 /* Add a DW_AT_name attribute and source coordinate attribute for the
17145    given decl, but only if it actually has a name.  */
17146
17147 static void
17148 add_name_and_src_coords_attributes (dw_die_ref die, tree decl)
17149 {
17150   tree decl_name;
17151
17152   decl_name = DECL_NAME (decl);
17153   if (decl_name != NULL && IDENTIFIER_POINTER (decl_name) != NULL)
17154     {
17155       const char *name = dwarf2_name (decl, 0);
17156       if (name)
17157         add_name_attribute (die, name);
17158       if (! DECL_ARTIFICIAL (decl))
17159         add_src_coords_attributes (die, decl);
17160
17161       add_linkage_name (die, decl);
17162     }
17163
17164 #ifdef VMS_DEBUGGING_INFO
17165   /* Get the function's name, as described by its RTL.  This may be different
17166      from the DECL_NAME name used in the source file.  */
17167   if (TREE_CODE (decl) == FUNCTION_DECL && TREE_ASM_WRITTEN (decl))
17168     {
17169       add_AT_addr (die, DW_AT_VMS_rtnbeg_pd_address,
17170                   XEXP (DECL_RTL (decl), 0), false);
17171       vec_safe_push (used_rtx_array, XEXP (DECL_RTL (decl), 0));
17172     }
17173 #endif /* VMS_DEBUGGING_INFO */
17174 }
17175
17176 #ifdef VMS_DEBUGGING_INFO
17177 /* Output the debug main pointer die for VMS */
17178
17179 void
17180 dwarf2out_vms_debug_main_pointer (void)
17181 {
17182   char label[MAX_ARTIFICIAL_LABEL_BYTES];
17183   dw_die_ref die;
17184
17185   /* Allocate the VMS debug main subprogram die.  */
17186   die = ggc_cleared_alloc<die_node> ();
17187   die->die_tag = DW_TAG_subprogram;
17188   add_name_attribute (die, VMS_DEBUG_MAIN_POINTER);
17189   ASM_GENERATE_INTERNAL_LABEL (label, PROLOGUE_END_LABEL,
17190                                current_function_funcdef_no);
17191   add_AT_lbl_id (die, DW_AT_entry_pc, label);
17192
17193   /* Make it the first child of comp_unit_die ().  */
17194   die->die_parent = comp_unit_die ();
17195   if (comp_unit_die ()->die_child)
17196     {
17197       die->die_sib = comp_unit_die ()->die_child->die_sib;
17198       comp_unit_die ()->die_child->die_sib = die;
17199     }
17200   else
17201     {
17202       die->die_sib = die;
17203       comp_unit_die ()->die_child = die;
17204     }
17205 }
17206 #endif /* VMS_DEBUGGING_INFO */
17207
17208 /* Push a new declaration scope.  */
17209
17210 static void
17211 push_decl_scope (tree scope)
17212 {
17213   vec_safe_push (decl_scope_table, scope);
17214 }
17215
17216 /* Pop a declaration scope.  */
17217
17218 static inline void
17219 pop_decl_scope (void)
17220 {
17221   decl_scope_table->pop ();
17222 }
17223
17224 /* walk_tree helper function for uses_local_type, below.  */
17225
17226 static tree
17227 uses_local_type_r (tree *tp, int *walk_subtrees, void *data ATTRIBUTE_UNUSED)
17228 {
17229   if (!TYPE_P (*tp))
17230     *walk_subtrees = 0;
17231   else
17232     {
17233       tree name = TYPE_NAME (*tp);
17234       if (name && DECL_P (name) && decl_function_context (name))
17235         return *tp;
17236     }
17237   return NULL_TREE;
17238 }
17239
17240 /* If TYPE involves a function-local type (including a local typedef to a
17241    non-local type), returns that type; otherwise returns NULL_TREE.  */
17242
17243 static tree
17244 uses_local_type (tree type)
17245 {
17246   tree used = walk_tree_without_duplicates (&type, uses_local_type_r, NULL);
17247   return used;
17248 }
17249
17250 /* Return the DIE for the scope that immediately contains this type.
17251    Non-named types that do not involve a function-local type get global
17252    scope.  Named types nested in namespaces or other types get their
17253    containing scope.  All other types (i.e. function-local named types) get
17254    the current active scope.  */
17255
17256 static dw_die_ref
17257 scope_die_for (tree t, dw_die_ref context_die)
17258 {
17259   dw_die_ref scope_die = NULL;
17260   tree containing_scope;
17261
17262   /* Non-types always go in the current scope.  */
17263   gcc_assert (TYPE_P (t));
17264
17265   /* Use the scope of the typedef, rather than the scope of the type
17266      it refers to.  */
17267   if (TYPE_NAME (t) && DECL_P (TYPE_NAME (t)))
17268     containing_scope = DECL_CONTEXT (TYPE_NAME (t));
17269   else
17270     containing_scope = TYPE_CONTEXT (t);
17271
17272   /* Use the containing namespace if there is one.  */
17273   if (containing_scope && TREE_CODE (containing_scope) == NAMESPACE_DECL)
17274     {
17275       if (context_die == lookup_decl_die (containing_scope))
17276         /* OK */;
17277       else if (debug_info_level > DINFO_LEVEL_TERSE)
17278         context_die = get_context_die (containing_scope);
17279       else
17280         containing_scope = NULL_TREE;
17281     }
17282
17283   /* Ignore function type "scopes" from the C frontend.  They mean that
17284      a tagged type is local to a parmlist of a function declarator, but
17285      that isn't useful to DWARF.  */
17286   if (containing_scope && TREE_CODE (containing_scope) == FUNCTION_TYPE)
17287     containing_scope = NULL_TREE;
17288
17289   if (SCOPE_FILE_SCOPE_P (containing_scope))
17290     {
17291       /* If T uses a local type keep it local as well, to avoid references
17292          to function-local DIEs from outside the function.  */
17293       if (current_function_decl && uses_local_type (t))
17294         scope_die = context_die;
17295       else
17296         scope_die = comp_unit_die ();
17297     }
17298   else if (TYPE_P (containing_scope))
17299     {
17300       /* For types, we can just look up the appropriate DIE.  */
17301       if (debug_info_level > DINFO_LEVEL_TERSE)
17302         scope_die = get_context_die (containing_scope);
17303       else
17304         {
17305           scope_die = lookup_type_die_strip_naming_typedef (containing_scope);
17306           if (scope_die == NULL)
17307             scope_die = comp_unit_die ();
17308         }
17309     }
17310   else
17311     scope_die = context_die;
17312
17313   return scope_die;
17314 }
17315
17316 /* Returns nonzero if CONTEXT_DIE is internal to a function.  */
17317
17318 static inline int
17319 local_scope_p (dw_die_ref context_die)
17320 {
17321   for (; context_die; context_die = context_die->die_parent)
17322     if (context_die->die_tag == DW_TAG_inlined_subroutine
17323         || context_die->die_tag == DW_TAG_subprogram)
17324       return 1;
17325
17326   return 0;
17327 }
17328
17329 /* Returns nonzero if CONTEXT_DIE is a class.  */
17330
17331 static inline int
17332 class_scope_p (dw_die_ref context_die)
17333 {
17334   return (context_die
17335           && (context_die->die_tag == DW_TAG_structure_type
17336               || context_die->die_tag == DW_TAG_class_type
17337               || context_die->die_tag == DW_TAG_interface_type
17338               || context_die->die_tag == DW_TAG_union_type));
17339 }
17340
17341 /* Returns nonzero if CONTEXT_DIE is a class or namespace, for deciding
17342    whether or not to treat a DIE in this context as a declaration.  */
17343
17344 static inline int
17345 class_or_namespace_scope_p (dw_die_ref context_die)
17346 {
17347   return (class_scope_p (context_die)
17348           || (context_die && context_die->die_tag == DW_TAG_namespace));
17349 }
17350
17351 /* Many forms of DIEs require a "type description" attribute.  This
17352    routine locates the proper "type descriptor" die for the type given
17353    by 'type' plus any additional qualifiers given by 'cv_quals', and
17354    adds a DW_AT_type attribute below the given die.  */
17355
17356 static void
17357 add_type_attribute (dw_die_ref object_die, tree type, int cv_quals,
17358                     dw_die_ref context_die)
17359 {
17360   enum tree_code code  = TREE_CODE (type);
17361   dw_die_ref type_die  = NULL;
17362
17363   /* ??? If this type is an unnamed subrange type of an integral, floating-point
17364      or fixed-point type, use the inner type.  This is because we have no
17365      support for unnamed types in base_type_die.  This can happen if this is
17366      an Ada subrange type.  Correct solution is emit a subrange type die.  */
17367   if ((code == INTEGER_TYPE || code == REAL_TYPE || code == FIXED_POINT_TYPE)
17368       && TREE_TYPE (type) != 0 && TYPE_NAME (type) == 0)
17369     type = TREE_TYPE (type), code = TREE_CODE (type);
17370
17371   if (code == ERROR_MARK
17372       /* Handle a special case.  For functions whose return type is void, we
17373          generate *no* type attribute.  (Note that no object may have type
17374          `void', so this only applies to function return types).  */
17375       || code == VOID_TYPE)
17376     return;
17377
17378   type_die = modified_type_die (type,
17379                                 cv_quals | TYPE_QUALS_NO_ADDR_SPACE (type),
17380                                 context_die);
17381
17382   if (type_die != NULL)
17383     add_AT_die_ref (object_die, DW_AT_type, type_die);
17384 }
17385
17386 /* Given an object die, add the calling convention attribute for the
17387    function call type.  */
17388 static void
17389 add_calling_convention_attribute (dw_die_ref subr_die, tree decl)
17390 {
17391   enum dwarf_calling_convention value = DW_CC_normal;
17392
17393   value = ((enum dwarf_calling_convention)
17394            targetm.dwarf_calling_convention (TREE_TYPE (decl)));
17395
17396   if (is_fortran ()
17397       && !strcmp (IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)), "MAIN__"))
17398     {
17399       /* DWARF 2 doesn't provide a way to identify a program's source-level
17400         entry point.  DW_AT_calling_convention attributes are only meant
17401         to describe functions' calling conventions.  However, lacking a
17402         better way to signal the Fortran main program, we used this for 
17403         a long time, following existing custom.  Now, DWARF 4 has 
17404         DW_AT_main_subprogram, which we add below, but some tools still
17405         rely on the old way, which we thus keep.  */
17406       value = DW_CC_program;
17407
17408       if (dwarf_version >= 4 || !dwarf_strict)
17409         add_AT_flag (subr_die, DW_AT_main_subprogram, 1);
17410     }
17411
17412   /* Only add the attribute if the backend requests it, and
17413      is not DW_CC_normal.  */
17414   if (value && (value != DW_CC_normal))
17415     add_AT_unsigned (subr_die, DW_AT_calling_convention, value);
17416 }
17417
17418 /* Given a tree pointer to a struct, class, union, or enum type node, return
17419    a pointer to the (string) tag name for the given type, or zero if the type
17420    was declared without a tag.  */
17421
17422 static const char *
17423 type_tag (const_tree type)
17424 {
17425   const char *name = 0;
17426
17427   if (TYPE_NAME (type) != 0)
17428     {
17429       tree t = 0;
17430
17431       /* Find the IDENTIFIER_NODE for the type name.  */
17432       if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE
17433           && !TYPE_NAMELESS (type))
17434         t = TYPE_NAME (type);
17435
17436       /* The g++ front end makes the TYPE_NAME of *each* tagged type point to
17437          a TYPE_DECL node, regardless of whether or not a `typedef' was
17438          involved.  */
17439       else if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
17440                && ! DECL_IGNORED_P (TYPE_NAME (type)))
17441         {
17442           /* We want to be extra verbose.  Don't call dwarf_name if
17443              DECL_NAME isn't set.  The default hook for decl_printable_name
17444              doesn't like that, and in this context it's correct to return
17445              0, instead of "<anonymous>" or the like.  */
17446           if (DECL_NAME (TYPE_NAME (type))
17447               && !DECL_NAMELESS (TYPE_NAME (type)))
17448             name = lang_hooks.dwarf_name (TYPE_NAME (type), 2);
17449         }
17450
17451       /* Now get the name as a string, or invent one.  */
17452       if (!name && t != 0)
17453         name = IDENTIFIER_POINTER (t);
17454     }
17455
17456   return (name == 0 || *name == '\0') ? 0 : name;
17457 }
17458
17459 /* Return the type associated with a data member, make a special check
17460    for bit field types.  */
17461
17462 static inline tree
17463 member_declared_type (const_tree member)
17464 {
17465   return (DECL_BIT_FIELD_TYPE (member)
17466           ? DECL_BIT_FIELD_TYPE (member) : TREE_TYPE (member));
17467 }
17468
17469 /* Get the decl's label, as described by its RTL. This may be different
17470    from the DECL_NAME name used in the source file.  */
17471
17472 #if 0
17473 static const char *
17474 decl_start_label (tree decl)
17475 {
17476   rtx x;
17477   const char *fnname;
17478
17479   x = DECL_RTL (decl);
17480   gcc_assert (MEM_P (x));
17481
17482   x = XEXP (x, 0);
17483   gcc_assert (GET_CODE (x) == SYMBOL_REF);
17484
17485   fnname = XSTR (x, 0);
17486   return fnname;
17487 }
17488 #endif
17489 \f
17490 /* These routines generate the internal representation of the DIE's for
17491    the compilation unit.  Debugging information is collected by walking
17492    the declaration trees passed in from dwarf2out_decl().  */
17493
17494 static void
17495 gen_array_type_die (tree type, dw_die_ref context_die)
17496 {
17497   dw_die_ref scope_die = scope_die_for (type, context_die);
17498   dw_die_ref array_die;
17499
17500   /* GNU compilers represent multidimensional array types as sequences of one
17501      dimensional array types whose element types are themselves array types.
17502      We sometimes squish that down to a single array_type DIE with multiple
17503      subscripts in the Dwarf debugging info.  The draft Dwarf specification
17504      say that we are allowed to do this kind of compression in C, because
17505      there is no difference between an array of arrays and a multidimensional
17506      array.  We don't do this for Ada to remain as close as possible to the
17507      actual representation, which is especially important against the language
17508      flexibilty wrt arrays of variable size.  */
17509
17510   bool collapse_nested_arrays = !is_ada ();
17511   tree element_type;
17512
17513   /* Emit DW_TAG_string_type for Fortran character types (with kind 1 only, as
17514      DW_TAG_string_type doesn't have DW_AT_type attribute).  */
17515   if (TYPE_STRING_FLAG (type)
17516       && TREE_CODE (type) == ARRAY_TYPE
17517       && is_fortran ()
17518       && TYPE_MODE (TREE_TYPE (type)) == TYPE_MODE (char_type_node))
17519     {
17520       HOST_WIDE_INT size;
17521
17522       array_die = new_die (DW_TAG_string_type, scope_die, type);
17523       add_name_attribute (array_die, type_tag (type));
17524       equate_type_number_to_die (type, array_die);
17525       size = int_size_in_bytes (type);
17526       if (size >= 0)
17527         add_AT_unsigned (array_die, DW_AT_byte_size, size);
17528       else if (TYPE_DOMAIN (type) != NULL_TREE
17529                && TYPE_MAX_VALUE (TYPE_DOMAIN (type)) != NULL_TREE
17530                && DECL_P (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))
17531         {
17532           tree szdecl = TYPE_MAX_VALUE (TYPE_DOMAIN (type));
17533           dw_loc_list_ref loc = loc_list_from_tree (szdecl, 2, NULL);
17534
17535           size = int_size_in_bytes (TREE_TYPE (szdecl));
17536           if (loc && size > 0)
17537             {
17538               add_AT_location_description (array_die, DW_AT_string_length, loc);
17539               if (size != DWARF2_ADDR_SIZE)
17540                 add_AT_unsigned (array_die, DW_AT_byte_size, size);
17541             }
17542         }
17543       return;
17544     }
17545
17546   array_die = new_die (DW_TAG_array_type, scope_die, type);
17547   add_name_attribute (array_die, type_tag (type));
17548   equate_type_number_to_die (type, array_die);
17549
17550   if (TREE_CODE (type) == VECTOR_TYPE)
17551     add_AT_flag (array_die, DW_AT_GNU_vector, 1);
17552
17553   /* For Fortran multidimensional arrays use DW_ORD_col_major ordering.  */
17554   if (is_fortran ()
17555       && TREE_CODE (type) == ARRAY_TYPE
17556       && TREE_CODE (TREE_TYPE (type)) == ARRAY_TYPE
17557       && !TYPE_STRING_FLAG (TREE_TYPE (type)))
17558     add_AT_unsigned (array_die, DW_AT_ordering, DW_ORD_col_major);
17559
17560 #if 0
17561   /* We default the array ordering.  SDB will probably do
17562      the right things even if DW_AT_ordering is not present.  It's not even
17563      an issue until we start to get into multidimensional arrays anyway.  If
17564      SDB is ever caught doing the Wrong Thing for multi-dimensional arrays,
17565      then we'll have to put the DW_AT_ordering attribute back in.  (But if
17566      and when we find out that we need to put these in, we will only do so
17567      for multidimensional arrays.  */
17568   add_AT_unsigned (array_die, DW_AT_ordering, DW_ORD_row_major);
17569 #endif
17570
17571   if (TREE_CODE (type) == VECTOR_TYPE)
17572     {
17573       /* For VECTOR_TYPEs we use an array die with appropriate bounds.  */
17574       dw_die_ref subrange_die = new_die (DW_TAG_subrange_type, array_die, NULL);
17575       add_bound_info (subrange_die, DW_AT_lower_bound, size_zero_node, NULL);
17576       add_bound_info (subrange_die, DW_AT_upper_bound,
17577                       size_int (TYPE_VECTOR_SUBPARTS (type) - 1), NULL);
17578     }
17579   else
17580     add_subscript_info (array_die, type, collapse_nested_arrays);
17581
17582   /* Add representation of the type of the elements of this array type and
17583      emit the corresponding DIE if we haven't done it already.  */
17584   element_type = TREE_TYPE (type);
17585   if (collapse_nested_arrays)
17586     while (TREE_CODE (element_type) == ARRAY_TYPE)
17587       {
17588         if (TYPE_STRING_FLAG (element_type) && is_fortran ())
17589           break;
17590         element_type = TREE_TYPE (element_type);
17591       }
17592
17593   add_type_attribute (array_die, element_type, TYPE_UNQUALIFIED, context_die);
17594
17595   add_gnat_descriptive_type_attribute (array_die, type, context_die);
17596   if (TYPE_ARTIFICIAL (type))
17597     add_AT_flag (array_die, DW_AT_artificial, 1);
17598
17599   if (get_AT (array_die, DW_AT_name))
17600     add_pubtype (type, array_die);
17601 }
17602
17603 /* This routine generates DIE for array with hidden descriptor, details
17604    are filled into *info by a langhook.  */
17605
17606 static void
17607 gen_descr_array_type_die (tree type, struct array_descr_info *info,
17608                           dw_die_ref context_die)
17609 {
17610   const dw_die_ref scope_die = scope_die_for (type, context_die);
17611   const dw_die_ref array_die = new_die (DW_TAG_array_type, scope_die, type);
17612   const struct loc_descr_context context = { type, info->base_decl };
17613   int dim;
17614
17615   add_name_attribute (array_die, type_tag (type));
17616   equate_type_number_to_die (type, array_die);
17617
17618   if (info->ndimensions > 1)
17619     switch (info->ordering)
17620       {
17621       case array_descr_ordering_row_major:
17622         add_AT_unsigned (array_die, DW_AT_ordering, DW_ORD_row_major);
17623         break;
17624       case array_descr_ordering_column_major:
17625         add_AT_unsigned (array_die, DW_AT_ordering, DW_ORD_col_major);
17626         break;
17627       default:
17628         break;
17629       }
17630
17631   if (dwarf_version >= 3 || !dwarf_strict)
17632     {
17633       if (info->data_location)
17634         add_scalar_info (array_die, DW_AT_data_location, info->data_location,
17635                          dw_scalar_form_exprloc, &context);
17636       if (info->associated)
17637         add_scalar_info (array_die, DW_AT_associated, info->associated,
17638                          dw_scalar_form_constant
17639                          | dw_scalar_form_exprloc
17640                          | dw_scalar_form_reference, &context);
17641       if (info->allocated)
17642         add_scalar_info (array_die, DW_AT_allocated, info->allocated,
17643                          dw_scalar_form_constant
17644                          | dw_scalar_form_exprloc
17645                          | dw_scalar_form_reference, &context);
17646     }
17647
17648   add_gnat_descriptive_type_attribute (array_die, type, context_die);
17649
17650   for (dim = 0; dim < info->ndimensions; dim++)
17651     {
17652       dw_die_ref subrange_die
17653         = new_die (DW_TAG_subrange_type, array_die, NULL);
17654
17655       if (info->dimen[dim].bounds_type)
17656         add_type_attribute (subrange_die,
17657                             info->dimen[dim].bounds_type, 0,
17658                             context_die);
17659       if (info->dimen[dim].lower_bound)
17660         add_bound_info (subrange_die, DW_AT_lower_bound,
17661                         info->dimen[dim].lower_bound, &context);
17662       if (info->dimen[dim].upper_bound)
17663         add_bound_info (subrange_die, DW_AT_upper_bound,
17664                         info->dimen[dim].upper_bound, &context);
17665       if ((dwarf_version >= 3 || !dwarf_strict) && info->dimen[dim].stride)
17666         add_scalar_info (subrange_die, DW_AT_byte_stride,
17667                          info->dimen[dim].stride,
17668                          dw_scalar_form_constant
17669                          | dw_scalar_form_exprloc
17670                          | dw_scalar_form_reference,
17671                          &context);
17672     }
17673
17674   gen_type_die (info->element_type, context_die);
17675   add_type_attribute (array_die, info->element_type, TYPE_UNQUALIFIED,
17676                       context_die);
17677
17678   if (get_AT (array_die, DW_AT_name))
17679     add_pubtype (type, array_die);
17680 }
17681
17682 #if 0
17683 static void
17684 gen_entry_point_die (tree decl, dw_die_ref context_die)
17685 {
17686   tree origin = decl_ultimate_origin (decl);
17687   dw_die_ref decl_die = new_die (DW_TAG_entry_point, context_die, decl);
17688
17689   if (origin != NULL)
17690     add_abstract_origin_attribute (decl_die, origin);
17691   else
17692     {
17693       add_name_and_src_coords_attributes (decl_die, decl);
17694       add_type_attribute (decl_die, TREE_TYPE (TREE_TYPE (decl)),
17695                           TYPE_UNQUALIFIED, context_die);
17696     }
17697
17698   if (DECL_ABSTRACT_P (decl))
17699     equate_decl_number_to_die (decl, decl_die);
17700   else
17701     add_AT_lbl_id (decl_die, DW_AT_low_pc, decl_start_label (decl));
17702 }
17703 #endif
17704
17705 /* Walk through the list of incomplete types again, trying once more to
17706    emit full debugging info for them.  */
17707
17708 static void
17709 retry_incomplete_types (void)
17710 {
17711   int i;
17712
17713   for (i = vec_safe_length (incomplete_types) - 1; i >= 0; i--)
17714     if (should_emit_struct_debug ((*incomplete_types)[i], DINFO_USAGE_DIR_USE))
17715       gen_type_die ((*incomplete_types)[i], comp_unit_die ());
17716 }
17717
17718 /* Determine what tag to use for a record type.  */
17719
17720 static enum dwarf_tag
17721 record_type_tag (tree type)
17722 {
17723   if (! lang_hooks.types.classify_record)
17724     return DW_TAG_structure_type;
17725
17726   switch (lang_hooks.types.classify_record (type))
17727     {
17728     case RECORD_IS_STRUCT:
17729       return DW_TAG_structure_type;
17730
17731     case RECORD_IS_CLASS:
17732       return DW_TAG_class_type;
17733
17734     case RECORD_IS_INTERFACE:
17735       if (dwarf_version >= 3 || !dwarf_strict)
17736         return DW_TAG_interface_type;
17737       return DW_TAG_structure_type;
17738
17739     default:
17740       gcc_unreachable ();
17741     }
17742 }
17743
17744 /* Generate a DIE to represent an enumeration type.  Note that these DIEs
17745    include all of the information about the enumeration values also. Each
17746    enumerated type name/value is listed as a child of the enumerated type
17747    DIE.  */
17748
17749 static dw_die_ref
17750 gen_enumeration_type_die (tree type, dw_die_ref context_die)
17751 {
17752   dw_die_ref type_die = lookup_type_die (type);
17753
17754   if (type_die == NULL)
17755     {
17756       type_die = new_die (DW_TAG_enumeration_type,
17757                           scope_die_for (type, context_die), type);
17758       equate_type_number_to_die (type, type_die);
17759       add_name_attribute (type_die, type_tag (type));
17760       if (dwarf_version >= 4 || !dwarf_strict)
17761         {
17762           if (ENUM_IS_SCOPED (type))
17763             add_AT_flag (type_die, DW_AT_enum_class, 1);
17764           if (ENUM_IS_OPAQUE (type))
17765             add_AT_flag (type_die, DW_AT_declaration, 1);
17766         }
17767     }
17768   else if (! TYPE_SIZE (type))
17769     return type_die;
17770   else
17771     remove_AT (type_die, DW_AT_declaration);
17772
17773   /* Handle a GNU C/C++ extension, i.e. incomplete enum types.  If the
17774      given enum type is incomplete, do not generate the DW_AT_byte_size
17775      attribute or the DW_AT_element_list attribute.  */
17776   if (TYPE_SIZE (type))
17777     {
17778       tree link;
17779
17780       TREE_ASM_WRITTEN (type) = 1;
17781       add_byte_size_attribute (type_die, type);
17782       if (dwarf_version >= 3 || !dwarf_strict)
17783         {
17784           tree underlying = lang_hooks.types.enum_underlying_base_type (type);
17785           add_type_attribute (type_die, underlying, TYPE_UNQUALIFIED,
17786                               context_die);
17787         }
17788       if (TYPE_STUB_DECL (type) != NULL_TREE)
17789         {
17790           add_src_coords_attributes (type_die, TYPE_STUB_DECL (type));
17791           add_accessibility_attribute (type_die, TYPE_STUB_DECL (type));
17792         }
17793
17794       /* If the first reference to this type was as the return type of an
17795          inline function, then it may not have a parent.  Fix this now.  */
17796       if (type_die->die_parent == NULL)
17797         add_child_die (scope_die_for (type, context_die), type_die);
17798
17799       for (link = TYPE_VALUES (type);
17800            link != NULL; link = TREE_CHAIN (link))
17801         {
17802           dw_die_ref enum_die = new_die (DW_TAG_enumerator, type_die, link);
17803           tree value = TREE_VALUE (link);
17804
17805           add_name_attribute (enum_die,
17806                               IDENTIFIER_POINTER (TREE_PURPOSE (link)));
17807
17808           if (TREE_CODE (value) == CONST_DECL)
17809             value = DECL_INITIAL (value);
17810
17811           if (simple_type_size_in_bits (TREE_TYPE (value))
17812               <= HOST_BITS_PER_WIDE_INT || tree_fits_shwi_p (value))
17813             {
17814               /* For constant forms created by add_AT_unsigned DWARF
17815                  consumers (GDB, elfutils, etc.) always zero extend
17816                  the value.  Only when the actual value is negative
17817                  do we need to use add_AT_int to generate a constant
17818                  form that can represent negative values.  */
17819               HOST_WIDE_INT val = TREE_INT_CST_LOW (value);
17820               if (TYPE_UNSIGNED (TREE_TYPE (value)) || val >= 0)
17821                 add_AT_unsigned (enum_die, DW_AT_const_value,
17822                                  (unsigned HOST_WIDE_INT) val);
17823               else
17824                 add_AT_int (enum_die, DW_AT_const_value, val);
17825             }
17826           else
17827             /* Enumeration constants may be wider than HOST_WIDE_INT.  Handle
17828                that here.  TODO: This should be re-worked to use correct
17829                signed/unsigned double tags for all cases.  */
17830             add_AT_wide (enum_die, DW_AT_const_value, value);
17831         }
17832
17833       add_gnat_descriptive_type_attribute (type_die, type, context_die);
17834       if (TYPE_ARTIFICIAL (type))
17835         add_AT_flag (type_die, DW_AT_artificial, 1);
17836     }
17837   else
17838     add_AT_flag (type_die, DW_AT_declaration, 1);
17839
17840   add_pubtype (type, type_die);
17841
17842   return type_die;
17843 }
17844
17845 /* Generate a DIE to represent either a real live formal parameter decl or to
17846    represent just the type of some formal parameter position in some function
17847    type.
17848
17849    Note that this routine is a bit unusual because its argument may be a
17850    ..._DECL node (i.e. either a PARM_DECL or perhaps a VAR_DECL which
17851    represents an inlining of some PARM_DECL) or else some sort of a ..._TYPE
17852    node.  If it's the former then this function is being called to output a
17853    DIE to represent a formal parameter object (or some inlining thereof).  If
17854    it's the latter, then this function is only being called to output a
17855    DW_TAG_formal_parameter DIE to stand as a placeholder for some formal
17856    argument type of some subprogram type.
17857    If EMIT_NAME_P is true, name and source coordinate attributes
17858    are emitted.  */
17859
17860 static dw_die_ref
17861 gen_formal_parameter_die (tree node, tree origin, bool emit_name_p,
17862                           dw_die_ref context_die)
17863 {
17864   tree node_or_origin = node ? node : origin;
17865   tree ultimate_origin;
17866   dw_die_ref parm_die
17867     = new_die (DW_TAG_formal_parameter, context_die, node);
17868
17869   switch (TREE_CODE_CLASS (TREE_CODE (node_or_origin)))
17870     {
17871     case tcc_declaration:
17872       ultimate_origin = decl_ultimate_origin (node_or_origin);
17873       if (node || ultimate_origin)
17874         origin = ultimate_origin;
17875       if (origin != NULL)
17876         add_abstract_origin_attribute (parm_die, origin);
17877       else if (emit_name_p)
17878         add_name_and_src_coords_attributes (parm_die, node);
17879       if (origin == NULL
17880           || (! DECL_ABSTRACT_P (node_or_origin)
17881               && variably_modified_type_p (TREE_TYPE (node_or_origin),
17882                                            decl_function_context
17883                                                             (node_or_origin))))
17884         {
17885           tree type = TREE_TYPE (node_or_origin);
17886           if (decl_by_reference_p (node_or_origin))
17887             add_type_attribute (parm_die, TREE_TYPE (type),
17888                                 TYPE_UNQUALIFIED, context_die);
17889           else
17890             add_type_attribute (parm_die, type,
17891                                 decl_quals (node_or_origin),
17892                                 context_die);
17893         }
17894       if (origin == NULL && DECL_ARTIFICIAL (node))
17895         add_AT_flag (parm_die, DW_AT_artificial, 1);
17896
17897       if (node && node != origin)
17898         equate_decl_number_to_die (node, parm_die);
17899       if (! DECL_ABSTRACT_P (node_or_origin))
17900         add_location_or_const_value_attribute (parm_die, node_or_origin,
17901                                                node == NULL, DW_AT_location);
17902
17903       break;
17904
17905     case tcc_type:
17906       /* We were called with some kind of a ..._TYPE node.  */
17907       add_type_attribute (parm_die, node_or_origin, TYPE_UNQUALIFIED,
17908                           context_die);
17909       break;
17910
17911     default:
17912       gcc_unreachable ();
17913     }
17914
17915   return parm_die;
17916 }
17917
17918 /* Generate and return a DW_TAG_GNU_formal_parameter_pack. Also generate
17919    children DW_TAG_formal_parameter DIEs representing the arguments of the
17920    parameter pack.
17921
17922    PARM_PACK must be a function parameter pack.
17923    PACK_ARG is the first argument of the parameter pack. Its TREE_CHAIN
17924    must point to the subsequent arguments of the function PACK_ARG belongs to.
17925    SUBR_DIE is the DIE of the function PACK_ARG belongs to.
17926    If NEXT_ARG is non NULL, *NEXT_ARG is set to the function argument
17927    following the last one for which a DIE was generated.  */
17928
17929 static dw_die_ref
17930 gen_formal_parameter_pack_die  (tree parm_pack,
17931                                 tree pack_arg,
17932                                 dw_die_ref subr_die,
17933                                 tree *next_arg)
17934 {
17935   tree arg;
17936   dw_die_ref parm_pack_die;
17937
17938   gcc_assert (parm_pack
17939               && lang_hooks.function_parameter_pack_p (parm_pack)
17940               && subr_die);
17941
17942   parm_pack_die = new_die (DW_TAG_GNU_formal_parameter_pack, subr_die, parm_pack);
17943   add_src_coords_attributes (parm_pack_die, parm_pack);
17944
17945   for (arg = pack_arg; arg; arg = DECL_CHAIN (arg))
17946     {
17947       if (! lang_hooks.decls.function_parm_expanded_from_pack_p (arg,
17948                                                                  parm_pack))
17949         break;
17950       gen_formal_parameter_die (arg, NULL,
17951                                 false /* Don't emit name attribute.  */,
17952                                 parm_pack_die);
17953     }
17954   if (next_arg)
17955     *next_arg = arg;
17956   return parm_pack_die;
17957 }
17958
17959 /* Generate a special type of DIE used as a stand-in for a trailing ellipsis
17960    at the end of an (ANSI prototyped) formal parameters list.  */
17961
17962 static void
17963 gen_unspecified_parameters_die (tree decl_or_type, dw_die_ref context_die)
17964 {
17965   new_die (DW_TAG_unspecified_parameters, context_die, decl_or_type);
17966 }
17967
17968 /* Generate a list of nameless DW_TAG_formal_parameter DIEs (and perhaps a
17969    DW_TAG_unspecified_parameters DIE) to represent the types of the formal
17970    parameters as specified in some function type specification (except for
17971    those which appear as part of a function *definition*).  */
17972
17973 static void
17974 gen_formal_types_die (tree function_or_method_type, dw_die_ref context_die)
17975 {
17976   tree link;
17977   tree formal_type = NULL;
17978   tree first_parm_type;
17979   tree arg;
17980
17981   if (TREE_CODE (function_or_method_type) == FUNCTION_DECL)
17982     {
17983       arg = DECL_ARGUMENTS (function_or_method_type);
17984       function_or_method_type = TREE_TYPE (function_or_method_type);
17985     }
17986   else
17987     arg = NULL_TREE;
17988
17989   first_parm_type = TYPE_ARG_TYPES (function_or_method_type);
17990
17991   /* Make our first pass over the list of formal parameter types and output a
17992      DW_TAG_formal_parameter DIE for each one.  */
17993   for (link = first_parm_type; link; )
17994     {
17995       dw_die_ref parm_die;
17996
17997       formal_type = TREE_VALUE (link);
17998       if (formal_type == void_type_node)
17999         break;
18000
18001       /* Output a (nameless) DIE to represent the formal parameter itself.  */
18002       if (!POINTER_BOUNDS_TYPE_P (formal_type))
18003         {
18004           parm_die = gen_formal_parameter_die (formal_type, NULL,
18005                                                true /* Emit name attribute.  */,
18006                                                context_die);
18007           if (TREE_CODE (function_or_method_type) == METHOD_TYPE
18008               && link == first_parm_type)
18009             {
18010               add_AT_flag (parm_die, DW_AT_artificial, 1);
18011               if (dwarf_version >= 3 || !dwarf_strict)
18012                 add_AT_die_ref (context_die, DW_AT_object_pointer, parm_die);
18013             }
18014           else if (arg && DECL_ARTIFICIAL (arg))
18015             add_AT_flag (parm_die, DW_AT_artificial, 1);
18016         }
18017
18018       link = TREE_CHAIN (link);
18019       if (arg)
18020         arg = DECL_CHAIN (arg);
18021     }
18022
18023   /* If this function type has an ellipsis, add a
18024      DW_TAG_unspecified_parameters DIE to the end of the parameter list.  */
18025   if (formal_type != void_type_node)
18026     gen_unspecified_parameters_die (function_or_method_type, context_die);
18027
18028   /* Make our second (and final) pass over the list of formal parameter types
18029      and output DIEs to represent those types (as necessary).  */
18030   for (link = TYPE_ARG_TYPES (function_or_method_type);
18031        link && TREE_VALUE (link);
18032        link = TREE_CHAIN (link))
18033     gen_type_die (TREE_VALUE (link), context_die);
18034 }
18035
18036 /* We want to generate the DIE for TYPE so that we can generate the
18037    die for MEMBER, which has been defined; we will need to refer back
18038    to the member declaration nested within TYPE.  If we're trying to
18039    generate minimal debug info for TYPE, processing TYPE won't do the
18040    trick; we need to attach the member declaration by hand.  */
18041
18042 static void
18043 gen_type_die_for_member (tree type, tree member, dw_die_ref context_die)
18044 {
18045   gen_type_die (type, context_die);
18046
18047   /* If we're trying to avoid duplicate debug info, we may not have
18048      emitted the member decl for this function.  Emit it now.  */
18049   if (TYPE_STUB_DECL (type)
18050       && TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type))
18051       && ! lookup_decl_die (member))
18052     {
18053       dw_die_ref type_die;
18054       gcc_assert (!decl_ultimate_origin (member));
18055
18056       push_decl_scope (type);
18057       type_die = lookup_type_die_strip_naming_typedef (type);
18058       if (TREE_CODE (member) == FUNCTION_DECL)
18059         gen_subprogram_die (member, type_die);
18060       else if (TREE_CODE (member) == FIELD_DECL)
18061         {
18062           /* Ignore the nameless fields that are used to skip bits but handle
18063              C++ anonymous unions and structs.  */
18064           if (DECL_NAME (member) != NULL_TREE
18065               || TREE_CODE (TREE_TYPE (member)) == UNION_TYPE
18066               || TREE_CODE (TREE_TYPE (member)) == RECORD_TYPE)
18067             {
18068               gen_type_die (member_declared_type (member), type_die);
18069               gen_field_die (member, type_die);
18070             }
18071         }
18072       else
18073         gen_variable_die (member, NULL_TREE, type_die);
18074
18075       pop_decl_scope ();
18076     }
18077 }
18078 \f
18079 /* Forward declare these functions, because they are mutually recursive
18080   with their set_block_* pairing functions.  */
18081 static void set_decl_origin_self (tree);
18082 static void set_decl_abstract_flags (tree, vec<tree> &);
18083
18084 /* Given a pointer to some BLOCK node, if the BLOCK_ABSTRACT_ORIGIN for the
18085    given BLOCK node is NULL, set the BLOCK_ABSTRACT_ORIGIN for the node so
18086    that it points to the node itself, thus indicating that the node is its
18087    own (abstract) origin.  Additionally, if the BLOCK_ABSTRACT_ORIGIN for
18088    the given node is NULL, recursively descend the decl/block tree which
18089    it is the root of, and for each other ..._DECL or BLOCK node contained
18090    therein whose DECL_ABSTRACT_ORIGINs or BLOCK_ABSTRACT_ORIGINs are also
18091    still NULL, set *their* DECL_ABSTRACT_ORIGIN or BLOCK_ABSTRACT_ORIGIN
18092    values to point to themselves.  */
18093
18094 static void
18095 set_block_origin_self (tree stmt)
18096 {
18097   if (BLOCK_ABSTRACT_ORIGIN (stmt) == NULL_TREE)
18098     {
18099       BLOCK_ABSTRACT_ORIGIN (stmt) = stmt;
18100
18101       {
18102         tree local_decl;
18103
18104         for (local_decl = BLOCK_VARS (stmt);
18105              local_decl != NULL_TREE;
18106              local_decl = DECL_CHAIN (local_decl))
18107           /* Do not recurse on nested functions since the inlining status
18108              of parent and child can be different as per the DWARF spec.  */
18109           if (TREE_CODE (local_decl) != FUNCTION_DECL
18110               && !DECL_EXTERNAL (local_decl))
18111             set_decl_origin_self (local_decl);
18112       }
18113
18114       {
18115         tree subblock;
18116
18117         for (subblock = BLOCK_SUBBLOCKS (stmt);
18118              subblock != NULL_TREE;
18119              subblock = BLOCK_CHAIN (subblock))
18120           set_block_origin_self (subblock);     /* Recurse.  */
18121       }
18122     }
18123 }
18124
18125 /* Given a pointer to some ..._DECL node, if the DECL_ABSTRACT_ORIGIN for
18126    the given ..._DECL node is NULL, set the DECL_ABSTRACT_ORIGIN for the
18127    node to so that it points to the node itself, thus indicating that the
18128    node represents its own (abstract) origin.  Additionally, if the
18129    DECL_ABSTRACT_ORIGIN for the given node is NULL, recursively descend
18130    the decl/block tree of which the given node is the root of, and for
18131    each other ..._DECL or BLOCK node contained therein whose
18132    DECL_ABSTRACT_ORIGINs or BLOCK_ABSTRACT_ORIGINs are also still NULL,
18133    set *their* DECL_ABSTRACT_ORIGIN or BLOCK_ABSTRACT_ORIGIN values to
18134    point to themselves.  */
18135
18136 static void
18137 set_decl_origin_self (tree decl)
18138 {
18139   if (DECL_ABSTRACT_ORIGIN (decl) == NULL_TREE)
18140     {
18141       DECL_ABSTRACT_ORIGIN (decl) = decl;
18142       if (TREE_CODE (decl) == FUNCTION_DECL)
18143         {
18144           tree arg;
18145
18146           for (arg = DECL_ARGUMENTS (decl); arg; arg = DECL_CHAIN (arg))
18147             DECL_ABSTRACT_ORIGIN (arg) = arg;
18148           if (DECL_INITIAL (decl) != NULL_TREE
18149               && DECL_INITIAL (decl) != error_mark_node)
18150             set_block_origin_self (DECL_INITIAL (decl));
18151         }
18152     }
18153 }
18154 \f
18155 /* Given a pointer to some BLOCK node, set the BLOCK_ABSTRACT flag to 1
18156    and if it wasn't 1 before, push it to abstract_vec vector.
18157    For all local decls and all local sub-blocks (recursively) do it
18158    too.  */
18159
18160 static void
18161 set_block_abstract_flags (tree stmt, vec<tree> &abstract_vec)
18162 {
18163   tree local_decl;
18164   tree subblock;
18165   unsigned int i;
18166
18167   if (!BLOCK_ABSTRACT (stmt))
18168     {
18169       abstract_vec.safe_push (stmt);
18170       BLOCK_ABSTRACT (stmt) = 1;
18171     }
18172
18173   for (local_decl = BLOCK_VARS (stmt);
18174        local_decl != NULL_TREE;
18175        local_decl = DECL_CHAIN (local_decl))
18176     if (! DECL_EXTERNAL (local_decl))
18177       set_decl_abstract_flags (local_decl, abstract_vec);
18178
18179   for (i = 0; i < BLOCK_NUM_NONLOCALIZED_VARS (stmt); i++)
18180     {
18181       local_decl = BLOCK_NONLOCALIZED_VAR (stmt, i);
18182       if ((TREE_CODE (local_decl) == VAR_DECL && !TREE_STATIC (local_decl))
18183           || TREE_CODE (local_decl) == PARM_DECL)
18184         set_decl_abstract_flags (local_decl, abstract_vec);
18185     }
18186
18187   for (subblock = BLOCK_SUBBLOCKS (stmt);
18188        subblock != NULL_TREE;
18189        subblock = BLOCK_CHAIN (subblock))
18190     set_block_abstract_flags (subblock, abstract_vec);
18191 }
18192
18193 /* Given a pointer to some ..._DECL node, set DECL_ABSTRACT_P flag on it
18194    to 1 and if it wasn't 1 before, push to abstract_vec vector.
18195    In the case where the decl is a FUNCTION_DECL also set the abstract
18196    flags for all of the parameters, local vars, local
18197    blocks and sub-blocks (recursively).  */
18198
18199 static void
18200 set_decl_abstract_flags (tree decl, vec<tree> &abstract_vec)
18201 {
18202   if (!DECL_ABSTRACT_P (decl))
18203     {
18204       abstract_vec.safe_push (decl);
18205       DECL_ABSTRACT_P (decl) = 1;
18206     }
18207
18208   if (TREE_CODE (decl) == FUNCTION_DECL)
18209     {
18210       tree arg;
18211
18212       for (arg = DECL_ARGUMENTS (decl); arg; arg = DECL_CHAIN (arg))
18213         if (!DECL_ABSTRACT_P (arg))
18214           {
18215             abstract_vec.safe_push (arg);
18216             DECL_ABSTRACT_P (arg) = 1;
18217           }
18218       if (DECL_INITIAL (decl) != NULL_TREE
18219           && DECL_INITIAL (decl) != error_mark_node)
18220         set_block_abstract_flags (DECL_INITIAL (decl), abstract_vec);
18221     }
18222 }
18223
18224 /* Generate the DWARF2 info for the "abstract" instance of a function which we
18225    may later generate inlined and/or out-of-line instances of.  */
18226
18227 static void
18228 dwarf2out_abstract_function (tree decl)
18229 {
18230   dw_die_ref old_die;
18231   tree save_fn;
18232   tree context;
18233   hash_table<decl_loc_hasher> *old_decl_loc_table;
18234   hash_table<dw_loc_list_hasher> *old_cached_dw_loc_list_table;
18235   int old_call_site_count, old_tail_call_site_count;
18236   struct call_arg_loc_node *old_call_arg_locations;
18237
18238   /* Make sure we have the actual abstract inline, not a clone.  */
18239   decl = DECL_ORIGIN (decl);
18240
18241   old_die = lookup_decl_die (decl);
18242   if (old_die && get_AT (old_die, DW_AT_inline))
18243     /* We've already generated the abstract instance.  */
18244     return;
18245
18246   /* We can be called while recursively when seeing block defining inlined subroutine
18247      DIE.  Be sure to not clobber the outer location table nor use it or we would
18248      get locations in abstract instantces.  */
18249   old_decl_loc_table = decl_loc_table;
18250   decl_loc_table = NULL;
18251   old_cached_dw_loc_list_table = cached_dw_loc_list_table;
18252   cached_dw_loc_list_table = NULL;
18253   old_call_arg_locations = call_arg_locations;
18254   call_arg_locations = NULL;
18255   old_call_site_count = call_site_count;
18256   call_site_count = -1;
18257   old_tail_call_site_count = tail_call_site_count;
18258   tail_call_site_count = -1;
18259
18260   /* Be sure we've emitted the in-class declaration DIE (if any) first, so
18261      we don't get confused by DECL_ABSTRACT_P.  */
18262   if (debug_info_level > DINFO_LEVEL_TERSE)
18263     {
18264       context = decl_class_context (decl);
18265       if (context)
18266         gen_type_die_for_member
18267           (context, decl, decl_function_context (decl) ? NULL : comp_unit_die ());
18268     }
18269
18270   /* Pretend we've just finished compiling this function.  */
18271   save_fn = current_function_decl;
18272   current_function_decl = decl;
18273
18274   auto_vec<tree, 64> abstract_vec;
18275   set_decl_abstract_flags (decl, abstract_vec);
18276   dwarf2out_decl (decl);
18277   unsigned int i;
18278   tree t;
18279   FOR_EACH_VEC_ELT (abstract_vec, i, t)
18280     if (TREE_CODE (t) == BLOCK)
18281       BLOCK_ABSTRACT (t) = 0;
18282     else
18283       DECL_ABSTRACT_P (t) = 0;
18284
18285   current_function_decl = save_fn;
18286   decl_loc_table = old_decl_loc_table;
18287   cached_dw_loc_list_table = old_cached_dw_loc_list_table;
18288   call_arg_locations = old_call_arg_locations;
18289   call_site_count = old_call_site_count;
18290   tail_call_site_count = old_tail_call_site_count;
18291 }
18292
18293 /* Helper function of premark_used_types() which gets called through
18294    htab_traverse.
18295
18296    Marks the DIE of a given type in *SLOT as perennial, so it never gets
18297    marked as unused by prune_unused_types.  */
18298
18299 bool
18300 premark_used_types_helper (tree const &type, void *)
18301 {
18302   dw_die_ref die;
18303
18304   die = lookup_type_die (type);
18305   if (die != NULL)
18306     die->die_perennial_p = 1;
18307   return true;
18308 }
18309
18310 /* Helper function of premark_types_used_by_global_vars which gets called
18311    through htab_traverse.
18312
18313    Marks the DIE of a given type in *SLOT as perennial, so it never gets
18314    marked as unused by prune_unused_types. The DIE of the type is marked
18315    only if the global variable using the type will actually be emitted.  */
18316
18317 int
18318 premark_types_used_by_global_vars_helper (types_used_by_vars_entry **slot,
18319                                           void *)
18320 {
18321   struct types_used_by_vars_entry *entry;
18322   dw_die_ref die;
18323
18324   entry = (struct types_used_by_vars_entry *) *slot;
18325   gcc_assert (entry->type != NULL
18326               && entry->var_decl != NULL);
18327   die = lookup_type_die (entry->type);
18328   if (die)
18329     {
18330       /* Ask cgraph if the global variable really is to be emitted.
18331          If yes, then we'll keep the DIE of ENTRY->TYPE.  */
18332       varpool_node *node = varpool_node::get (entry->var_decl);
18333       if (node && node->definition)
18334         {
18335           die->die_perennial_p = 1;
18336           /* Keep the parent DIEs as well.  */
18337           while ((die = die->die_parent) && die->die_perennial_p == 0)
18338             die->die_perennial_p = 1;
18339         }
18340     }
18341   return 1;
18342 }
18343
18344 /* Mark all members of used_types_hash as perennial.  */
18345
18346 static void
18347 premark_used_types (struct function *fun)
18348 {
18349   if (fun && fun->used_types_hash)
18350     fun->used_types_hash->traverse<void *, premark_used_types_helper> (NULL);
18351 }
18352
18353 /* Mark all members of types_used_by_vars_entry as perennial.  */
18354
18355 static void
18356 premark_types_used_by_global_vars (void)
18357 {
18358   if (types_used_by_vars_hash)
18359     types_used_by_vars_hash
18360       ->traverse<void *, premark_types_used_by_global_vars_helper> (NULL);
18361 }
18362
18363 /* Generate a DW_TAG_GNU_call_site DIE in function DECL under SUBR_DIE
18364    for CA_LOC call arg loc node.  */
18365
18366 static dw_die_ref
18367 gen_call_site_die (tree decl, dw_die_ref subr_die,
18368                    struct call_arg_loc_node *ca_loc)
18369 {
18370   dw_die_ref stmt_die = NULL, die;
18371   tree block = ca_loc->block;
18372
18373   while (block
18374          && block != DECL_INITIAL (decl)
18375          && TREE_CODE (block) == BLOCK)
18376     {
18377       if (block_map.length () > BLOCK_NUMBER (block))
18378         stmt_die = block_map[BLOCK_NUMBER (block)];
18379       if (stmt_die)
18380         break;
18381       block = BLOCK_SUPERCONTEXT (block);
18382     }
18383   if (stmt_die == NULL)
18384     stmt_die = subr_die;
18385   die = new_die (DW_TAG_GNU_call_site, stmt_die, NULL_TREE);
18386   add_AT_lbl_id (die, DW_AT_low_pc, ca_loc->label);
18387   if (ca_loc->tail_call_p)
18388     add_AT_flag (die, DW_AT_GNU_tail_call, 1);
18389   if (ca_loc->symbol_ref)
18390     {
18391       dw_die_ref tdie = lookup_decl_die (SYMBOL_REF_DECL (ca_loc->symbol_ref));
18392       if (tdie)
18393         add_AT_die_ref (die, DW_AT_abstract_origin, tdie);
18394       else
18395         add_AT_addr (die, DW_AT_abstract_origin, ca_loc->symbol_ref, false);
18396     }
18397   return die;
18398 }
18399
18400 /* Generate a DIE to represent a declared function (either file-scope or
18401    block-local).  */
18402
18403 static void
18404 gen_subprogram_die (tree decl, dw_die_ref context_die)
18405 {
18406   tree origin = decl_ultimate_origin (decl);
18407   dw_die_ref subr_die;
18408   tree outer_scope;
18409   dw_die_ref old_die = lookup_decl_die (decl);
18410   int declaration = (current_function_decl != decl
18411                      || class_or_namespace_scope_p (context_die));
18412
18413   premark_used_types (DECL_STRUCT_FUNCTION (decl));
18414
18415   /* It is possible to have both DECL_ABSTRACT_P and DECLARATION be true if we
18416      started to generate the abstract instance of an inline, decided to output
18417      its containing class, and proceeded to emit the declaration of the inline
18418      from the member list for the class.  If so, DECLARATION takes priority;
18419      we'll get back to the abstract instance when done with the class.  */
18420
18421   /* The class-scope declaration DIE must be the primary DIE.  */
18422   if (origin && declaration && class_or_namespace_scope_p (context_die))
18423     {
18424       origin = NULL;
18425       gcc_assert (!old_die);
18426     }
18427
18428   /* Now that the C++ front end lazily declares artificial member fns, we
18429      might need to retrofit the declaration into its class.  */
18430   if (!declaration && !origin && !old_die
18431       && DECL_CONTEXT (decl) && TYPE_P (DECL_CONTEXT (decl))
18432       && !class_or_namespace_scope_p (context_die)
18433       && debug_info_level > DINFO_LEVEL_TERSE)
18434     old_die = force_decl_die (decl);
18435
18436   if (origin != NULL)
18437     {
18438       gcc_assert (!declaration || local_scope_p (context_die));
18439
18440       /* Fixup die_parent for the abstract instance of a nested
18441          inline function.  */
18442       if (old_die && old_die->die_parent == NULL)
18443         add_child_die (context_die, old_die);
18444
18445       subr_die = new_die (DW_TAG_subprogram, context_die, decl);
18446       add_abstract_origin_attribute (subr_die, origin);
18447       /*  This is where the actual code for a cloned function is.
18448           Let's emit linkage name attribute for it.  This helps
18449           debuggers to e.g, set breakpoints into
18450           constructors/destructors when the user asks "break
18451           K::K".  */
18452       add_linkage_name (subr_die, decl);
18453     }
18454   else if (old_die)
18455     {
18456       expanded_location s = expand_location (DECL_SOURCE_LOCATION (decl));
18457       struct dwarf_file_data * file_index = lookup_filename (s.file);
18458
18459       if (!get_AT_flag (old_die, DW_AT_declaration)
18460           /* We can have a normal definition following an inline one in the
18461              case of redefinition of GNU C extern inlines.
18462              It seems reasonable to use AT_specification in this case.  */
18463           && !get_AT (old_die, DW_AT_inline))
18464         {
18465           /* Detect and ignore this case, where we are trying to output
18466              something we have already output.  */
18467           return;
18468         }
18469
18470       /* If the definition comes from the same place as the declaration,
18471          maybe use the old DIE.  We always want the DIE for this function
18472          that has the *_pc attributes to be under comp_unit_die so the
18473          debugger can find it.  We also need to do this for abstract
18474          instances of inlines, since the spec requires the out-of-line copy
18475          to have the same parent.  For local class methods, this doesn't
18476          apply; we just use the old DIE.  */
18477       if ((is_cu_die (old_die->die_parent) || context_die == NULL)
18478           && (DECL_ARTIFICIAL (decl)
18479               || (get_AT_file (old_die, DW_AT_decl_file) == file_index
18480                   && (get_AT_unsigned (old_die, DW_AT_decl_line)
18481                       == (unsigned) s.line))))
18482         {
18483           subr_die = old_die;
18484
18485           /* Clear out the declaration attribute and the formal parameters.
18486              Do not remove all children, because it is possible that this
18487              declaration die was forced using force_decl_die(). In such
18488              cases die that forced declaration die (e.g. TAG_imported_module)
18489              is one of the children that we do not want to remove.  */
18490           remove_AT (subr_die, DW_AT_declaration);
18491           remove_AT (subr_die, DW_AT_object_pointer);
18492           remove_child_TAG (subr_die, DW_TAG_formal_parameter);
18493         }
18494       else
18495         {
18496           subr_die = new_die (DW_TAG_subprogram, context_die, decl);
18497           add_AT_specification (subr_die, old_die);
18498           add_pubname (decl, subr_die);
18499           if (get_AT_file (old_die, DW_AT_decl_file) != file_index)
18500             add_AT_file (subr_die, DW_AT_decl_file, file_index);
18501           if (get_AT_unsigned (old_die, DW_AT_decl_line) != (unsigned) s.line)
18502             add_AT_unsigned (subr_die, DW_AT_decl_line, s.line);
18503
18504           /* If the prototype had an 'auto' or 'decltype(auto)' return type,
18505              emit the real type on the definition die.  */
18506           if (is_cxx() && debug_info_level > DINFO_LEVEL_TERSE)
18507             {
18508               dw_die_ref die = get_AT_ref (old_die, DW_AT_type);
18509               if (die == auto_die || die == decltype_auto_die)
18510                 add_type_attribute (subr_die, TREE_TYPE (TREE_TYPE (decl)),
18511                                     TYPE_UNQUALIFIED, context_die);
18512             }
18513         }
18514     }
18515   else
18516     {
18517       subr_die = new_die (DW_TAG_subprogram, context_die, decl);
18518
18519       if (TREE_PUBLIC (decl))
18520         add_AT_flag (subr_die, DW_AT_external, 1);
18521
18522       add_name_and_src_coords_attributes (subr_die, decl);
18523       add_pubname (decl, subr_die);
18524       if (debug_info_level > DINFO_LEVEL_TERSE)
18525         {
18526           add_prototyped_attribute (subr_die, TREE_TYPE (decl));
18527           add_type_attribute (subr_die, TREE_TYPE (TREE_TYPE (decl)),
18528                               TYPE_UNQUALIFIED, context_die);
18529         }
18530
18531       add_pure_or_virtual_attribute (subr_die, decl);
18532       if (DECL_ARTIFICIAL (decl))
18533         add_AT_flag (subr_die, DW_AT_artificial, 1);
18534
18535       if (TREE_THIS_VOLATILE (decl) && (dwarf_version >= 5 || !dwarf_strict))
18536         add_AT_flag (subr_die, DW_AT_noreturn, 1);
18537
18538       add_accessibility_attribute (subr_die, decl);
18539     }
18540
18541   if (declaration)
18542     {
18543       if (!old_die || !get_AT (old_die, DW_AT_inline))
18544         {
18545           add_AT_flag (subr_die, DW_AT_declaration, 1);
18546
18547           /* If this is an explicit function declaration then generate
18548              a DW_AT_explicit attribute.  */
18549           if (lang_hooks.decls.function_decl_explicit_p (decl)
18550               && (dwarf_version >= 3 || !dwarf_strict))
18551             add_AT_flag (subr_die, DW_AT_explicit, 1);
18552
18553           /* If this is a C++11 deleted special function member then generate
18554              a DW_AT_GNU_deleted attribute.  */
18555           if (lang_hooks.decls.function_decl_deleted_p (decl)
18556               && (! dwarf_strict))
18557             add_AT_flag (subr_die, DW_AT_GNU_deleted, 1);
18558
18559           /* The first time we see a member function, it is in the context of
18560              the class to which it belongs.  We make sure of this by emitting
18561              the class first.  The next time is the definition, which is
18562              handled above.  The two may come from the same source text.
18563
18564              Note that force_decl_die() forces function declaration die. It is
18565              later reused to represent definition.  */
18566           equate_decl_number_to_die (decl, subr_die);
18567         }
18568     }
18569   else if (DECL_ABSTRACT_P (decl))
18570     {
18571       if (DECL_DECLARED_INLINE_P (decl))
18572         {
18573           if (cgraph_function_possibly_inlined_p (decl))
18574             add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_declared_inlined);
18575           else
18576             add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_declared_not_inlined);
18577         }
18578       else
18579         {
18580           if (cgraph_function_possibly_inlined_p (decl))
18581             add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_inlined);
18582           else
18583             add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_not_inlined);
18584         }
18585
18586       if (DECL_DECLARED_INLINE_P (decl)
18587           && lookup_attribute ("artificial", DECL_ATTRIBUTES (decl)))
18588         add_AT_flag (subr_die, DW_AT_artificial, 1);
18589
18590       equate_decl_number_to_die (decl, subr_die);
18591     }
18592   else if (!DECL_EXTERNAL (decl))
18593     {
18594       HOST_WIDE_INT cfa_fb_offset;
18595       struct function *fun = DECL_STRUCT_FUNCTION (decl);
18596
18597       if (!old_die || !get_AT (old_die, DW_AT_inline))
18598         equate_decl_number_to_die (decl, subr_die);
18599
18600       gcc_checking_assert (fun);
18601       if (!flag_reorder_blocks_and_partition)
18602         {
18603           dw_fde_ref fde = fun->fde;
18604           if (fde->dw_fde_begin)
18605             {
18606               /* We have already generated the labels.  */
18607              add_AT_low_high_pc (subr_die, fde->dw_fde_begin,
18608                                  fde->dw_fde_end, false);
18609             }
18610           else
18611             {
18612               /* Create start/end labels and add the range.  */
18613               char label_id_low[MAX_ARTIFICIAL_LABEL_BYTES];
18614               char label_id_high[MAX_ARTIFICIAL_LABEL_BYTES];
18615               ASM_GENERATE_INTERNAL_LABEL (label_id_low, FUNC_BEGIN_LABEL,
18616                                            current_function_funcdef_no);
18617               ASM_GENERATE_INTERNAL_LABEL (label_id_high, FUNC_END_LABEL,
18618                                            current_function_funcdef_no);
18619              add_AT_low_high_pc (subr_die, label_id_low, label_id_high,
18620                                  false);
18621             }
18622
18623 #if VMS_DEBUGGING_INFO
18624       /* HP OpenVMS Industry Standard 64: DWARF Extensions
18625          Section 2.3 Prologue and Epilogue Attributes:
18626          When a breakpoint is set on entry to a function, it is generally
18627          desirable for execution to be suspended, not on the very first
18628          instruction of the function, but rather at a point after the
18629          function's frame has been set up, after any language defined local
18630          declaration processing has been completed, and before execution of
18631          the first statement of the function begins. Debuggers generally
18632          cannot properly determine where this point is.  Similarly for a
18633          breakpoint set on exit from a function. The prologue and epilogue
18634          attributes allow a compiler to communicate the location(s) to use.  */
18635
18636       {
18637         if (fde->dw_fde_vms_end_prologue)
18638           add_AT_vms_delta (subr_die, DW_AT_HP_prologue,
18639             fde->dw_fde_begin, fde->dw_fde_vms_end_prologue);
18640
18641         if (fde->dw_fde_vms_begin_epilogue)
18642           add_AT_vms_delta (subr_die, DW_AT_HP_epilogue,
18643             fde->dw_fde_begin, fde->dw_fde_vms_begin_epilogue);
18644       }
18645 #endif
18646
18647         }
18648       else
18649         {
18650           /* Generate pubnames entries for the split function code ranges.  */
18651           dw_fde_ref fde = fun->fde;
18652
18653           if (fde->dw_fde_second_begin)
18654             {
18655               if (dwarf_version >= 3 || !dwarf_strict)
18656                 {
18657                   /* We should use ranges for non-contiguous code section 
18658                      addresses.  Use the actual code range for the initial
18659                      section, since the HOT/COLD labels might precede an 
18660                      alignment offset.  */
18661                   bool range_list_added = false;
18662                   add_ranges_by_labels (subr_die, fde->dw_fde_begin,
18663                                         fde->dw_fde_end, &range_list_added,
18664                                         false);
18665                   add_ranges_by_labels (subr_die, fde->dw_fde_second_begin,
18666                                         fde->dw_fde_second_end,
18667                                        &range_list_added, false);
18668                   if (range_list_added)
18669                     add_ranges (NULL);
18670                 }
18671               else
18672                 {
18673                   /* There is no real support in DW2 for this .. so we make
18674                      a work-around.  First, emit the pub name for the segment
18675                      containing the function label.  Then make and emit a
18676                      simplified subprogram DIE for the second segment with the
18677                      name pre-fixed by __hot/cold_sect_of_.  We use the same
18678                      linkage name for the second die so that gdb will find both
18679                      sections when given "b foo".  */
18680                   const char *name = NULL;
18681                   tree decl_name = DECL_NAME (decl);
18682                   dw_die_ref seg_die;
18683
18684                   /* Do the 'primary' section.   */
18685                   add_AT_low_high_pc (subr_die, fde->dw_fde_begin,
18686                                       fde->dw_fde_end, false);
18687
18688                   /* Build a minimal DIE for the secondary section.  */
18689                   seg_die = new_die (DW_TAG_subprogram,
18690                                      subr_die->die_parent, decl);
18691
18692                   if (TREE_PUBLIC (decl))
18693                     add_AT_flag (seg_die, DW_AT_external, 1);
18694
18695                   if (decl_name != NULL 
18696                       && IDENTIFIER_POINTER (decl_name) != NULL)
18697                     {
18698                       name = dwarf2_name (decl, 1);
18699                       if (! DECL_ARTIFICIAL (decl))
18700                         add_src_coords_attributes (seg_die, decl);
18701
18702                       add_linkage_name (seg_die, decl);
18703                     }
18704                   gcc_assert (name != NULL);
18705                   add_pure_or_virtual_attribute (seg_die, decl);
18706                   if (DECL_ARTIFICIAL (decl))
18707                     add_AT_flag (seg_die, DW_AT_artificial, 1);
18708
18709                   name = concat ("__second_sect_of_", name, NULL); 
18710                   add_AT_low_high_pc (seg_die, fde->dw_fde_second_begin,
18711                                       fde->dw_fde_second_end, false);
18712                   add_name_attribute (seg_die, name);
18713                   if (want_pubnames ())
18714                     add_pubname_string (name, seg_die);
18715                 }
18716             }
18717           else
18718            add_AT_low_high_pc (subr_die, fde->dw_fde_begin, fde->dw_fde_end,
18719                                false);
18720         }
18721
18722       cfa_fb_offset = CFA_FRAME_BASE_OFFSET (decl);
18723
18724       /* We define the "frame base" as the function's CFA.  This is more
18725          convenient for several reasons: (1) It's stable across the prologue
18726          and epilogue, which makes it better than just a frame pointer,
18727          (2) With dwarf3, there exists a one-byte encoding that allows us
18728          to reference the .debug_frame data by proxy, but failing that,
18729          (3) We can at least reuse the code inspection and interpretation
18730          code that determines the CFA position at various points in the
18731          function.  */
18732       if (dwarf_version >= 3 && targetm.debug_unwind_info () == UI_DWARF2)
18733         {
18734           dw_loc_descr_ref op = new_loc_descr (DW_OP_call_frame_cfa, 0, 0);
18735           add_AT_loc (subr_die, DW_AT_frame_base, op);
18736         }
18737       else
18738         {
18739           dw_loc_list_ref list = convert_cfa_to_fb_loc_list (cfa_fb_offset);
18740           if (list->dw_loc_next)
18741             add_AT_loc_list (subr_die, DW_AT_frame_base, list);
18742           else
18743             add_AT_loc (subr_die, DW_AT_frame_base, list->expr);
18744         }
18745
18746       /* Compute a displacement from the "steady-state frame pointer" to
18747          the CFA.  The former is what all stack slots and argument slots
18748          will reference in the rtl; the latter is what we've told the
18749          debugger about.  We'll need to adjust all frame_base references
18750          by this displacement.  */
18751       compute_frame_pointer_to_fb_displacement (cfa_fb_offset);
18752
18753       if (fun->static_chain_decl)
18754         add_AT_location_description (subr_die, DW_AT_static_link,
18755                  loc_list_from_tree (fun->static_chain_decl, 2, NULL));
18756     }
18757
18758   /* Generate child dies for template paramaters.  */
18759   if (debug_info_level > DINFO_LEVEL_TERSE)
18760     gen_generic_params_dies (decl);
18761
18762   /* Now output descriptions of the arguments for this function. This gets
18763      (unnecessarily?) complex because of the fact that the DECL_ARGUMENT list
18764      for a FUNCTION_DECL doesn't indicate cases where there was a trailing
18765      `...' at the end of the formal parameter list.  In order to find out if
18766      there was a trailing ellipsis or not, we must instead look at the type
18767      associated with the FUNCTION_DECL.  This will be a node of type
18768      FUNCTION_TYPE. If the chain of type nodes hanging off of this
18769      FUNCTION_TYPE node ends with a void_type_node then there should *not* be
18770      an ellipsis at the end.  */
18771
18772   /* In the case where we are describing a mere function declaration, all we
18773      need to do here (and all we *can* do here) is to describe the *types* of
18774      its formal parameters.  */
18775   if (debug_info_level <= DINFO_LEVEL_TERSE)
18776     ;
18777   else if (declaration)
18778     gen_formal_types_die (decl, subr_die);
18779   else
18780     {
18781       /* Generate DIEs to represent all known formal parameters.  */
18782       tree parm = DECL_ARGUMENTS (decl);
18783       tree generic_decl = lang_hooks.decls.get_generic_function_decl (decl);
18784       tree generic_decl_parm = generic_decl
18785                                 ? DECL_ARGUMENTS (generic_decl)
18786                                 : NULL;
18787
18788       /* Now we want to walk the list of parameters of the function and
18789          emit their relevant DIEs.
18790
18791          We consider the case of DECL being an instance of a generic function
18792          as well as it being a normal function.
18793
18794          If DECL is an instance of a generic function we walk the
18795          parameters of the generic function declaration _and_ the parameters of
18796          DECL itself. This is useful because we want to emit specific DIEs for
18797          function parameter packs and those are declared as part of the
18798          generic function declaration. In that particular case,
18799          the parameter pack yields a DW_TAG_GNU_formal_parameter_pack DIE.
18800          That DIE has children DIEs representing the set of arguments
18801          of the pack. Note that the set of pack arguments can be empty.
18802          In that case, the DW_TAG_GNU_formal_parameter_pack DIE will not have any
18803          children DIE.
18804
18805          Otherwise, we just consider the parameters of DECL.  */
18806       while (generic_decl_parm || parm)
18807         {
18808           if (generic_decl_parm
18809               && lang_hooks.function_parameter_pack_p (generic_decl_parm))
18810             gen_formal_parameter_pack_die (generic_decl_parm,
18811                                            parm, subr_die,
18812                                            &parm);
18813           else if (parm && !POINTER_BOUNDS_P (parm))
18814             {
18815               dw_die_ref parm_die = gen_decl_die (parm, NULL, subr_die);
18816
18817               if (parm == DECL_ARGUMENTS (decl)
18818                   && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE
18819                   && parm_die
18820                   && (dwarf_version >= 3 || !dwarf_strict))
18821                 add_AT_die_ref (subr_die, DW_AT_object_pointer, parm_die);
18822
18823               parm = DECL_CHAIN (parm);
18824             }
18825           else if (parm)
18826             parm = DECL_CHAIN (parm);
18827
18828           if (generic_decl_parm)
18829             generic_decl_parm = DECL_CHAIN (generic_decl_parm);
18830         }
18831
18832       /* Decide whether we need an unspecified_parameters DIE at the end.
18833          There are 2 more cases to do this for: 1) the ansi ... declaration -
18834          this is detectable when the end of the arg list is not a
18835          void_type_node 2) an unprototyped function declaration (not a
18836          definition).  This just means that we have no info about the
18837          parameters at all.  */
18838       if (prototype_p (TREE_TYPE (decl)))
18839         {
18840           /* This is the prototyped case, check for....  */
18841           if (stdarg_p (TREE_TYPE (decl)))
18842             gen_unspecified_parameters_die (decl, subr_die);
18843         }
18844       else if (DECL_INITIAL (decl) == NULL_TREE)
18845         gen_unspecified_parameters_die (decl, subr_die);
18846     }
18847
18848   /* Output Dwarf info for all of the stuff within the body of the function
18849      (if it has one - it may be just a declaration).  */
18850   outer_scope = DECL_INITIAL (decl);
18851
18852   /* OUTER_SCOPE is a pointer to the outermost BLOCK node created to represent
18853      a function.  This BLOCK actually represents the outermost binding contour
18854      for the function, i.e. the contour in which the function's formal
18855      parameters and labels get declared. Curiously, it appears that the front
18856      end doesn't actually put the PARM_DECL nodes for the current function onto
18857      the BLOCK_VARS list for this outer scope, but are strung off of the
18858      DECL_ARGUMENTS list for the function instead.
18859
18860      The BLOCK_VARS list for the `outer_scope' does provide us with a list of
18861      the LABEL_DECL nodes for the function however, and we output DWARF info
18862      for those in decls_for_scope.  Just within the `outer_scope' there will be
18863      a BLOCK node representing the function's outermost pair of curly braces,
18864      and any blocks used for the base and member initializers of a C++
18865      constructor function.  */
18866   if (! declaration && outer_scope && TREE_CODE (outer_scope) != ERROR_MARK)
18867     {
18868       int call_site_note_count = 0;
18869       int tail_call_site_note_count = 0;
18870
18871       /* Emit a DW_TAG_variable DIE for a named return value.  */
18872       if (DECL_NAME (DECL_RESULT (decl)))
18873         gen_decl_die (DECL_RESULT (decl), NULL, subr_die);
18874
18875       decls_for_scope (outer_scope, subr_die);
18876
18877       if (call_arg_locations && !dwarf_strict)
18878         {
18879           struct call_arg_loc_node *ca_loc;
18880           for (ca_loc = call_arg_locations; ca_loc; ca_loc = ca_loc->next)
18881             {
18882               dw_die_ref die = NULL;
18883               rtx tloc = NULL_RTX, tlocc = NULL_RTX;
18884               rtx arg, next_arg;
18885
18886               for (arg = NOTE_VAR_LOCATION (ca_loc->call_arg_loc_note);
18887                    arg; arg = next_arg)
18888                 {
18889                   dw_loc_descr_ref reg, val;
18890                   machine_mode mode = GET_MODE (XEXP (XEXP (arg, 0), 1));
18891                   dw_die_ref cdie, tdie = NULL;
18892
18893                   next_arg = XEXP (arg, 1);
18894                   if (REG_P (XEXP (XEXP (arg, 0), 0))
18895                       && next_arg
18896                       && MEM_P (XEXP (XEXP (next_arg, 0), 0))
18897                       && REG_P (XEXP (XEXP (XEXP (next_arg, 0), 0), 0))
18898                       && REGNO (XEXP (XEXP (arg, 0), 0))
18899                          == REGNO (XEXP (XEXP (XEXP (next_arg, 0), 0), 0)))
18900                     next_arg = XEXP (next_arg, 1);
18901                   if (mode == VOIDmode)
18902                     {
18903                       mode = GET_MODE (XEXP (XEXP (arg, 0), 0));
18904                       if (mode == VOIDmode)
18905                         mode = GET_MODE (XEXP (arg, 0));
18906                     }
18907                   if (mode == VOIDmode || mode == BLKmode)
18908                     continue;
18909                   if (XEXP (XEXP (arg, 0), 0) == pc_rtx)
18910                     {
18911                       gcc_assert (ca_loc->symbol_ref == NULL_RTX);
18912                       tloc = XEXP (XEXP (arg, 0), 1);
18913                       continue;
18914                     }
18915                   else if (GET_CODE (XEXP (XEXP (arg, 0), 0)) == CLOBBER
18916                            && XEXP (XEXP (XEXP (arg, 0), 0), 0) == pc_rtx)
18917                     {
18918                       gcc_assert (ca_loc->symbol_ref == NULL_RTX);
18919                       tlocc = XEXP (XEXP (arg, 0), 1);
18920                       continue;
18921                     }
18922                   reg = NULL;
18923                   if (REG_P (XEXP (XEXP (arg, 0), 0)))
18924                     reg = reg_loc_descriptor (XEXP (XEXP (arg, 0), 0),
18925                                               VAR_INIT_STATUS_INITIALIZED);
18926                   else if (MEM_P (XEXP (XEXP (arg, 0), 0)))
18927                     {
18928                       rtx mem = XEXP (XEXP (arg, 0), 0);
18929                       reg = mem_loc_descriptor (XEXP (mem, 0),
18930                                                 get_address_mode (mem),
18931                                                 GET_MODE (mem),
18932                                                 VAR_INIT_STATUS_INITIALIZED);
18933                     }
18934                   else if (GET_CODE (XEXP (XEXP (arg, 0), 0))
18935                            == DEBUG_PARAMETER_REF)
18936                     {
18937                       tree tdecl
18938                         = DEBUG_PARAMETER_REF_DECL (XEXP (XEXP (arg, 0), 0));
18939                       tdie = lookup_decl_die (tdecl);
18940                       if (tdie == NULL)
18941                         continue;
18942                     }
18943                   else
18944                     continue;
18945                   if (reg == NULL
18946                       && GET_CODE (XEXP (XEXP (arg, 0), 0))
18947                          != DEBUG_PARAMETER_REF)
18948                     continue;
18949                   val = mem_loc_descriptor (XEXP (XEXP (arg, 0), 1), mode,
18950                                             VOIDmode,
18951                                             VAR_INIT_STATUS_INITIALIZED);
18952                   if (val == NULL)
18953                     continue;
18954                   if (die == NULL)
18955                     die = gen_call_site_die (decl, subr_die, ca_loc);
18956                   cdie = new_die (DW_TAG_GNU_call_site_parameter, die,
18957                                   NULL_TREE);
18958                   if (reg != NULL)
18959                     add_AT_loc (cdie, DW_AT_location, reg);
18960                   else if (tdie != NULL)
18961                     add_AT_die_ref (cdie, DW_AT_abstract_origin, tdie);
18962                   add_AT_loc (cdie, DW_AT_GNU_call_site_value, val);
18963                   if (next_arg != XEXP (arg, 1))
18964                     {
18965                       mode = GET_MODE (XEXP (XEXP (XEXP (arg, 1), 0), 1));
18966                       if (mode == VOIDmode)
18967                         mode = GET_MODE (XEXP (XEXP (XEXP (arg, 1), 0), 0));
18968                       val = mem_loc_descriptor (XEXP (XEXP (XEXP (arg, 1),
18969                                                             0), 1),
18970                                                 mode, VOIDmode,
18971                                                 VAR_INIT_STATUS_INITIALIZED);
18972                       if (val != NULL)
18973                         add_AT_loc (cdie, DW_AT_GNU_call_site_data_value, val);
18974                     }
18975                 }
18976               if (die == NULL
18977                   && (ca_loc->symbol_ref || tloc))
18978                 die = gen_call_site_die (decl, subr_die, ca_loc);
18979               if (die != NULL && (tloc != NULL_RTX || tlocc != NULL_RTX))
18980                 {
18981                   dw_loc_descr_ref tval = NULL;
18982
18983                   if (tloc != NULL_RTX)
18984                     tval = mem_loc_descriptor (tloc,
18985                                                GET_MODE (tloc) == VOIDmode
18986                                                ? Pmode : GET_MODE (tloc),
18987                                                VOIDmode,
18988                                                VAR_INIT_STATUS_INITIALIZED);
18989                   if (tval)
18990                     add_AT_loc (die, DW_AT_GNU_call_site_target, tval);
18991                   else if (tlocc != NULL_RTX)
18992                     {
18993                       tval = mem_loc_descriptor (tlocc,
18994                                                  GET_MODE (tlocc) == VOIDmode
18995                                                  ? Pmode : GET_MODE (tlocc),
18996                                                  VOIDmode,
18997                                                  VAR_INIT_STATUS_INITIALIZED);
18998                       if (tval)
18999                         add_AT_loc (die, DW_AT_GNU_call_site_target_clobbered,
19000                                     tval);
19001                     }
19002                 }
19003               if (die != NULL)
19004                 {
19005                   call_site_note_count++;
19006                   if (ca_loc->tail_call_p)
19007                     tail_call_site_note_count++;
19008                 }
19009             }
19010         }
19011       call_arg_locations = NULL;
19012       call_arg_loc_last = NULL;
19013       if (tail_call_site_count >= 0
19014           && tail_call_site_count == tail_call_site_note_count
19015           && !dwarf_strict)
19016         {
19017           if (call_site_count >= 0
19018               && call_site_count == call_site_note_count)
19019             add_AT_flag (subr_die, DW_AT_GNU_all_call_sites, 1);
19020           else
19021             add_AT_flag (subr_die, DW_AT_GNU_all_tail_call_sites, 1);
19022         }
19023       call_site_count = -1;
19024       tail_call_site_count = -1;
19025     }
19026
19027   if (subr_die != old_die)
19028     /* Add the calling convention attribute if requested.  */
19029     add_calling_convention_attribute (subr_die, decl);
19030 }
19031
19032 /* Returns a hash value for X (which really is a die_struct).  */
19033
19034 hashval_t
19035 block_die_hasher::hash (die_struct *d)
19036 {
19037   return (hashval_t) d->decl_id ^ htab_hash_pointer (d->die_parent);
19038 }
19039
19040 /* Return nonzero if decl_id and die_parent of die_struct X is the same
19041    as decl_id and die_parent of die_struct Y.  */
19042
19043 bool
19044 block_die_hasher::equal (die_struct *x, die_struct *y)
19045 {
19046   return x->decl_id == y->decl_id && x->die_parent == y->die_parent;
19047 }
19048
19049 /* Generate a DIE to represent a declared data object.
19050    Either DECL or ORIGIN must be non-null.  */
19051
19052 static void
19053 gen_variable_die (tree decl, tree origin, dw_die_ref context_die)
19054 {
19055   HOST_WIDE_INT off = 0;
19056   tree com_decl;
19057   tree decl_or_origin = decl ? decl : origin;
19058   tree ultimate_origin;
19059   dw_die_ref var_die;
19060   dw_die_ref old_die = decl ? lookup_decl_die (decl) : NULL;
19061   dw_die_ref origin_die;
19062   bool declaration = (DECL_EXTERNAL (decl_or_origin)
19063                       || class_or_namespace_scope_p (context_die));
19064   bool specialization_p = false;
19065
19066   ultimate_origin = decl_ultimate_origin (decl_or_origin);
19067   if (decl || ultimate_origin)
19068     origin = ultimate_origin;
19069   com_decl = fortran_common (decl_or_origin, &off);
19070
19071   /* Symbol in common gets emitted as a child of the common block, in the form
19072      of a data member.  */
19073   if (com_decl)
19074     {
19075       dw_die_ref com_die;
19076       dw_loc_list_ref loc;
19077       die_node com_die_arg;
19078
19079       var_die = lookup_decl_die (decl_or_origin);
19080       if (var_die)
19081         {
19082           if (get_AT (var_die, DW_AT_location) == NULL)
19083             {
19084               loc = loc_list_from_tree (com_decl, off ? 1 : 2, NULL);
19085               if (loc)
19086                 {
19087                   if (off)
19088                     {
19089                       /* Optimize the common case.  */
19090                       if (single_element_loc_list_p (loc)
19091                           && loc->expr->dw_loc_opc == DW_OP_addr
19092                           && loc->expr->dw_loc_next == NULL
19093                           && GET_CODE (loc->expr->dw_loc_oprnd1.v.val_addr)
19094                              == SYMBOL_REF)
19095                         {
19096                           rtx x = loc->expr->dw_loc_oprnd1.v.val_addr;
19097                           loc->expr->dw_loc_oprnd1.v.val_addr
19098                             = plus_constant (GET_MODE (x), x , off);
19099                         }
19100                       else
19101                         loc_list_plus_const (loc, off);
19102                     }
19103                   add_AT_location_description (var_die, DW_AT_location, loc);
19104                   remove_AT (var_die, DW_AT_declaration);
19105                 }
19106             }
19107           return;
19108         }
19109
19110       if (common_block_die_table == NULL)
19111         common_block_die_table = hash_table<block_die_hasher>::create_ggc (10);
19112
19113       com_die_arg.decl_id = DECL_UID (com_decl);
19114       com_die_arg.die_parent = context_die;
19115       com_die = common_block_die_table->find (&com_die_arg);
19116       loc = loc_list_from_tree (com_decl, 2, NULL);
19117       if (com_die == NULL)
19118         {
19119           const char *cnam
19120             = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (com_decl));
19121           die_node **slot;
19122
19123           com_die = new_die (DW_TAG_common_block, context_die, decl);
19124           add_name_and_src_coords_attributes (com_die, com_decl);
19125           if (loc)
19126             {
19127               add_AT_location_description (com_die, DW_AT_location, loc);
19128               /* Avoid sharing the same loc descriptor between
19129                  DW_TAG_common_block and DW_TAG_variable.  */
19130               loc = loc_list_from_tree (com_decl, 2, NULL);
19131             }
19132           else if (DECL_EXTERNAL (decl_or_origin))
19133             add_AT_flag (com_die, DW_AT_declaration, 1);
19134           if (want_pubnames ())
19135             add_pubname_string (cnam, com_die); /* ??? needed? */
19136           com_die->decl_id = DECL_UID (com_decl);
19137           slot = common_block_die_table->find_slot (com_die, INSERT);
19138           *slot = com_die;
19139         }
19140       else if (get_AT (com_die, DW_AT_location) == NULL && loc)
19141         {
19142           add_AT_location_description (com_die, DW_AT_location, loc);
19143           loc = loc_list_from_tree (com_decl, 2, NULL);
19144           remove_AT (com_die, DW_AT_declaration);
19145         }
19146       var_die = new_die (DW_TAG_variable, com_die, decl);
19147       add_name_and_src_coords_attributes (var_die, decl_or_origin);
19148       add_type_attribute (var_die, TREE_TYPE (decl_or_origin),
19149                           decl_quals (decl_or_origin), context_die);
19150       add_AT_flag (var_die, DW_AT_external, 1);
19151       if (loc)
19152         {
19153           if (off)
19154             {
19155               /* Optimize the common case.  */
19156               if (single_element_loc_list_p (loc)
19157                   && loc->expr->dw_loc_opc == DW_OP_addr
19158                   && loc->expr->dw_loc_next == NULL
19159                   && GET_CODE (loc->expr->dw_loc_oprnd1.v.val_addr) == SYMBOL_REF)
19160                 {
19161                   rtx x = loc->expr->dw_loc_oprnd1.v.val_addr;
19162                   loc->expr->dw_loc_oprnd1.v.val_addr
19163                     = plus_constant (GET_MODE (x), x, off);
19164                 }
19165               else
19166                 loc_list_plus_const (loc, off);
19167             }
19168           add_AT_location_description (var_die, DW_AT_location, loc);
19169         }
19170       else if (DECL_EXTERNAL (decl_or_origin))
19171         add_AT_flag (var_die, DW_AT_declaration, 1);
19172       if (decl)
19173         equate_decl_number_to_die (decl, var_die);
19174       return;
19175     }
19176
19177   /* If the compiler emitted a definition for the DECL declaration
19178      and if we already emitted a DIE for it, don't emit a second
19179      DIE for it again. Allow re-declarations of DECLs that are
19180      inside functions, though.  */
19181   if (old_die && declaration && !local_scope_p (context_die))
19182     return;
19183
19184   /* For static data members, the declaration in the class is supposed
19185      to have DW_TAG_member tag; the specification should still be
19186      DW_TAG_variable referencing the DW_TAG_member DIE.  */
19187   if (declaration && class_scope_p (context_die))
19188     var_die = new_die (DW_TAG_member, context_die, decl);
19189   else
19190     var_die = new_die (DW_TAG_variable, context_die, decl);
19191
19192   origin_die = NULL;
19193   if (origin != NULL)
19194     origin_die = add_abstract_origin_attribute (var_die, origin);
19195
19196   /* Loop unrolling can create multiple blocks that refer to the same
19197      static variable, so we must test for the DW_AT_declaration flag.
19198
19199      ??? Loop unrolling/reorder_blocks should perhaps be rewritten to
19200      copy decls and set the DECL_ABSTRACT_P flag on them instead of
19201      sharing them.
19202
19203      ??? Duplicated blocks have been rewritten to use .debug_ranges.
19204
19205      ??? The declare_in_namespace support causes us to get two DIEs for one
19206      variable, both of which are declarations.  We want to avoid considering
19207      one to be a specification, so we must test that this DIE is not a
19208      declaration.  */
19209   else if (old_die && TREE_STATIC (decl) && ! declaration
19210            && get_AT_flag (old_die, DW_AT_declaration) == 1)
19211     {
19212       /* This is a definition of a C++ class level static.  */
19213       add_AT_specification (var_die, old_die);
19214       specialization_p = true;
19215       if (DECL_NAME (decl))
19216         {
19217           expanded_location s = expand_location (DECL_SOURCE_LOCATION (decl));
19218           struct dwarf_file_data * file_index = lookup_filename (s.file);
19219
19220           if (get_AT_file (old_die, DW_AT_decl_file) != file_index)
19221             add_AT_file (var_die, DW_AT_decl_file, file_index);
19222
19223           if (get_AT_unsigned (old_die, DW_AT_decl_line) != (unsigned) s.line)
19224             add_AT_unsigned (var_die, DW_AT_decl_line, s.line);
19225
19226           if (old_die->die_tag == DW_TAG_member)
19227             add_linkage_name (var_die, decl);
19228         }
19229     }
19230   else
19231     add_name_and_src_coords_attributes (var_die, decl);
19232
19233   if ((origin == NULL && !specialization_p)
19234       || (origin != NULL
19235           && !DECL_ABSTRACT_P (decl_or_origin)
19236           && variably_modified_type_p (TREE_TYPE (decl_or_origin),
19237                                        decl_function_context
19238                                                         (decl_or_origin))))
19239     {
19240       tree type = TREE_TYPE (decl_or_origin);
19241
19242       if (decl_by_reference_p (decl_or_origin))
19243         add_type_attribute (var_die, TREE_TYPE (type), TYPE_UNQUALIFIED,
19244                             context_die);
19245       else
19246         add_type_attribute (var_die, type, decl_quals (decl_or_origin),
19247                             context_die);
19248     }
19249
19250   if (origin == NULL && !specialization_p)
19251     {
19252       if (TREE_PUBLIC (decl))
19253         add_AT_flag (var_die, DW_AT_external, 1);
19254
19255       if (DECL_ARTIFICIAL (decl))
19256         add_AT_flag (var_die, DW_AT_artificial, 1);
19257
19258       add_accessibility_attribute (var_die, decl);
19259     }
19260
19261   if (declaration)
19262     add_AT_flag (var_die, DW_AT_declaration, 1);
19263
19264   if (decl && (DECL_ABSTRACT_P (decl) || declaration || old_die == NULL))
19265     equate_decl_number_to_die (decl, var_die);
19266
19267   if (! declaration
19268       && (! DECL_ABSTRACT_P (decl_or_origin)
19269           /* Local static vars are shared between all clones/inlines,
19270              so emit DW_AT_location on the abstract DIE if DECL_RTL is
19271              already set.  */
19272           || (TREE_CODE (decl_or_origin) == VAR_DECL
19273               && TREE_STATIC (decl_or_origin)
19274               && DECL_RTL_SET_P (decl_or_origin)))
19275       /* When abstract origin already has DW_AT_location attribute, no need
19276          to add it again.  */
19277       && (origin_die == NULL || get_AT (origin_die, DW_AT_location) == NULL))
19278     {
19279       if (TREE_CODE (decl_or_origin) == VAR_DECL && TREE_STATIC (decl_or_origin)
19280           && !TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl_or_origin)))
19281         defer_location (decl_or_origin, var_die);
19282       else
19283         add_location_or_const_value_attribute (var_die, decl_or_origin,
19284                                                decl == NULL, DW_AT_location);
19285       add_pubname (decl_or_origin, var_die);
19286     }
19287   else
19288     tree_add_const_value_attribute_for_decl (var_die, decl_or_origin);
19289 }
19290
19291 /* Generate a DIE to represent a named constant.  */
19292
19293 static void
19294 gen_const_die (tree decl, dw_die_ref context_die)
19295 {
19296   dw_die_ref const_die;
19297   tree type = TREE_TYPE (decl);
19298
19299   const_die = new_die (DW_TAG_constant, context_die, decl);
19300   add_name_and_src_coords_attributes (const_die, decl);
19301   add_type_attribute (const_die, type, TYPE_QUAL_CONST, context_die);
19302   if (TREE_PUBLIC (decl))
19303     add_AT_flag (const_die, DW_AT_external, 1);
19304   if (DECL_ARTIFICIAL (decl))
19305     add_AT_flag (const_die, DW_AT_artificial, 1);
19306   tree_add_const_value_attribute_for_decl (const_die, decl);
19307 }
19308
19309 /* Generate a DIE to represent a label identifier.  */
19310
19311 static void
19312 gen_label_die (tree decl, dw_die_ref context_die)
19313 {
19314   tree origin = decl_ultimate_origin (decl);
19315   dw_die_ref lbl_die = new_die (DW_TAG_label, context_die, decl);
19316   rtx insn;
19317   char label[MAX_ARTIFICIAL_LABEL_BYTES];
19318
19319   if (origin != NULL)
19320     add_abstract_origin_attribute (lbl_die, origin);
19321   else
19322     add_name_and_src_coords_attributes (lbl_die, decl);
19323
19324   if (DECL_ABSTRACT_P (decl))
19325     equate_decl_number_to_die (decl, lbl_die);
19326   else
19327     {
19328       insn = DECL_RTL_IF_SET (decl);
19329
19330       /* Deleted labels are programmer specified labels which have been
19331          eliminated because of various optimizations.  We still emit them
19332          here so that it is possible to put breakpoints on them.  */
19333       if (insn
19334           && (LABEL_P (insn)
19335               || ((NOTE_P (insn)
19336                    && NOTE_KIND (insn) == NOTE_INSN_DELETED_LABEL))))
19337         {
19338           /* When optimization is enabled (via -O) some parts of the compiler
19339              (e.g. jump.c and cse.c) may try to delete CODE_LABEL insns which
19340              represent source-level labels which were explicitly declared by
19341              the user.  This really shouldn't be happening though, so catch
19342              it if it ever does happen.  */
19343           gcc_assert (!as_a<rtx_insn *> (insn)->deleted ());
19344
19345           ASM_GENERATE_INTERNAL_LABEL (label, "L", CODE_LABEL_NUMBER (insn));
19346           add_AT_lbl_id (lbl_die, DW_AT_low_pc, label);
19347         }
19348       else if (insn
19349                && NOTE_P (insn)
19350                && NOTE_KIND (insn) == NOTE_INSN_DELETED_DEBUG_LABEL
19351                && CODE_LABEL_NUMBER (insn) != -1)
19352         {
19353           ASM_GENERATE_INTERNAL_LABEL (label, "LDL", CODE_LABEL_NUMBER (insn));
19354           add_AT_lbl_id (lbl_die, DW_AT_low_pc, label);
19355         }
19356     }
19357 }
19358
19359 /* A helper function for gen_inlined_subroutine_die.  Add source coordinate
19360    attributes to the DIE for a block STMT, to describe where the inlined
19361    function was called from.  This is similar to add_src_coords_attributes.  */
19362
19363 static inline void
19364 add_call_src_coords_attributes (tree stmt, dw_die_ref die)
19365 {
19366   expanded_location s = expand_location (BLOCK_SOURCE_LOCATION (stmt));
19367
19368   if (dwarf_version >= 3 || !dwarf_strict)
19369     {
19370       add_AT_file (die, DW_AT_call_file, lookup_filename (s.file));
19371       add_AT_unsigned (die, DW_AT_call_line, s.line);
19372     }
19373 }
19374
19375
19376 /* A helper function for gen_lexical_block_die and gen_inlined_subroutine_die.
19377    Add low_pc and high_pc attributes to the DIE for a block STMT.  */
19378
19379 static inline void
19380 add_high_low_attributes (tree stmt, dw_die_ref die)
19381 {
19382   char label[MAX_ARTIFICIAL_LABEL_BYTES];
19383
19384   if (BLOCK_FRAGMENT_CHAIN (stmt)
19385       && (dwarf_version >= 3 || !dwarf_strict))
19386     {
19387       tree chain, superblock = NULL_TREE;
19388       dw_die_ref pdie;
19389       dw_attr_ref attr = NULL;
19390
19391       if (inlined_function_outer_scope_p (stmt))
19392         {
19393           ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_BEGIN_LABEL,
19394                                        BLOCK_NUMBER (stmt));
19395           add_AT_lbl_id (die, DW_AT_entry_pc, label);
19396         }
19397
19398       /* Optimize duplicate .debug_ranges lists or even tails of
19399          lists.  If this BLOCK has same ranges as its supercontext,
19400          lookup DW_AT_ranges attribute in the supercontext (and
19401          recursively so), verify that the ranges_table contains the
19402          right values and use it instead of adding a new .debug_range.  */
19403       for (chain = stmt, pdie = die;
19404            BLOCK_SAME_RANGE (chain);
19405            chain = BLOCK_SUPERCONTEXT (chain))
19406         {
19407           dw_attr_ref new_attr;
19408
19409           pdie = pdie->die_parent;
19410           if (pdie == NULL)
19411             break;
19412           if (BLOCK_SUPERCONTEXT (chain) == NULL_TREE)
19413             break;
19414           new_attr = get_AT (pdie, DW_AT_ranges);
19415           if (new_attr == NULL
19416               || new_attr->dw_attr_val.val_class != dw_val_class_range_list)
19417             break;
19418           attr = new_attr;
19419           superblock = BLOCK_SUPERCONTEXT (chain);
19420         }
19421       if (attr != NULL
19422           && (ranges_table[attr->dw_attr_val.v.val_offset
19423                            / 2 / DWARF2_ADDR_SIZE].num
19424               == BLOCK_NUMBER (superblock))
19425           && BLOCK_FRAGMENT_CHAIN (superblock))
19426         {
19427           unsigned long off = attr->dw_attr_val.v.val_offset
19428                               / 2 / DWARF2_ADDR_SIZE;
19429           unsigned long supercnt = 0, thiscnt = 0;
19430           for (chain = BLOCK_FRAGMENT_CHAIN (superblock);
19431                chain; chain = BLOCK_FRAGMENT_CHAIN (chain))
19432             {
19433               ++supercnt;
19434               gcc_checking_assert (ranges_table[off + supercnt].num
19435                                    == BLOCK_NUMBER (chain));
19436             }
19437           gcc_checking_assert (ranges_table[off + supercnt + 1].num == 0);
19438           for (chain = BLOCK_FRAGMENT_CHAIN (stmt);
19439                chain; chain = BLOCK_FRAGMENT_CHAIN (chain))
19440             ++thiscnt;
19441           gcc_assert (supercnt >= thiscnt);
19442           add_AT_range_list (die, DW_AT_ranges,
19443                              ((off + supercnt - thiscnt)
19444                               * 2 * DWARF2_ADDR_SIZE),
19445                              false);
19446           return;
19447         }
19448
19449       add_AT_range_list (die, DW_AT_ranges, add_ranges (stmt), false);
19450
19451       chain = BLOCK_FRAGMENT_CHAIN (stmt);
19452       do
19453         {
19454           add_ranges (chain);
19455           chain = BLOCK_FRAGMENT_CHAIN (chain);
19456         }
19457       while (chain);
19458       add_ranges (NULL);
19459     }
19460   else
19461     {
19462       char label_high[MAX_ARTIFICIAL_LABEL_BYTES];
19463       ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_BEGIN_LABEL,
19464                                    BLOCK_NUMBER (stmt));
19465       ASM_GENERATE_INTERNAL_LABEL (label_high, BLOCK_END_LABEL,
19466                                    BLOCK_NUMBER (stmt));
19467       add_AT_low_high_pc (die, label, label_high, false);
19468     }
19469 }
19470
19471 /* Generate a DIE for a lexical block.  */
19472
19473 static void
19474 gen_lexical_block_die (tree stmt, dw_die_ref context_die)
19475 {
19476   dw_die_ref stmt_die = new_die (DW_TAG_lexical_block, context_die, stmt);
19477
19478   if (call_arg_locations)
19479     {
19480       if (block_map.length () <= BLOCK_NUMBER (stmt))
19481         block_map.safe_grow_cleared (BLOCK_NUMBER (stmt) + 1);
19482       block_map[BLOCK_NUMBER (stmt)] = stmt_die;
19483     }
19484
19485   if (! BLOCK_ABSTRACT (stmt) && TREE_ASM_WRITTEN (stmt))
19486     add_high_low_attributes (stmt, stmt_die);
19487
19488   decls_for_scope (stmt, stmt_die);
19489 }
19490
19491 /* Generate a DIE for an inlined subprogram.  */
19492
19493 static void
19494 gen_inlined_subroutine_die (tree stmt, dw_die_ref context_die)
19495 {
19496   tree decl;
19497
19498   /* The instance of function that is effectively being inlined shall not
19499      be abstract.  */
19500   gcc_assert (! BLOCK_ABSTRACT (stmt));
19501
19502   decl = block_ultimate_origin (stmt);
19503
19504   /* Emit info for the abstract instance first, if we haven't yet.  We
19505      must emit this even if the block is abstract, otherwise when we
19506      emit the block below (or elsewhere), we may end up trying to emit
19507      a die whose origin die hasn't been emitted, and crashing.  */
19508   dwarf2out_abstract_function (decl);
19509
19510   if (! BLOCK_ABSTRACT (stmt))
19511     {
19512       dw_die_ref subr_die
19513         = new_die (DW_TAG_inlined_subroutine, context_die, stmt);
19514
19515       if (call_arg_locations)
19516         {
19517           if (block_map.length () <= BLOCK_NUMBER (stmt))
19518             block_map.safe_grow_cleared (BLOCK_NUMBER (stmt) + 1);
19519           block_map[BLOCK_NUMBER (stmt)] = subr_die;
19520         }
19521       add_abstract_origin_attribute (subr_die, decl);
19522       if (TREE_ASM_WRITTEN (stmt))
19523         add_high_low_attributes (stmt, subr_die);
19524       add_call_src_coords_attributes (stmt, subr_die);
19525
19526       decls_for_scope (stmt, subr_die);
19527     }
19528 }
19529
19530 /* Generate a DIE for a field in a record, or structure.  */
19531
19532 static void
19533 gen_field_die (tree decl, dw_die_ref context_die)
19534 {
19535   dw_die_ref decl_die;
19536
19537   if (TREE_TYPE (decl) == error_mark_node)
19538     return;
19539
19540   decl_die = new_die (DW_TAG_member, context_die, decl);
19541   add_name_and_src_coords_attributes (decl_die, decl);
19542   add_type_attribute (decl_die, member_declared_type (decl),
19543                       decl_quals (decl), context_die);
19544
19545   if (DECL_BIT_FIELD_TYPE (decl))
19546     {
19547       add_byte_size_attribute (decl_die, decl);
19548       add_bit_size_attribute (decl_die, decl);
19549       add_bit_offset_attribute (decl_die, decl);
19550     }
19551
19552   if (TREE_CODE (DECL_FIELD_CONTEXT (decl)) != UNION_TYPE)
19553     add_data_member_location_attribute (decl_die, decl);
19554
19555   if (DECL_ARTIFICIAL (decl))
19556     add_AT_flag (decl_die, DW_AT_artificial, 1);
19557
19558   add_accessibility_attribute (decl_die, decl);
19559
19560   /* Equate decl number to die, so that we can look up this decl later on.  */
19561   equate_decl_number_to_die (decl, decl_die);
19562 }
19563
19564 #if 0
19565 /* Don't generate either pointer_type DIEs or reference_type DIEs here.
19566    Use modified_type_die instead.
19567    We keep this code here just in case these types of DIEs may be needed to
19568    represent certain things in other languages (e.g. Pascal) someday.  */
19569
19570 static void
19571 gen_pointer_type_die (tree type, dw_die_ref context_die)
19572 {
19573   dw_die_ref ptr_die
19574     = new_die (DW_TAG_pointer_type, scope_die_for (type, context_die), type);
19575
19576   equate_type_number_to_die (type, ptr_die);
19577   add_type_attribute (ptr_die, TREE_TYPE (type), TYPE_UNQUALIFIED,
19578                       context_die);
19579   add_AT_unsigned (mod_type_die, DW_AT_byte_size, PTR_SIZE);
19580 }
19581
19582 /* Don't generate either pointer_type DIEs or reference_type DIEs here.
19583    Use modified_type_die instead.
19584    We keep this code here just in case these types of DIEs may be needed to
19585    represent certain things in other languages (e.g. Pascal) someday.  */
19586
19587 static void
19588 gen_reference_type_die (tree type, dw_die_ref context_die)
19589 {
19590   dw_die_ref ref_die, scope_die = scope_die_for (type, context_die);
19591
19592   if (TYPE_REF_IS_RVALUE (type) && dwarf_version >= 4)
19593     ref_die = new_die (DW_TAG_rvalue_reference_type, scope_die, type);
19594   else
19595     ref_die = new_die (DW_TAG_reference_type, scope_die, type);
19596
19597   equate_type_number_to_die (type, ref_die);
19598   add_type_attribute (ref_die, TREE_TYPE (type), TYPE_UNQUALIFIED,
19599                       context_die);
19600   add_AT_unsigned (mod_type_die, DW_AT_byte_size, PTR_SIZE);
19601 }
19602 #endif
19603
19604 /* Generate a DIE for a pointer to a member type.  */
19605
19606 static void
19607 gen_ptr_to_mbr_type_die (tree type, dw_die_ref context_die)
19608 {
19609   dw_die_ref ptr_die
19610     = new_die (DW_TAG_ptr_to_member_type,
19611                scope_die_for (type, context_die), type);
19612
19613   equate_type_number_to_die (type, ptr_die);
19614   add_AT_die_ref (ptr_die, DW_AT_containing_type,
19615                   lookup_type_die (TYPE_OFFSET_BASETYPE (type)));
19616   add_type_attribute (ptr_die, TREE_TYPE (type), TYPE_UNQUALIFIED,
19617                       context_die);
19618 }
19619
19620 typedef const char *dchar_p; /* For DEF_VEC_P.  */
19621
19622 static char *producer_string;
19623
19624 /* Return a heap allocated producer string including command line options
19625    if -grecord-gcc-switches.  */
19626
19627 static char *
19628 gen_producer_string (void)
19629 {
19630   size_t j;
19631   auto_vec<dchar_p> switches;
19632   const char *language_string = lang_hooks.name;
19633   char *producer, *tail;
19634   const char *p;
19635   size_t len = dwarf_record_gcc_switches ? 0 : 3;
19636   size_t plen = strlen (language_string) + 1 + strlen (version_string);
19637
19638   for (j = 1; dwarf_record_gcc_switches && j < save_decoded_options_count; j++)
19639     switch (save_decoded_options[j].opt_index)
19640       {
19641       case OPT_o:
19642       case OPT_d:
19643       case OPT_dumpbase:
19644       case OPT_dumpdir:
19645       case OPT_auxbase:
19646       case OPT_auxbase_strip:
19647       case OPT_quiet:
19648       case OPT_version:
19649       case OPT_v:
19650       case OPT_w:
19651       case OPT_L:
19652       case OPT_D:
19653       case OPT_I:
19654       case OPT_U:
19655       case OPT_SPECIAL_unknown:
19656       case OPT_SPECIAL_ignore:
19657       case OPT_SPECIAL_program_name:
19658       case OPT_SPECIAL_input_file:
19659       case OPT_grecord_gcc_switches:
19660       case OPT_gno_record_gcc_switches:
19661       case OPT__output_pch_:
19662       case OPT_fdiagnostics_show_location_:
19663       case OPT_fdiagnostics_show_option:
19664       case OPT_fdiagnostics_show_caret:
19665       case OPT_fdiagnostics_color_:
19666       case OPT_fverbose_asm:
19667       case OPT____:
19668       case OPT__sysroot_:
19669       case OPT_nostdinc:
19670       case OPT_nostdinc__:
19671       case OPT_fpreprocessed:
19672       case OPT_fltrans_output_list_:
19673       case OPT_fresolution_:
19674         /* Ignore these.  */
19675         continue;
19676       default:
19677         if (cl_options[save_decoded_options[j].opt_index].flags
19678             & CL_NO_DWARF_RECORD)
19679           continue;
19680         gcc_checking_assert (save_decoded_options[j].canonical_option[0][0]
19681                              == '-');
19682         switch (save_decoded_options[j].canonical_option[0][1])
19683           {
19684           case 'M':
19685           case 'i':
19686           case 'W':
19687             continue;
19688           case 'f':
19689             if (strncmp (save_decoded_options[j].canonical_option[0] + 2,
19690                          "dump", 4) == 0)
19691               continue;
19692             break;
19693           default:
19694             break;
19695           }
19696         switches.safe_push (save_decoded_options[j].orig_option_with_args_text);
19697         len += strlen (save_decoded_options[j].orig_option_with_args_text) + 1;
19698         break;
19699       }
19700
19701   producer = XNEWVEC (char, plen + 1 + len + 1);
19702   tail = producer;
19703   sprintf (tail, "%s %s", language_string, version_string);
19704   tail += plen;
19705
19706   FOR_EACH_VEC_ELT (switches, j, p)
19707     {
19708       len = strlen (p);
19709       *tail = ' ';
19710       memcpy (tail + 1, p, len);
19711       tail += len + 1;
19712     }
19713
19714   *tail = '\0';
19715   return producer;
19716 }
19717
19718 /* Given a C and/or C++ language/version string return the "highest".
19719    C++ is assumed to be "higher" than C in this case.  Used for merging
19720    LTO translation unit languages.  */
19721 static const char *
19722 highest_c_language (const char *lang1, const char *lang2)
19723 {
19724   if (strcmp ("GNU C++14", lang1) == 0 || strcmp ("GNU C++14", lang2) == 0)
19725     return "GNU C++14";
19726   if (strcmp ("GNU C++11", lang1) == 0 || strcmp ("GNU C++11", lang2) == 0)
19727     return "GNU C++11";
19728   if (strcmp ("GNU C++98", lang1) == 0 || strcmp ("GNU C++98", lang2) == 0)
19729     return "GNU C++98";
19730
19731   if (strcmp ("GNU C11", lang1) == 0 || strcmp ("GNU C11", lang2) == 0)
19732     return "GNU C11";
19733   if (strcmp ("GNU C99", lang1) == 0 || strcmp ("GNU C99", lang2) == 0)
19734     return "GNU C99";
19735   if (strcmp ("GNU C89", lang1) == 0 || strcmp ("GNU C89", lang2) == 0)
19736     return "GNU C89";
19737
19738   gcc_unreachable ();
19739 }
19740
19741
19742 /* Generate the DIE for the compilation unit.  */
19743
19744 static dw_die_ref
19745 gen_compile_unit_die (const char *filename)
19746 {
19747   dw_die_ref die;
19748   const char *language_string = lang_hooks.name;
19749   int language;
19750
19751   die = new_die (DW_TAG_compile_unit, NULL, NULL);
19752
19753   if (filename)
19754     {
19755       add_name_attribute (die, filename);
19756       /* Don't add cwd for <built-in>.  */
19757       if (!IS_ABSOLUTE_PATH (filename) && filename[0] != '<')
19758         add_comp_dir_attribute (die);
19759     }
19760
19761   add_AT_string (die, DW_AT_producer, producer_string ? producer_string : "");
19762
19763   /* If our producer is LTO try to figure out a common language to use
19764      from the global list of translation units.  */
19765   if (strcmp (language_string, "GNU GIMPLE") == 0)
19766     {
19767       unsigned i;
19768       tree t;
19769       const char *common_lang = NULL;
19770
19771       FOR_EACH_VEC_SAFE_ELT (all_translation_units, i, t)
19772         {
19773           if (!TRANSLATION_UNIT_LANGUAGE (t))
19774             continue;
19775           if (!common_lang)
19776             common_lang = TRANSLATION_UNIT_LANGUAGE (t);
19777           else if (strcmp (common_lang, TRANSLATION_UNIT_LANGUAGE (t)) == 0)
19778             ;
19779           else if (strncmp (common_lang, "GNU C", 5) == 0
19780                     && strncmp (TRANSLATION_UNIT_LANGUAGE (t), "GNU C", 5) == 0)
19781             /* Mixing C and C++ is ok, use C++ in that case.  */
19782             common_lang = highest_c_language (common_lang,
19783                                               TRANSLATION_UNIT_LANGUAGE (t));
19784           else
19785             {
19786               /* Fall back to C.  */
19787               common_lang = NULL;
19788               break;
19789             }
19790         }
19791
19792       if (common_lang)
19793         language_string = common_lang;
19794     }
19795
19796   language = DW_LANG_C;
19797   if (strncmp (language_string, "GNU C", 5) == 0
19798       && ISDIGIT (language_string[5]))
19799     {
19800       language = DW_LANG_C89;
19801       if (dwarf_version >= 3 || !dwarf_strict)
19802         {
19803           if (strcmp (language_string, "GNU C89") != 0)
19804             language = DW_LANG_C99;
19805
19806           if (dwarf_version >= 5 /* || !dwarf_strict */)
19807             if (strcmp (language_string, "GNU C11") == 0)
19808               language = DW_LANG_C11;
19809         }
19810     }
19811   else if (strncmp (language_string, "GNU C++", 7) == 0)
19812     {
19813       language = DW_LANG_C_plus_plus;
19814       if (dwarf_version >= 5 /* || !dwarf_strict */)
19815         {
19816           if (strcmp (language_string, "GNU C++11") == 0)
19817             language = DW_LANG_C_plus_plus_11;
19818           else if (strcmp (language_string, "GNU C++14") == 0)
19819             language = DW_LANG_C_plus_plus_14;
19820         }
19821     }
19822   else if (strcmp (language_string, "GNU F77") == 0)
19823     language = DW_LANG_Fortran77;
19824   else if (strcmp (language_string, "GNU Pascal") == 0)
19825     language = DW_LANG_Pascal83;
19826   else if (dwarf_version >= 3 || !dwarf_strict)
19827     {
19828       if (strcmp (language_string, "GNU Ada") == 0)
19829         language = DW_LANG_Ada95;
19830       else if (strncmp (language_string, "GNU Fortran", 11) == 0)
19831         {
19832           language = DW_LANG_Fortran95;
19833           if (dwarf_version >= 5 /* || !dwarf_strict */)
19834             {
19835               if (strcmp (language_string, "GNU Fortran2003") == 0)
19836                 language = DW_LANG_Fortran03;
19837               else if (strcmp (language_string, "GNU Fortran2008") == 0)
19838                 language = DW_LANG_Fortran08;
19839             }
19840         }
19841       else if (strcmp (language_string, "GNU Java") == 0)
19842         language = DW_LANG_Java;
19843       else if (strcmp (language_string, "GNU Objective-C") == 0)
19844         language = DW_LANG_ObjC;
19845       else if (strcmp (language_string, "GNU Objective-C++") == 0)
19846         language = DW_LANG_ObjC_plus_plus;
19847       else if (dwarf_version >= 5 || !dwarf_strict)
19848         {
19849           if (strcmp (language_string, "GNU Go") == 0)
19850             language = DW_LANG_Go;
19851         }
19852     }
19853   /* Use a degraded Fortran setting in strict DWARF2 so is_fortran works.  */
19854   else if (strncmp (language_string, "GNU Fortran", 11) == 0)
19855     language = DW_LANG_Fortran90;
19856
19857   add_AT_unsigned (die, DW_AT_language, language);
19858
19859   switch (language)
19860     {
19861     case DW_LANG_Fortran77:
19862     case DW_LANG_Fortran90:
19863     case DW_LANG_Fortran95:
19864     case DW_LANG_Fortran03:
19865     case DW_LANG_Fortran08:
19866       /* Fortran has case insensitive identifiers and the front-end
19867          lowercases everything.  */
19868       add_AT_unsigned (die, DW_AT_identifier_case, DW_ID_down_case);
19869       break;
19870     default:
19871       /* The default DW_ID_case_sensitive doesn't need to be specified.  */
19872       break;
19873     }
19874   return die;
19875 }
19876
19877 /* Generate the DIE for a base class.  */
19878
19879 static void
19880 gen_inheritance_die (tree binfo, tree access, dw_die_ref context_die)
19881 {
19882   dw_die_ref die = new_die (DW_TAG_inheritance, context_die, binfo);
19883
19884   add_type_attribute (die, BINFO_TYPE (binfo), TYPE_UNQUALIFIED, context_die);
19885   add_data_member_location_attribute (die, binfo);
19886
19887   if (BINFO_VIRTUAL_P (binfo))
19888     add_AT_unsigned (die, DW_AT_virtuality, DW_VIRTUALITY_virtual);
19889
19890   /* In DWARF3+ the default is DW_ACCESS_private only in DW_TAG_class_type
19891      children, otherwise the default is DW_ACCESS_public.  In DWARF2
19892      the default has always been DW_ACCESS_private.  */
19893   if (access == access_public_node)
19894     {
19895       if (dwarf_version == 2
19896           || context_die->die_tag == DW_TAG_class_type)
19897       add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_public);
19898     }
19899   else if (access == access_protected_node)
19900     add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_protected);
19901   else if (dwarf_version > 2
19902            && context_die->die_tag != DW_TAG_class_type)
19903     add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_private);
19904 }
19905
19906 /* Generate a DIE for a class member.  */
19907
19908 static void
19909 gen_member_die (tree type, dw_die_ref context_die)
19910 {
19911   tree member;
19912   tree binfo = TYPE_BINFO (type);
19913   dw_die_ref child;
19914
19915   /* If this is not an incomplete type, output descriptions of each of its
19916      members. Note that as we output the DIEs necessary to represent the
19917      members of this record or union type, we will also be trying to output
19918      DIEs to represent the *types* of those members. However the `type'
19919      function (above) will specifically avoid generating type DIEs for member
19920      types *within* the list of member DIEs for this (containing) type except
19921      for those types (of members) which are explicitly marked as also being
19922      members of this (containing) type themselves.  The g++ front- end can
19923      force any given type to be treated as a member of some other (containing)
19924      type by setting the TYPE_CONTEXT of the given (member) type to point to
19925      the TREE node representing the appropriate (containing) type.  */
19926
19927   /* First output info about the base classes.  */
19928   if (binfo)
19929     {
19930       vec<tree, va_gc> *accesses = BINFO_BASE_ACCESSES (binfo);
19931       int i;
19932       tree base;
19933
19934       for (i = 0; BINFO_BASE_ITERATE (binfo, i, base); i++)
19935         gen_inheritance_die (base,
19936                              (accesses ? (*accesses)[i] : access_public_node),
19937                              context_die);
19938     }
19939
19940   /* Now output info about the data members and type members.  */
19941   for (member = TYPE_FIELDS (type); member; member = DECL_CHAIN (member))
19942     {
19943       /* If we thought we were generating minimal debug info for TYPE
19944          and then changed our minds, some of the member declarations
19945          may have already been defined.  Don't define them again, but
19946          do put them in the right order.  */
19947
19948       child = lookup_decl_die (member);
19949       if (child)
19950         splice_child_die (context_die, child);
19951       else
19952         gen_decl_die (member, NULL, context_die);
19953     }
19954
19955   /* Now output info about the function members (if any).  */
19956   for (member = TYPE_METHODS (type); member; member = DECL_CHAIN (member))
19957     {
19958       /* Don't include clones in the member list.  */
19959       if (DECL_ABSTRACT_ORIGIN (member))
19960         continue;
19961
19962       child = lookup_decl_die (member);
19963       if (child)
19964         splice_child_die (context_die, child);
19965       else
19966         gen_decl_die (member, NULL, context_die);
19967     }
19968 }
19969
19970 /* Generate a DIE for a structure or union type.  If TYPE_DECL_SUPPRESS_DEBUG
19971    is set, we pretend that the type was never defined, so we only get the
19972    member DIEs needed by later specification DIEs.  */
19973
19974 static void
19975 gen_struct_or_union_type_die (tree type, dw_die_ref context_die,
19976                                 enum debug_info_usage usage)
19977 {
19978   dw_die_ref type_die = lookup_type_die (type);
19979   dw_die_ref scope_die = 0;
19980   int nested = 0;
19981   int complete = (TYPE_SIZE (type)
19982                   && (! TYPE_STUB_DECL (type)
19983                       || ! TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type))));
19984   int ns_decl = (context_die && context_die->die_tag == DW_TAG_namespace);
19985   complete = complete && should_emit_struct_debug (type, usage);
19986
19987   if (type_die && ! complete)
19988     return;
19989
19990   if (TYPE_CONTEXT (type) != NULL_TREE
19991       && (AGGREGATE_TYPE_P (TYPE_CONTEXT (type))
19992           || TREE_CODE (TYPE_CONTEXT (type)) == NAMESPACE_DECL))
19993     nested = 1;
19994
19995   scope_die = scope_die_for (type, context_die);
19996
19997   /* Generate child dies for template paramaters.  */
19998   if (!type_die && debug_info_level > DINFO_LEVEL_TERSE)
19999     schedule_generic_params_dies_gen (type);
20000
20001   if (! type_die || (nested && is_cu_die (scope_die)))
20002     /* First occurrence of type or toplevel definition of nested class.  */
20003     {
20004       dw_die_ref old_die = type_die;
20005
20006       type_die = new_die (TREE_CODE (type) == RECORD_TYPE
20007                           ? record_type_tag (type) : DW_TAG_union_type,
20008                           scope_die, type);
20009       equate_type_number_to_die (type, type_die);
20010       if (old_die)
20011         add_AT_specification (type_die, old_die);
20012       else
20013         add_name_attribute (type_die, type_tag (type));
20014     }
20015   else
20016     remove_AT (type_die, DW_AT_declaration);
20017
20018   /* If this type has been completed, then give it a byte_size attribute and
20019      then give a list of members.  */
20020   if (complete && !ns_decl)
20021     {
20022       /* Prevent infinite recursion in cases where the type of some member of
20023          this type is expressed in terms of this type itself.  */
20024       TREE_ASM_WRITTEN (type) = 1;
20025       add_byte_size_attribute (type_die, type);
20026       if (TYPE_STUB_DECL (type) != NULL_TREE)
20027         {
20028           add_src_coords_attributes (type_die, TYPE_STUB_DECL (type));
20029           add_accessibility_attribute (type_die, TYPE_STUB_DECL (type));
20030         }
20031
20032       /* If the first reference to this type was as the return type of an
20033          inline function, then it may not have a parent.  Fix this now.  */
20034       if (type_die->die_parent == NULL)
20035         add_child_die (scope_die, type_die);
20036
20037       push_decl_scope (type);
20038       gen_member_die (type, type_die);
20039       pop_decl_scope ();
20040
20041       add_gnat_descriptive_type_attribute (type_die, type, context_die);
20042       if (TYPE_ARTIFICIAL (type))
20043         add_AT_flag (type_die, DW_AT_artificial, 1);
20044
20045       /* GNU extension: Record what type our vtable lives in.  */
20046       if (TYPE_VFIELD (type))
20047         {
20048           tree vtype = DECL_FCONTEXT (TYPE_VFIELD (type));
20049
20050           gen_type_die (vtype, context_die);
20051           add_AT_die_ref (type_die, DW_AT_containing_type,
20052                           lookup_type_die (vtype));
20053         }
20054     }
20055   else
20056     {
20057       add_AT_flag (type_die, DW_AT_declaration, 1);
20058
20059       /* We don't need to do this for function-local types.  */
20060       if (TYPE_STUB_DECL (type)
20061           && ! decl_function_context (TYPE_STUB_DECL (type)))
20062         vec_safe_push (incomplete_types, type);
20063     }
20064
20065   if (get_AT (type_die, DW_AT_name))
20066     add_pubtype (type, type_die);
20067 }
20068
20069 /* Generate a DIE for a subroutine _type_.  */
20070
20071 static void
20072 gen_subroutine_type_die (tree type, dw_die_ref context_die)
20073 {
20074   tree return_type = TREE_TYPE (type);
20075   dw_die_ref subr_die
20076     = new_die (DW_TAG_subroutine_type,
20077                scope_die_for (type, context_die), type);
20078
20079   equate_type_number_to_die (type, subr_die);
20080   add_prototyped_attribute (subr_die, type);
20081   add_type_attribute (subr_die, return_type, TYPE_UNQUALIFIED, context_die);
20082   gen_formal_types_die (type, subr_die);
20083
20084   if (get_AT (subr_die, DW_AT_name))
20085     add_pubtype (type, subr_die);
20086 }
20087
20088 /* Generate a DIE for a type definition.  */
20089
20090 static void
20091 gen_typedef_die (tree decl, dw_die_ref context_die)
20092 {
20093   dw_die_ref type_die;
20094   tree origin;
20095
20096   if (TREE_ASM_WRITTEN (decl))
20097     return;
20098
20099   TREE_ASM_WRITTEN (decl) = 1;
20100   type_die = new_die (DW_TAG_typedef, context_die, decl);
20101   origin = decl_ultimate_origin (decl);
20102   if (origin != NULL)
20103     add_abstract_origin_attribute (type_die, origin);
20104   else
20105     {
20106       tree type;
20107
20108       add_name_and_src_coords_attributes (type_die, decl);
20109       if (DECL_ORIGINAL_TYPE (decl))
20110         {
20111           type = DECL_ORIGINAL_TYPE (decl);
20112
20113           gcc_assert (type != TREE_TYPE (decl));
20114           equate_type_number_to_die (TREE_TYPE (decl), type_die);
20115         }
20116       else
20117         {
20118           type = TREE_TYPE (decl);
20119
20120           if (is_naming_typedef_decl (TYPE_NAME (type)))
20121             {
20122               /* Here, we are in the case of decl being a typedef naming
20123                  an anonymous type, e.g:
20124                      typedef struct {...} foo;
20125                  In that case TREE_TYPE (decl) is not a typedef variant
20126                  type and TYPE_NAME of the anonymous type is set to the
20127                  TYPE_DECL of the typedef. This construct is emitted by
20128                  the C++ FE.
20129
20130                  TYPE is the anonymous struct named by the typedef
20131                  DECL. As we need the DW_AT_type attribute of the
20132                  DW_TAG_typedef to point to the DIE of TYPE, let's
20133                  generate that DIE right away. add_type_attribute
20134                  called below will then pick (via lookup_type_die) that
20135                  anonymous struct DIE.  */
20136               if (!TREE_ASM_WRITTEN (type))
20137                 gen_tagged_type_die (type, context_die, DINFO_USAGE_DIR_USE);
20138
20139               /* This is a GNU Extension.  We are adding a
20140                  DW_AT_linkage_name attribute to the DIE of the
20141                  anonymous struct TYPE.  The value of that attribute
20142                  is the name of the typedef decl naming the anonymous
20143                  struct.  This greatly eases the work of consumers of
20144                  this debug info.  */
20145               add_linkage_attr (lookup_type_die (type), decl);
20146             }
20147         }
20148
20149       add_type_attribute (type_die, type, decl_quals (decl), context_die);
20150
20151       if (is_naming_typedef_decl (decl))
20152         /* We want that all subsequent calls to lookup_type_die with
20153            TYPE in argument yield the DW_TAG_typedef we have just
20154            created.  */
20155         equate_type_number_to_die (type, type_die);
20156
20157       add_accessibility_attribute (type_die, decl);
20158     }
20159
20160   if (DECL_ABSTRACT_P (decl))
20161     equate_decl_number_to_die (decl, type_die);
20162
20163   if (get_AT (type_die, DW_AT_name))
20164     add_pubtype (decl, type_die);
20165 }
20166
20167 /* Generate a DIE for a struct, class, enum or union type.  */
20168
20169 static void
20170 gen_tagged_type_die (tree type,
20171                      dw_die_ref context_die,
20172                      enum debug_info_usage usage)
20173 {
20174   int need_pop;
20175
20176   if (type == NULL_TREE
20177       || !is_tagged_type (type))
20178     return;
20179
20180   /* If this is a nested type whose containing class hasn't been written
20181      out yet, writing it out will cover this one, too.  This does not apply
20182      to instantiations of member class templates; they need to be added to
20183      the containing class as they are generated.  FIXME: This hurts the
20184      idea of combining type decls from multiple TUs, since we can't predict
20185      what set of template instantiations we'll get.  */
20186   if (TYPE_CONTEXT (type)
20187       && AGGREGATE_TYPE_P (TYPE_CONTEXT (type))
20188       && ! TREE_ASM_WRITTEN (TYPE_CONTEXT (type)))
20189     {
20190       gen_type_die_with_usage (TYPE_CONTEXT (type), context_die, usage);
20191
20192       if (TREE_ASM_WRITTEN (type))
20193         return;
20194
20195       /* If that failed, attach ourselves to the stub.  */
20196       push_decl_scope (TYPE_CONTEXT (type));
20197       context_die = lookup_type_die (TYPE_CONTEXT (type));
20198       need_pop = 1;
20199     }
20200   else if (TYPE_CONTEXT (type) != NULL_TREE
20201            && (TREE_CODE (TYPE_CONTEXT (type)) == FUNCTION_DECL))
20202     {
20203       /* If this type is local to a function that hasn't been written
20204          out yet, use a NULL context for now; it will be fixed up in
20205          decls_for_scope.  */
20206       context_die = lookup_decl_die (TYPE_CONTEXT (type));
20207       /* A declaration DIE doesn't count; nested types need to go in the
20208          specification.  */
20209       if (context_die && is_declaration_die (context_die))
20210         context_die = NULL;
20211       need_pop = 0;
20212     }
20213   else
20214     {
20215       context_die = declare_in_namespace (type, context_die);
20216       need_pop = 0;
20217     }
20218
20219   if (TREE_CODE (type) == ENUMERAL_TYPE)
20220     {
20221       /* This might have been written out by the call to
20222          declare_in_namespace.  */
20223       if (!TREE_ASM_WRITTEN (type))
20224         gen_enumeration_type_die (type, context_die);
20225     }
20226   else
20227     gen_struct_or_union_type_die (type, context_die, usage);
20228
20229   if (need_pop)
20230     pop_decl_scope ();
20231
20232   /* Don't set TREE_ASM_WRITTEN on an incomplete struct; we want to fix
20233      it up if it is ever completed.  gen_*_type_die will set it for us
20234      when appropriate.  */
20235 }
20236
20237 /* Generate a type description DIE.  */
20238
20239 static void
20240 gen_type_die_with_usage (tree type, dw_die_ref context_die,
20241                          enum debug_info_usage usage)
20242 {
20243   struct array_descr_info info;
20244
20245   if (type == NULL_TREE || type == error_mark_node)
20246     return;
20247
20248   if (TYPE_NAME (type) != NULL_TREE
20249       && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
20250       && is_redundant_typedef (TYPE_NAME (type))
20251       && DECL_ORIGINAL_TYPE (TYPE_NAME (type)))
20252     /* The DECL of this type is a typedef we don't want to emit debug
20253        info for but we want debug info for its underlying typedef.
20254        This can happen for e.g, the injected-class-name of a C++
20255        type.  */
20256     type = DECL_ORIGINAL_TYPE (TYPE_NAME (type));
20257
20258   /* If TYPE is a typedef type variant, let's generate debug info
20259      for the parent typedef which TYPE is a type of.  */
20260   if (typedef_variant_p (type))
20261     {
20262       if (TREE_ASM_WRITTEN (type))
20263         return;
20264
20265       /* Prevent broken recursion; we can't hand off to the same type.  */
20266       gcc_assert (DECL_ORIGINAL_TYPE (TYPE_NAME (type)) != type);
20267
20268       /* Give typedefs the right scope.  */
20269       context_die = scope_die_for (type, context_die);
20270
20271       TREE_ASM_WRITTEN (type) = 1;
20272
20273       gen_decl_die (TYPE_NAME (type), NULL, context_die);
20274       return;
20275     }
20276
20277   /* If type is an anonymous tagged type named by a typedef, let's
20278      generate debug info for the typedef.  */
20279   if (is_naming_typedef_decl (TYPE_NAME (type)))
20280     {
20281       /* Use the DIE of the containing namespace as the parent DIE of
20282          the type description DIE we want to generate.  */
20283       if (DECL_CONTEXT (TYPE_NAME (type))
20284           && TREE_CODE (DECL_CONTEXT (TYPE_NAME (type))) == NAMESPACE_DECL)
20285         context_die = get_context_die (DECL_CONTEXT (TYPE_NAME (type)));
20286       
20287       gen_decl_die (TYPE_NAME (type), NULL, context_die);
20288       return;
20289     }
20290
20291   /* We are going to output a DIE to represent the unqualified version
20292      of this type (i.e. without any const or volatile qualifiers) so
20293      get the main variant (i.e. the unqualified version) of this type
20294      now.  (Vectors and arrays are special because the debugging info is in the
20295      cloned type itself).  */
20296   if (TREE_CODE (type) != VECTOR_TYPE
20297       && TREE_CODE (type) != ARRAY_TYPE)
20298     type = type_main_variant (type);
20299
20300   /* If this is an array type with hidden descriptor, handle it first.  */
20301   if (!TREE_ASM_WRITTEN (type)
20302       && lang_hooks.types.get_array_descr_info)
20303     {
20304       memset (&info, 0, sizeof (info));
20305       if (lang_hooks.types.get_array_descr_info (type, &info))
20306         {
20307           gen_descr_array_type_die (type, &info, context_die);
20308           TREE_ASM_WRITTEN (type) = 1;
20309           return;
20310         }
20311     }
20312
20313   if (TREE_ASM_WRITTEN (type))
20314     return;
20315
20316   switch (TREE_CODE (type))
20317     {
20318     case ERROR_MARK:
20319       break;
20320
20321     case POINTER_TYPE:
20322     case REFERENCE_TYPE:
20323       /* We must set TREE_ASM_WRITTEN in case this is a recursive type.  This
20324          ensures that the gen_type_die recursion will terminate even if the
20325          type is recursive.  Recursive types are possible in Ada.  */
20326       /* ??? We could perhaps do this for all types before the switch
20327          statement.  */
20328       TREE_ASM_WRITTEN (type) = 1;
20329
20330       /* For these types, all that is required is that we output a DIE (or a
20331          set of DIEs) to represent the "basis" type.  */
20332       gen_type_die_with_usage (TREE_TYPE (type), context_die,
20333                                 DINFO_USAGE_IND_USE);
20334       break;
20335
20336     case OFFSET_TYPE:
20337       /* This code is used for C++ pointer-to-data-member types.
20338          Output a description of the relevant class type.  */
20339       gen_type_die_with_usage (TYPE_OFFSET_BASETYPE (type), context_die,
20340                                         DINFO_USAGE_IND_USE);
20341
20342       /* Output a description of the type of the object pointed to.  */
20343       gen_type_die_with_usage (TREE_TYPE (type), context_die,
20344                                         DINFO_USAGE_IND_USE);
20345
20346       /* Now output a DIE to represent this pointer-to-data-member type
20347          itself.  */
20348       gen_ptr_to_mbr_type_die (type, context_die);
20349       break;
20350
20351     case FUNCTION_TYPE:
20352       /* Force out return type (in case it wasn't forced out already).  */
20353       gen_type_die_with_usage (TREE_TYPE (type), context_die,
20354                                         DINFO_USAGE_DIR_USE);
20355       gen_subroutine_type_die (type, context_die);
20356       break;
20357
20358     case METHOD_TYPE:
20359       /* Force out return type (in case it wasn't forced out already).  */
20360       gen_type_die_with_usage (TREE_TYPE (type), context_die,
20361                                         DINFO_USAGE_DIR_USE);
20362       gen_subroutine_type_die (type, context_die);
20363       break;
20364
20365     case ARRAY_TYPE:
20366       gen_array_type_die (type, context_die);
20367       break;
20368
20369     case VECTOR_TYPE:
20370       gen_array_type_die (type, context_die);
20371       break;
20372
20373     case ENUMERAL_TYPE:
20374     case RECORD_TYPE:
20375     case UNION_TYPE:
20376     case QUAL_UNION_TYPE:
20377       gen_tagged_type_die (type, context_die, usage);
20378       return;
20379
20380     case VOID_TYPE:
20381     case INTEGER_TYPE:
20382     case REAL_TYPE:
20383     case FIXED_POINT_TYPE:
20384     case COMPLEX_TYPE:
20385     case BOOLEAN_TYPE:
20386     case POINTER_BOUNDS_TYPE:
20387       /* No DIEs needed for fundamental types.  */
20388       break;
20389
20390     case NULLPTR_TYPE:
20391     case LANG_TYPE:
20392       /* Just use DW_TAG_unspecified_type.  */
20393       {
20394         dw_die_ref type_die = lookup_type_die (type);
20395         if (type_die == NULL)
20396           {
20397             tree name = TYPE_IDENTIFIER (type);
20398             type_die = new_die (DW_TAG_unspecified_type, comp_unit_die (),
20399                                 type);
20400             add_name_attribute (type_die, IDENTIFIER_POINTER (name));
20401             equate_type_number_to_die (type, type_die);
20402           }
20403       }
20404       break;
20405
20406     default:
20407       if (is_cxx_auto (type))
20408         {
20409           tree name = TYPE_IDENTIFIER (type);
20410           dw_die_ref *die = (name == get_identifier ("auto")
20411                              ? &auto_die : &decltype_auto_die);
20412           if (!*die)
20413             {
20414               *die = new_die (DW_TAG_unspecified_type,
20415                               comp_unit_die (), NULL_TREE);
20416               add_name_attribute (*die, IDENTIFIER_POINTER (name));
20417             }
20418           equate_type_number_to_die (type, *die);
20419           break;
20420         }
20421       gcc_unreachable ();
20422     }
20423
20424   TREE_ASM_WRITTEN (type) = 1;
20425 }
20426
20427 static void
20428 gen_type_die (tree type, dw_die_ref context_die)
20429 {
20430   gen_type_die_with_usage (type, context_die, DINFO_USAGE_DIR_USE);
20431 }
20432
20433 /* Generate a DW_TAG_lexical_block DIE followed by DIEs to represent all of the
20434    things which are local to the given block.  */
20435
20436 static void
20437 gen_block_die (tree stmt, dw_die_ref context_die)
20438 {
20439   int must_output_die = 0;
20440   bool inlined_func;
20441
20442   /* Ignore blocks that are NULL.  */
20443   if (stmt == NULL_TREE)
20444     return;
20445
20446   inlined_func = inlined_function_outer_scope_p (stmt);
20447
20448   /* If the block is one fragment of a non-contiguous block, do not
20449      process the variables, since they will have been done by the
20450      origin block.  Do process subblocks.  */
20451   if (BLOCK_FRAGMENT_ORIGIN (stmt))
20452     {
20453       tree sub;
20454
20455       for (sub = BLOCK_SUBBLOCKS (stmt); sub; sub = BLOCK_CHAIN (sub))
20456         gen_block_die (sub, context_die);
20457
20458       return;
20459     }
20460
20461   /* Determine if we need to output any Dwarf DIEs at all to represent this
20462      block.  */
20463   if (inlined_func)
20464     /* The outer scopes for inlinings *must* always be represented.  We
20465        generate DW_TAG_inlined_subroutine DIEs for them.  (See below.) */
20466     must_output_die = 1;
20467   else
20468     {
20469       /* Determine if this block directly contains any "significant"
20470          local declarations which we will need to output DIEs for.  */
20471       if (debug_info_level > DINFO_LEVEL_TERSE)
20472         /* We are not in terse mode so *any* local declaration counts
20473            as being a "significant" one.  */
20474         must_output_die = ((BLOCK_VARS (stmt) != NULL
20475                             || BLOCK_NUM_NONLOCALIZED_VARS (stmt))
20476                            && (TREE_USED (stmt)
20477                                || TREE_ASM_WRITTEN (stmt)
20478                                || BLOCK_ABSTRACT (stmt)));
20479       else if ((TREE_USED (stmt)
20480                 || TREE_ASM_WRITTEN (stmt)
20481                 || BLOCK_ABSTRACT (stmt))
20482                && !dwarf2out_ignore_block (stmt))
20483         must_output_die = 1;
20484     }
20485
20486   /* It would be a waste of space to generate a Dwarf DW_TAG_lexical_block
20487      DIE for any block which contains no significant local declarations at
20488      all.  Rather, in such cases we just call `decls_for_scope' so that any
20489      needed Dwarf info for any sub-blocks will get properly generated. Note
20490      that in terse mode, our definition of what constitutes a "significant"
20491      local declaration gets restricted to include only inlined function
20492      instances and local (nested) function definitions.  */
20493   if (must_output_die)
20494     {
20495       if (inlined_func)
20496         {
20497           /* If STMT block is abstract, that means we have been called
20498              indirectly from dwarf2out_abstract_function.
20499              That function rightfully marks the descendent blocks (of
20500              the abstract function it is dealing with) as being abstract,
20501              precisely to prevent us from emitting any
20502              DW_TAG_inlined_subroutine DIE as a descendent
20503              of an abstract function instance. So in that case, we should
20504              not call gen_inlined_subroutine_die.
20505
20506              Later though, when cgraph asks dwarf2out to emit info
20507              for the concrete instance of the function decl into which
20508              the concrete instance of STMT got inlined, the later will lead
20509              to the generation of a DW_TAG_inlined_subroutine DIE.  */
20510           if (! BLOCK_ABSTRACT (stmt))
20511             gen_inlined_subroutine_die (stmt, context_die);
20512         }
20513       else
20514         gen_lexical_block_die (stmt, context_die);
20515     }
20516   else
20517     decls_for_scope (stmt, context_die);
20518 }
20519
20520 /* Process variable DECL (or variable with origin ORIGIN) within
20521    block STMT and add it to CONTEXT_DIE.  */
20522 static void
20523 process_scope_var (tree stmt, tree decl, tree origin, dw_die_ref context_die)
20524 {
20525   dw_die_ref die;
20526   tree decl_or_origin = decl ? decl : origin;
20527
20528   if (TREE_CODE (decl_or_origin) == FUNCTION_DECL)
20529     die = lookup_decl_die (decl_or_origin);
20530   else if (TREE_CODE (decl_or_origin) == TYPE_DECL
20531            && TYPE_DECL_IS_STUB (decl_or_origin))
20532     die = lookup_type_die (TREE_TYPE (decl_or_origin));
20533   else
20534     die = NULL;
20535
20536   if (die != NULL && die->die_parent == NULL)
20537     add_child_die (context_die, die);
20538   else if (TREE_CODE (decl_or_origin) == IMPORTED_DECL)
20539     dwarf2out_imported_module_or_decl_1 (decl_or_origin, DECL_NAME (decl_or_origin),
20540                                          stmt, context_die);
20541   else
20542     gen_decl_die (decl, origin, context_die);
20543 }
20544
20545 /* Generate all of the decls declared within a given scope and (recursively)
20546    all of its sub-blocks.  */
20547
20548 static void
20549 decls_for_scope (tree stmt, dw_die_ref context_die)
20550 {
20551   tree decl;
20552   unsigned int i;
20553   tree subblocks;
20554
20555   /* Ignore NULL blocks.  */
20556   if (stmt == NULL_TREE)
20557     return;
20558
20559   /* Output the DIEs to represent all of the data objects and typedefs
20560      declared directly within this block but not within any nested
20561      sub-blocks.  Also, nested function and tag DIEs have been
20562      generated with a parent of NULL; fix that up now.  We don't
20563      have to do this if we're at -g1.  */
20564   if (debug_info_level > DINFO_LEVEL_TERSE)
20565     {
20566       for (decl = BLOCK_VARS (stmt); decl != NULL; decl = DECL_CHAIN (decl))
20567         process_scope_var (stmt, decl, NULL_TREE, context_die);
20568       for (i = 0; i < BLOCK_NUM_NONLOCALIZED_VARS (stmt); i++)
20569         process_scope_var (stmt, NULL, BLOCK_NONLOCALIZED_VAR (stmt, i),
20570                            context_die);
20571     }
20572
20573   /* Even if we're at -g1, we need to process the subblocks in order to get
20574      inlined call information.  */
20575
20576   /* Output the DIEs to represent all sub-blocks (and the items declared
20577      therein) of this block.  */
20578   for (subblocks = BLOCK_SUBBLOCKS (stmt);
20579        subblocks != NULL;
20580        subblocks = BLOCK_CHAIN (subblocks))
20581     gen_block_die (subblocks, context_die);
20582 }
20583
20584 /* Is this a typedef we can avoid emitting?  */
20585
20586 static inline int
20587 is_redundant_typedef (const_tree decl)
20588 {
20589   if (TYPE_DECL_IS_STUB (decl))
20590     return 1;
20591
20592   if (DECL_ARTIFICIAL (decl)
20593       && DECL_CONTEXT (decl)
20594       && is_tagged_type (DECL_CONTEXT (decl))
20595       && TREE_CODE (TYPE_NAME (DECL_CONTEXT (decl))) == TYPE_DECL
20596       && DECL_NAME (decl) == DECL_NAME (TYPE_NAME (DECL_CONTEXT (decl))))
20597     /* Also ignore the artificial member typedef for the class name.  */
20598     return 1;
20599
20600   return 0;
20601 }
20602
20603 /* Return TRUE if TYPE is a typedef that names a type for linkage
20604    purposes. This kind of typedefs is produced by the C++ FE for
20605    constructs like:
20606
20607    typedef struct {...} foo;
20608
20609    In that case, there is no typedef variant type produced for foo.
20610    Rather, the TREE_TYPE of the TYPE_DECL of foo is the anonymous
20611    struct type.  */
20612
20613 static bool
20614 is_naming_typedef_decl (const_tree decl)
20615 {
20616   if (decl == NULL_TREE
20617       || TREE_CODE (decl) != TYPE_DECL
20618       || !is_tagged_type (TREE_TYPE (decl))
20619       || DECL_IS_BUILTIN (decl)
20620       || is_redundant_typedef (decl)
20621       /* It looks like Ada produces TYPE_DECLs that are very similar
20622          to C++ naming typedefs but that have different
20623          semantics. Let's be specific to c++ for now.  */
20624       || !is_cxx ())
20625     return FALSE;
20626
20627   return (DECL_ORIGINAL_TYPE (decl) == NULL_TREE
20628           && TYPE_NAME (TREE_TYPE (decl)) == decl
20629           && (TYPE_STUB_DECL (TREE_TYPE (decl))
20630               != TYPE_NAME (TREE_TYPE (decl))));
20631 }
20632
20633 /* Looks up the DIE for a context.  */
20634
20635 static inline dw_die_ref
20636 lookup_context_die (tree context)
20637 {
20638   if (context)
20639     {
20640       /* Find die that represents this context.  */
20641       if (TYPE_P (context))
20642         {
20643           context = TYPE_MAIN_VARIANT (context);
20644           dw_die_ref ctx = lookup_type_die (context);
20645           if (!ctx)
20646             return NULL;
20647           return strip_naming_typedef (context, ctx);
20648         }
20649       else
20650         return lookup_decl_die (context);
20651     }
20652   return comp_unit_die ();
20653 }
20654
20655 /* Returns the DIE for a context.  */
20656
20657 static inline dw_die_ref
20658 get_context_die (tree context)
20659 {
20660   if (context)
20661     {
20662       /* Find die that represents this context.  */
20663       if (TYPE_P (context))
20664         {
20665           context = TYPE_MAIN_VARIANT (context);
20666           return strip_naming_typedef (context, force_type_die (context));
20667         }
20668       else
20669         return force_decl_die (context);
20670     }
20671   return comp_unit_die ();
20672 }
20673
20674 /* Returns the DIE for decl.  A DIE will always be returned.  */
20675
20676 static dw_die_ref
20677 force_decl_die (tree decl)
20678 {
20679   dw_die_ref decl_die;
20680   unsigned saved_external_flag;
20681   tree save_fn = NULL_TREE;
20682   decl_die = lookup_decl_die (decl);
20683   if (!decl_die)
20684     {
20685       dw_die_ref context_die = get_context_die (DECL_CONTEXT (decl));
20686
20687       decl_die = lookup_decl_die (decl);
20688       if (decl_die)
20689         return decl_die;
20690
20691       switch (TREE_CODE (decl))
20692         {
20693         case FUNCTION_DECL:
20694           /* Clear current_function_decl, so that gen_subprogram_die thinks
20695              that this is a declaration. At this point, we just want to force
20696              declaration die.  */
20697           save_fn = current_function_decl;
20698           current_function_decl = NULL_TREE;
20699           gen_subprogram_die (decl, context_die);
20700           current_function_decl = save_fn;
20701           break;
20702
20703         case VAR_DECL:
20704           /* Set external flag to force declaration die. Restore it after
20705            gen_decl_die() call.  */
20706           saved_external_flag = DECL_EXTERNAL (decl);
20707           DECL_EXTERNAL (decl) = 1;
20708           gen_decl_die (decl, NULL, context_die);
20709           DECL_EXTERNAL (decl) = saved_external_flag;
20710           break;
20711
20712         case NAMESPACE_DECL:
20713           if (dwarf_version >= 3 || !dwarf_strict)
20714             dwarf2out_decl (decl);
20715           else
20716             /* DWARF2 has neither DW_TAG_module, nor DW_TAG_namespace.  */
20717             decl_die = comp_unit_die ();
20718           break;
20719
20720         case TRANSLATION_UNIT_DECL:
20721           decl_die = comp_unit_die ();
20722           break;
20723
20724         default:
20725           gcc_unreachable ();
20726         }
20727
20728       /* We should be able to find the DIE now.  */
20729       if (!decl_die)
20730         decl_die = lookup_decl_die (decl);
20731       gcc_assert (decl_die);
20732     }
20733
20734   return decl_die;
20735 }
20736
20737 /* Returns the DIE for TYPE, that must not be a base type.  A DIE is
20738    always returned.  */
20739
20740 static dw_die_ref
20741 force_type_die (tree type)
20742 {
20743   dw_die_ref type_die;
20744
20745   type_die = lookup_type_die (type);
20746   if (!type_die)
20747     {
20748       dw_die_ref context_die = get_context_die (TYPE_CONTEXT (type));
20749
20750       type_die = modified_type_die (type, TYPE_QUALS_NO_ADDR_SPACE (type),
20751                                     context_die);
20752       gcc_assert (type_die);
20753     }
20754   return type_die;
20755 }
20756
20757 /* Force out any required namespaces to be able to output DECL,
20758    and return the new context_die for it, if it's changed.  */
20759
20760 static dw_die_ref
20761 setup_namespace_context (tree thing, dw_die_ref context_die)
20762 {
20763   tree context = (DECL_P (thing)
20764                   ? DECL_CONTEXT (thing) : TYPE_CONTEXT (thing));
20765   if (context && TREE_CODE (context) == NAMESPACE_DECL)
20766     /* Force out the namespace.  */
20767     context_die = force_decl_die (context);
20768
20769   return context_die;
20770 }
20771
20772 /* Emit a declaration DIE for THING (which is either a DECL or a tagged
20773    type) within its namespace, if appropriate.
20774
20775    For compatibility with older debuggers, namespace DIEs only contain
20776    declarations; all definitions are emitted at CU scope.  */
20777
20778 static dw_die_ref
20779 declare_in_namespace (tree thing, dw_die_ref context_die)
20780 {
20781   dw_die_ref ns_context;
20782
20783   if (debug_info_level <= DINFO_LEVEL_TERSE)
20784     return context_die;
20785
20786   /* External declarations in the local scope only need to be emitted
20787      once, not once in the namespace and once in the scope.
20788
20789      This avoids declaring the `extern' below in the
20790      namespace DIE as well as in the innermost scope:
20791
20792           namespace S
20793           {
20794             int i=5;
20795             int foo()
20796             {
20797               int i=8;
20798               extern int i;
20799               return i;
20800             }
20801           }
20802   */
20803   if (DECL_P (thing) && DECL_EXTERNAL (thing) && local_scope_p (context_die))
20804     return context_die;
20805
20806   /* If this decl is from an inlined function, then don't try to emit it in its
20807      namespace, as we will get confused.  It would have already been emitted
20808      when the abstract instance of the inline function was emitted anyways.  */
20809   if (DECL_P (thing) && DECL_ABSTRACT_ORIGIN (thing))
20810     return context_die;
20811
20812   ns_context = setup_namespace_context (thing, context_die);
20813
20814   if (ns_context != context_die)
20815     {
20816       if (is_fortran ())
20817         return ns_context;
20818       if (DECL_P (thing))
20819         gen_decl_die (thing, NULL, ns_context);
20820       else
20821         gen_type_die (thing, ns_context);
20822     }
20823   return context_die;
20824 }
20825
20826 /* Generate a DIE for a namespace or namespace alias.  */
20827
20828 static void
20829 gen_namespace_die (tree decl, dw_die_ref context_die)
20830 {
20831   dw_die_ref namespace_die;
20832
20833   /* Namespace aliases have a DECL_ABSTRACT_ORIGIN of the namespace
20834      they are an alias of.  */
20835   if (DECL_ABSTRACT_ORIGIN (decl) == NULL)
20836     {
20837       /* Output a real namespace or module.  */
20838       context_die = setup_namespace_context (decl, comp_unit_die ());
20839       namespace_die = new_die (is_fortran ()
20840                                ? DW_TAG_module : DW_TAG_namespace,
20841                                context_die, decl);
20842       /* For Fortran modules defined in different CU don't add src coords.  */
20843       if (namespace_die->die_tag == DW_TAG_module && DECL_EXTERNAL (decl))
20844         {
20845           const char *name = dwarf2_name (decl, 0);
20846           if (name)
20847             add_name_attribute (namespace_die, name);
20848         }
20849       else
20850         add_name_and_src_coords_attributes (namespace_die, decl);
20851       if (DECL_EXTERNAL (decl))
20852         add_AT_flag (namespace_die, DW_AT_declaration, 1);
20853       equate_decl_number_to_die (decl, namespace_die);
20854     }
20855   else
20856     {
20857       /* Output a namespace alias.  */
20858
20859       /* Force out the namespace we are an alias of, if necessary.  */
20860       dw_die_ref origin_die
20861         = force_decl_die (DECL_ABSTRACT_ORIGIN (decl));
20862
20863       if (DECL_FILE_SCOPE_P (decl)
20864           || TREE_CODE (DECL_CONTEXT (decl)) == NAMESPACE_DECL)
20865         context_die = setup_namespace_context (decl, comp_unit_die ());
20866       /* Now create the namespace alias DIE.  */
20867       namespace_die = new_die (DW_TAG_imported_declaration, context_die, decl);
20868       add_name_and_src_coords_attributes (namespace_die, decl);
20869       add_AT_die_ref (namespace_die, DW_AT_import, origin_die);
20870       equate_decl_number_to_die (decl, namespace_die);
20871     }
20872   /* Bypass dwarf2_name's check for DECL_NAMELESS.  */
20873   if (want_pubnames ())
20874     add_pubname_string (lang_hooks.dwarf_name (decl, 1), namespace_die);
20875 }
20876
20877 /* Generate Dwarf debug information for a decl described by DECL.
20878    The return value is currently only meaningful for PARM_DECLs,
20879    for all other decls it returns NULL.  */
20880
20881 static dw_die_ref
20882 gen_decl_die (tree decl, tree origin, dw_die_ref context_die)
20883 {
20884   tree decl_or_origin = decl ? decl : origin;
20885   tree class_origin = NULL, ultimate_origin;
20886
20887   if (DECL_P (decl_or_origin) && DECL_IGNORED_P (decl_or_origin))
20888     return NULL;
20889
20890   /* Ignore pointer bounds decls.  */
20891   if (DECL_P (decl_or_origin)
20892       && TREE_TYPE (decl_or_origin)
20893       && POINTER_BOUNDS_P (decl_or_origin))
20894     return NULL;
20895
20896   switch (TREE_CODE (decl_or_origin))
20897     {
20898     case ERROR_MARK:
20899       break;
20900
20901     case CONST_DECL:
20902       if (!is_fortran () && !is_ada ())
20903         {
20904           /* The individual enumerators of an enum type get output when we output
20905              the Dwarf representation of the relevant enum type itself.  */
20906           break;
20907         }
20908
20909       /* Emit its type.  */
20910       gen_type_die (TREE_TYPE (decl), context_die);
20911
20912       /* And its containing namespace.  */
20913       context_die = declare_in_namespace (decl, context_die);
20914
20915       gen_const_die (decl, context_die);
20916       break;
20917
20918     case FUNCTION_DECL:
20919       /* Don't output any DIEs to represent mere function declarations,
20920          unless they are class members or explicit block externs.  */
20921       if (DECL_INITIAL (decl_or_origin) == NULL_TREE
20922           && DECL_FILE_SCOPE_P (decl_or_origin)
20923           && (current_function_decl == NULL_TREE
20924               || DECL_ARTIFICIAL (decl_or_origin)))
20925         break;
20926
20927 #if 0
20928       /* FIXME */
20929       /* This doesn't work because the C frontend sets DECL_ABSTRACT_ORIGIN
20930          on local redeclarations of global functions.  That seems broken.  */
20931       if (current_function_decl != decl)
20932         /* This is only a declaration.  */;
20933 #endif
20934
20935       /* If we're emitting a clone, emit info for the abstract instance.  */
20936       if (origin || DECL_ORIGIN (decl) != decl)
20937         dwarf2out_abstract_function (origin
20938                                      ? DECL_ORIGIN (origin)
20939                                      : DECL_ABSTRACT_ORIGIN (decl));
20940
20941       /* If we're emitting an out-of-line copy of an inline function,
20942          emit info for the abstract instance and set up to refer to it.  */
20943       else if (cgraph_function_possibly_inlined_p (decl)
20944                && ! DECL_ABSTRACT_P (decl)
20945                && ! class_or_namespace_scope_p (context_die)
20946                /* dwarf2out_abstract_function won't emit a die if this is just
20947                   a declaration.  We must avoid setting DECL_ABSTRACT_ORIGIN in
20948                   that case, because that works only if we have a die.  */
20949                && DECL_INITIAL (decl) != NULL_TREE)
20950         {
20951           dwarf2out_abstract_function (decl);
20952           set_decl_origin_self (decl);
20953         }
20954
20955       /* Otherwise we're emitting the primary DIE for this decl.  */
20956       else if (debug_info_level > DINFO_LEVEL_TERSE)
20957         {
20958           /* Before we describe the FUNCTION_DECL itself, make sure that we
20959              have its containing type.  */
20960           if (!origin)
20961             origin = decl_class_context (decl);
20962           if (origin != NULL_TREE)
20963             gen_type_die (origin, context_die);
20964
20965           /* And its return type.  */
20966           gen_type_die (TREE_TYPE (TREE_TYPE (decl)), context_die);
20967
20968           /* And its virtual context.  */
20969           if (DECL_VINDEX (decl) != NULL_TREE)
20970             gen_type_die (DECL_CONTEXT (decl), context_die);
20971
20972           /* Make sure we have a member DIE for decl.  */
20973           if (origin != NULL_TREE)
20974             gen_type_die_for_member (origin, decl, context_die);
20975
20976           /* And its containing namespace.  */
20977           context_die = declare_in_namespace (decl, context_die);
20978         }
20979
20980       /* Now output a DIE to represent the function itself.  */
20981       if (decl)
20982         gen_subprogram_die (decl, context_die);
20983       break;
20984
20985     case TYPE_DECL:
20986       /* If we are in terse mode, don't generate any DIEs to represent any
20987          actual typedefs.  */
20988       if (debug_info_level <= DINFO_LEVEL_TERSE)
20989         break;
20990
20991       /* In the special case of a TYPE_DECL node representing the declaration
20992          of some type tag, if the given TYPE_DECL is marked as having been
20993          instantiated from some other (original) TYPE_DECL node (e.g. one which
20994          was generated within the original definition of an inline function) we
20995          used to generate a special (abbreviated) DW_TAG_structure_type,
20996          DW_TAG_union_type, or DW_TAG_enumeration_type DIE here.  But nothing
20997          should be actually referencing those DIEs, as variable DIEs with that
20998          type would be emitted already in the abstract origin, so it was always
20999          removed during unused type prunning.  Don't add anything in this
21000          case.  */
21001       if (TYPE_DECL_IS_STUB (decl) && decl_ultimate_origin (decl) != NULL_TREE)
21002         break;
21003
21004       if (is_redundant_typedef (decl))
21005         gen_type_die (TREE_TYPE (decl), context_die);
21006       else
21007         /* Output a DIE to represent the typedef itself.  */
21008         gen_typedef_die (decl, context_die);
21009       break;
21010
21011     case LABEL_DECL:
21012       if (debug_info_level >= DINFO_LEVEL_NORMAL)
21013         gen_label_die (decl, context_die);
21014       break;
21015
21016     case VAR_DECL:
21017     case RESULT_DECL:
21018       /* If we are in terse mode, don't generate any DIEs to represent any
21019          variable declarations or definitions.  */
21020       if (debug_info_level <= DINFO_LEVEL_TERSE)
21021         break;
21022
21023       /* Output any DIEs that are needed to specify the type of this data
21024          object.  */
21025       if (decl_by_reference_p (decl_or_origin))
21026         gen_type_die (TREE_TYPE (TREE_TYPE (decl_or_origin)), context_die);
21027       else
21028         gen_type_die (TREE_TYPE (decl_or_origin), context_die);
21029
21030       /* And its containing type.  */
21031       class_origin = decl_class_context (decl_or_origin);
21032       if (class_origin != NULL_TREE)
21033         gen_type_die_for_member (class_origin, decl_or_origin, context_die);
21034
21035       /* And its containing namespace.  */
21036       context_die = declare_in_namespace (decl_or_origin, context_die);
21037
21038       /* Now output the DIE to represent the data object itself.  This gets
21039          complicated because of the possibility that the VAR_DECL really
21040          represents an inlined instance of a formal parameter for an inline
21041          function.  */
21042       ultimate_origin = decl_ultimate_origin (decl_or_origin);
21043       if (ultimate_origin != NULL_TREE
21044           && TREE_CODE (ultimate_origin) == PARM_DECL)
21045         gen_formal_parameter_die (decl, origin,
21046                                   true /* Emit name attribute.  */,
21047                                   context_die);
21048       else
21049         gen_variable_die (decl, origin, context_die);
21050       break;
21051
21052     case FIELD_DECL:
21053       /* Ignore the nameless fields that are used to skip bits but handle C++
21054          anonymous unions and structs.  */
21055       if (DECL_NAME (decl) != NULL_TREE
21056           || TREE_CODE (TREE_TYPE (decl)) == UNION_TYPE
21057           || TREE_CODE (TREE_TYPE (decl)) == RECORD_TYPE)
21058         {
21059           gen_type_die (member_declared_type (decl), context_die);
21060           gen_field_die (decl, context_die);
21061         }
21062       break;
21063
21064     case PARM_DECL:
21065       if (DECL_BY_REFERENCE (decl_or_origin))
21066         gen_type_die (TREE_TYPE (TREE_TYPE (decl_or_origin)), context_die);
21067       else
21068         gen_type_die (TREE_TYPE (decl_or_origin), context_die);
21069       return gen_formal_parameter_die (decl, origin,
21070                                        true /* Emit name attribute.  */,
21071                                        context_die);
21072
21073     case NAMESPACE_DECL:
21074     case IMPORTED_DECL:
21075       if (dwarf_version >= 3 || !dwarf_strict)
21076         gen_namespace_die (decl, context_die);
21077       break;
21078
21079     case NAMELIST_DECL:
21080       gen_namelist_decl (DECL_NAME (decl), context_die,
21081                          NAMELIST_DECL_ASSOCIATED_DECL (decl));
21082       break;
21083
21084     default:
21085       /* Probably some frontend-internal decl.  Assume we don't care.  */
21086       gcc_assert ((int)TREE_CODE (decl) > NUM_TREE_CODES);
21087       break;
21088     }
21089
21090   return NULL;
21091 }
21092 \f
21093 /* Output debug information for global decl DECL.  Called from toplev.c after
21094    compilation proper has finished.  */
21095
21096 static void
21097 dwarf2out_global_decl (tree decl)
21098 {
21099   /* Output DWARF2 information for file-scope tentative data object
21100      declarations, file-scope (extern) function declarations (which
21101      had no corresponding body) and file-scope tagged type declarations
21102      and definitions which have not yet been forced out.  */
21103   if ((TREE_CODE (decl) != FUNCTION_DECL || !DECL_INITIAL (decl))
21104       && !POINTER_BOUNDS_P (decl))
21105     dwarf2out_decl (decl);
21106 }
21107
21108 /* Output debug information for type decl DECL.  Called from toplev.c
21109    and from language front ends (to record built-in types).  */
21110 static void
21111 dwarf2out_type_decl (tree decl, int local)
21112 {
21113   if (!local)
21114     dwarf2out_decl (decl);
21115 }
21116
21117 /* Output debug information for imported module or decl DECL.
21118    NAME is non-NULL name in the lexical block if the decl has been renamed.
21119    LEXICAL_BLOCK is the lexical block (which TREE_CODE is a BLOCK)
21120    that DECL belongs to.
21121    LEXICAL_BLOCK_DIE is the DIE of LEXICAL_BLOCK.  */
21122 static void
21123 dwarf2out_imported_module_or_decl_1 (tree decl,
21124                                      tree name,
21125                                      tree lexical_block,
21126                                      dw_die_ref lexical_block_die)
21127 {
21128   expanded_location xloc;
21129   dw_die_ref imported_die = NULL;
21130   dw_die_ref at_import_die;
21131
21132   if (TREE_CODE (decl) == IMPORTED_DECL)
21133     {
21134       xloc = expand_location (DECL_SOURCE_LOCATION (decl));
21135       decl = IMPORTED_DECL_ASSOCIATED_DECL (decl);
21136       gcc_assert (decl);
21137     }
21138   else
21139     xloc = expand_location (input_location);
21140
21141   if (TREE_CODE (decl) == TYPE_DECL || TREE_CODE (decl) == CONST_DECL)
21142     {
21143       at_import_die = force_type_die (TREE_TYPE (decl));
21144       /* For namespace N { typedef void T; } using N::T; base_type_die
21145          returns NULL, but DW_TAG_imported_declaration requires
21146          the DW_AT_import tag.  Force creation of DW_TAG_typedef.  */
21147       if (!at_import_die)
21148         {
21149           gcc_assert (TREE_CODE (decl) == TYPE_DECL);
21150           gen_typedef_die (decl, get_context_die (DECL_CONTEXT (decl)));
21151           at_import_die = lookup_type_die (TREE_TYPE (decl));
21152           gcc_assert (at_import_die);
21153         }
21154     }
21155   else
21156     {
21157       at_import_die = lookup_decl_die (decl);
21158       if (!at_import_die)
21159         {
21160           /* If we're trying to avoid duplicate debug info, we may not have
21161              emitted the member decl for this field.  Emit it now.  */
21162           if (TREE_CODE (decl) == FIELD_DECL)
21163             {
21164               tree type = DECL_CONTEXT (decl);
21165
21166               if (TYPE_CONTEXT (type)
21167                   && TYPE_P (TYPE_CONTEXT (type))
21168                   && !should_emit_struct_debug (TYPE_CONTEXT (type),
21169                                                 DINFO_USAGE_DIR_USE))
21170                 return;
21171               gen_type_die_for_member (type, decl,
21172                                        get_context_die (TYPE_CONTEXT (type)));
21173             }
21174           if (TREE_CODE (decl) == NAMELIST_DECL)
21175             at_import_die = gen_namelist_decl (DECL_NAME (decl),
21176                                          get_context_die (DECL_CONTEXT (decl)),
21177                                          NULL_TREE);
21178           else
21179             at_import_die = force_decl_die (decl);
21180         }
21181     }
21182
21183   if (TREE_CODE (decl) == NAMESPACE_DECL)
21184     {
21185       if (dwarf_version >= 3 || !dwarf_strict)
21186         imported_die = new_die (DW_TAG_imported_module,
21187                                 lexical_block_die,
21188                                 lexical_block);
21189       else
21190         return;
21191     }
21192   else
21193     imported_die = new_die (DW_TAG_imported_declaration,
21194                             lexical_block_die,
21195                             lexical_block);
21196
21197   add_AT_file (imported_die, DW_AT_decl_file, lookup_filename (xloc.file));
21198   add_AT_unsigned (imported_die, DW_AT_decl_line, xloc.line);
21199   if (name)
21200     add_AT_string (imported_die, DW_AT_name,
21201                    IDENTIFIER_POINTER (name));
21202   add_AT_die_ref (imported_die, DW_AT_import, at_import_die);
21203 }
21204
21205 /* Output debug information for imported module or decl DECL.
21206    NAME is non-NULL name in context if the decl has been renamed.
21207    CHILD is true if decl is one of the renamed decls as part of
21208    importing whole module.  */
21209
21210 static void
21211 dwarf2out_imported_module_or_decl (tree decl, tree name, tree context,
21212                                    bool child)
21213 {
21214   /* dw_die_ref at_import_die;  */
21215   dw_die_ref scope_die;
21216
21217   if (debug_info_level <= DINFO_LEVEL_TERSE)
21218     return;
21219
21220   gcc_assert (decl);
21221
21222   /* To emit DW_TAG_imported_module or DW_TAG_imported_decl, we need two DIEs.
21223      We need decl DIE for reference and scope die. First, get DIE for the decl
21224      itself.  */
21225
21226   /* Get the scope die for decl context. Use comp_unit_die for global module
21227      or decl. If die is not found for non globals, force new die.  */
21228   if (context
21229       && TYPE_P (context)
21230       && !should_emit_struct_debug (context, DINFO_USAGE_DIR_USE))
21231     return;
21232
21233   if (!(dwarf_version >= 3 || !dwarf_strict))
21234     return;
21235
21236   scope_die = get_context_die (context);
21237
21238   if (child)
21239     {
21240       gcc_assert (scope_die->die_child);
21241       gcc_assert (scope_die->die_child->die_tag == DW_TAG_imported_module);
21242       gcc_assert (TREE_CODE (decl) != NAMESPACE_DECL);
21243       scope_die = scope_die->die_child;
21244     }
21245
21246   /* OK, now we have DIEs for decl as well as scope. Emit imported die.  */
21247   dwarf2out_imported_module_or_decl_1 (decl, name, context, scope_die);
21248
21249 }
21250
21251 /* Output debug information for namelists.   */
21252
21253 static dw_die_ref
21254 gen_namelist_decl (tree name, dw_die_ref scope_die, tree item_decls)
21255 {
21256   dw_die_ref nml_die, nml_item_die, nml_item_ref_die;
21257   tree value;
21258   unsigned i;
21259
21260   if (debug_info_level <= DINFO_LEVEL_TERSE)
21261     return NULL;
21262
21263   gcc_assert (scope_die != NULL);
21264   nml_die = new_die (DW_TAG_namelist, scope_die, NULL);
21265   add_AT_string (nml_die, DW_AT_name, IDENTIFIER_POINTER (name));
21266
21267   /* If there are no item_decls, we have a nondefining namelist, e.g.
21268      with USE association; hence, set DW_AT_declaration.  */
21269   if (item_decls == NULL_TREE)
21270     {
21271       add_AT_flag (nml_die, DW_AT_declaration, 1);
21272       return nml_die;
21273     }
21274
21275   FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (item_decls), i, value)
21276     {
21277       nml_item_ref_die = lookup_decl_die (value);
21278       if (!nml_item_ref_die)
21279         nml_item_ref_die = force_decl_die (value);
21280
21281       nml_item_die = new_die (DW_TAG_namelist_item, nml_die, NULL);
21282       add_AT_die_ref (nml_item_die, DW_AT_namelist_items, nml_item_ref_die);
21283     }
21284   return nml_die;
21285 }
21286
21287
21288 /* Write the debugging output for DECL.  */
21289
21290 static void
21291 dwarf2out_decl (tree decl)
21292 {
21293   dw_die_ref context_die = comp_unit_die ();
21294
21295   switch (TREE_CODE (decl))
21296     {
21297     case ERROR_MARK:
21298       return;
21299
21300     case FUNCTION_DECL:
21301       /* What we would really like to do here is to filter out all mere
21302          file-scope declarations of file-scope functions which are never
21303          referenced later within this translation unit (and keep all of ones
21304          that *are* referenced later on) but we aren't clairvoyant, so we have
21305          no idea which functions will be referenced in the future (i.e. later
21306          on within the current translation unit). So here we just ignore all
21307          file-scope function declarations which are not also definitions.  If
21308          and when the debugger needs to know something about these functions,
21309          it will have to hunt around and find the DWARF information associated
21310          with the definition of the function.
21311
21312          We can't just check DECL_EXTERNAL to find out which FUNCTION_DECL
21313          nodes represent definitions and which ones represent mere
21314          declarations.  We have to check DECL_INITIAL instead. That's because
21315          the C front-end supports some weird semantics for "extern inline"
21316          function definitions.  These can get inlined within the current
21317          translation unit (and thus, we need to generate Dwarf info for their
21318          abstract instances so that the Dwarf info for the concrete inlined
21319          instances can have something to refer to) but the compiler never
21320          generates any out-of-lines instances of such things (despite the fact
21321          that they *are* definitions).
21322
21323          The important point is that the C front-end marks these "extern
21324          inline" functions as DECL_EXTERNAL, but we need to generate DWARF for
21325          them anyway. Note that the C++ front-end also plays some similar games
21326          for inline function definitions appearing within include files which
21327          also contain `#pragma interface' pragmas.
21328
21329          If we are called from dwarf2out_abstract_function output a DIE
21330          anyway.  We can end up here this way with early inlining and LTO
21331          where the inlined function is output in a different LTRANS unit
21332          or not at all.  */
21333       if (DECL_INITIAL (decl) == NULL_TREE
21334           && ! DECL_ABSTRACT_P (decl))
21335         return;
21336
21337       /* If we're a nested function, initially use a parent of NULL; if we're
21338          a plain function, this will be fixed up in decls_for_scope.  If
21339          we're a method, it will be ignored, since we already have a DIE.  */
21340       if (decl_function_context (decl)
21341           /* But if we're in terse mode, we don't care about scope.  */
21342           && debug_info_level > DINFO_LEVEL_TERSE)
21343         context_die = NULL;
21344       break;
21345
21346     case VAR_DECL:
21347       /* Ignore this VAR_DECL if it refers to a file-scope extern data object
21348          declaration and if the declaration was never even referenced from
21349          within this entire compilation unit.  We suppress these DIEs in
21350          order to save space in the .debug section (by eliminating entries
21351          which are probably useless).  Note that we must not suppress
21352          block-local extern declarations (whether used or not) because that
21353          would screw-up the debugger's name lookup mechanism and cause it to
21354          miss things which really ought to be in scope at a given point.  */
21355       if (DECL_EXTERNAL (decl) && !TREE_USED (decl))
21356         return;
21357
21358       /* For local statics lookup proper context die.  */
21359       if (TREE_STATIC (decl)
21360           && DECL_CONTEXT (decl)
21361           && TREE_CODE (DECL_CONTEXT (decl)) == FUNCTION_DECL)
21362         context_die = lookup_decl_die (DECL_CONTEXT (decl));
21363
21364       /* If we are in terse mode, don't generate any DIEs to represent any
21365          variable declarations or definitions.  */
21366       if (debug_info_level <= DINFO_LEVEL_TERSE)
21367         return;
21368       break;
21369
21370     case CONST_DECL:
21371       if (debug_info_level <= DINFO_LEVEL_TERSE)
21372         return;
21373       if (!is_fortran () && !is_ada ())
21374         return;
21375       if (TREE_STATIC (decl) && decl_function_context (decl))
21376         context_die = lookup_decl_die (DECL_CONTEXT (decl));
21377       break;
21378
21379     case NAMESPACE_DECL:
21380     case IMPORTED_DECL:
21381       if (debug_info_level <= DINFO_LEVEL_TERSE)
21382         return;
21383       if (lookup_decl_die (decl) != NULL)
21384         return;
21385       break;
21386
21387     case TYPE_DECL:
21388       /* Don't emit stubs for types unless they are needed by other DIEs.  */
21389       if (TYPE_DECL_SUPPRESS_DEBUG (decl))
21390         return;
21391
21392       /* Don't bother trying to generate any DIEs to represent any of the
21393          normal built-in types for the language we are compiling.  */
21394       if (DECL_IS_BUILTIN (decl))
21395         return;
21396
21397       /* If we are in terse mode, don't generate any DIEs for types.  */
21398       if (debug_info_level <= DINFO_LEVEL_TERSE)
21399         return;
21400
21401       /* If we're a function-scope tag, initially use a parent of NULL;
21402          this will be fixed up in decls_for_scope.  */
21403       if (decl_function_context (decl))
21404         context_die = NULL;
21405
21406       break;
21407
21408     case NAMELIST_DECL:
21409       break;
21410
21411     default:
21412       return;
21413     }
21414
21415   gen_decl_die (decl, NULL, context_die);
21416 }
21417
21418 /* Write the debugging output for DECL.  */
21419
21420 static void
21421 dwarf2out_function_decl (tree decl)
21422 {
21423   dwarf2out_decl (decl);
21424   call_arg_locations = NULL;
21425   call_arg_loc_last = NULL;
21426   call_site_count = -1;
21427   tail_call_site_count = -1;
21428   block_map.release ();
21429   decl_loc_table->empty ();
21430   cached_dw_loc_list_table->empty ();
21431 }
21432
21433 /* Output a marker (i.e. a label) for the beginning of the generated code for
21434    a lexical block.  */
21435
21436 static void
21437 dwarf2out_begin_block (unsigned int line ATTRIBUTE_UNUSED,
21438                        unsigned int blocknum)
21439 {
21440   switch_to_section (current_function_section ());
21441   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, BLOCK_BEGIN_LABEL, blocknum);
21442 }
21443
21444 /* Output a marker (i.e. a label) for the end of the generated code for a
21445    lexical block.  */
21446
21447 static void
21448 dwarf2out_end_block (unsigned int line ATTRIBUTE_UNUSED, unsigned int blocknum)
21449 {
21450   switch_to_section (current_function_section ());
21451   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, BLOCK_END_LABEL, blocknum);
21452 }
21453
21454 /* Returns nonzero if it is appropriate not to emit any debugging
21455    information for BLOCK, because it doesn't contain any instructions.
21456
21457    Don't allow this for blocks with nested functions or local classes
21458    as we would end up with orphans, and in the presence of scheduling
21459    we may end up calling them anyway.  */
21460
21461 static bool
21462 dwarf2out_ignore_block (const_tree block)
21463 {
21464   tree decl;
21465   unsigned int i;
21466
21467   for (decl = BLOCK_VARS (block); decl; decl = DECL_CHAIN (decl))
21468     if (TREE_CODE (decl) == FUNCTION_DECL
21469         || (TREE_CODE (decl) == TYPE_DECL && TYPE_DECL_IS_STUB (decl)))
21470       return 0;
21471   for (i = 0; i < BLOCK_NUM_NONLOCALIZED_VARS (block); i++)
21472     {
21473       decl = BLOCK_NONLOCALIZED_VAR (block, i);
21474       if (TREE_CODE (decl) == FUNCTION_DECL
21475           || (TREE_CODE (decl) == TYPE_DECL && TYPE_DECL_IS_STUB (decl)))
21476       return 0;
21477     }
21478
21479   return 1;
21480 }
21481
21482 /* Hash table routines for file_hash.  */
21483
21484 bool
21485 dwarf_file_hasher::equal (dwarf_file_data *p1, const char *p2)
21486 {
21487   return filename_cmp (p1->filename, p2) == 0;
21488 }
21489
21490 hashval_t
21491 dwarf_file_hasher::hash (dwarf_file_data *p)
21492 {
21493   return htab_hash_string (p->filename);
21494 }
21495
21496 /* Lookup FILE_NAME (in the list of filenames that we know about here in
21497    dwarf2out.c) and return its "index".  The index of each (known) filename is
21498    just a unique number which is associated with only that one filename.  We
21499    need such numbers for the sake of generating labels (in the .debug_sfnames
21500    section) and references to those files numbers (in the .debug_srcinfo
21501    and.debug_macinfo sections).  If the filename given as an argument is not
21502    found in our current list, add it to the list and assign it the next
21503    available unique index number.  In order to speed up searches, we remember
21504    the index of the filename was looked up last.  This handles the majority of
21505    all searches.  */
21506
21507 static struct dwarf_file_data *
21508 lookup_filename (const char *file_name)
21509 {
21510   struct dwarf_file_data * created;
21511
21512   /* Check to see if the file name that was searched on the previous
21513      call matches this file name.  If so, return the index.  */
21514   if (file_table_last_lookup
21515       && (file_name == file_table_last_lookup->filename
21516           || filename_cmp (file_table_last_lookup->filename, file_name) == 0))
21517     return file_table_last_lookup;
21518
21519   /* Didn't match the previous lookup, search the table.  */
21520   dwarf_file_data **slot
21521     = file_table->find_slot_with_hash (file_name, htab_hash_string (file_name),
21522                                        INSERT);
21523   if (*slot)
21524     return *slot;
21525
21526   created = ggc_alloc<dwarf_file_data> ();
21527   created->filename = file_name;
21528   created->emitted_number = 0;
21529   *slot = created;
21530   return created;
21531 }
21532
21533 /* If the assembler will construct the file table, then translate the compiler
21534    internal file table number into the assembler file table number, and emit
21535    a .file directive if we haven't already emitted one yet.  The file table
21536    numbers are different because we prune debug info for unused variables and
21537    types, which may include filenames.  */
21538
21539 static int
21540 maybe_emit_file (struct dwarf_file_data * fd)
21541 {
21542   if (! fd->emitted_number)
21543     {
21544       if (last_emitted_file)
21545         fd->emitted_number = last_emitted_file->emitted_number + 1;
21546       else
21547         fd->emitted_number = 1;
21548       last_emitted_file = fd;
21549
21550       if (DWARF2_ASM_LINE_DEBUG_INFO)
21551         {
21552           fprintf (asm_out_file, "\t.file %u ", fd->emitted_number);
21553           output_quoted_string (asm_out_file,
21554                                 remap_debug_filename (fd->filename));
21555           fputc ('\n', asm_out_file);
21556         }
21557     }
21558
21559   return fd->emitted_number;
21560 }
21561
21562 /* Schedule generation of a DW_AT_const_value attribute to DIE.
21563    That generation should happen after function debug info has been
21564    generated. The value of the attribute is the constant value of ARG.  */
21565
21566 static void
21567 append_entry_to_tmpl_value_parm_die_table (dw_die_ref die, tree arg)
21568 {
21569   die_arg_entry entry;
21570
21571   if (!die || !arg)
21572     return;
21573
21574   if (!tmpl_value_parm_die_table)
21575     vec_alloc (tmpl_value_parm_die_table, 32);
21576
21577   entry.die = die;
21578   entry.arg = arg;
21579   vec_safe_push (tmpl_value_parm_die_table, entry);
21580 }
21581
21582 /* Return TRUE if T is an instance of generic type, FALSE
21583    otherwise.  */
21584
21585 static bool
21586 generic_type_p (tree t)
21587 {
21588   if (t == NULL_TREE || !TYPE_P (t))
21589     return false;
21590   return lang_hooks.get_innermost_generic_parms (t) != NULL_TREE;
21591 }
21592
21593 /* Schedule the generation of the generic parameter dies for the
21594   instance of generic type T. The proper generation itself is later
21595   done by gen_scheduled_generic_parms_dies. */
21596
21597 static void
21598 schedule_generic_params_dies_gen (tree t)
21599 {
21600   if (!generic_type_p (t))
21601     return;
21602
21603   if (!generic_type_instances)
21604     vec_alloc (generic_type_instances, 256);
21605
21606   vec_safe_push (generic_type_instances, t);
21607 }
21608
21609 /* Add a DW_AT_const_value attribute to DIEs that were scheduled
21610    by append_entry_to_tmpl_value_parm_die_table. This function must
21611    be called after function DIEs have been generated.  */
21612
21613 static void
21614 gen_remaining_tmpl_value_param_die_attribute (void)
21615 {
21616   if (tmpl_value_parm_die_table)
21617     {
21618       unsigned i;
21619       die_arg_entry *e;
21620
21621       FOR_EACH_VEC_ELT (*tmpl_value_parm_die_table, i, e)
21622         tree_add_const_value_attribute (e->die, e->arg);
21623     }
21624 }
21625
21626 /* Generate generic parameters DIEs for instances of generic types
21627    that have been previously scheduled by
21628    schedule_generic_params_dies_gen. This function must be called
21629    after all the types of the CU have been laid out.  */
21630
21631 static void
21632 gen_scheduled_generic_parms_dies (void)
21633 {
21634   unsigned i;
21635   tree t;
21636
21637   if (!generic_type_instances)
21638     return;
21639   
21640   FOR_EACH_VEC_ELT (*generic_type_instances, i, t)
21641     if (COMPLETE_TYPE_P (t))
21642       gen_generic_params_dies (t);
21643 }
21644
21645
21646 /* Replace DW_AT_name for the decl with name.  */
21647
21648 static void
21649 dwarf2out_set_name (tree decl, tree name)
21650 {
21651   dw_die_ref die;
21652   dw_attr_ref attr;
21653   const char *dname;
21654
21655   die = TYPE_SYMTAB_DIE (decl);
21656   if (!die)
21657     return;
21658
21659   dname = dwarf2_name (name, 0);
21660   if (!dname)
21661     return;
21662
21663   attr = get_AT (die, DW_AT_name);
21664   if (attr)
21665     {
21666       struct indirect_string_node *node;
21667
21668       node = find_AT_string (dname);
21669       /* replace the string.  */
21670       attr->dw_attr_val.v.val_str = node;
21671     }
21672
21673   else
21674     add_name_attribute (die, dname);
21675 }
21676
21677 /* True if before or during processing of the first function being emitted.  */
21678 static bool in_first_function_p = true;
21679 /* True if loc_note during dwarf2out_var_location call might still be
21680    before first real instruction at address equal to .Ltext0.  */
21681 static bool maybe_at_text_label_p = true;
21682 /* One above highest N where .LVLN label might be equal to .Ltext0 label.  */
21683 static unsigned int first_loclabel_num_not_at_text_label;
21684
21685 /* Called by the final INSN scan whenever we see a var location.  We
21686    use it to drop labels in the right places, and throw the location in
21687    our lookup table.  */
21688
21689 static void
21690 dwarf2out_var_location (rtx_insn *loc_note)
21691 {
21692   char loclabel[MAX_ARTIFICIAL_LABEL_BYTES + 2];
21693   struct var_loc_node *newloc;
21694   rtx_insn *next_real, *next_note;
21695   static const char *last_label;
21696   static const char *last_postcall_label;
21697   static bool last_in_cold_section_p;
21698   static rtx_insn *expected_next_loc_note;
21699   tree decl;
21700   bool var_loc_p;
21701
21702   if (!NOTE_P (loc_note))
21703     {
21704       if (CALL_P (loc_note))
21705         {
21706           call_site_count++;
21707           if (SIBLING_CALL_P (loc_note))
21708             tail_call_site_count++;
21709         }
21710       return;
21711     }
21712
21713   var_loc_p = NOTE_KIND (loc_note) == NOTE_INSN_VAR_LOCATION;
21714   if (var_loc_p && !DECL_P (NOTE_VAR_LOCATION_DECL (loc_note)))
21715     return;
21716
21717   /* Optimize processing a large consecutive sequence of location
21718      notes so we don't spend too much time in next_real_insn.  If the
21719      next insn is another location note, remember the next_real_insn
21720      calculation for next time.  */
21721   next_real = cached_next_real_insn;
21722   if (next_real)
21723     {
21724       if (expected_next_loc_note != loc_note)
21725         next_real = NULL;
21726     }
21727
21728   next_note = NEXT_INSN (loc_note);
21729   if (! next_note
21730       || next_note->deleted ()
21731       || ! NOTE_P (next_note)
21732       || (NOTE_KIND (next_note) != NOTE_INSN_VAR_LOCATION
21733           && NOTE_KIND (next_note) != NOTE_INSN_CALL_ARG_LOCATION))
21734     next_note = NULL;
21735
21736   if (! next_real)
21737     next_real = next_real_insn (loc_note);
21738
21739   if (next_note)
21740     {
21741       expected_next_loc_note = next_note;
21742       cached_next_real_insn = next_real;
21743     }
21744   else
21745     cached_next_real_insn = NULL;
21746
21747   /* If there are no instructions which would be affected by this note,
21748      don't do anything.  */
21749   if (var_loc_p
21750       && next_real == NULL_RTX
21751       && !NOTE_DURING_CALL_P (loc_note))
21752     return;
21753
21754   if (next_real == NULL_RTX)
21755     next_real = get_last_insn ();
21756
21757   /* If there were any real insns between note we processed last time
21758      and this note (or if it is the first note), clear
21759      last_{,postcall_}label so that they are not reused this time.  */
21760   if (last_var_location_insn == NULL_RTX
21761       || last_var_location_insn != next_real
21762       || last_in_cold_section_p != in_cold_section_p)
21763     {
21764       last_label = NULL;
21765       last_postcall_label = NULL;
21766     }
21767
21768   if (var_loc_p)
21769     {
21770       decl = NOTE_VAR_LOCATION_DECL (loc_note);
21771       newloc = add_var_loc_to_decl (decl, loc_note,
21772                                     NOTE_DURING_CALL_P (loc_note)
21773                                     ? last_postcall_label : last_label);
21774       if (newloc == NULL)
21775         return;
21776     }
21777   else
21778     {
21779       decl = NULL_TREE;
21780       newloc = NULL;
21781     }
21782
21783   /* If there were no real insns between note we processed last time
21784      and this note, use the label we emitted last time.  Otherwise
21785      create a new label and emit it.  */
21786   if (last_label == NULL)
21787     {
21788       ASM_GENERATE_INTERNAL_LABEL (loclabel, "LVL", loclabel_num);
21789       ASM_OUTPUT_DEBUG_LABEL (asm_out_file, "LVL", loclabel_num);
21790       loclabel_num++;
21791       last_label = ggc_strdup (loclabel);
21792       /* See if loclabel might be equal to .Ltext0.  If yes,
21793          bump first_loclabel_num_not_at_text_label.  */
21794       if (!have_multiple_function_sections
21795           && in_first_function_p
21796           && maybe_at_text_label_p)
21797         {
21798           static rtx_insn *last_start;
21799           rtx_insn *insn;
21800           for (insn = loc_note; insn; insn = previous_insn (insn))
21801             if (insn == last_start)
21802               break;
21803             else if (!NONDEBUG_INSN_P (insn))
21804               continue;
21805             else
21806               {
21807                 rtx body = PATTERN (insn);
21808                 if (GET_CODE (body) == USE || GET_CODE (body) == CLOBBER)
21809                   continue;
21810                 /* Inline asm could occupy zero bytes.  */
21811                 else if (GET_CODE (body) == ASM_INPUT
21812                          || asm_noperands (body) >= 0)
21813                   continue;
21814 #ifdef HAVE_attr_length
21815                 else if (get_attr_min_length (insn) == 0)
21816                   continue;
21817 #endif
21818                 else
21819                   {
21820                     /* Assume insn has non-zero length.  */
21821                     maybe_at_text_label_p = false;
21822                     break;
21823                   }
21824               }
21825           if (maybe_at_text_label_p)
21826             {
21827               last_start = loc_note;
21828               first_loclabel_num_not_at_text_label = loclabel_num;
21829             }
21830         }
21831     }
21832
21833   if (!var_loc_p)
21834     {
21835       struct call_arg_loc_node *ca_loc
21836         = ggc_cleared_alloc<call_arg_loc_node> ();
21837       rtx_insn *prev = prev_real_insn (loc_note);
21838       rtx x;
21839       ca_loc->call_arg_loc_note = loc_note;
21840       ca_loc->next = NULL;
21841       ca_loc->label = last_label;
21842       gcc_assert (prev
21843                   && (CALL_P (prev)
21844                       || (NONJUMP_INSN_P (prev)
21845                           && GET_CODE (PATTERN (prev)) == SEQUENCE
21846                           && CALL_P (XVECEXP (PATTERN (prev), 0, 0)))));
21847       if (!CALL_P (prev))
21848         prev = as_a <rtx_sequence *> (PATTERN (prev))->insn (0);
21849       ca_loc->tail_call_p = SIBLING_CALL_P (prev);
21850       x = get_call_rtx_from (PATTERN (prev));
21851       if (x)
21852         {
21853           x = XEXP (XEXP (x, 0), 0);
21854           if (GET_CODE (x) == SYMBOL_REF
21855               && SYMBOL_REF_DECL (x)
21856               && TREE_CODE (SYMBOL_REF_DECL (x)) == FUNCTION_DECL)
21857             ca_loc->symbol_ref = x;
21858         }
21859       ca_loc->block = insn_scope (prev);
21860       if (call_arg_locations)
21861         call_arg_loc_last->next = ca_loc;
21862       else
21863         call_arg_locations = ca_loc;
21864       call_arg_loc_last = ca_loc;
21865     }
21866   else if (!NOTE_DURING_CALL_P (loc_note))
21867     newloc->label = last_label;
21868   else
21869     {
21870       if (!last_postcall_label)
21871         {
21872           sprintf (loclabel, "%s-1", last_label);
21873           last_postcall_label = ggc_strdup (loclabel);
21874         }
21875       newloc->label = last_postcall_label;
21876     }
21877
21878   last_var_location_insn = next_real;
21879   last_in_cold_section_p = in_cold_section_p;
21880 }
21881
21882 /* Note in one location list that text section has changed.  */
21883
21884 int
21885 var_location_switch_text_section_1 (var_loc_list **slot, void *)
21886 {
21887   var_loc_list *list = *slot;
21888   if (list->first)
21889     list->last_before_switch
21890       = list->last->next ? list->last->next : list->last;
21891   return 1;
21892 }
21893
21894 /* Note in all location lists that text section has changed.  */
21895
21896 static void
21897 var_location_switch_text_section (void)
21898 {
21899   if (decl_loc_table == NULL)
21900     return;
21901
21902   decl_loc_table->traverse<void *, var_location_switch_text_section_1> (NULL);
21903 }
21904
21905 /* Create a new line number table.  */
21906
21907 static dw_line_info_table *
21908 new_line_info_table (void)
21909 {
21910   dw_line_info_table *table;
21911
21912   table = ggc_cleared_alloc<dw_line_info_table_struct> ();
21913   table->file_num = 1;
21914   table->line_num = 1;
21915   table->is_stmt = DWARF_LINE_DEFAULT_IS_STMT_START;
21916
21917   return table;
21918 }
21919
21920 /* Lookup the "current" table into which we emit line info, so
21921    that we don't have to do it for every source line.  */
21922
21923 static void
21924 set_cur_line_info_table (section *sec)
21925 {
21926   dw_line_info_table *table;
21927
21928   if (sec == text_section)
21929     table = text_section_line_info;
21930   else if (sec == cold_text_section)
21931     {
21932       table = cold_text_section_line_info;
21933       if (!table)
21934         {
21935           cold_text_section_line_info = table = new_line_info_table ();
21936           table->end_label = cold_end_label;
21937         }
21938     }
21939   else
21940     {
21941       const char *end_label;
21942
21943       if (flag_reorder_blocks_and_partition)
21944         {
21945           if (in_cold_section_p)
21946             end_label = crtl->subsections.cold_section_end_label;
21947           else
21948             end_label = crtl->subsections.hot_section_end_label;
21949         }
21950       else
21951         {
21952           char label[MAX_ARTIFICIAL_LABEL_BYTES];
21953           ASM_GENERATE_INTERNAL_LABEL (label, FUNC_END_LABEL,
21954                                        current_function_funcdef_no);
21955           end_label = ggc_strdup (label);
21956         }
21957
21958       table = new_line_info_table ();
21959       table->end_label = end_label;
21960
21961       vec_safe_push (separate_line_info, table);
21962     }
21963
21964   if (DWARF2_ASM_LINE_DEBUG_INFO)
21965     table->is_stmt = (cur_line_info_table
21966                       ? cur_line_info_table->is_stmt
21967                       : DWARF_LINE_DEFAULT_IS_STMT_START);
21968   cur_line_info_table = table;
21969 }
21970
21971
21972 /* We need to reset the locations at the beginning of each
21973    function. We can't do this in the end_function hook, because the
21974    declarations that use the locations won't have been output when
21975    that hook is called.  Also compute have_multiple_function_sections here.  */
21976
21977 static void
21978 dwarf2out_begin_function (tree fun)
21979 {
21980   section *sec = function_section (fun);
21981
21982   if (sec != text_section)
21983     have_multiple_function_sections = true;
21984
21985   if (flag_reorder_blocks_and_partition && !cold_text_section)
21986     {
21987       gcc_assert (current_function_decl == fun);
21988       cold_text_section = unlikely_text_section ();
21989       switch_to_section (cold_text_section);
21990       ASM_OUTPUT_LABEL (asm_out_file, cold_text_section_label);
21991       switch_to_section (sec);
21992     }
21993
21994   dwarf2out_note_section_used ();
21995   call_site_count = 0;
21996   tail_call_site_count = 0;
21997
21998   set_cur_line_info_table (sec);
21999 }
22000
22001 /* Helper function of dwarf2out_end_function, called only after emitting
22002    the very first function into assembly.  Check if some .debug_loc range
22003    might end with a .LVL* label that could be equal to .Ltext0.
22004    In that case we must force using absolute addresses in .debug_loc ranges,
22005    because this range could be .LVLN-.Ltext0 .. .LVLM-.Ltext0 for
22006    .LVLN == .LVLM == .Ltext0, thus 0 .. 0, which is a .debug_loc
22007    list terminator.
22008    Set have_multiple_function_sections to true in that case and
22009    terminate htab traversal.  */
22010
22011 int
22012 find_empty_loc_ranges_at_text_label (var_loc_list **slot, int)
22013 {
22014   var_loc_list *entry = *slot;
22015   struct var_loc_node *node;
22016
22017   node = entry->first;
22018   if (node && node->next && node->next->label)
22019     {
22020       unsigned int i;
22021       const char *label = node->next->label;
22022       char loclabel[MAX_ARTIFICIAL_LABEL_BYTES];
22023
22024       for (i = 0; i < first_loclabel_num_not_at_text_label; i++)
22025         {
22026           ASM_GENERATE_INTERNAL_LABEL (loclabel, "LVL", i);
22027           if (strcmp (label, loclabel) == 0)
22028             {
22029               have_multiple_function_sections = true;
22030               return 0;
22031             }
22032         }
22033     }
22034   return 1;
22035 }
22036
22037 /* Hook called after emitting a function into assembly.
22038    This does something only for the very first function emitted.  */
22039
22040 static void
22041 dwarf2out_end_function (unsigned int)
22042 {
22043   if (in_first_function_p
22044       && !have_multiple_function_sections
22045       && first_loclabel_num_not_at_text_label
22046       && decl_loc_table)
22047     decl_loc_table->traverse<int, find_empty_loc_ranges_at_text_label> (0);
22048   in_first_function_p = false;
22049   maybe_at_text_label_p = false;
22050 }
22051
22052 /* Temporary holder for dwarf2out_register_main_translation_unit.  Used to let
22053    front-ends register a translation unit even before dwarf2out_init is
22054    called.  */
22055 static tree main_translation_unit = NULL_TREE;
22056
22057 /* Hook called by front-ends after they built their main translation unit.
22058    Associate comp_unit_die to UNIT.  */
22059
22060 static void
22061 dwarf2out_register_main_translation_unit (tree unit)
22062 {
22063   gcc_assert (TREE_CODE (unit) == TRANSLATION_UNIT_DECL
22064               && main_translation_unit == NULL_TREE);
22065   main_translation_unit = unit;
22066   /* If dwarf2out_init has not been called yet, it will perform the association
22067      itself looking at main_translation_unit.  */
22068   if (decl_die_table != NULL)
22069     equate_decl_number_to_die (unit, comp_unit_die ());
22070 }
22071
22072 /* Add OPCODE+VAL as an entry at the end of the opcode array in TABLE.  */
22073
22074 static void
22075 push_dw_line_info_entry (dw_line_info_table *table,
22076                          enum dw_line_info_opcode opcode, unsigned int val)
22077 {
22078   dw_line_info_entry e;
22079   e.opcode = opcode;
22080   e.val = val;
22081   vec_safe_push (table->entries, e);
22082 }
22083
22084 /* Output a label to mark the beginning of a source code line entry
22085    and record information relating to this source line, in
22086    'line_info_table' for later output of the .debug_line section.  */
22087 /* ??? The discriminator parameter ought to be unsigned.  */
22088
22089 static void
22090 dwarf2out_source_line (unsigned int line, const char *filename,
22091                        int discriminator, bool is_stmt)
22092 {
22093   unsigned int file_num;
22094   dw_line_info_table *table;
22095
22096   if (debug_info_level < DINFO_LEVEL_TERSE || line == 0)
22097     return;
22098
22099   /* The discriminator column was added in dwarf4.  Simplify the below
22100      by simply removing it if we're not supposed to output it.  */
22101   if (dwarf_version < 4 && dwarf_strict)
22102     discriminator = 0;
22103
22104   table = cur_line_info_table;
22105   file_num = maybe_emit_file (lookup_filename (filename));
22106
22107   /* ??? TODO: Elide duplicate line number entries.  Traditionally,
22108      the debugger has used the second (possibly duplicate) line number
22109      at the beginning of the function to mark the end of the prologue.
22110      We could eliminate any other duplicates within the function.  For
22111      Dwarf3, we ought to include the DW_LNS_set_prologue_end mark in
22112      that second line number entry.  */
22113   /* Recall that this end-of-prologue indication is *not* the same thing
22114      as the end_prologue debug hook.  The NOTE_INSN_PROLOGUE_END note,
22115      to which the hook corresponds, follows the last insn that was 
22116      emitted by gen_prologue.  What we need is to precede the first insn
22117      that had been emitted after NOTE_INSN_FUNCTION_BEG, i.e. the first
22118      insn that corresponds to something the user wrote.  These may be
22119      very different locations once scheduling is enabled.  */
22120
22121   if (0 && file_num == table->file_num
22122       && line == table->line_num
22123       && discriminator == table->discrim_num
22124       && is_stmt == table->is_stmt)
22125     return;
22126
22127   switch_to_section (current_function_section ());
22128
22129   /* If requested, emit something human-readable.  */
22130   if (flag_debug_asm)
22131     fprintf (asm_out_file, "\t%s %s:%d\n", ASM_COMMENT_START, filename, line);
22132
22133   if (DWARF2_ASM_LINE_DEBUG_INFO)
22134     {
22135       /* Emit the .loc directive understood by GNU as.  */
22136       /* "\t.loc %u %u 0 is_stmt %u discriminator %u",
22137          file_num, line, is_stmt, discriminator */
22138       fputs ("\t.loc ", asm_out_file);
22139       fprint_ul (asm_out_file, file_num);
22140       putc (' ', asm_out_file);
22141       fprint_ul (asm_out_file, line);
22142       putc (' ', asm_out_file);
22143       putc ('0', asm_out_file);
22144
22145       if (is_stmt != table->is_stmt)
22146         {
22147           fputs (" is_stmt ", asm_out_file);
22148           putc (is_stmt ? '1' : '0', asm_out_file);
22149         }
22150       if (SUPPORTS_DISCRIMINATOR && discriminator != 0)
22151         {
22152           gcc_assert (discriminator > 0);
22153           fputs (" discriminator ", asm_out_file);
22154           fprint_ul (asm_out_file, (unsigned long) discriminator);
22155         }
22156       putc ('\n', asm_out_file);
22157     }
22158   else
22159     {
22160       unsigned int label_num = ++line_info_label_num;
22161
22162       targetm.asm_out.internal_label (asm_out_file, LINE_CODE_LABEL, label_num);
22163
22164       push_dw_line_info_entry (table, LI_set_address, label_num);
22165       if (file_num != table->file_num)
22166         push_dw_line_info_entry (table, LI_set_file, file_num);
22167       if (discriminator != table->discrim_num)
22168         push_dw_line_info_entry (table, LI_set_discriminator, discriminator);
22169       if (is_stmt != table->is_stmt)
22170         push_dw_line_info_entry (table, LI_negate_stmt, 0);
22171       push_dw_line_info_entry (table, LI_set_line, line);
22172     }
22173
22174   table->file_num = file_num;
22175   table->line_num = line;
22176   table->discrim_num = discriminator;
22177   table->is_stmt = is_stmt;
22178   table->in_use = true;
22179 }
22180
22181 /* Record the beginning of a new source file.  */
22182
22183 static void
22184 dwarf2out_start_source_file (unsigned int lineno, const char *filename)
22185 {
22186   if (flag_eliminate_dwarf2_dups)
22187     {
22188       /* Record the beginning of the file for break_out_includes.  */
22189       dw_die_ref bincl_die;
22190
22191       bincl_die = new_die (DW_TAG_GNU_BINCL, comp_unit_die (), NULL);
22192       add_AT_string (bincl_die, DW_AT_name, remap_debug_filename (filename));
22193     }
22194
22195   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
22196     {
22197       macinfo_entry e;
22198       e.code = DW_MACINFO_start_file;
22199       e.lineno = lineno;
22200       e.info = ggc_strdup (filename);
22201       vec_safe_push (macinfo_table, e);
22202     }
22203 }
22204
22205 /* Record the end of a source file.  */
22206
22207 static void
22208 dwarf2out_end_source_file (unsigned int lineno ATTRIBUTE_UNUSED)
22209 {
22210   if (flag_eliminate_dwarf2_dups)
22211     /* Record the end of the file for break_out_includes.  */
22212     new_die (DW_TAG_GNU_EINCL, comp_unit_die (), NULL);
22213
22214   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
22215     {
22216       macinfo_entry e;
22217       e.code = DW_MACINFO_end_file;
22218       e.lineno = lineno;
22219       e.info = NULL;
22220       vec_safe_push (macinfo_table, e);
22221     }
22222 }
22223
22224 /* Called from debug_define in toplev.c.  The `buffer' parameter contains
22225    the tail part of the directive line, i.e. the part which is past the
22226    initial whitespace, #, whitespace, directive-name, whitespace part.  */
22227
22228 static void
22229 dwarf2out_define (unsigned int lineno ATTRIBUTE_UNUSED,
22230                   const char *buffer ATTRIBUTE_UNUSED)
22231 {
22232   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
22233     {
22234       macinfo_entry e;
22235       /* Insert a dummy first entry to be able to optimize the whole
22236          predefined macro block using DW_MACRO_GNU_transparent_include.  */
22237       if (macinfo_table->is_empty () && lineno <= 1)
22238         {
22239           e.code = 0;
22240           e.lineno = 0;
22241           e.info = NULL;
22242           vec_safe_push (macinfo_table, e);
22243         }
22244       e.code = DW_MACINFO_define;
22245       e.lineno = lineno;
22246       e.info = ggc_strdup (buffer);
22247       vec_safe_push (macinfo_table, e);
22248     }
22249 }
22250
22251 /* Called from debug_undef in toplev.c.  The `buffer' parameter contains
22252    the tail part of the directive line, i.e. the part which is past the
22253    initial whitespace, #, whitespace, directive-name, whitespace part.  */
22254
22255 static void
22256 dwarf2out_undef (unsigned int lineno ATTRIBUTE_UNUSED,
22257                  const char *buffer ATTRIBUTE_UNUSED)
22258 {
22259   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
22260     {
22261       macinfo_entry e;
22262       /* Insert a dummy first entry to be able to optimize the whole
22263          predefined macro block using DW_MACRO_GNU_transparent_include.  */
22264       if (macinfo_table->is_empty () && lineno <= 1)
22265         {
22266           e.code = 0;
22267           e.lineno = 0;
22268           e.info = NULL;
22269           vec_safe_push (macinfo_table, e);
22270         }
22271       e.code = DW_MACINFO_undef;
22272       e.lineno = lineno;
22273       e.info = ggc_strdup (buffer);
22274       vec_safe_push (macinfo_table, e);
22275     }
22276 }
22277
22278 /* Helpers to manipulate hash table of CUs.  */
22279
22280 struct macinfo_entry_hasher : typed_noop_remove <macinfo_entry>
22281 {
22282   typedef macinfo_entry value_type;
22283   typedef macinfo_entry compare_type;
22284   static inline hashval_t hash (const value_type *);
22285   static inline bool equal (const value_type *, const compare_type *);
22286 };
22287
22288 inline hashval_t
22289 macinfo_entry_hasher::hash (const value_type *entry)
22290 {
22291   return htab_hash_string (entry->info);
22292 }
22293
22294 inline bool
22295 macinfo_entry_hasher::equal (const value_type *entry1,
22296                              const compare_type *entry2)
22297 {
22298   return !strcmp (entry1->info, entry2->info);
22299 }
22300
22301 typedef hash_table<macinfo_entry_hasher> macinfo_hash_type;
22302
22303 /* Output a single .debug_macinfo entry.  */
22304
22305 static void
22306 output_macinfo_op (macinfo_entry *ref)
22307 {
22308   int file_num;
22309   size_t len;
22310   struct indirect_string_node *node;
22311   char label[MAX_ARTIFICIAL_LABEL_BYTES];
22312   struct dwarf_file_data *fd;
22313
22314   switch (ref->code)
22315     {
22316     case DW_MACINFO_start_file:
22317       fd = lookup_filename (ref->info);
22318       file_num = maybe_emit_file (fd);
22319       dw2_asm_output_data (1, DW_MACINFO_start_file, "Start new file");
22320       dw2_asm_output_data_uleb128 (ref->lineno,
22321                                    "Included from line number %lu", 
22322                                    (unsigned long) ref->lineno);
22323       dw2_asm_output_data_uleb128 (file_num, "file %s", ref->info);
22324       break;
22325     case DW_MACINFO_end_file:
22326       dw2_asm_output_data (1, DW_MACINFO_end_file, "End file");
22327       break;
22328     case DW_MACINFO_define:
22329     case DW_MACINFO_undef:
22330       len = strlen (ref->info) + 1;
22331       if (!dwarf_strict
22332           && len > DWARF_OFFSET_SIZE
22333           && !DWARF2_INDIRECT_STRING_SUPPORT_MISSING_ON_TARGET
22334           && (debug_str_section->common.flags & SECTION_MERGE) != 0)
22335         {
22336           ref->code = ref->code == DW_MACINFO_define
22337                       ? DW_MACRO_GNU_define_indirect
22338                       : DW_MACRO_GNU_undef_indirect;
22339           output_macinfo_op (ref);
22340           return;
22341         }
22342       dw2_asm_output_data (1, ref->code,
22343                            ref->code == DW_MACINFO_define
22344                            ? "Define macro" : "Undefine macro");
22345       dw2_asm_output_data_uleb128 (ref->lineno, "At line number %lu", 
22346                                    (unsigned long) ref->lineno);
22347       dw2_asm_output_nstring (ref->info, -1, "The macro");
22348       break;
22349     case DW_MACRO_GNU_define_indirect:
22350     case DW_MACRO_GNU_undef_indirect:
22351       node = find_AT_string (ref->info);
22352       gcc_assert (node
22353                   && ((node->form == DW_FORM_strp)
22354                       || (node->form == DW_FORM_GNU_str_index)));
22355       dw2_asm_output_data (1, ref->code,
22356                            ref->code == DW_MACRO_GNU_define_indirect
22357                            ? "Define macro indirect"
22358                            : "Undefine macro indirect");
22359       dw2_asm_output_data_uleb128 (ref->lineno, "At line number %lu",
22360                                    (unsigned long) ref->lineno);
22361       if (node->form == DW_FORM_strp)
22362         dw2_asm_output_offset (DWARF_OFFSET_SIZE, node->label,
22363                                debug_str_section, "The macro: \"%s\"",
22364                                ref->info);
22365       else
22366         dw2_asm_output_data_uleb128 (node->index, "The macro: \"%s\"",
22367                                      ref->info);
22368       break;
22369     case DW_MACRO_GNU_transparent_include:
22370       dw2_asm_output_data (1, ref->code, "Transparent include");
22371       ASM_GENERATE_INTERNAL_LABEL (label,
22372                                    DEBUG_MACRO_SECTION_LABEL, ref->lineno);
22373       dw2_asm_output_offset (DWARF_OFFSET_SIZE, label, NULL, NULL);
22374       break;
22375     default:
22376       fprintf (asm_out_file, "%s unrecognized macinfo code %lu\n",
22377                ASM_COMMENT_START, (unsigned long) ref->code);
22378       break;
22379     }
22380 }
22381
22382 /* Attempt to make a sequence of define/undef macinfo ops shareable with
22383    other compilation unit .debug_macinfo sections.  IDX is the first
22384    index of a define/undef, return the number of ops that should be
22385    emitted in a comdat .debug_macinfo section and emit
22386    a DW_MACRO_GNU_transparent_include entry referencing it.
22387    If the define/undef entry should be emitted normally, return 0.  */
22388
22389 static unsigned
22390 optimize_macinfo_range (unsigned int idx, vec<macinfo_entry, va_gc> *files,
22391                         macinfo_hash_type **macinfo_htab)
22392 {
22393   macinfo_entry *first, *second, *cur, *inc;
22394   char linebuf[sizeof (HOST_WIDE_INT) * 3 + 1];
22395   unsigned char checksum[16];
22396   struct md5_ctx ctx;
22397   char *grp_name, *tail;
22398   const char *base;
22399   unsigned int i, count, encoded_filename_len, linebuf_len;
22400   macinfo_entry **slot;
22401
22402   first = &(*macinfo_table)[idx];
22403   second = &(*macinfo_table)[idx + 1];
22404
22405   /* Optimize only if there are at least two consecutive define/undef ops,
22406      and either all of them are before first DW_MACINFO_start_file
22407      with lineno {0,1} (i.e. predefined macro block), or all of them are
22408      in some included header file.  */
22409   if (second->code != DW_MACINFO_define && second->code != DW_MACINFO_undef)
22410     return 0;
22411   if (vec_safe_is_empty (files))
22412     {
22413       if (first->lineno > 1 || second->lineno > 1)
22414         return 0;
22415     }
22416   else if (first->lineno == 0)
22417     return 0;
22418
22419   /* Find the last define/undef entry that can be grouped together
22420      with first and at the same time compute md5 checksum of their
22421      codes, linenumbers and strings.  */
22422   md5_init_ctx (&ctx);
22423   for (i = idx; macinfo_table->iterate (i, &cur); i++)
22424     if (cur->code != DW_MACINFO_define && cur->code != DW_MACINFO_undef)
22425       break;
22426     else if (vec_safe_is_empty (files) && cur->lineno > 1)
22427       break;
22428     else
22429       {
22430         unsigned char code = cur->code;
22431         md5_process_bytes (&code, 1, &ctx);
22432         checksum_uleb128 (cur->lineno, &ctx);
22433         md5_process_bytes (cur->info, strlen (cur->info) + 1, &ctx);
22434       }
22435   md5_finish_ctx (&ctx, checksum);
22436   count = i - idx;
22437
22438   /* From the containing include filename (if any) pick up just
22439      usable characters from its basename.  */
22440   if (vec_safe_is_empty (files))
22441     base = "";
22442   else
22443     base = lbasename (files->last ().info);
22444   for (encoded_filename_len = 0, i = 0; base[i]; i++)
22445     if (ISIDNUM (base[i]) || base[i] == '.')
22446       encoded_filename_len++;
22447   /* Count . at the end.  */
22448   if (encoded_filename_len)
22449     encoded_filename_len++;
22450
22451   sprintf (linebuf, HOST_WIDE_INT_PRINT_UNSIGNED, first->lineno);
22452   linebuf_len = strlen (linebuf);
22453
22454   /* The group name format is: wmN.[<encoded filename>.]<lineno>.<md5sum>  */
22455   grp_name = XALLOCAVEC (char, 4 + encoded_filename_len + linebuf_len + 1
22456                          + 16 * 2 + 1);
22457   memcpy (grp_name, DWARF_OFFSET_SIZE == 4 ? "wm4." : "wm8.", 4);
22458   tail = grp_name + 4;
22459   if (encoded_filename_len)
22460     {
22461       for (i = 0; base[i]; i++)
22462         if (ISIDNUM (base[i]) || base[i] == '.')
22463           *tail++ = base[i];
22464       *tail++ = '.';
22465     }
22466   memcpy (tail, linebuf, linebuf_len);
22467   tail += linebuf_len;
22468   *tail++ = '.';
22469   for (i = 0; i < 16; i++)
22470     sprintf (tail + i * 2, "%02x", checksum[i] & 0xff);
22471
22472   /* Construct a macinfo_entry for DW_MACRO_GNU_transparent_include
22473      in the empty vector entry before the first define/undef.  */
22474   inc = &(*macinfo_table)[idx - 1];
22475   inc->code = DW_MACRO_GNU_transparent_include;
22476   inc->lineno = 0;
22477   inc->info = ggc_strdup (grp_name);
22478   if (!*macinfo_htab)
22479     *macinfo_htab = new macinfo_hash_type (10);
22480   /* Avoid emitting duplicates.  */
22481   slot = (*macinfo_htab)->find_slot (inc, INSERT);
22482   if (*slot != NULL)
22483     {
22484       inc->code = 0;
22485       inc->info = NULL;
22486       /* If such an entry has been used before, just emit
22487          a DW_MACRO_GNU_transparent_include op.  */
22488       inc = *slot;
22489       output_macinfo_op (inc);
22490       /* And clear all macinfo_entry in the range to avoid emitting them
22491          in the second pass.  */
22492       for (i = idx; macinfo_table->iterate (i, &cur) && i < idx + count; i++)
22493         {
22494           cur->code = 0;
22495           cur->info = NULL;
22496         }
22497     }
22498   else
22499     {
22500       *slot = inc;
22501       inc->lineno = (*macinfo_htab)->elements ();
22502       output_macinfo_op (inc);
22503     }
22504   return count;
22505 }
22506
22507 /* Save any strings needed by the macinfo table in the debug str
22508    table.  All strings must be collected into the table by the time
22509    index_string is called.  */
22510
22511 static void
22512 save_macinfo_strings (void)
22513 {
22514   unsigned len;
22515   unsigned i;
22516   macinfo_entry *ref;
22517
22518   for (i = 0; macinfo_table && macinfo_table->iterate (i, &ref); i++)
22519     {
22520       switch (ref->code)
22521         {
22522           /* Match the logic in output_macinfo_op to decide on
22523              indirect strings.  */
22524           case DW_MACINFO_define:
22525           case DW_MACINFO_undef:
22526             len = strlen (ref->info) + 1;
22527             if (!dwarf_strict
22528                 && len > DWARF_OFFSET_SIZE
22529                 && !DWARF2_INDIRECT_STRING_SUPPORT_MISSING_ON_TARGET
22530                 && (debug_str_section->common.flags & SECTION_MERGE) != 0)
22531               set_indirect_string (find_AT_string (ref->info));
22532             break;
22533           case DW_MACRO_GNU_define_indirect:
22534           case DW_MACRO_GNU_undef_indirect:
22535             set_indirect_string (find_AT_string (ref->info));
22536             break;
22537           default:
22538             break;
22539         }
22540     }
22541 }
22542
22543 /* Output macinfo section(s).  */
22544
22545 static void
22546 output_macinfo (void)
22547 {
22548   unsigned i;
22549   unsigned long length = vec_safe_length (macinfo_table);
22550   macinfo_entry *ref;
22551   vec<macinfo_entry, va_gc> *files = NULL;
22552   macinfo_hash_type *macinfo_htab = NULL;
22553
22554   if (! length)
22555     return;
22556
22557   /* output_macinfo* uses these interchangeably.  */
22558   gcc_assert ((int) DW_MACINFO_define == (int) DW_MACRO_GNU_define
22559               && (int) DW_MACINFO_undef == (int) DW_MACRO_GNU_undef
22560               && (int) DW_MACINFO_start_file == (int) DW_MACRO_GNU_start_file
22561               && (int) DW_MACINFO_end_file == (int) DW_MACRO_GNU_end_file);
22562
22563   /* For .debug_macro emit the section header.  */
22564   if (!dwarf_strict)
22565     {
22566       dw2_asm_output_data (2, 4, "DWARF macro version number");
22567       if (DWARF_OFFSET_SIZE == 8)
22568         dw2_asm_output_data (1, 3, "Flags: 64-bit, lineptr present");
22569       else
22570         dw2_asm_output_data (1, 2, "Flags: 32-bit, lineptr present");
22571       dw2_asm_output_offset (DWARF_OFFSET_SIZE,
22572                              (!dwarf_split_debug_info ? debug_line_section_label
22573                               : debug_skeleton_line_section_label),
22574                              debug_line_section, NULL);
22575     }
22576
22577   /* In the first loop, it emits the primary .debug_macinfo section
22578      and after each emitted op the macinfo_entry is cleared.
22579      If a longer range of define/undef ops can be optimized using
22580      DW_MACRO_GNU_transparent_include, the
22581      DW_MACRO_GNU_transparent_include op is emitted and kept in
22582      the vector before the first define/undef in the range and the
22583      whole range of define/undef ops is not emitted and kept.  */
22584   for (i = 0; macinfo_table->iterate (i, &ref); i++)
22585     {
22586       switch (ref->code)
22587         {
22588         case DW_MACINFO_start_file:
22589           vec_safe_push (files, *ref);
22590           break;
22591         case DW_MACINFO_end_file:
22592           if (!vec_safe_is_empty (files))
22593             files->pop ();
22594           break;
22595         case DW_MACINFO_define:
22596         case DW_MACINFO_undef:
22597           if (!dwarf_strict
22598               && HAVE_COMDAT_GROUP
22599               && vec_safe_length (files) != 1
22600               && i > 0
22601               && i + 1 < length
22602               && (*macinfo_table)[i - 1].code == 0)
22603             {
22604               unsigned count = optimize_macinfo_range (i, files, &macinfo_htab);
22605               if (count)
22606                 {
22607                   i += count - 1;
22608                   continue;
22609                 }
22610             }
22611           break;
22612         case 0:
22613           /* A dummy entry may be inserted at the beginning to be able
22614              to optimize the whole block of predefined macros.  */
22615           if (i == 0)
22616             continue;
22617         default:
22618           break;
22619         }
22620       output_macinfo_op (ref);
22621       ref->info = NULL;
22622       ref->code = 0;
22623     }
22624
22625   if (!macinfo_htab)
22626     return;
22627
22628   delete macinfo_htab;
22629   macinfo_htab = NULL;
22630
22631   /* If any DW_MACRO_GNU_transparent_include were used, on those
22632      DW_MACRO_GNU_transparent_include entries terminate the
22633      current chain and switch to a new comdat .debug_macinfo
22634      section and emit the define/undef entries within it.  */
22635   for (i = 0; macinfo_table->iterate (i, &ref); i++)
22636     switch (ref->code)
22637       {
22638       case 0:
22639         continue;
22640       case DW_MACRO_GNU_transparent_include:
22641         {
22642           char label[MAX_ARTIFICIAL_LABEL_BYTES];
22643           tree comdat_key = get_identifier (ref->info);
22644           /* Terminate the previous .debug_macinfo section.  */
22645           dw2_asm_output_data (1, 0, "End compilation unit");
22646           targetm.asm_out.named_section (DEBUG_MACRO_SECTION,
22647                                          SECTION_DEBUG
22648                                          | SECTION_LINKONCE,
22649                                          comdat_key);
22650           ASM_GENERATE_INTERNAL_LABEL (label,
22651                                        DEBUG_MACRO_SECTION_LABEL,
22652                                        ref->lineno);
22653           ASM_OUTPUT_LABEL (asm_out_file, label);
22654           ref->code = 0;
22655           ref->info = NULL;
22656           dw2_asm_output_data (2, 4, "DWARF macro version number");
22657           if (DWARF_OFFSET_SIZE == 8)
22658             dw2_asm_output_data (1, 1, "Flags: 64-bit");
22659           else
22660             dw2_asm_output_data (1, 0, "Flags: 32-bit");
22661         }
22662         break;
22663       case DW_MACINFO_define:
22664       case DW_MACINFO_undef:
22665         output_macinfo_op (ref);
22666         ref->code = 0;
22667         ref->info = NULL;
22668         break;
22669       default:
22670         gcc_unreachable ();
22671       }
22672 }
22673
22674 /* Set up for Dwarf output at the start of compilation.  */
22675
22676 static void
22677 dwarf2out_init (const char *filename ATTRIBUTE_UNUSED)
22678 {
22679   /* This option is currently broken, see (PR53118 and PR46102).  */
22680   if (flag_eliminate_dwarf2_dups
22681       && strstr (lang_hooks.name, "C++"))
22682     {
22683       warning (0, "-feliminate-dwarf2-dups is broken for C++, ignoring");
22684       flag_eliminate_dwarf2_dups = 0;
22685     }
22686
22687   /* Allocate the file_table.  */
22688   file_table = hash_table<dwarf_file_hasher>::create_ggc (50);
22689
22690   /* Allocate the decl_die_table.  */
22691   decl_die_table = hash_table<decl_die_hasher>::create_ggc (10);
22692
22693   /* Allocate the decl_loc_table.  */
22694   decl_loc_table = hash_table<decl_loc_hasher>::create_ggc (10);
22695
22696   /* Allocate the cached_dw_loc_list_table.  */
22697   cached_dw_loc_list_table = hash_table<dw_loc_list_hasher>::create_ggc (10);
22698
22699   /* Allocate the initial hunk of the decl_scope_table.  */
22700   vec_alloc (decl_scope_table, 256);
22701
22702   /* Allocate the initial hunk of the abbrev_die_table.  */
22703   abbrev_die_table = ggc_cleared_vec_alloc<dw_die_ref>
22704     (ABBREV_DIE_TABLE_INCREMENT);
22705   abbrev_die_table_allocated = ABBREV_DIE_TABLE_INCREMENT;
22706   /* Zero-th entry is allocated, but unused.  */
22707   abbrev_die_table_in_use = 1;
22708
22709   /* Allocate the pubtypes and pubnames vectors.  */
22710   vec_alloc (pubname_table, 32);
22711   vec_alloc (pubtype_table, 32);
22712
22713   vec_alloc (incomplete_types, 64);
22714
22715   vec_alloc (used_rtx_array, 32);
22716
22717   if (!dwarf_split_debug_info)
22718     {
22719       debug_info_section = get_section (DEBUG_INFO_SECTION,
22720                                         SECTION_DEBUG, NULL);
22721       debug_abbrev_section = get_section (DEBUG_ABBREV_SECTION,
22722                                           SECTION_DEBUG, NULL);
22723       debug_loc_section = get_section (DEBUG_LOC_SECTION,
22724                                        SECTION_DEBUG, NULL);
22725     }
22726   else
22727     {
22728       debug_info_section = get_section (DEBUG_DWO_INFO_SECTION,
22729                                         SECTION_DEBUG | SECTION_EXCLUDE, NULL);
22730       debug_abbrev_section = get_section (DEBUG_DWO_ABBREV_SECTION,
22731                                           SECTION_DEBUG | SECTION_EXCLUDE,
22732                                           NULL);
22733       debug_addr_section = get_section (DEBUG_ADDR_SECTION,
22734                                         SECTION_DEBUG, NULL);
22735       debug_skeleton_info_section = get_section (DEBUG_INFO_SECTION,
22736                                                  SECTION_DEBUG, NULL);
22737       debug_skeleton_abbrev_section = get_section (DEBUG_ABBREV_SECTION,
22738                                                    SECTION_DEBUG, NULL);
22739       ASM_GENERATE_INTERNAL_LABEL (debug_skeleton_abbrev_section_label,
22740                                   DEBUG_SKELETON_ABBREV_SECTION_LABEL, 0);
22741
22742       /* Somewhat confusing detail: The skeleton_[abbrev|info] sections stay in
22743          the main .o, but the skeleton_line goes into the split off dwo.  */
22744       debug_skeleton_line_section
22745           = get_section (DEBUG_DWO_LINE_SECTION,
22746                          SECTION_DEBUG | SECTION_EXCLUDE, NULL);
22747       ASM_GENERATE_INTERNAL_LABEL (debug_skeleton_line_section_label,
22748                                    DEBUG_SKELETON_LINE_SECTION_LABEL, 0);
22749       debug_str_offsets_section = get_section (DEBUG_STR_OFFSETS_SECTION,
22750                                                SECTION_DEBUG | SECTION_EXCLUDE,
22751                                                NULL);
22752       ASM_GENERATE_INTERNAL_LABEL (debug_skeleton_info_section_label,
22753                                    DEBUG_SKELETON_INFO_SECTION_LABEL, 0);
22754       debug_loc_section = get_section (DEBUG_DWO_LOC_SECTION,
22755                                        SECTION_DEBUG | SECTION_EXCLUDE, NULL);
22756       debug_str_dwo_section = get_section (DEBUG_STR_DWO_SECTION,
22757                                            DEBUG_STR_DWO_SECTION_FLAGS, NULL);
22758     }
22759   debug_aranges_section = get_section (DEBUG_ARANGES_SECTION,
22760                                        SECTION_DEBUG, NULL);
22761   debug_macinfo_section = get_section (dwarf_strict
22762                                        ? DEBUG_MACINFO_SECTION
22763                                        : DEBUG_MACRO_SECTION,
22764                                        DEBUG_MACRO_SECTION_FLAGS, NULL);
22765   debug_line_section = get_section (DEBUG_LINE_SECTION,
22766                                     SECTION_DEBUG, NULL);
22767   debug_pubnames_section = get_section (DEBUG_PUBNAMES_SECTION,
22768                                         SECTION_DEBUG, NULL);
22769   debug_pubtypes_section = get_section (DEBUG_PUBTYPES_SECTION,
22770                                         SECTION_DEBUG, NULL);
22771   debug_str_section = get_section (DEBUG_STR_SECTION,
22772                                    DEBUG_STR_SECTION_FLAGS, NULL);
22773   debug_ranges_section = get_section (DEBUG_RANGES_SECTION,
22774                                       SECTION_DEBUG, NULL);
22775   debug_frame_section = get_section (DEBUG_FRAME_SECTION,
22776                                      SECTION_DEBUG, NULL);
22777
22778   ASM_GENERATE_INTERNAL_LABEL (text_end_label, TEXT_END_LABEL, 0);
22779   ASM_GENERATE_INTERNAL_LABEL (abbrev_section_label,
22780                                DEBUG_ABBREV_SECTION_LABEL, 0);
22781   ASM_GENERATE_INTERNAL_LABEL (text_section_label, TEXT_SECTION_LABEL, 0);
22782   ASM_GENERATE_INTERNAL_LABEL (cold_text_section_label,
22783                                COLD_TEXT_SECTION_LABEL, 0);
22784   ASM_GENERATE_INTERNAL_LABEL (cold_end_label, COLD_END_LABEL, 0);
22785
22786   ASM_GENERATE_INTERNAL_LABEL (debug_info_section_label,
22787                                DEBUG_INFO_SECTION_LABEL, 0);
22788   ASM_GENERATE_INTERNAL_LABEL (debug_line_section_label,
22789                                DEBUG_LINE_SECTION_LABEL, 0);
22790   ASM_GENERATE_INTERNAL_LABEL (ranges_section_label,
22791                                DEBUG_RANGES_SECTION_LABEL, 0);
22792   ASM_GENERATE_INTERNAL_LABEL (debug_addr_section_label,
22793                                DEBUG_ADDR_SECTION_LABEL, 0);
22794   ASM_GENERATE_INTERNAL_LABEL (macinfo_section_label,
22795                                dwarf_strict
22796                                ? DEBUG_MACINFO_SECTION_LABEL
22797                                : DEBUG_MACRO_SECTION_LABEL, 0);
22798   ASM_GENERATE_INTERNAL_LABEL (loc_section_label, DEBUG_LOC_SECTION_LABEL, 0);
22799
22800   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
22801     vec_alloc (macinfo_table, 64);
22802
22803   switch_to_section (text_section);
22804   ASM_OUTPUT_LABEL (asm_out_file, text_section_label);
22805
22806   /* Make sure the line number table for .text always exists.  */
22807   text_section_line_info = new_line_info_table ();
22808   text_section_line_info->end_label = text_end_label;
22809
22810   /* If front-ends already registered a main translation unit but we were not
22811      ready to perform the association, do this now.  */
22812   if (main_translation_unit != NULL_TREE)
22813     equate_decl_number_to_die (main_translation_unit, comp_unit_die ());
22814 }
22815
22816 /* Called before compile () starts outputtting functions, variables
22817    and toplevel asms into assembly.  */
22818
22819 static void
22820 dwarf2out_assembly_start (void)
22821 {
22822   if (HAVE_GAS_CFI_SECTIONS_DIRECTIVE
22823       && dwarf2out_do_cfi_asm ()
22824       && (!(flag_unwind_tables || flag_exceptions)
22825           || targetm_common.except_unwind_info (&global_options) != UI_DWARF2))
22826     fprintf (asm_out_file, "\t.cfi_sections\t.debug_frame\n");
22827 }
22828
22829 /* A helper function for dwarf2out_finish called through
22830    htab_traverse.  Assign a string its index.  All strings must be
22831    collected into the table by the time index_string is called,
22832    because the indexing code relies on htab_traverse to traverse nodes
22833    in the same order for each run. */
22834
22835 int
22836 index_string (indirect_string_node **h, unsigned int *index)
22837 {
22838   indirect_string_node *node = *h;
22839
22840   find_string_form (node);
22841   if (node->form == DW_FORM_GNU_str_index && node->refcount > 0)
22842     {
22843       gcc_assert (node->index == NO_INDEX_ASSIGNED);
22844       node->index = *index;
22845       *index += 1;
22846     }
22847   return 1;
22848 }
22849
22850 /* A helper function for output_indirect_strings called through
22851    htab_traverse.  Output the offset to a string and update the
22852    current offset.  */
22853
22854 int
22855 output_index_string_offset (indirect_string_node **h, unsigned int *offset)
22856 {
22857   indirect_string_node *node = *h;
22858
22859   if (node->form == DW_FORM_GNU_str_index && node->refcount > 0)
22860     {
22861       /* Assert that this node has been assigned an index.  */
22862       gcc_assert (node->index != NO_INDEX_ASSIGNED
22863                   && node->index != NOT_INDEXED);
22864       dw2_asm_output_data (DWARF_OFFSET_SIZE, *offset,
22865                            "indexed string 0x%x: %s", node->index, node->str);
22866       *offset += strlen (node->str) + 1;
22867     }
22868   return 1;
22869 }
22870
22871 /* A helper function for dwarf2out_finish called through
22872    htab_traverse.  Output the indexed string.  */
22873
22874 int
22875 output_index_string (indirect_string_node **h, unsigned int *cur_idx)
22876 {
22877   struct indirect_string_node *node = *h;
22878
22879   if (node->form == DW_FORM_GNU_str_index && node->refcount > 0)
22880     {
22881       /* Assert that the strings are output in the same order as their
22882          indexes were assigned.  */
22883       gcc_assert (*cur_idx == node->index);
22884       assemble_string (node->str, strlen (node->str) + 1);
22885       *cur_idx += 1;
22886     }
22887   return 1;
22888 }
22889
22890 /* A helper function for dwarf2out_finish called through
22891    htab_traverse.  Emit one queued .debug_str string.  */
22892
22893 int
22894 output_indirect_string (indirect_string_node **h, void *)
22895 {
22896   struct indirect_string_node *node = *h;
22897
22898   node->form = find_string_form (node);
22899   if (node->form == DW_FORM_strp && node->refcount > 0)
22900     {
22901       ASM_OUTPUT_LABEL (asm_out_file, node->label);
22902       assemble_string (node->str, strlen (node->str) + 1);
22903     }
22904
22905   return 1;
22906 }
22907
22908 /* Output the indexed string table.  */
22909
22910 static void
22911 output_indirect_strings (void)
22912 {
22913   switch_to_section (debug_str_section);
22914   if (!dwarf_split_debug_info)
22915     debug_str_hash->traverse<void *, output_indirect_string> (NULL);
22916   else
22917     {
22918       unsigned int offset = 0;
22919       unsigned int cur_idx = 0;
22920
22921       skeleton_debug_str_hash->traverse<void *, output_indirect_string> (NULL);
22922
22923       switch_to_section (debug_str_offsets_section);
22924       debug_str_hash->traverse_noresize
22925         <unsigned int *, output_index_string_offset> (&offset);
22926       switch_to_section (debug_str_dwo_section);
22927       debug_str_hash->traverse_noresize<unsigned int *, output_index_string>
22928         (&cur_idx);
22929     }
22930 }
22931
22932 /* Callback for htab_traverse to assign an index to an entry in the
22933    table, and to write that entry to the .debug_addr section.  */
22934
22935 int
22936 output_addr_table_entry (addr_table_entry **slot, unsigned int *cur_index)
22937 {
22938   addr_table_entry *entry = *slot;
22939
22940   if (entry->refcount == 0)
22941     {
22942       gcc_assert (entry->index == NO_INDEX_ASSIGNED
22943                   || entry->index == NOT_INDEXED);
22944       return 1;
22945     }
22946
22947   gcc_assert (entry->index == *cur_index);
22948   (*cur_index)++;
22949
22950   switch (entry->kind)
22951     {
22952       case ate_kind_rtx:
22953         dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE, entry->addr.rtl,
22954                                  "0x%x", entry->index);
22955         break;
22956       case ate_kind_rtx_dtprel:
22957         gcc_assert (targetm.asm_out.output_dwarf_dtprel);
22958         targetm.asm_out.output_dwarf_dtprel (asm_out_file,
22959                                              DWARF2_ADDR_SIZE,
22960                                              entry->addr.rtl);
22961         fputc ('\n', asm_out_file);
22962         break;
22963       case ate_kind_label:
22964         dw2_asm_output_addr (DWARF2_ADDR_SIZE, entry->addr.label,
22965                                  "0x%x", entry->index);
22966         break;
22967       default:
22968         gcc_unreachable ();
22969     }
22970   return 1;
22971 }
22972
22973 /* Produce the .debug_addr section.  */
22974
22975 static void
22976 output_addr_table (void)
22977 {
22978   unsigned int index = 0;
22979   if (addr_index_table == NULL || addr_index_table->size () == 0)
22980     return;
22981
22982   switch_to_section (debug_addr_section);
22983   addr_index_table
22984     ->traverse_noresize<unsigned int *, output_addr_table_entry> (&index);
22985 }
22986
22987 #if ENABLE_ASSERT_CHECKING
22988 /* Verify that all marks are clear.  */
22989
22990 static void
22991 verify_marks_clear (dw_die_ref die)
22992 {
22993   dw_die_ref c;
22994
22995   gcc_assert (! die->die_mark);
22996   FOR_EACH_CHILD (die, c, verify_marks_clear (c));
22997 }
22998 #endif /* ENABLE_ASSERT_CHECKING */
22999
23000 /* Clear the marks for a die and its children.
23001    Be cool if the mark isn't set.  */
23002
23003 static void
23004 prune_unmark_dies (dw_die_ref die)
23005 {
23006   dw_die_ref c;
23007
23008   if (die->die_mark)
23009     die->die_mark = 0;
23010   FOR_EACH_CHILD (die, c, prune_unmark_dies (c));
23011 }
23012
23013 /* Given DIE that we're marking as used, find any other dies
23014    it references as attributes and mark them as used.  */
23015
23016 static void
23017 prune_unused_types_walk_attribs (dw_die_ref die)
23018 {
23019   dw_attr_ref a;
23020   unsigned ix;
23021
23022   FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
23023     {
23024       if (a->dw_attr_val.val_class == dw_val_class_die_ref)
23025         {
23026           /* A reference to another DIE.
23027              Make sure that it will get emitted.
23028              If it was broken out into a comdat group, don't follow it.  */
23029           if (! AT_ref (a)->comdat_type_p
23030               || a->dw_attr == DW_AT_specification)
23031             prune_unused_types_mark (a->dw_attr_val.v.val_die_ref.die, 1);
23032         }
23033       /* Set the string's refcount to 0 so that prune_unused_types_mark
23034          accounts properly for it.  */
23035       if (AT_class (a) == dw_val_class_str)
23036         a->dw_attr_val.v.val_str->refcount = 0;
23037     }
23038 }
23039
23040 /* Mark the generic parameters and arguments children DIEs of DIE.  */
23041
23042 static void
23043 prune_unused_types_mark_generic_parms_dies (dw_die_ref die)
23044 {
23045   dw_die_ref c;
23046
23047   if (die == NULL || die->die_child == NULL)
23048     return;
23049   c = die->die_child;
23050   do
23051     {
23052       if (is_template_parameter (c))
23053         prune_unused_types_mark (c, 1);
23054       c = c->die_sib;
23055     } while (c && c != die->die_child);
23056 }
23057
23058 /* Mark DIE as being used.  If DOKIDS is true, then walk down
23059    to DIE's children.  */
23060
23061 static void
23062 prune_unused_types_mark (dw_die_ref die, int dokids)
23063 {
23064   dw_die_ref c;
23065
23066   if (die->die_mark == 0)
23067     {
23068       /* We haven't done this node yet.  Mark it as used.  */
23069       die->die_mark = 1;
23070       /* If this is the DIE of a generic type instantiation,
23071          mark the children DIEs that describe its generic parms and
23072          args.  */
23073       prune_unused_types_mark_generic_parms_dies (die);
23074
23075       /* We also have to mark its parents as used.
23076          (But we don't want to mark our parent's kids due to this,
23077          unless it is a class.)  */
23078       if (die->die_parent)
23079         prune_unused_types_mark (die->die_parent,
23080                                  class_scope_p (die->die_parent));
23081
23082       /* Mark any referenced nodes.  */
23083       prune_unused_types_walk_attribs (die);
23084
23085       /* If this node is a specification,
23086          also mark the definition, if it exists.  */
23087       if (get_AT_flag (die, DW_AT_declaration) && die->die_definition)
23088         prune_unused_types_mark (die->die_definition, 1);
23089     }
23090
23091   if (dokids && die->die_mark != 2)
23092     {
23093       /* We need to walk the children, but haven't done so yet.
23094          Remember that we've walked the kids.  */
23095       die->die_mark = 2;
23096
23097       /* If this is an array type, we need to make sure our
23098          kids get marked, even if they're types.  If we're
23099          breaking out types into comdat sections, do this
23100          for all type definitions.  */
23101       if (die->die_tag == DW_TAG_array_type
23102           || (use_debug_types
23103               && is_type_die (die) && ! is_declaration_die (die)))
23104         FOR_EACH_CHILD (die, c, prune_unused_types_mark (c, 1));
23105       else
23106         FOR_EACH_CHILD (die, c, prune_unused_types_walk (c));
23107     }
23108 }
23109
23110 /* For local classes, look if any static member functions were emitted
23111    and if so, mark them.  */
23112
23113 static void
23114 prune_unused_types_walk_local_classes (dw_die_ref die)
23115 {
23116   dw_die_ref c;
23117
23118   if (die->die_mark == 2)
23119     return;
23120
23121   switch (die->die_tag)
23122     {
23123     case DW_TAG_structure_type:
23124     case DW_TAG_union_type:
23125     case DW_TAG_class_type:
23126       break;
23127
23128     case DW_TAG_subprogram:
23129       if (!get_AT_flag (die, DW_AT_declaration)
23130           || die->die_definition != NULL)
23131         prune_unused_types_mark (die, 1);
23132       return;
23133
23134     default:
23135       return;
23136     }
23137
23138   /* Mark children.  */
23139   FOR_EACH_CHILD (die, c, prune_unused_types_walk_local_classes (c));
23140 }
23141
23142 /* Walk the tree DIE and mark types that we actually use.  */
23143
23144 static void
23145 prune_unused_types_walk (dw_die_ref die)
23146 {
23147   dw_die_ref c;
23148
23149   /* Don't do anything if this node is already marked and
23150      children have been marked as well.  */
23151   if (die->die_mark == 2)
23152     return;
23153
23154   switch (die->die_tag)
23155     {
23156     case DW_TAG_structure_type:
23157     case DW_TAG_union_type:
23158     case DW_TAG_class_type:
23159       if (die->die_perennial_p)
23160         break;
23161
23162       for (c = die->die_parent; c; c = c->die_parent)
23163         if (c->die_tag == DW_TAG_subprogram)
23164           break;
23165
23166       /* Finding used static member functions inside of classes
23167          is needed just for local classes, because for other classes
23168          static member function DIEs with DW_AT_specification
23169          are emitted outside of the DW_TAG_*_type.  If we ever change
23170          it, we'd need to call this even for non-local classes.  */
23171       if (c)
23172         prune_unused_types_walk_local_classes (die);
23173
23174       /* It's a type node --- don't mark it.  */
23175       return;
23176
23177     case DW_TAG_const_type:
23178     case DW_TAG_packed_type:
23179     case DW_TAG_pointer_type:
23180     case DW_TAG_reference_type:
23181     case DW_TAG_rvalue_reference_type:
23182     case DW_TAG_volatile_type:
23183     case DW_TAG_typedef:
23184     case DW_TAG_array_type:
23185     case DW_TAG_interface_type:
23186     case DW_TAG_friend:
23187     case DW_TAG_variant_part:
23188     case DW_TAG_enumeration_type:
23189     case DW_TAG_subroutine_type:
23190     case DW_TAG_string_type:
23191     case DW_TAG_set_type:
23192     case DW_TAG_subrange_type:
23193     case DW_TAG_ptr_to_member_type:
23194     case DW_TAG_file_type:
23195       if (die->die_perennial_p)
23196         break;
23197
23198       /* It's a type node --- don't mark it.  */
23199       return;
23200
23201     default:
23202       /* Mark everything else.  */
23203       break;
23204   }
23205
23206   if (die->die_mark == 0)
23207     {
23208       die->die_mark = 1;
23209
23210       /* Now, mark any dies referenced from here.  */
23211       prune_unused_types_walk_attribs (die);
23212     }
23213
23214   die->die_mark = 2;
23215
23216   /* Mark children.  */
23217   FOR_EACH_CHILD (die, c, prune_unused_types_walk (c));
23218 }
23219
23220 /* Increment the string counts on strings referred to from DIE's
23221    attributes.  */
23222
23223 static void
23224 prune_unused_types_update_strings (dw_die_ref die)
23225 {
23226   dw_attr_ref a;
23227   unsigned ix;
23228
23229   FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
23230     if (AT_class (a) == dw_val_class_str)
23231       {
23232         struct indirect_string_node *s = a->dw_attr_val.v.val_str;
23233         s->refcount++;
23234         /* Avoid unnecessarily putting strings that are used less than
23235            twice in the hash table.  */
23236         if (s->refcount
23237             == ((DEBUG_STR_SECTION_FLAGS & SECTION_MERGE) ? 1 : 2))
23238           {
23239             indirect_string_node **slot
23240               = debug_str_hash->find_slot_with_hash (s->str,
23241                                                      htab_hash_string (s->str),
23242                                                      INSERT);
23243             gcc_assert (*slot == NULL);
23244             *slot = s;
23245           }
23246       }
23247 }
23248
23249 /* Remove from the tree DIE any dies that aren't marked.  */
23250
23251 static void
23252 prune_unused_types_prune (dw_die_ref die)
23253 {
23254   dw_die_ref c;
23255
23256   gcc_assert (die->die_mark);
23257   prune_unused_types_update_strings (die);
23258
23259   if (! die->die_child)
23260     return;
23261
23262   c = die->die_child;
23263   do {
23264     dw_die_ref prev = c;
23265     for (c = c->die_sib; ! c->die_mark; c = c->die_sib)
23266       if (c == die->die_child)
23267         {
23268           /* No marked children between 'prev' and the end of the list.  */
23269           if (prev == c)
23270             /* No marked children at all.  */
23271             die->die_child = NULL;
23272           else
23273             {
23274               prev->die_sib = c->die_sib;
23275               die->die_child = prev;
23276             }
23277           return;
23278         }
23279
23280     if (c != prev->die_sib)
23281       prev->die_sib = c;
23282     prune_unused_types_prune (c);
23283   } while (c != die->die_child);
23284 }
23285
23286 /* Remove dies representing declarations that we never use.  */
23287
23288 static void
23289 prune_unused_types (void)
23290 {
23291   unsigned int i;
23292   limbo_die_node *node;
23293   comdat_type_node *ctnode;
23294   pubname_ref pub;
23295   dw_die_ref base_type;
23296
23297 #if ENABLE_ASSERT_CHECKING
23298   /* All the marks should already be clear.  */
23299   verify_marks_clear (comp_unit_die ());
23300   for (node = limbo_die_list; node; node = node->next)
23301     verify_marks_clear (node->die);
23302   for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next)
23303     verify_marks_clear (ctnode->root_die);
23304 #endif /* ENABLE_ASSERT_CHECKING */
23305
23306   /* Mark types that are used in global variables.  */
23307   premark_types_used_by_global_vars ();
23308
23309   /* Set the mark on nodes that are actually used.  */
23310   prune_unused_types_walk (comp_unit_die ());
23311   for (node = limbo_die_list; node; node = node->next)
23312     prune_unused_types_walk (node->die);
23313   for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next)
23314     {
23315       prune_unused_types_walk (ctnode->root_die);
23316       prune_unused_types_mark (ctnode->type_die, 1);
23317     }
23318
23319   /* Also set the mark on nodes referenced from the pubname_table.  Enumerators
23320      are unusual in that they are pubnames that are the children of pubtypes.
23321      They should only be marked via their parent DW_TAG_enumeration_type die,
23322      not as roots in themselves.  */
23323   FOR_EACH_VEC_ELT (*pubname_table, i, pub)
23324     if (pub->die->die_tag != DW_TAG_enumerator)
23325       prune_unused_types_mark (pub->die, 1);
23326   for (i = 0; base_types.iterate (i, &base_type); i++)
23327     prune_unused_types_mark (base_type, 1);
23328
23329   if (debug_str_hash)
23330     debug_str_hash->empty ();
23331   if (skeleton_debug_str_hash)
23332     skeleton_debug_str_hash->empty ();
23333   prune_unused_types_prune (comp_unit_die ());
23334   for (node = limbo_die_list; node; node = node->next)
23335     prune_unused_types_prune (node->die);
23336   for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next)
23337     prune_unused_types_prune (ctnode->root_die);
23338
23339   /* Leave the marks clear.  */
23340   prune_unmark_dies (comp_unit_die ());
23341   for (node = limbo_die_list; node; node = node->next)
23342     prune_unmark_dies (node->die);
23343   for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next)
23344     prune_unmark_dies (ctnode->root_die);
23345 }
23346
23347 /* Set the parameter to true if there are any relative pathnames in
23348    the file table.  */
23349 int
23350 file_table_relative_p (dwarf_file_data **slot, bool *p)
23351 {
23352   struct dwarf_file_data *d = *slot;
23353   if (!IS_ABSOLUTE_PATH (d->filename))
23354     {
23355       *p = true;
23356       return 0;
23357     }
23358   return 1;
23359 }
23360
23361 /* Helpers to manipulate hash table of comdat type units.  */
23362
23363 struct comdat_type_hasher : typed_noop_remove <comdat_type_node>
23364 {
23365   typedef comdat_type_node value_type;
23366   typedef comdat_type_node compare_type;
23367   static inline hashval_t hash (const value_type *);
23368   static inline bool equal (const value_type *, const compare_type *);
23369 };
23370
23371 inline hashval_t
23372 comdat_type_hasher::hash (const value_type *type_node)
23373 {
23374   hashval_t h;
23375   memcpy (&h, type_node->signature, sizeof (h));
23376   return h;
23377 }
23378
23379 inline bool
23380 comdat_type_hasher::equal (const value_type *type_node_1,
23381                            const compare_type *type_node_2)
23382 {
23383   return (! memcmp (type_node_1->signature, type_node_2->signature,
23384                     DWARF_TYPE_SIGNATURE_SIZE));
23385 }
23386
23387 /* Move a DW_AT_{,MIPS_}linkage_name attribute just added to dw_die_ref
23388    to the location it would have been added, should we know its
23389    DECL_ASSEMBLER_NAME when we added other attributes.  This will
23390    probably improve compactness of debug info, removing equivalent
23391    abbrevs, and hide any differences caused by deferring the
23392    computation of the assembler name, triggered by e.g. PCH.  */
23393
23394 static inline void
23395 move_linkage_attr (dw_die_ref die)
23396 {
23397   unsigned ix = vec_safe_length (die->die_attr);
23398   dw_attr_node linkage = (*die->die_attr)[ix - 1];
23399
23400   gcc_assert (linkage.dw_attr == DW_AT_linkage_name
23401               || linkage.dw_attr == DW_AT_MIPS_linkage_name);
23402
23403   while (--ix > 0)
23404     {
23405       dw_attr_node *prev = &(*die->die_attr)[ix - 1];
23406
23407       if (prev->dw_attr == DW_AT_decl_line || prev->dw_attr == DW_AT_name)
23408         break;
23409     }
23410
23411   if (ix != vec_safe_length (die->die_attr) - 1)
23412     {
23413       die->die_attr->pop ();
23414       die->die_attr->quick_insert (ix, linkage);
23415     }
23416 }
23417
23418 /* Helper function for resolve_addr, mark DW_TAG_base_type nodes
23419    referenced from typed stack ops and count how often they are used.  */
23420
23421 static void
23422 mark_base_types (dw_loc_descr_ref loc)
23423 {
23424   dw_die_ref base_type = NULL;
23425
23426   for (; loc; loc = loc->dw_loc_next)
23427     {
23428       switch (loc->dw_loc_opc)
23429         {
23430         case DW_OP_GNU_regval_type:
23431         case DW_OP_GNU_deref_type:
23432           base_type = loc->dw_loc_oprnd2.v.val_die_ref.die;
23433           break;
23434         case DW_OP_GNU_convert:
23435         case DW_OP_GNU_reinterpret:
23436           if (loc->dw_loc_oprnd1.val_class == dw_val_class_unsigned_const)
23437             continue;
23438           /* FALLTHRU */
23439         case DW_OP_GNU_const_type:
23440           base_type = loc->dw_loc_oprnd1.v.val_die_ref.die;
23441           break;
23442         case DW_OP_GNU_entry_value:
23443           mark_base_types (loc->dw_loc_oprnd1.v.val_loc);
23444           continue;
23445         default:
23446           continue;
23447         }
23448       gcc_assert (base_type->die_parent == comp_unit_die ());
23449       if (base_type->die_mark)
23450         base_type->die_mark++;
23451       else
23452         {
23453           base_types.safe_push (base_type);
23454           base_type->die_mark = 1;
23455         }
23456     }
23457 }
23458
23459 /* Comparison function for sorting marked base types.  */
23460
23461 static int
23462 base_type_cmp (const void *x, const void *y)
23463 {
23464   dw_die_ref dx = *(const dw_die_ref *) x;
23465   dw_die_ref dy = *(const dw_die_ref *) y;
23466   unsigned int byte_size1, byte_size2;
23467   unsigned int encoding1, encoding2;
23468   if (dx->die_mark > dy->die_mark)
23469     return -1;
23470   if (dx->die_mark < dy->die_mark)
23471     return 1;
23472   byte_size1 = get_AT_unsigned (dx, DW_AT_byte_size);
23473   byte_size2 = get_AT_unsigned (dy, DW_AT_byte_size);
23474   if (byte_size1 < byte_size2)
23475     return 1;
23476   if (byte_size1 > byte_size2)
23477     return -1;
23478   encoding1 = get_AT_unsigned (dx, DW_AT_encoding);
23479   encoding2 = get_AT_unsigned (dy, DW_AT_encoding);
23480   if (encoding1 < encoding2)
23481     return 1;
23482   if (encoding1 > encoding2)
23483     return -1;
23484   return 0;
23485 }
23486
23487 /* Move base types marked by mark_base_types as early as possible
23488    in the CU, sorted by decreasing usage count both to make the
23489    uleb128 references as small as possible and to make sure they
23490    will have die_offset already computed by calc_die_sizes when
23491    sizes of typed stack loc ops is computed.  */
23492
23493 static void
23494 move_marked_base_types (void)
23495 {
23496   unsigned int i;
23497   dw_die_ref base_type, die, c;
23498
23499   if (base_types.is_empty ())
23500     return;
23501
23502   /* Sort by decreasing usage count, they will be added again in that
23503      order later on.  */
23504   base_types.qsort (base_type_cmp);
23505   die = comp_unit_die ();
23506   c = die->die_child;
23507   do
23508     {
23509       dw_die_ref prev = c;
23510       c = c->die_sib;
23511       while (c->die_mark)
23512         {
23513           remove_child_with_prev (c, prev);
23514           /* As base types got marked, there must be at least
23515              one node other than DW_TAG_base_type.  */
23516           gcc_assert (c != c->die_sib);
23517           c = c->die_sib;
23518         }
23519     }
23520   while (c != die->die_child);
23521   gcc_assert (die->die_child);
23522   c = die->die_child;
23523   for (i = 0; base_types.iterate (i, &base_type); i++)
23524     {
23525       base_type->die_mark = 0;
23526       base_type->die_sib = c->die_sib;
23527       c->die_sib = base_type;
23528       c = base_type;
23529     }
23530 }
23531
23532 /* Helper function for resolve_addr, attempt to resolve
23533    one CONST_STRING, return true if successful.  Similarly verify that
23534    SYMBOL_REFs refer to variables emitted in the current CU.  */
23535
23536 static bool
23537 resolve_one_addr (rtx *addr)
23538 {
23539   rtx rtl = *addr;
23540
23541   if (GET_CODE (rtl) == CONST_STRING)
23542     {
23543       size_t len = strlen (XSTR (rtl, 0)) + 1;
23544       tree t = build_string (len, XSTR (rtl, 0));
23545       tree tlen = size_int (len - 1);
23546       TREE_TYPE (t)
23547         = build_array_type (char_type_node, build_index_type (tlen));
23548       rtl = lookup_constant_def (t);
23549       if (!rtl || !MEM_P (rtl))
23550         return false;
23551       rtl = XEXP (rtl, 0);
23552       if (GET_CODE (rtl) == SYMBOL_REF
23553           && SYMBOL_REF_DECL (rtl)
23554           && !TREE_ASM_WRITTEN (SYMBOL_REF_DECL (rtl)))
23555         return false;
23556       vec_safe_push (used_rtx_array, rtl);
23557       *addr = rtl;
23558       return true;
23559     }
23560
23561   if (GET_CODE (rtl) == SYMBOL_REF
23562       && SYMBOL_REF_DECL (rtl))
23563     {
23564       if (TREE_CONSTANT_POOL_ADDRESS_P (rtl))
23565         {
23566           if (!TREE_ASM_WRITTEN (DECL_INITIAL (SYMBOL_REF_DECL (rtl))))
23567             return false;
23568         }
23569       else if (!TREE_ASM_WRITTEN (SYMBOL_REF_DECL (rtl)))
23570         return false;
23571     }
23572
23573   if (GET_CODE (rtl) == CONST)
23574     {
23575       subrtx_ptr_iterator::array_type array;
23576       FOR_EACH_SUBRTX_PTR (iter, array, &XEXP (rtl, 0), ALL)
23577         if (!resolve_one_addr (*iter))
23578           return false;
23579     }
23580
23581   return true;
23582 }
23583
23584 /* For STRING_CST, return SYMBOL_REF of its constant pool entry,
23585    if possible, and create DW_TAG_dwarf_procedure that can be referenced
23586    from DW_OP_GNU_implicit_pointer if the string hasn't been seen yet.  */
23587
23588 static rtx
23589 string_cst_pool_decl (tree t)
23590 {
23591   rtx rtl = output_constant_def (t, 1);
23592   unsigned char *array;
23593   dw_loc_descr_ref l;
23594   tree decl;
23595   size_t len;
23596   dw_die_ref ref;
23597
23598   if (!rtl || !MEM_P (rtl))
23599     return NULL_RTX;
23600   rtl = XEXP (rtl, 0);
23601   if (GET_CODE (rtl) != SYMBOL_REF
23602       || SYMBOL_REF_DECL (rtl) == NULL_TREE)
23603     return NULL_RTX;
23604
23605   decl = SYMBOL_REF_DECL (rtl);
23606   if (!lookup_decl_die (decl))
23607     {
23608       len = TREE_STRING_LENGTH (t);
23609       vec_safe_push (used_rtx_array, rtl);
23610       ref = new_die (DW_TAG_dwarf_procedure, comp_unit_die (), decl);
23611       array = ggc_vec_alloc<unsigned char> (len);
23612       memcpy (array, TREE_STRING_POINTER (t), len);
23613       l = new_loc_descr (DW_OP_implicit_value, len, 0);
23614       l->dw_loc_oprnd2.val_class = dw_val_class_vec;
23615       l->dw_loc_oprnd2.v.val_vec.length = len;
23616       l->dw_loc_oprnd2.v.val_vec.elt_size = 1;
23617       l->dw_loc_oprnd2.v.val_vec.array = array;
23618       add_AT_loc (ref, DW_AT_location, l);
23619       equate_decl_number_to_die (decl, ref);
23620     }
23621   return rtl;
23622 }
23623
23624 /* Helper function of resolve_addr_in_expr.  LOC is
23625    a DW_OP_addr followed by DW_OP_stack_value, either at the start
23626    of exprloc or after DW_OP_{,bit_}piece, and val_addr can't be
23627    resolved.  Replace it (both DW_OP_addr and DW_OP_stack_value)
23628    with DW_OP_GNU_implicit_pointer if possible
23629    and return true, if unsuccessful, return false.  */
23630
23631 static bool
23632 optimize_one_addr_into_implicit_ptr (dw_loc_descr_ref loc)
23633 {
23634   rtx rtl = loc->dw_loc_oprnd1.v.val_addr;
23635   HOST_WIDE_INT offset = 0;
23636   dw_die_ref ref = NULL;
23637   tree decl;
23638
23639   if (GET_CODE (rtl) == CONST
23640       && GET_CODE (XEXP (rtl, 0)) == PLUS
23641       && CONST_INT_P (XEXP (XEXP (rtl, 0), 1)))
23642     {
23643       offset = INTVAL (XEXP (XEXP (rtl, 0), 1));
23644       rtl = XEXP (XEXP (rtl, 0), 0);
23645     }
23646   if (GET_CODE (rtl) == CONST_STRING)
23647     {
23648       size_t len = strlen (XSTR (rtl, 0)) + 1;
23649       tree t = build_string (len, XSTR (rtl, 0));
23650       tree tlen = size_int (len - 1);
23651
23652       TREE_TYPE (t)
23653         = build_array_type (char_type_node, build_index_type (tlen));
23654       rtl = string_cst_pool_decl (t);
23655       if (!rtl)
23656         return false;
23657     }
23658   if (GET_CODE (rtl) == SYMBOL_REF && SYMBOL_REF_DECL (rtl))
23659     {
23660       decl = SYMBOL_REF_DECL (rtl);
23661       if (TREE_CODE (decl) == VAR_DECL && !DECL_EXTERNAL (decl))
23662         {
23663           ref = lookup_decl_die (decl);
23664           if (ref && (get_AT (ref, DW_AT_location)
23665                       || get_AT (ref, DW_AT_const_value)))
23666             {
23667               loc->dw_loc_opc = DW_OP_GNU_implicit_pointer;
23668               loc->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
23669               loc->dw_loc_oprnd1.val_entry = NULL;
23670               loc->dw_loc_oprnd1.v.val_die_ref.die = ref;
23671               loc->dw_loc_oprnd1.v.val_die_ref.external = 0;
23672               loc->dw_loc_next = loc->dw_loc_next->dw_loc_next;
23673               loc->dw_loc_oprnd2.v.val_int = offset;
23674               return true;
23675             }
23676         }
23677     }
23678   return false;
23679 }
23680
23681 /* Helper function for resolve_addr, handle one location
23682    expression, return false if at least one CONST_STRING or SYMBOL_REF in
23683    the location list couldn't be resolved.  */
23684
23685 static bool
23686 resolve_addr_in_expr (dw_loc_descr_ref loc)
23687 {
23688   dw_loc_descr_ref keep = NULL;
23689   for (dw_loc_descr_ref prev = NULL; loc; prev = loc, loc = loc->dw_loc_next)
23690     switch (loc->dw_loc_opc)
23691       {
23692       case DW_OP_addr:
23693         if (!resolve_one_addr (&loc->dw_loc_oprnd1.v.val_addr))
23694           {
23695             if ((prev == NULL
23696                  || prev->dw_loc_opc == DW_OP_piece
23697                  || prev->dw_loc_opc == DW_OP_bit_piece)
23698                 && loc->dw_loc_next
23699                 && loc->dw_loc_next->dw_loc_opc == DW_OP_stack_value
23700                 && !dwarf_strict
23701                 && optimize_one_addr_into_implicit_ptr (loc))
23702               break;
23703             return false;
23704           }
23705         break;
23706       case DW_OP_GNU_addr_index:
23707       case DW_OP_GNU_const_index:
23708         if (loc->dw_loc_opc == DW_OP_GNU_addr_index
23709             || (loc->dw_loc_opc == DW_OP_GNU_const_index && loc->dtprel))
23710           {
23711             rtx rtl = loc->dw_loc_oprnd1.val_entry->addr.rtl;
23712             if (!resolve_one_addr (&rtl))
23713               return false;
23714             remove_addr_table_entry (loc->dw_loc_oprnd1.val_entry);
23715             loc->dw_loc_oprnd1.val_entry =
23716                 add_addr_table_entry (rtl, ate_kind_rtx);
23717           }
23718         break;
23719       case DW_OP_const4u:
23720       case DW_OP_const8u:
23721         if (loc->dtprel
23722             && !resolve_one_addr (&loc->dw_loc_oprnd1.v.val_addr))
23723           return false;
23724         break;
23725       case DW_OP_plus_uconst:
23726         if (size_of_loc_descr (loc)
23727             > size_of_int_loc_descriptor (loc->dw_loc_oprnd1.v.val_unsigned)
23728               + 1
23729             && loc->dw_loc_oprnd1.v.val_unsigned > 0)
23730           {
23731             dw_loc_descr_ref repl
23732               = int_loc_descriptor (loc->dw_loc_oprnd1.v.val_unsigned);
23733             add_loc_descr (&repl, new_loc_descr (DW_OP_plus, 0, 0));
23734             add_loc_descr (&repl, loc->dw_loc_next);
23735             *loc = *repl;
23736           }
23737         break;
23738       case DW_OP_implicit_value:
23739         if (loc->dw_loc_oprnd2.val_class == dw_val_class_addr
23740             && !resolve_one_addr (&loc->dw_loc_oprnd2.v.val_addr))
23741           return false;
23742         break;
23743       case DW_OP_GNU_implicit_pointer:
23744       case DW_OP_GNU_parameter_ref:
23745         if (loc->dw_loc_oprnd1.val_class == dw_val_class_decl_ref)
23746           {
23747             dw_die_ref ref
23748               = lookup_decl_die (loc->dw_loc_oprnd1.v.val_decl_ref);
23749             if (ref == NULL)
23750               return false;
23751             loc->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
23752             loc->dw_loc_oprnd1.v.val_die_ref.die = ref;
23753             loc->dw_loc_oprnd1.v.val_die_ref.external = 0;
23754           }
23755         break;
23756       case DW_OP_GNU_const_type:
23757       case DW_OP_GNU_regval_type:
23758       case DW_OP_GNU_deref_type:
23759       case DW_OP_GNU_convert:
23760       case DW_OP_GNU_reinterpret:
23761         while (loc->dw_loc_next
23762                && loc->dw_loc_next->dw_loc_opc == DW_OP_GNU_convert)
23763           {
23764             dw_die_ref base1, base2;
23765             unsigned enc1, enc2, size1, size2;
23766             if (loc->dw_loc_opc == DW_OP_GNU_regval_type
23767                 || loc->dw_loc_opc == DW_OP_GNU_deref_type)
23768               base1 = loc->dw_loc_oprnd2.v.val_die_ref.die;
23769             else if (loc->dw_loc_oprnd1.val_class
23770                      == dw_val_class_unsigned_const)
23771               break;
23772             else
23773               base1 = loc->dw_loc_oprnd1.v.val_die_ref.die;
23774             if (loc->dw_loc_next->dw_loc_oprnd1.val_class
23775                 == dw_val_class_unsigned_const)
23776               break;
23777             base2 = loc->dw_loc_next->dw_loc_oprnd1.v.val_die_ref.die;
23778             gcc_assert (base1->die_tag == DW_TAG_base_type
23779                         && base2->die_tag == DW_TAG_base_type);
23780             enc1 = get_AT_unsigned (base1, DW_AT_encoding);
23781             enc2 = get_AT_unsigned (base2, DW_AT_encoding);
23782             size1 = get_AT_unsigned (base1, DW_AT_byte_size);
23783             size2 = get_AT_unsigned (base2, DW_AT_byte_size);
23784             if (size1 == size2
23785                 && (((enc1 == DW_ATE_unsigned || enc1 == DW_ATE_signed)
23786                      && (enc2 == DW_ATE_unsigned || enc2 == DW_ATE_signed)
23787                      && loc != keep)
23788                     || enc1 == enc2))
23789               {
23790                 /* Optimize away next DW_OP_GNU_convert after
23791                    adjusting LOC's base type die reference.  */
23792                 if (loc->dw_loc_opc == DW_OP_GNU_regval_type
23793                     || loc->dw_loc_opc == DW_OP_GNU_deref_type)
23794                   loc->dw_loc_oprnd2.v.val_die_ref.die = base2;
23795                 else
23796                   loc->dw_loc_oprnd1.v.val_die_ref.die = base2;
23797                 loc->dw_loc_next = loc->dw_loc_next->dw_loc_next;
23798                 continue;
23799               }
23800             /* Don't change integer DW_OP_GNU_convert after e.g. floating
23801                point typed stack entry.  */
23802             else if (enc1 != DW_ATE_unsigned && enc1 != DW_ATE_signed)
23803               keep = loc->dw_loc_next;
23804             break;
23805           }
23806         break;
23807       default:
23808         break;
23809       }
23810   return true;
23811 }
23812
23813 /* Helper function of resolve_addr.  DIE had DW_AT_location of
23814    DW_OP_addr alone, which referred to DECL in DW_OP_addr's operand
23815    and DW_OP_addr couldn't be resolved.  resolve_addr has already
23816    removed the DW_AT_location attribute.  This function attempts to
23817    add a new DW_AT_location attribute with DW_OP_GNU_implicit_pointer
23818    to it or DW_AT_const_value attribute, if possible.  */
23819
23820 static void
23821 optimize_location_into_implicit_ptr (dw_die_ref die, tree decl)
23822 {
23823   if (TREE_CODE (decl) != VAR_DECL
23824       || lookup_decl_die (decl) != die
23825       || DECL_EXTERNAL (decl)
23826       || !TREE_STATIC (decl)
23827       || DECL_INITIAL (decl) == NULL_TREE
23828       || DECL_P (DECL_INITIAL (decl))
23829       || get_AT (die, DW_AT_const_value))
23830     return;
23831
23832   tree init = DECL_INITIAL (decl);
23833   HOST_WIDE_INT offset = 0;
23834   /* For variables that have been optimized away and thus
23835      don't have a memory location, see if we can emit
23836      DW_AT_const_value instead.  */
23837   if (tree_add_const_value_attribute (die, init))
23838     return;
23839   if (dwarf_strict)
23840     return;
23841   /* If init is ADDR_EXPR or POINTER_PLUS_EXPR of ADDR_EXPR,
23842      and ADDR_EXPR refers to a decl that has DW_AT_location or
23843      DW_AT_const_value (but isn't addressable, otherwise
23844      resolving the original DW_OP_addr wouldn't fail), see if
23845      we can add DW_OP_GNU_implicit_pointer.  */
23846   STRIP_NOPS (init);
23847   if (TREE_CODE (init) == POINTER_PLUS_EXPR
23848       && tree_fits_shwi_p (TREE_OPERAND (init, 1)))
23849     {
23850       offset = tree_to_shwi (TREE_OPERAND (init, 1));
23851       init = TREE_OPERAND (init, 0);
23852       STRIP_NOPS (init);
23853     }
23854   if (TREE_CODE (init) != ADDR_EXPR)
23855     return;
23856   if ((TREE_CODE (TREE_OPERAND (init, 0)) == STRING_CST
23857        && !TREE_ASM_WRITTEN (TREE_OPERAND (init, 0)))
23858       || (TREE_CODE (TREE_OPERAND (init, 0)) == VAR_DECL
23859           && !DECL_EXTERNAL (TREE_OPERAND (init, 0))
23860           && TREE_OPERAND (init, 0) != decl))
23861     {
23862       dw_die_ref ref;
23863       dw_loc_descr_ref l;
23864
23865       if (TREE_CODE (TREE_OPERAND (init, 0)) == STRING_CST)
23866         {
23867           rtx rtl = string_cst_pool_decl (TREE_OPERAND (init, 0));
23868           if (!rtl)
23869             return;
23870           decl = SYMBOL_REF_DECL (rtl);
23871         }
23872       else
23873         decl = TREE_OPERAND (init, 0);
23874       ref = lookup_decl_die (decl);
23875       if (ref == NULL
23876           || (!get_AT (ref, DW_AT_location)
23877               && !get_AT (ref, DW_AT_const_value)))
23878         return;
23879       l = new_loc_descr (DW_OP_GNU_implicit_pointer, 0, offset);
23880       l->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
23881       l->dw_loc_oprnd1.v.val_die_ref.die = ref;
23882       l->dw_loc_oprnd1.v.val_die_ref.external = 0;
23883       add_AT_loc (die, DW_AT_location, l);
23884     }
23885 }
23886
23887 /* Resolve DW_OP_addr and DW_AT_const_value CONST_STRING arguments to
23888    an address in .rodata section if the string literal is emitted there,
23889    or remove the containing location list or replace DW_AT_const_value
23890    with DW_AT_location and empty location expression, if it isn't found
23891    in .rodata.  Similarly for SYMBOL_REFs, keep only those that refer
23892    to something that has been emitted in the current CU.  */
23893
23894 static void
23895 resolve_addr (dw_die_ref die)
23896 {
23897   dw_die_ref c;
23898   dw_attr_ref a;
23899   dw_loc_list_ref *curr, *start, loc;
23900   unsigned ix;
23901
23902   FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
23903     switch (AT_class (a))
23904       {
23905       case dw_val_class_loc_list:
23906         start = curr = AT_loc_list_ptr (a);
23907         loc = *curr;
23908         gcc_assert (loc);
23909         /* The same list can be referenced more than once.  See if we have
23910            already recorded the result from a previous pass.  */
23911         if (loc->replaced)
23912           *curr = loc->dw_loc_next;
23913         else if (!loc->resolved_addr)
23914           {
23915             /* As things stand, we do not expect or allow one die to
23916                reference a suffix of another die's location list chain.
23917                References must be identical or completely separate.
23918                There is therefore no need to cache the result of this
23919                pass on any list other than the first; doing so
23920                would lead to unnecessary writes.  */
23921             while (*curr)
23922               {
23923                 gcc_assert (!(*curr)->replaced && !(*curr)->resolved_addr);
23924                 if (!resolve_addr_in_expr ((*curr)->expr))
23925                   {
23926                     dw_loc_list_ref next = (*curr)->dw_loc_next;
23927                     dw_loc_descr_ref l = (*curr)->expr;
23928
23929                     if (next && (*curr)->ll_symbol)
23930                       {
23931                         gcc_assert (!next->ll_symbol);
23932                         next->ll_symbol = (*curr)->ll_symbol;
23933                       }
23934                     if (dwarf_split_debug_info)
23935                       remove_loc_list_addr_table_entries (l);
23936                     *curr = next;
23937                   }
23938                 else
23939                   {
23940                     mark_base_types ((*curr)->expr);
23941                     curr = &(*curr)->dw_loc_next;
23942                   }
23943               }
23944             if (loc == *start)
23945               loc->resolved_addr = 1;
23946             else
23947               {
23948                 loc->replaced = 1;
23949                 loc->dw_loc_next = *start;
23950               }
23951           }
23952         if (!*start)
23953           {
23954             remove_AT (die, a->dw_attr);
23955             ix--;
23956           }
23957         break;
23958       case dw_val_class_loc:
23959         {
23960           dw_loc_descr_ref l = AT_loc (a);
23961           /* For -gdwarf-2 don't attempt to optimize
23962              DW_AT_data_member_location containing
23963              DW_OP_plus_uconst - older consumers might
23964              rely on it being that op instead of a more complex,
23965              but shorter, location description.  */
23966           if ((dwarf_version > 2
23967                || a->dw_attr != DW_AT_data_member_location
23968                || l == NULL
23969                || l->dw_loc_opc != DW_OP_plus_uconst
23970                || l->dw_loc_next != NULL)
23971               && !resolve_addr_in_expr (l))
23972             {
23973               if (dwarf_split_debug_info)
23974                 remove_loc_list_addr_table_entries (l);
23975               if (l != NULL
23976                   && l->dw_loc_next == NULL
23977                   && l->dw_loc_opc == DW_OP_addr
23978                   && GET_CODE (l->dw_loc_oprnd1.v.val_addr) == SYMBOL_REF
23979                   && SYMBOL_REF_DECL (l->dw_loc_oprnd1.v.val_addr)
23980                   && a->dw_attr == DW_AT_location)
23981                 {
23982                   tree decl = SYMBOL_REF_DECL (l->dw_loc_oprnd1.v.val_addr);
23983                   remove_AT (die, a->dw_attr);
23984                   ix--;
23985                   optimize_location_into_implicit_ptr (die, decl);
23986                   break;
23987                 }
23988               remove_AT (die, a->dw_attr);
23989               ix--;
23990             }
23991           else
23992             mark_base_types (l);
23993         }
23994         break;
23995       case dw_val_class_addr:
23996         if (a->dw_attr == DW_AT_const_value
23997             && !resolve_one_addr (&a->dw_attr_val.v.val_addr))
23998           {
23999             if (AT_index (a) != NOT_INDEXED)
24000               remove_addr_table_entry (a->dw_attr_val.val_entry);
24001             remove_AT (die, a->dw_attr);
24002             ix--;
24003           }
24004         if (die->die_tag == DW_TAG_GNU_call_site
24005             && a->dw_attr == DW_AT_abstract_origin)
24006           {
24007             tree tdecl = SYMBOL_REF_DECL (a->dw_attr_val.v.val_addr);
24008             dw_die_ref tdie = lookup_decl_die (tdecl);
24009             dw_die_ref cdie;
24010             if (tdie == NULL
24011                 && DECL_EXTERNAL (tdecl)
24012                 && DECL_ABSTRACT_ORIGIN (tdecl) == NULL_TREE
24013                 && (cdie = lookup_context_die (DECL_CONTEXT (tdecl))))
24014               {
24015                 /* Creating a full DIE for tdecl is overly expensive and
24016                    at this point even wrong when in the LTO phase
24017                    as it can end up generating new type DIEs we didn't
24018                    output and thus optimize_external_refs will crash.  */
24019                 tdie = new_die (DW_TAG_subprogram, cdie, NULL_TREE);
24020                 add_AT_flag (tdie, DW_AT_external, 1);
24021                 add_AT_flag (tdie, DW_AT_declaration, 1);
24022                 add_linkage_attr (tdie, tdecl);
24023                 add_name_and_src_coords_attributes (tdie, tdecl);
24024                 equate_decl_number_to_die (tdecl, tdie);
24025               }
24026             if (tdie)
24027               {
24028                 a->dw_attr_val.val_class = dw_val_class_die_ref;
24029                 a->dw_attr_val.v.val_die_ref.die = tdie;
24030                 a->dw_attr_val.v.val_die_ref.external = 0;
24031               }
24032             else
24033               {
24034                 if (AT_index (a) != NOT_INDEXED)
24035                   remove_addr_table_entry (a->dw_attr_val.val_entry);
24036                 remove_AT (die, a->dw_attr);
24037                 ix--;
24038               }
24039           }
24040         break;
24041       default:
24042         break;
24043       }
24044
24045   FOR_EACH_CHILD (die, c, resolve_addr (c));
24046 }
24047 \f
24048 /* Helper routines for optimize_location_lists.
24049    This pass tries to share identical local lists in .debug_loc
24050    section.  */
24051
24052 /* Iteratively hash operands of LOC opcode into HSTATE.  */
24053
24054 static void
24055 hash_loc_operands (dw_loc_descr_ref loc, inchash::hash &hstate)
24056 {
24057   dw_val_ref val1 = &loc->dw_loc_oprnd1;
24058   dw_val_ref val2 = &loc->dw_loc_oprnd2;
24059
24060   switch (loc->dw_loc_opc)
24061     {
24062     case DW_OP_const4u:
24063     case DW_OP_const8u:
24064       if (loc->dtprel)
24065         goto hash_addr;
24066       /* FALLTHRU */
24067     case DW_OP_const1u:
24068     case DW_OP_const1s:
24069     case DW_OP_const2u:
24070     case DW_OP_const2s:
24071     case DW_OP_const4s:
24072     case DW_OP_const8s:
24073     case DW_OP_constu:
24074     case DW_OP_consts:
24075     case DW_OP_pick:
24076     case DW_OP_plus_uconst:
24077     case DW_OP_breg0:
24078     case DW_OP_breg1:
24079     case DW_OP_breg2:
24080     case DW_OP_breg3:
24081     case DW_OP_breg4:
24082     case DW_OP_breg5:
24083     case DW_OP_breg6:
24084     case DW_OP_breg7:
24085     case DW_OP_breg8:
24086     case DW_OP_breg9:
24087     case DW_OP_breg10:
24088     case DW_OP_breg11:
24089     case DW_OP_breg12:
24090     case DW_OP_breg13:
24091     case DW_OP_breg14:
24092     case DW_OP_breg15:
24093     case DW_OP_breg16:
24094     case DW_OP_breg17:
24095     case DW_OP_breg18:
24096     case DW_OP_breg19:
24097     case DW_OP_breg20:
24098     case DW_OP_breg21:
24099     case DW_OP_breg22:
24100     case DW_OP_breg23:
24101     case DW_OP_breg24:
24102     case DW_OP_breg25:
24103     case DW_OP_breg26:
24104     case DW_OP_breg27:
24105     case DW_OP_breg28:
24106     case DW_OP_breg29:
24107     case DW_OP_breg30:
24108     case DW_OP_breg31:
24109     case DW_OP_regx:
24110     case DW_OP_fbreg:
24111     case DW_OP_piece:
24112     case DW_OP_deref_size:
24113     case DW_OP_xderef_size:
24114       hstate.add_object (val1->v.val_int);
24115       break;
24116     case DW_OP_skip:
24117     case DW_OP_bra:
24118       {
24119         int offset;
24120
24121         gcc_assert (val1->val_class == dw_val_class_loc);
24122         offset = val1->v.val_loc->dw_loc_addr - (loc->dw_loc_addr + 3);
24123         hstate.add_object (offset);
24124       }
24125       break;
24126     case DW_OP_implicit_value:
24127       hstate.add_object (val1->v.val_unsigned);
24128       switch (val2->val_class)
24129         {
24130         case dw_val_class_const:
24131           hstate.add_object (val2->v.val_int);
24132           break;
24133         case dw_val_class_vec:
24134           {
24135             unsigned int elt_size = val2->v.val_vec.elt_size;
24136             unsigned int len = val2->v.val_vec.length;
24137
24138             hstate.add_int (elt_size);
24139             hstate.add_int (len);
24140             hstate.add (val2->v.val_vec.array, len * elt_size);
24141           }
24142           break;
24143         case dw_val_class_const_double:
24144           hstate.add_object (val2->v.val_double.low);
24145           hstate.add_object (val2->v.val_double.high);
24146           break;
24147         case dw_val_class_wide_int:
24148           hstate.add (val2->v.val_wide->get_val (),
24149                       get_full_len (*val2->v.val_wide)
24150                       * HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR);
24151           break;
24152         case dw_val_class_addr: 
24153           inchash::add_rtx (val2->v.val_addr, hstate);
24154           break;
24155         default:
24156           gcc_unreachable ();
24157         }
24158       break;
24159     case DW_OP_bregx:
24160     case DW_OP_bit_piece:
24161       hstate.add_object (val1->v.val_int);
24162       hstate.add_object (val2->v.val_int);
24163       break;
24164     case DW_OP_addr:
24165     hash_addr:
24166       if (loc->dtprel)
24167         {
24168           unsigned char dtprel = 0xd1;
24169           hstate.add_object (dtprel);
24170         }
24171       inchash::add_rtx (val1->v.val_addr, hstate);
24172       break;
24173     case DW_OP_GNU_addr_index:
24174     case DW_OP_GNU_const_index:
24175       {
24176         if (loc->dtprel)
24177           {
24178             unsigned char dtprel = 0xd1;
24179             hstate.add_object (dtprel);
24180           }
24181         inchash::add_rtx (val1->val_entry->addr.rtl, hstate);
24182       }
24183       break;
24184     case DW_OP_GNU_implicit_pointer:
24185       hstate.add_int (val2->v.val_int);
24186       break;
24187     case DW_OP_GNU_entry_value:
24188       hstate.add_object (val1->v.val_loc);
24189       break;
24190     case DW_OP_GNU_regval_type:
24191     case DW_OP_GNU_deref_type:
24192       {
24193         unsigned int byte_size
24194           = get_AT_unsigned (val2->v.val_die_ref.die, DW_AT_byte_size);
24195         unsigned int encoding
24196           = get_AT_unsigned (val2->v.val_die_ref.die, DW_AT_encoding);
24197         hstate.add_object (val1->v.val_int);
24198         hstate.add_object (byte_size);
24199         hstate.add_object (encoding);
24200       }
24201       break;
24202     case DW_OP_GNU_convert:
24203     case DW_OP_GNU_reinterpret:
24204       if (val1->val_class == dw_val_class_unsigned_const)
24205         {
24206           hstate.add_object (val1->v.val_unsigned);
24207           break;
24208         }
24209       /* FALLTHRU */
24210     case DW_OP_GNU_const_type:
24211       {
24212         unsigned int byte_size
24213           = get_AT_unsigned (val1->v.val_die_ref.die, DW_AT_byte_size);
24214         unsigned int encoding
24215           = get_AT_unsigned (val1->v.val_die_ref.die, DW_AT_encoding);
24216         hstate.add_object (byte_size);
24217         hstate.add_object (encoding);
24218         if (loc->dw_loc_opc != DW_OP_GNU_const_type)
24219           break;
24220         hstate.add_object (val2->val_class);
24221         switch (val2->val_class)
24222           {
24223           case dw_val_class_const:
24224             hstate.add_object (val2->v.val_int);
24225             break;
24226           case dw_val_class_vec:
24227             {
24228               unsigned int elt_size = val2->v.val_vec.elt_size;
24229               unsigned int len = val2->v.val_vec.length;
24230
24231               hstate.add_object (elt_size);
24232               hstate.add_object (len);
24233               hstate.add (val2->v.val_vec.array, len * elt_size);
24234             }
24235             break;
24236           case dw_val_class_const_double:
24237             hstate.add_object (val2->v.val_double.low);
24238             hstate.add_object (val2->v.val_double.high);
24239             break;
24240           case dw_val_class_wide_int:
24241             hstate.add (val2->v.val_wide->get_val (),
24242                         get_full_len (*val2->v.val_wide)
24243                         * HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR);
24244             break;
24245           default:
24246             gcc_unreachable ();
24247           }
24248       }
24249       break;
24250
24251     default:
24252       /* Other codes have no operands.  */
24253       break;
24254     }
24255 }
24256
24257 /* Iteratively hash the whole DWARF location expression LOC into HSTATE.  */
24258
24259 static inline void
24260 hash_locs (dw_loc_descr_ref loc, inchash::hash &hstate)
24261 {
24262   dw_loc_descr_ref l;
24263   bool sizes_computed = false;
24264   /* Compute sizes, so that DW_OP_skip/DW_OP_bra can be checksummed.  */
24265   size_of_locs (loc);
24266
24267   for (l = loc; l != NULL; l = l->dw_loc_next)
24268     {
24269       enum dwarf_location_atom opc = l->dw_loc_opc;
24270       hstate.add_object (opc);
24271       if ((opc == DW_OP_skip || opc == DW_OP_bra) && !sizes_computed)
24272         {
24273           size_of_locs (loc);
24274           sizes_computed = true;
24275         }
24276       hash_loc_operands (l, hstate);
24277     }
24278 }
24279
24280 /* Compute hash of the whole location list LIST_HEAD.  */
24281
24282 static inline void
24283 hash_loc_list (dw_loc_list_ref list_head)
24284 {
24285   dw_loc_list_ref curr = list_head;
24286   inchash::hash hstate;
24287
24288   for (curr = list_head; curr != NULL; curr = curr->dw_loc_next)
24289     {
24290       hstate.add (curr->begin, strlen (curr->begin) + 1);
24291       hstate.add (curr->end, strlen (curr->end) + 1);
24292       if (curr->section)
24293         hstate.add (curr->section, strlen (curr->section) + 1);
24294       hash_locs (curr->expr, hstate);
24295     }
24296   list_head->hash = hstate.end ();
24297 }
24298
24299 /* Return true if X and Y opcodes have the same operands.  */
24300
24301 static inline bool
24302 compare_loc_operands (dw_loc_descr_ref x, dw_loc_descr_ref y)
24303 {
24304   dw_val_ref valx1 = &x->dw_loc_oprnd1;
24305   dw_val_ref valx2 = &x->dw_loc_oprnd2;
24306   dw_val_ref valy1 = &y->dw_loc_oprnd1;
24307   dw_val_ref valy2 = &y->dw_loc_oprnd2;
24308
24309   switch (x->dw_loc_opc)
24310     {
24311     case DW_OP_const4u:
24312     case DW_OP_const8u:
24313       if (x->dtprel)
24314         goto hash_addr;
24315       /* FALLTHRU */
24316     case DW_OP_const1u:
24317     case DW_OP_const1s:
24318     case DW_OP_const2u:
24319     case DW_OP_const2s:
24320     case DW_OP_const4s:
24321     case DW_OP_const8s:
24322     case DW_OP_constu:
24323     case DW_OP_consts:
24324     case DW_OP_pick:
24325     case DW_OP_plus_uconst:
24326     case DW_OP_breg0:
24327     case DW_OP_breg1:
24328     case DW_OP_breg2:
24329     case DW_OP_breg3:
24330     case DW_OP_breg4:
24331     case DW_OP_breg5:
24332     case DW_OP_breg6:
24333     case DW_OP_breg7:
24334     case DW_OP_breg8:
24335     case DW_OP_breg9:
24336     case DW_OP_breg10:
24337     case DW_OP_breg11:
24338     case DW_OP_breg12:
24339     case DW_OP_breg13:
24340     case DW_OP_breg14:
24341     case DW_OP_breg15:
24342     case DW_OP_breg16:
24343     case DW_OP_breg17:
24344     case DW_OP_breg18:
24345     case DW_OP_breg19:
24346     case DW_OP_breg20:
24347     case DW_OP_breg21:
24348     case DW_OP_breg22:
24349     case DW_OP_breg23:
24350     case DW_OP_breg24:
24351     case DW_OP_breg25:
24352     case DW_OP_breg26:
24353     case DW_OP_breg27:
24354     case DW_OP_breg28:
24355     case DW_OP_breg29:
24356     case DW_OP_breg30:
24357     case DW_OP_breg31:
24358     case DW_OP_regx:
24359     case DW_OP_fbreg:
24360     case DW_OP_piece:
24361     case DW_OP_deref_size:
24362     case DW_OP_xderef_size:
24363       return valx1->v.val_int == valy1->v.val_int;
24364     case DW_OP_skip:
24365     case DW_OP_bra:
24366       /* If splitting debug info, the use of DW_OP_GNU_addr_index
24367         can cause irrelevant differences in dw_loc_addr.  */
24368       gcc_assert (valx1->val_class == dw_val_class_loc
24369                   && valy1->val_class == dw_val_class_loc
24370                   && (dwarf_split_debug_info
24371                       || x->dw_loc_addr == y->dw_loc_addr));
24372       return valx1->v.val_loc->dw_loc_addr == valy1->v.val_loc->dw_loc_addr;
24373     case DW_OP_implicit_value:
24374       if (valx1->v.val_unsigned != valy1->v.val_unsigned
24375           || valx2->val_class != valy2->val_class)
24376         return false;
24377       switch (valx2->val_class)
24378         {
24379         case dw_val_class_const:
24380           return valx2->v.val_int == valy2->v.val_int;
24381         case dw_val_class_vec:
24382           return valx2->v.val_vec.elt_size == valy2->v.val_vec.elt_size
24383                  && valx2->v.val_vec.length == valy2->v.val_vec.length
24384                  && memcmp (valx2->v.val_vec.array, valy2->v.val_vec.array,
24385                             valx2->v.val_vec.elt_size
24386                             * valx2->v.val_vec.length) == 0;
24387         case dw_val_class_const_double:
24388           return valx2->v.val_double.low == valy2->v.val_double.low
24389                  && valx2->v.val_double.high == valy2->v.val_double.high;
24390         case dw_val_class_wide_int:
24391           return *valx2->v.val_wide == *valy2->v.val_wide;
24392         case dw_val_class_addr:
24393           return rtx_equal_p (valx2->v.val_addr, valy2->v.val_addr);
24394         default:
24395           gcc_unreachable ();
24396         }
24397     case DW_OP_bregx:
24398     case DW_OP_bit_piece:
24399       return valx1->v.val_int == valy1->v.val_int
24400              && valx2->v.val_int == valy2->v.val_int;
24401     case DW_OP_addr:
24402     hash_addr:
24403       return rtx_equal_p (valx1->v.val_addr, valy1->v.val_addr);
24404     case DW_OP_GNU_addr_index:
24405     case DW_OP_GNU_const_index:
24406       {
24407         rtx ax1 = valx1->val_entry->addr.rtl;
24408         rtx ay1 = valy1->val_entry->addr.rtl;
24409         return rtx_equal_p (ax1, ay1);
24410       }
24411     case DW_OP_GNU_implicit_pointer:
24412       return valx1->val_class == dw_val_class_die_ref
24413              && valx1->val_class == valy1->val_class
24414              && valx1->v.val_die_ref.die == valy1->v.val_die_ref.die
24415              && valx2->v.val_int == valy2->v.val_int;
24416     case DW_OP_GNU_entry_value:
24417       return compare_loc_operands (valx1->v.val_loc, valy1->v.val_loc);
24418     case DW_OP_GNU_const_type:
24419       if (valx1->v.val_die_ref.die != valy1->v.val_die_ref.die
24420           || valx2->val_class != valy2->val_class)
24421         return false;
24422       switch (valx2->val_class)
24423         {
24424         case dw_val_class_const:
24425           return valx2->v.val_int == valy2->v.val_int;
24426         case dw_val_class_vec:
24427           return valx2->v.val_vec.elt_size == valy2->v.val_vec.elt_size
24428                  && valx2->v.val_vec.length == valy2->v.val_vec.length
24429                  && memcmp (valx2->v.val_vec.array, valy2->v.val_vec.array,
24430                             valx2->v.val_vec.elt_size
24431                             * valx2->v.val_vec.length) == 0;
24432         case dw_val_class_const_double:
24433           return valx2->v.val_double.low == valy2->v.val_double.low
24434                  && valx2->v.val_double.high == valy2->v.val_double.high;
24435         case dw_val_class_wide_int:
24436           return *valx2->v.val_wide == *valy2->v.val_wide;
24437         default:
24438           gcc_unreachable ();
24439         }
24440     case DW_OP_GNU_regval_type:
24441     case DW_OP_GNU_deref_type:
24442       return valx1->v.val_int == valy1->v.val_int
24443              && valx2->v.val_die_ref.die == valy2->v.val_die_ref.die;
24444     case DW_OP_GNU_convert:
24445     case DW_OP_GNU_reinterpret:
24446       if (valx1->val_class != valy1->val_class)
24447         return false;
24448       if (valx1->val_class == dw_val_class_unsigned_const)
24449         return valx1->v.val_unsigned == valy1->v.val_unsigned;
24450       return valx1->v.val_die_ref.die == valy1->v.val_die_ref.die;
24451     case DW_OP_GNU_parameter_ref:
24452       return valx1->val_class == dw_val_class_die_ref
24453              && valx1->val_class == valy1->val_class
24454              && valx1->v.val_die_ref.die == valy1->v.val_die_ref.die;
24455     default:
24456       /* Other codes have no operands.  */
24457       return true;
24458     }
24459 }
24460
24461 /* Return true if DWARF location expressions X and Y are the same.  */
24462
24463 static inline bool
24464 compare_locs (dw_loc_descr_ref x, dw_loc_descr_ref y)
24465 {
24466   for (; x != NULL && y != NULL; x = x->dw_loc_next, y = y->dw_loc_next)
24467     if (x->dw_loc_opc != y->dw_loc_opc
24468         || x->dtprel != y->dtprel
24469         || !compare_loc_operands (x, y))
24470       break;
24471   return x == NULL && y == NULL;
24472 }
24473
24474 /* Hashtable helpers.  */
24475
24476 struct loc_list_hasher : typed_noop_remove <dw_loc_list_struct>
24477 {
24478   typedef dw_loc_list_struct value_type;
24479   typedef dw_loc_list_struct compare_type;
24480   static inline hashval_t hash (const value_type *);
24481   static inline bool equal (const value_type *, const compare_type *);
24482 };
24483
24484 /* Return precomputed hash of location list X.  */
24485
24486 inline hashval_t
24487 loc_list_hasher::hash (const value_type *x)
24488 {
24489   return x->hash;
24490 }
24491
24492 /* Return true if location lists A and B are the same.  */
24493
24494 inline bool
24495 loc_list_hasher::equal (const value_type *a, const compare_type *b)
24496 {
24497   if (a == b)
24498     return 1;
24499   if (a->hash != b->hash)
24500     return 0;
24501   for (; a != NULL && b != NULL; a = a->dw_loc_next, b = b->dw_loc_next)
24502     if (strcmp (a->begin, b->begin) != 0
24503         || strcmp (a->end, b->end) != 0
24504         || (a->section == NULL) != (b->section == NULL)
24505         || (a->section && strcmp (a->section, b->section) != 0)
24506         || !compare_locs (a->expr, b->expr))
24507       break;
24508   return a == NULL && b == NULL;
24509 }
24510
24511 typedef hash_table<loc_list_hasher> loc_list_hash_type;
24512
24513
24514 /* Recursively optimize location lists referenced from DIE
24515    children and share them whenever possible.  */
24516
24517 static void
24518 optimize_location_lists_1 (dw_die_ref die, loc_list_hash_type *htab)
24519 {
24520   dw_die_ref c;
24521   dw_attr_ref a;
24522   unsigned ix;
24523   dw_loc_list_struct **slot;
24524
24525   FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
24526     if (AT_class (a) == dw_val_class_loc_list)
24527       {
24528         dw_loc_list_ref list = AT_loc_list (a);
24529         /* TODO: perform some optimizations here, before hashing
24530            it and storing into the hash table.  */
24531         hash_loc_list (list);
24532         slot = htab->find_slot_with_hash (list, list->hash, INSERT);
24533         if (*slot == NULL)
24534           *slot = list;
24535         else
24536           a->dw_attr_val.v.val_loc_list = *slot;
24537       }
24538
24539   FOR_EACH_CHILD (die, c, optimize_location_lists_1 (c, htab));
24540 }
24541
24542
24543 /* Recursively assign each location list a unique index into the debug_addr
24544    section.  */
24545
24546 static void
24547 index_location_lists (dw_die_ref die)
24548 {
24549   dw_die_ref c;
24550   dw_attr_ref a;
24551   unsigned ix;
24552
24553   FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
24554     if (AT_class (a) == dw_val_class_loc_list)
24555       {
24556         dw_loc_list_ref list = AT_loc_list (a);
24557         dw_loc_list_ref curr;
24558         for (curr = list; curr != NULL; curr = curr->dw_loc_next)
24559           {
24560             /* Don't index an entry that has already been indexed
24561                or won't be output.  */
24562             if (curr->begin_entry != NULL
24563                 || (strcmp (curr->begin, curr->end) == 0 && !curr->force))
24564               continue;
24565
24566             curr->begin_entry
24567                 = add_addr_table_entry (xstrdup (curr->begin),
24568                                         ate_kind_label);
24569           }
24570       }
24571
24572   FOR_EACH_CHILD (die, c, index_location_lists (c));
24573 }
24574
24575 /* Optimize location lists referenced from DIE
24576    children and share them whenever possible.  */
24577
24578 static void
24579 optimize_location_lists (dw_die_ref die)
24580 {
24581   loc_list_hash_type htab (500);
24582   optimize_location_lists_1 (die, &htab);
24583 }
24584 \f
24585 /* Output stuff that dwarf requires at the end of every file,
24586    and generate the DWARF-2 debugging info.  */
24587
24588 static void
24589 dwarf2out_finish (const char *filename)
24590 {
24591   limbo_die_node *node, *next_node;
24592   comdat_type_node *ctnode;
24593   unsigned int i;
24594   dw_die_ref main_comp_unit_die;
24595
24596   /* PCH might result in DW_AT_producer string being restored from the
24597      header compilation, so always fill it with empty string initially
24598      and overwrite only here.  */
24599   dw_attr_ref producer = get_AT (comp_unit_die (), DW_AT_producer);
24600   producer_string = gen_producer_string ();
24601   producer->dw_attr_val.v.val_str->refcount--;
24602   producer->dw_attr_val.v.val_str = find_AT_string (producer_string);
24603
24604   gen_scheduled_generic_parms_dies ();
24605   gen_remaining_tmpl_value_param_die_attribute ();
24606
24607   /* Add the name for the main input file now.  We delayed this from
24608      dwarf2out_init to avoid complications with PCH.
24609      For LTO produced units use a fixed artificial name to avoid
24610      leaking tempfile names into the dwarf.  */
24611   if (!in_lto_p)
24612     add_name_attribute (comp_unit_die (), remap_debug_filename (filename));
24613   else
24614     add_name_attribute (comp_unit_die (), "<artificial>");
24615   if (!IS_ABSOLUTE_PATH (filename) || targetm.force_at_comp_dir)
24616     add_comp_dir_attribute (comp_unit_die ());
24617   else if (get_AT (comp_unit_die (), DW_AT_comp_dir) == NULL)
24618     {
24619       bool p = false;
24620       file_table->traverse<bool *, file_table_relative_p> (&p);
24621       if (p)
24622         add_comp_dir_attribute (comp_unit_die ());
24623     }
24624
24625   if (deferred_locations_list)
24626     for (i = 0; i < deferred_locations_list->length (); i++)
24627       {
24628         add_location_or_const_value_attribute (
24629             (*deferred_locations_list)[i].die,
24630             (*deferred_locations_list)[i].variable,
24631             false,
24632             DW_AT_location);
24633       }
24634
24635   /* Traverse the limbo die list, and add parent/child links.  The only
24636      dies without parents that should be here are concrete instances of
24637      inline functions, and the comp_unit_die.  We can ignore the comp_unit_die.
24638      For concrete instances, we can get the parent die from the abstract
24639      instance.  */
24640   for (node = limbo_die_list; node; node = next_node)
24641     {
24642       dw_die_ref die = node->die;
24643       next_node = node->next;
24644
24645       if (die->die_parent == NULL)
24646         {
24647           dw_die_ref origin = get_AT_ref (die, DW_AT_abstract_origin);
24648
24649           if (origin && origin->die_parent)
24650             add_child_die (origin->die_parent, die);
24651           else if (is_cu_die (die))
24652             ;
24653           else if (seen_error ())
24654             /* It's OK to be confused by errors in the input.  */
24655             add_child_die (comp_unit_die (), die);
24656           else
24657             {
24658               /* In certain situations, the lexical block containing a
24659                  nested function can be optimized away, which results
24660                  in the nested function die being orphaned.  Likewise
24661                  with the return type of that nested function.  Force
24662                  this to be a child of the containing function.
24663
24664                  It may happen that even the containing function got fully
24665                  inlined and optimized out.  In that case we are lost and
24666                  assign the empty child.  This should not be big issue as
24667                  the function is likely unreachable too.  */
24668               gcc_assert (node->created_for);
24669
24670               if (DECL_P (node->created_for))
24671                 origin = get_context_die (DECL_CONTEXT (node->created_for));
24672               else if (TYPE_P (node->created_for))
24673                 origin = scope_die_for (node->created_for, comp_unit_die ());
24674               else
24675                 origin = comp_unit_die ();
24676
24677               add_child_die (origin, die);
24678             }
24679         }
24680     }
24681
24682   limbo_die_list = NULL;
24683
24684 #if ENABLE_ASSERT_CHECKING
24685   {
24686     dw_die_ref die = comp_unit_die (), c;
24687     FOR_EACH_CHILD (die, c, gcc_assert (! c->die_mark));
24688   }
24689 #endif
24690   resolve_addr (comp_unit_die ());
24691   move_marked_base_types ();
24692
24693   for (node = deferred_asm_name; node; node = node->next)
24694     {
24695       tree decl = node->created_for;
24696       /* When generating LTO bytecode we can not generate new assembler
24697          names at this point and all important decls got theirs via
24698          free-lang-data.  */
24699       if (((!flag_generate_lto && !flag_generate_offload)
24700            || DECL_ASSEMBLER_NAME_SET_P (decl))
24701           && DECL_ASSEMBLER_NAME (decl) != DECL_NAME (decl))
24702         {
24703           add_linkage_attr (node->die, decl);
24704           move_linkage_attr (node->die);
24705         }
24706     }
24707
24708   deferred_asm_name = NULL;
24709
24710   /* Walk through the list of incomplete types again, trying once more to
24711      emit full debugging info for them.  */
24712   retry_incomplete_types ();
24713
24714   if (flag_eliminate_unused_debug_types)
24715     prune_unused_types ();
24716
24717   /* Generate separate COMDAT sections for type DIEs. */
24718   if (use_debug_types)
24719     {
24720       break_out_comdat_types (comp_unit_die ());
24721
24722       /* Each new type_unit DIE was added to the limbo die list when created.
24723          Since these have all been added to comdat_type_list, clear the
24724          limbo die list.  */
24725       limbo_die_list = NULL;
24726
24727       /* For each new comdat type unit, copy declarations for incomplete
24728          types to make the new unit self-contained (i.e., no direct
24729          references to the main compile unit).  */
24730       for (ctnode = comdat_type_list; ctnode != NULL; ctnode = ctnode->next)
24731         copy_decls_for_unworthy_types (ctnode->root_die);
24732       copy_decls_for_unworthy_types (comp_unit_die ());
24733
24734       /* In the process of copying declarations from one unit to another,
24735          we may have left some declarations behind that are no longer
24736          referenced.  Prune them.  */
24737       prune_unused_types ();
24738     }
24739
24740   /* Generate separate CUs for each of the include files we've seen.
24741      They will go into limbo_die_list.  */
24742   if (flag_eliminate_dwarf2_dups)
24743     break_out_includes (comp_unit_die ());
24744
24745   /* Traverse the DIE's and add add sibling attributes to those DIE's
24746      that have children.  */
24747   add_sibling_attributes (comp_unit_die ());
24748   for (node = limbo_die_list; node; node = node->next)
24749     add_sibling_attributes (node->die);
24750   for (ctnode = comdat_type_list; ctnode != NULL; ctnode = ctnode->next)
24751     add_sibling_attributes (ctnode->root_die);
24752
24753   /* When splitting DWARF info, we put some attributes in the
24754      skeleton compile_unit DIE that remains in the .o, while
24755      most attributes go in the DWO compile_unit_die.  */
24756   if (dwarf_split_debug_info)
24757     main_comp_unit_die = gen_compile_unit_die (NULL);
24758   else
24759     main_comp_unit_die = comp_unit_die ();
24760
24761   /* Output a terminator label for the .text section.  */
24762   switch_to_section (text_section);
24763   targetm.asm_out.internal_label (asm_out_file, TEXT_END_LABEL, 0);
24764   if (cold_text_section)
24765     {
24766       switch_to_section (cold_text_section);
24767       targetm.asm_out.internal_label (asm_out_file, COLD_END_LABEL, 0);
24768     }
24769
24770   /* We can only use the low/high_pc attributes if all of the code was
24771      in .text.  */
24772   if (!have_multiple_function_sections 
24773       || (dwarf_version < 3 && dwarf_strict))
24774     {
24775       /* Don't add if the CU has no associated code.  */
24776       if (text_section_used)
24777         add_AT_low_high_pc (main_comp_unit_die, text_section_label,
24778                             text_end_label, true);
24779     }
24780   else
24781     {
24782       unsigned fde_idx;
24783       dw_fde_ref fde;
24784       bool range_list_added = false;
24785
24786       if (text_section_used)
24787         add_ranges_by_labels (main_comp_unit_die, text_section_label,
24788                               text_end_label, &range_list_added, true);
24789       if (cold_text_section_used)
24790         add_ranges_by_labels (main_comp_unit_die, cold_text_section_label,
24791                               cold_end_label, &range_list_added, true);
24792
24793       FOR_EACH_VEC_ELT (*fde_vec, fde_idx, fde)
24794         {
24795           if (DECL_IGNORED_P (fde->decl))
24796             continue;
24797           if (!fde->in_std_section)
24798             add_ranges_by_labels (main_comp_unit_die, fde->dw_fde_begin,
24799                                   fde->dw_fde_end, &range_list_added,
24800                                   true);
24801           if (fde->dw_fde_second_begin && !fde->second_in_std_section)
24802             add_ranges_by_labels (main_comp_unit_die, fde->dw_fde_second_begin,
24803                                   fde->dw_fde_second_end, &range_list_added,
24804                                   true);
24805         }
24806
24807       if (range_list_added)
24808         {
24809           /* We need to give .debug_loc and .debug_ranges an appropriate
24810              "base address".  Use zero so that these addresses become
24811              absolute.  Historically, we've emitted the unexpected
24812              DW_AT_entry_pc instead of DW_AT_low_pc for this purpose.
24813              Emit both to give time for other tools to adapt.  */
24814           add_AT_addr (main_comp_unit_die, DW_AT_low_pc, const0_rtx, true);
24815           if (! dwarf_strict && dwarf_version < 4)
24816             add_AT_addr (main_comp_unit_die, DW_AT_entry_pc, const0_rtx, true);
24817
24818           add_ranges (NULL);
24819         }
24820     }
24821
24822   if (debug_info_level >= DINFO_LEVEL_TERSE)
24823     add_AT_lineptr (main_comp_unit_die, DW_AT_stmt_list,
24824                     debug_line_section_label);
24825
24826   if (have_macinfo)
24827     add_AT_macptr (comp_unit_die (),
24828                    dwarf_strict ? DW_AT_macro_info : DW_AT_GNU_macros,
24829                    macinfo_section_label);
24830
24831   if (dwarf_split_debug_info)
24832     {
24833       /* optimize_location_lists calculates the size of the lists,
24834          so index them first, and assign indices to the entries.
24835          Although optimize_location_lists will remove entries from
24836          the table, it only does so for duplicates, and therefore
24837          only reduces ref_counts to 1.  */
24838       index_location_lists (comp_unit_die ());
24839
24840       if (addr_index_table != NULL)
24841         {
24842           unsigned int index = 0;
24843           addr_index_table
24844             ->traverse_noresize<unsigned int *, index_addr_table_entry>
24845             (&index);
24846         }
24847     }
24848
24849   if (have_location_lists)
24850     optimize_location_lists (comp_unit_die ());
24851
24852   save_macinfo_strings ();
24853
24854   if (dwarf_split_debug_info)
24855     {
24856       unsigned int index = 0;
24857
24858       /* Add attributes common to skeleton compile_units and
24859          type_units.  Because these attributes include strings, it
24860          must be done before freezing the string table.  Top-level
24861          skeleton die attrs are added when the skeleton type unit is
24862          created, so ensure it is created by this point.  */
24863       add_top_level_skeleton_die_attrs (main_comp_unit_die);
24864       debug_str_hash->traverse_noresize<unsigned int *, index_string> (&index);
24865     }
24866
24867   /* Output all of the compilation units.  We put the main one last so that
24868      the offsets are available to output_pubnames.  */
24869   for (node = limbo_die_list; node; node = node->next)
24870     output_comp_unit (node->die, 0);
24871
24872   hash_table<comdat_type_hasher> comdat_type_table (100);
24873   for (ctnode = comdat_type_list; ctnode != NULL; ctnode = ctnode->next)
24874     {
24875       comdat_type_node **slot = comdat_type_table.find_slot (ctnode, INSERT);
24876
24877       /* Don't output duplicate types.  */
24878       if (*slot != HTAB_EMPTY_ENTRY)
24879         continue;
24880
24881       /* Add a pointer to the line table for the main compilation unit
24882          so that the debugger can make sense of DW_AT_decl_file
24883          attributes.  */
24884       if (debug_info_level >= DINFO_LEVEL_TERSE)
24885         add_AT_lineptr (ctnode->root_die, DW_AT_stmt_list,
24886                         (!dwarf_split_debug_info
24887                          ? debug_line_section_label
24888                          : debug_skeleton_line_section_label));
24889
24890       output_comdat_type_unit (ctnode);
24891       *slot = ctnode;
24892     }
24893
24894   /* The AT_pubnames attribute needs to go in all skeleton dies, including
24895      both the main_cu and all skeleton TUs.  Making this call unconditional
24896      would end up either adding a second copy of the AT_pubnames attribute, or
24897      requiring a special case in add_top_level_skeleton_die_attrs.  */
24898   if (!dwarf_split_debug_info)
24899     add_AT_pubnames (comp_unit_die ());
24900
24901   if (dwarf_split_debug_info)
24902     {
24903       int mark;
24904       unsigned char checksum[16];
24905       struct md5_ctx ctx;
24906
24907       /* Compute a checksum of the comp_unit to use as the dwo_id.  */
24908       md5_init_ctx (&ctx);
24909       mark = 0;
24910       die_checksum (comp_unit_die (), &ctx, &mark);
24911       unmark_all_dies (comp_unit_die ());
24912       md5_finish_ctx (&ctx, checksum);
24913
24914       /* Use the first 8 bytes of the checksum as the dwo_id,
24915         and add it to both comp-unit DIEs.  */
24916       add_AT_data8 (main_comp_unit_die, DW_AT_GNU_dwo_id, checksum);
24917       add_AT_data8 (comp_unit_die (), DW_AT_GNU_dwo_id, checksum);
24918
24919       /* Add the base offset of the ranges table to the skeleton
24920         comp-unit DIE.  */
24921       if (ranges_table_in_use)
24922         add_AT_lineptr (main_comp_unit_die, DW_AT_GNU_ranges_base,
24923                         ranges_section_label);
24924
24925       switch_to_section (debug_addr_section);
24926       ASM_OUTPUT_LABEL (asm_out_file, debug_addr_section_label);
24927       output_addr_table ();
24928     }
24929
24930   /* Output the main compilation unit if non-empty or if .debug_macinfo
24931      or .debug_macro will be emitted.  */
24932   output_comp_unit (comp_unit_die (), have_macinfo);
24933
24934   if (dwarf_split_debug_info && info_section_emitted)
24935     output_skeleton_debug_sections (main_comp_unit_die);
24936
24937   /* Output the abbreviation table.  */
24938   if (abbrev_die_table_in_use != 1)
24939     {
24940       switch_to_section (debug_abbrev_section);
24941       ASM_OUTPUT_LABEL (asm_out_file, abbrev_section_label);
24942       output_abbrev_section ();
24943     }
24944
24945   /* Output location list section if necessary.  */
24946   if (have_location_lists)
24947     {
24948       /* Output the location lists info.  */
24949       switch_to_section (debug_loc_section);
24950       ASM_OUTPUT_LABEL (asm_out_file, loc_section_label);
24951       output_location_lists (comp_unit_die ());
24952     }
24953
24954   output_pubtables ();
24955
24956   /* Output the address range information if a CU (.debug_info section)
24957      was emitted.  We output an empty table even if we had no functions
24958      to put in it.  This because the consumer has no way to tell the
24959      difference between an empty table that we omitted and failure to
24960      generate a table that would have contained data.  */
24961   if (info_section_emitted)
24962     {
24963       unsigned long aranges_length = size_of_aranges ();
24964
24965       switch_to_section (debug_aranges_section);
24966       output_aranges (aranges_length);
24967     }
24968
24969   /* Output ranges section if necessary.  */
24970   if (ranges_table_in_use)
24971     {
24972       switch_to_section (debug_ranges_section);
24973       ASM_OUTPUT_LABEL (asm_out_file, ranges_section_label);
24974       output_ranges ();
24975     }
24976
24977   /* Have to end the macro section.  */
24978   if (have_macinfo)
24979     {
24980       switch_to_section (debug_macinfo_section);
24981       ASM_OUTPUT_LABEL (asm_out_file, macinfo_section_label);
24982       output_macinfo ();
24983       dw2_asm_output_data (1, 0, "End compilation unit");
24984     }
24985
24986   /* Output the source line correspondence table.  We must do this
24987      even if there is no line information.  Otherwise, on an empty
24988      translation unit, we will generate a present, but empty,
24989      .debug_info section.  IRIX 6.5 `nm' will then complain when
24990      examining the file.  This is done late so that any filenames
24991      used by the debug_info section are marked as 'used'.  */
24992   switch_to_section (debug_line_section);
24993   ASM_OUTPUT_LABEL (asm_out_file, debug_line_section_label);
24994   if (! DWARF2_ASM_LINE_DEBUG_INFO)
24995     output_line_info (false);
24996
24997   if (dwarf_split_debug_info && info_section_emitted)
24998     {
24999       switch_to_section (debug_skeleton_line_section);
25000       ASM_OUTPUT_LABEL (asm_out_file, debug_skeleton_line_section_label);
25001       output_line_info (true);
25002     }
25003
25004   /* If we emitted any indirect strings, output the string table too.  */
25005   if (debug_str_hash || skeleton_debug_str_hash)
25006     output_indirect_strings ();
25007 }
25008
25009 /* Reset all state within dwarf2out.c so that we can rerun the compiler
25010    within the same process.  For use by toplev::finalize.  */
25011
25012 void
25013 dwarf2out_c_finalize (void)
25014 {
25015   last_var_location_insn = NULL;
25016   cached_next_real_insn = NULL;
25017   used_rtx_array = NULL;
25018   incomplete_types = NULL;
25019   decl_scope_table = NULL;
25020   debug_info_section = NULL;
25021   debug_skeleton_info_section = NULL;
25022   debug_abbrev_section = NULL;
25023   debug_skeleton_abbrev_section = NULL;
25024   debug_aranges_section = NULL;
25025   debug_addr_section = NULL;
25026   debug_macinfo_section = NULL;
25027   debug_line_section = NULL;
25028   debug_skeleton_line_section = NULL;
25029   debug_loc_section = NULL;
25030   debug_pubnames_section = NULL;
25031   debug_pubtypes_section = NULL;
25032   debug_str_section = NULL;
25033   debug_str_dwo_section = NULL;
25034   debug_str_offsets_section = NULL;
25035   debug_ranges_section = NULL;
25036   debug_frame_section = NULL;
25037   fde_vec = NULL;
25038   debug_str_hash = NULL;
25039   skeleton_debug_str_hash = NULL;
25040   dw2_string_counter = 0;
25041   have_multiple_function_sections = false;
25042   text_section_used = false;
25043   cold_text_section_used = false;
25044   cold_text_section = NULL;
25045   current_unit_personality = NULL;
25046
25047   deferred_locations_list = NULL;
25048
25049   next_die_offset = 0;
25050   single_comp_unit_die = NULL;
25051   comdat_type_list = NULL;
25052   limbo_die_list = NULL;
25053   deferred_asm_name = NULL;
25054   file_table = NULL;
25055   decl_die_table = NULL;
25056   common_block_die_table = NULL;
25057   decl_loc_table = NULL;
25058   call_arg_locations = NULL;
25059   call_arg_loc_last = NULL;
25060   call_site_count = -1;
25061   tail_call_site_count = -1;
25062   //block_map = NULL;
25063   cached_dw_loc_list_table = NULL;
25064   abbrev_die_table = NULL;
25065   abbrev_die_table_allocated = 0;
25066   abbrev_die_table_in_use = 0;
25067   line_info_label_num = 0;
25068   cur_line_info_table = NULL;
25069   text_section_line_info = NULL;
25070   cold_text_section_line_info = NULL;
25071   separate_line_info = NULL;
25072   info_section_emitted = false;
25073   pubname_table = NULL;
25074   pubtype_table = NULL;
25075   macinfo_table = NULL;
25076   ranges_table = NULL;
25077   ranges_table_allocated = 0;
25078   ranges_table_in_use = 0;
25079   ranges_by_label = 0;
25080   ranges_by_label_allocated = 0;
25081   ranges_by_label_in_use = 0;
25082   have_location_lists = false;
25083   loclabel_num = 0;
25084   poc_label_num = 0;
25085   last_emitted_file = NULL;
25086   label_num = 0;
25087   file_table_last_lookup = NULL;
25088   tmpl_value_parm_die_table = NULL;
25089   generic_type_instances = NULL;
25090   frame_pointer_fb_offset = 0;
25091   frame_pointer_fb_offset_valid = false;
25092   base_types.release ();
25093   XDELETEVEC (producer_string);
25094   producer_string = NULL;
25095 }
25096
25097 #include "gt-dwarf2out.h"