2b6e5888a2aafef6496e0213bbb8b5cf86b2d03d
[platform/upstream/gcc.git] / gcc / dwarf2out.c
1 /* Output Dwarf2 format symbol table information from GCC.
2    Copyright (C) 1992-2018 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 "target.h"
62 #include "function.h"
63 #include "rtl.h"
64 #include "tree.h"
65 #include "memmodel.h"
66 #include "tm_p.h"
67 #include "stringpool.h"
68 #include "insn-config.h"
69 #include "ira.h"
70 #include "cgraph.h"
71 #include "diagnostic.h"
72 #include "fold-const.h"
73 #include "stor-layout.h"
74 #include "varasm.h"
75 #include "version.h"
76 #include "flags.h"
77 #include "rtlhash.h"
78 #include "reload.h"
79 #include "output.h"
80 #include "expr.h"
81 #include "dwarf2out.h"
82 #include "dwarf2asm.h"
83 #include "toplev.h"
84 #include "md5.h"
85 #include "tree-pretty-print.h"
86 #include "print-rtl.h"
87 #include "debug.h"
88 #include "common/common-target.h"
89 #include "langhooks.h"
90 #include "lra.h"
91 #include "dumpfile.h"
92 #include "opts.h"
93 #include "tree-dfa.h"
94 #include "gdb/gdb-index.h"
95 #include "rtl-iter.h"
96 #include "stringpool.h"
97 #include "attribs.h"
98
99 static void dwarf2out_source_line (unsigned int, unsigned int, const char *,
100                                    int, bool);
101 static rtx_insn *last_var_location_insn;
102 static rtx_insn *cached_next_real_insn;
103 static void dwarf2out_decl (tree);
104
105 #ifndef XCOFF_DEBUGGING_INFO
106 #define XCOFF_DEBUGGING_INFO 0
107 #endif
108
109 #ifndef HAVE_XCOFF_DWARF_EXTRAS
110 #define HAVE_XCOFF_DWARF_EXTRAS 0
111 #endif
112
113 #ifdef VMS_DEBUGGING_INFO
114 int vms_file_stats_name (const char *, long long *, long *, char *, int *);
115
116 /* Define this macro to be a nonzero value if the directory specifications
117     which are output in the debug info should end with a separator.  */
118 #define DWARF2_DIR_SHOULD_END_WITH_SEPARATOR 1
119 /* Define this macro to evaluate to a nonzero value if GCC should refrain
120    from generating indirect strings in DWARF2 debug information, for instance
121    if your target is stuck with an old version of GDB that is unable to
122    process them properly or uses VMS Debug.  */
123 #define DWARF2_INDIRECT_STRING_SUPPORT_MISSING_ON_TARGET 1
124 #else
125 #define DWARF2_DIR_SHOULD_END_WITH_SEPARATOR 0
126 #define DWARF2_INDIRECT_STRING_SUPPORT_MISSING_ON_TARGET 0
127 #endif
128
129 /* ??? Poison these here until it can be done generically.  They've been
130    totally replaced in this file; make sure it stays that way.  */
131 #undef DWARF2_UNWIND_INFO
132 #undef DWARF2_FRAME_INFO
133 #if (GCC_VERSION >= 3000)
134  #pragma GCC poison DWARF2_UNWIND_INFO DWARF2_FRAME_INFO
135 #endif
136
137 /* The size of the target's pointer type.  */
138 #ifndef PTR_SIZE
139 #define PTR_SIZE (POINTER_SIZE / BITS_PER_UNIT)
140 #endif
141
142 /* Array of RTXes referenced by the debugging information, which therefore
143    must be kept around forever.  */
144 static GTY(()) vec<rtx, va_gc> *used_rtx_array;
145
146 /* A pointer to the base of a list of incomplete types which might be
147    completed at some later time.  incomplete_types_list needs to be a
148    vec<tree, va_gc> *because we want to tell the garbage collector about
149    it.  */
150 static GTY(()) vec<tree, va_gc> *incomplete_types;
151
152 /* A pointer to the base of a table of references to declaration
153    scopes.  This table is a display which tracks the nesting
154    of declaration scopes at the current scope and containing
155    scopes.  This table is used to find the proper place to
156    define type declaration DIE's.  */
157 static GTY(()) vec<tree, va_gc> *decl_scope_table;
158
159 /* Pointers to various DWARF2 sections.  */
160 static GTY(()) section *debug_info_section;
161 static GTY(()) section *debug_skeleton_info_section;
162 static GTY(()) section *debug_abbrev_section;
163 static GTY(()) section *debug_skeleton_abbrev_section;
164 static GTY(()) section *debug_aranges_section;
165 static GTY(()) section *debug_addr_section;
166 static GTY(()) section *debug_macinfo_section;
167 static const char *debug_macinfo_section_name;
168 static unsigned macinfo_label_base = 1;
169 static GTY(()) section *debug_line_section;
170 static GTY(()) section *debug_skeleton_line_section;
171 static GTY(()) section *debug_loc_section;
172 static GTY(()) section *debug_pubnames_section;
173 static GTY(()) section *debug_pubtypes_section;
174 static GTY(()) section *debug_str_section;
175 static GTY(()) section *debug_line_str_section;
176 static GTY(()) section *debug_str_dwo_section;
177 static GTY(()) section *debug_str_offsets_section;
178 static GTY(()) section *debug_ranges_section;
179 static GTY(()) section *debug_frame_section;
180
181 /* Maximum size (in bytes) of an artificially generated label.  */
182 #define MAX_ARTIFICIAL_LABEL_BYTES      40
183
184 /* According to the (draft) DWARF 3 specification, the initial length
185    should either be 4 or 12 bytes.  When it's 12 bytes, the first 4
186    bytes are 0xffffffff, followed by the length stored in the next 8
187    bytes.
188
189    However, the SGI/MIPS ABI uses an initial length which is equal to
190    DWARF_OFFSET_SIZE.  It is defined (elsewhere) accordingly.  */
191
192 #ifndef DWARF_INITIAL_LENGTH_SIZE
193 #define DWARF_INITIAL_LENGTH_SIZE (DWARF_OFFSET_SIZE == 4 ? 4 : 12)
194 #endif
195
196 #ifndef DWARF_INITIAL_LENGTH_SIZE_STR
197 #define DWARF_INITIAL_LENGTH_SIZE_STR (DWARF_OFFSET_SIZE == 4 ? "-4" : "-12")
198 #endif
199
200 /* Round SIZE up to the nearest BOUNDARY.  */
201 #define DWARF_ROUND(SIZE,BOUNDARY) \
202   ((((SIZE) + (BOUNDARY) - 1) / (BOUNDARY)) * (BOUNDARY))
203
204 /* CIE identifier.  */
205 #if HOST_BITS_PER_WIDE_INT >= 64
206 #define DWARF_CIE_ID \
207   (unsigned HOST_WIDE_INT) (DWARF_OFFSET_SIZE == 4 ? DW_CIE_ID : DW64_CIE_ID)
208 #else
209 #define DWARF_CIE_ID DW_CIE_ID
210 #endif
211
212
213 /* A vector for a table that contains frame description
214    information for each routine.  */
215 #define NOT_INDEXED (-1U)
216 #define NO_INDEX_ASSIGNED (-2U)
217
218 static GTY(()) vec<dw_fde_ref, va_gc> *fde_vec;
219
220 struct GTY((for_user)) indirect_string_node {
221   const char *str;
222   unsigned int refcount;
223   enum dwarf_form form;
224   char *label;
225   unsigned int index;
226 };
227
228 struct indirect_string_hasher : ggc_ptr_hash<indirect_string_node>
229 {
230   typedef const char *compare_type;
231
232   static hashval_t hash (indirect_string_node *);
233   static bool equal (indirect_string_node *, const char *);
234 };
235
236 static GTY (()) hash_table<indirect_string_hasher> *debug_str_hash;
237
238 static GTY (()) hash_table<indirect_string_hasher> *debug_line_str_hash;
239
240 /* With split_debug_info, both the comp_dir and dwo_name go in the
241    main object file, rather than the dwo, similar to the force_direct
242    parameter elsewhere but with additional complications:
243
244    1) The string is needed in both the main object file and the dwo.
245    That is, the comp_dir and dwo_name will appear in both places.
246
247    2) Strings can use four forms: DW_FORM_string, DW_FORM_strp,
248    DW_FORM_line_strp or DW_FORM_GNU_str_index.
249
250    3) GCC chooses the form to use late, depending on the size and
251    reference count.
252
253    Rather than forcing the all debug string handling functions and
254    callers to deal with these complications, simply use a separate,
255    special-cased string table for any attribute that should go in the
256    main object file.  This limits the complexity to just the places
257    that need it.  */
258
259 static GTY (()) hash_table<indirect_string_hasher> *skeleton_debug_str_hash;
260
261 static GTY(()) int dw2_string_counter;
262
263 /* True if the compilation unit places functions in more than one section.  */
264 static GTY(()) bool have_multiple_function_sections = false;
265
266 /* Whether the default text and cold text sections have been used at all.  */
267 static GTY(()) bool text_section_used = false;
268 static GTY(()) bool cold_text_section_used = false;
269
270 /* The default cold text section.  */
271 static GTY(()) section *cold_text_section;
272
273 /* The DIE for C++14 'auto' in a function return type.  */
274 static GTY(()) dw_die_ref auto_die;
275
276 /* The DIE for C++14 'decltype(auto)' in a function return type.  */
277 static GTY(()) dw_die_ref decltype_auto_die;
278
279 /* Forward declarations for functions defined in this file.  */
280
281 static void output_call_frame_info (int);
282 static void dwarf2out_note_section_used (void);
283
284 /* Personality decl of current unit.  Used only when assembler does not support
285    personality CFI.  */
286 static GTY(()) rtx current_unit_personality;
287
288 /* Whether an eh_frame section is required.  */
289 static GTY(()) bool do_eh_frame = false;
290
291 /* .debug_rnglists next index.  */
292 static unsigned int rnglist_idx;
293
294 /* Data and reference forms for relocatable data.  */
295 #define DW_FORM_data (DWARF_OFFSET_SIZE == 8 ? DW_FORM_data8 : DW_FORM_data4)
296 #define DW_FORM_ref (DWARF_OFFSET_SIZE == 8 ? DW_FORM_ref8 : DW_FORM_ref4)
297
298 #ifndef DEBUG_FRAME_SECTION
299 #define DEBUG_FRAME_SECTION     ".debug_frame"
300 #endif
301
302 #ifndef FUNC_BEGIN_LABEL
303 #define FUNC_BEGIN_LABEL        "LFB"
304 #endif
305
306 #ifndef FUNC_END_LABEL
307 #define FUNC_END_LABEL          "LFE"
308 #endif
309
310 #ifndef PROLOGUE_END_LABEL
311 #define PROLOGUE_END_LABEL      "LPE"
312 #endif
313
314 #ifndef EPILOGUE_BEGIN_LABEL
315 #define EPILOGUE_BEGIN_LABEL    "LEB"
316 #endif
317
318 #ifndef FRAME_BEGIN_LABEL
319 #define FRAME_BEGIN_LABEL       "Lframe"
320 #endif
321 #define CIE_AFTER_SIZE_LABEL    "LSCIE"
322 #define CIE_END_LABEL           "LECIE"
323 #define FDE_LABEL               "LSFDE"
324 #define FDE_AFTER_SIZE_LABEL    "LASFDE"
325 #define FDE_END_LABEL           "LEFDE"
326 #define LINE_NUMBER_BEGIN_LABEL "LSLT"
327 #define LINE_NUMBER_END_LABEL   "LELT"
328 #define LN_PROLOG_AS_LABEL      "LASLTP"
329 #define LN_PROLOG_END_LABEL     "LELTP"
330 #define DIE_LABEL_PREFIX        "DW"
331 \f
332 /* Match the base name of a file to the base name of a compilation unit. */
333
334 static int
335 matches_main_base (const char *path)
336 {
337   /* Cache the last query. */
338   static const char *last_path = NULL;
339   static int last_match = 0;
340   if (path != last_path)
341     {
342       const char *base;
343       int length = base_of_path (path, &base);
344       last_path = path;
345       last_match = (length == main_input_baselength
346                     && memcmp (base, main_input_basename, length) == 0);
347     }
348   return last_match;
349 }
350
351 #ifdef DEBUG_DEBUG_STRUCT
352
353 static int
354 dump_struct_debug (tree type, enum debug_info_usage usage,
355                    enum debug_struct_file criterion, int generic,
356                    int matches, int result)
357 {
358   /* Find the type name. */
359   tree type_decl = TYPE_STUB_DECL (type);
360   tree t = type_decl;
361   const char *name = 0;
362   if (TREE_CODE (t) == TYPE_DECL)
363     t = DECL_NAME (t);
364   if (t)
365     name = IDENTIFIER_POINTER (t);
366
367   fprintf (stderr, "    struct %d %s %s %s %s %d %p %s\n",
368            criterion,
369            DECL_IN_SYSTEM_HEADER (type_decl) ? "sys" : "usr",
370            matches ? "bas" : "hdr",
371            generic ? "gen" : "ord",
372            usage == DINFO_USAGE_DFN ? ";" :
373              usage == DINFO_USAGE_DIR_USE ? "." : "*",
374            result,
375            (void*) type_decl, name);
376   return result;
377 }
378 #define DUMP_GSTRUCT(type, usage, criterion, generic, matches, result) \
379   dump_struct_debug (type, usage, criterion, generic, matches, result)
380
381 #else
382
383 #define DUMP_GSTRUCT(type, usage, criterion, generic, matches, result) \
384   (result)
385
386 #endif
387
388 /* Get the number of HOST_WIDE_INTs needed to represent the precision
389    of the number.  Some constants have a large uniform precision, so
390    we get the precision needed for the actual value of the number.  */
391
392 static unsigned int
393 get_full_len (const wide_int &op)
394 {
395   int prec = wi::min_precision (op, UNSIGNED);
396   return ((prec + HOST_BITS_PER_WIDE_INT - 1)
397           / HOST_BITS_PER_WIDE_INT);
398 }
399
400 static bool
401 should_emit_struct_debug (tree type, enum debug_info_usage usage)
402 {
403   enum debug_struct_file criterion;
404   tree type_decl;
405   bool generic = lang_hooks.types.generic_p (type);
406
407   if (generic)
408     criterion = debug_struct_generic[usage];
409   else
410     criterion = debug_struct_ordinary[usage];
411
412   if (criterion == DINFO_STRUCT_FILE_NONE)
413     return DUMP_GSTRUCT (type, usage, criterion, generic, false, false);
414   if (criterion == DINFO_STRUCT_FILE_ANY)
415     return DUMP_GSTRUCT (type, usage, criterion, generic, false, true);
416
417   type_decl = TYPE_STUB_DECL (TYPE_MAIN_VARIANT (type));
418
419   if (type_decl != NULL)
420     {
421      if (criterion == DINFO_STRUCT_FILE_SYS && DECL_IN_SYSTEM_HEADER (type_decl))
422         return DUMP_GSTRUCT (type, usage, criterion, generic, false, true);
423
424       if (matches_main_base (DECL_SOURCE_FILE (type_decl)))
425         return DUMP_GSTRUCT (type, usage, criterion, generic, true, true);
426     }
427
428   return DUMP_GSTRUCT (type, usage, criterion, generic, false, false);
429 }
430 \f
431 /* Switch [BACK] to eh_frame_section.  If we don't have an eh_frame_section,
432    switch to the data section instead, and write out a synthetic start label
433    for collect2 the first time around.  */
434
435 static void
436 switch_to_eh_frame_section (bool back ATTRIBUTE_UNUSED)
437 {
438   if (eh_frame_section == 0)
439     {
440       int flags;
441
442       if (EH_TABLES_CAN_BE_READ_ONLY)
443         {
444           int fde_encoding;
445           int per_encoding;
446           int lsda_encoding;
447
448           fde_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/1,
449                                                        /*global=*/0);
450           per_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2,
451                                                        /*global=*/1);
452           lsda_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0,
453                                                         /*global=*/0);
454           flags = ((! flag_pic
455                     || ((fde_encoding & 0x70) != DW_EH_PE_absptr
456                         && (fde_encoding & 0x70) != DW_EH_PE_aligned
457                         && (per_encoding & 0x70) != DW_EH_PE_absptr
458                         && (per_encoding & 0x70) != DW_EH_PE_aligned
459                         && (lsda_encoding & 0x70) != DW_EH_PE_absptr
460                         && (lsda_encoding & 0x70) != DW_EH_PE_aligned))
461                    ? 0 : SECTION_WRITE);
462         }
463       else
464         flags = SECTION_WRITE;
465
466 #ifdef EH_FRAME_SECTION_NAME
467       eh_frame_section = get_section (EH_FRAME_SECTION_NAME, flags, NULL);
468 #else
469       eh_frame_section = ((flags == SECTION_WRITE)
470                           ? data_section : readonly_data_section);
471 #endif /* EH_FRAME_SECTION_NAME */
472     }
473
474   switch_to_section (eh_frame_section);
475
476 #ifdef EH_FRAME_THROUGH_COLLECT2
477   /* We have no special eh_frame section.  Emit special labels to guide
478      collect2.  */
479   if (!back)
480     {
481       tree label = get_file_function_name ("F");
482       ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (PTR_SIZE));
483       targetm.asm_out.globalize_label (asm_out_file,
484                                         IDENTIFIER_POINTER (label));
485       ASM_OUTPUT_LABEL (asm_out_file, IDENTIFIER_POINTER (label));
486     }
487 #endif
488 }
489
490 /* Switch [BACK] to the eh or debug frame table section, depending on
491    FOR_EH.  */
492
493 static void
494 switch_to_frame_table_section (int for_eh, bool back)
495 {
496   if (for_eh)
497     switch_to_eh_frame_section (back);
498   else
499     {
500       if (!debug_frame_section)
501         debug_frame_section = get_section (DEBUG_FRAME_SECTION,
502                                            SECTION_DEBUG, NULL);
503       switch_to_section (debug_frame_section);
504     }
505 }
506
507 /* Describe for the GTY machinery what parts of dw_cfi_oprnd1 are used.  */
508
509 enum dw_cfi_oprnd_type
510 dw_cfi_oprnd1_desc (enum dwarf_call_frame_info cfi)
511 {
512   switch (cfi)
513     {
514     case DW_CFA_nop:
515     case DW_CFA_GNU_window_save:
516     case DW_CFA_remember_state:
517     case DW_CFA_restore_state:
518       return dw_cfi_oprnd_unused;
519
520     case DW_CFA_set_loc:
521     case DW_CFA_advance_loc1:
522     case DW_CFA_advance_loc2:
523     case DW_CFA_advance_loc4:
524     case DW_CFA_MIPS_advance_loc8:
525       return dw_cfi_oprnd_addr;
526
527     case DW_CFA_offset:
528     case DW_CFA_offset_extended:
529     case DW_CFA_def_cfa:
530     case DW_CFA_offset_extended_sf:
531     case DW_CFA_def_cfa_sf:
532     case DW_CFA_restore:
533     case DW_CFA_restore_extended:
534     case DW_CFA_undefined:
535     case DW_CFA_same_value:
536     case DW_CFA_def_cfa_register:
537     case DW_CFA_register:
538     case DW_CFA_expression:
539     case DW_CFA_val_expression:
540       return dw_cfi_oprnd_reg_num;
541
542     case DW_CFA_def_cfa_offset:
543     case DW_CFA_GNU_args_size:
544     case DW_CFA_def_cfa_offset_sf:
545       return dw_cfi_oprnd_offset;
546
547     case DW_CFA_def_cfa_expression:
548       return dw_cfi_oprnd_loc;
549
550     default:
551       gcc_unreachable ();
552     }
553 }
554
555 /* Describe for the GTY machinery what parts of dw_cfi_oprnd2 are used.  */
556
557 enum dw_cfi_oprnd_type
558 dw_cfi_oprnd2_desc (enum dwarf_call_frame_info cfi)
559 {
560   switch (cfi)
561     {
562     case DW_CFA_def_cfa:
563     case DW_CFA_def_cfa_sf:
564     case DW_CFA_offset:
565     case DW_CFA_offset_extended_sf:
566     case DW_CFA_offset_extended:
567       return dw_cfi_oprnd_offset;
568
569     case DW_CFA_register:
570       return dw_cfi_oprnd_reg_num;
571
572     case DW_CFA_expression:
573     case DW_CFA_val_expression:
574       return dw_cfi_oprnd_loc;
575
576     case DW_CFA_def_cfa_expression:
577       return dw_cfi_oprnd_cfa_loc;
578
579     default:
580       return dw_cfi_oprnd_unused;
581     }
582 }
583
584 /* Output one FDE.  */
585
586 static void
587 output_fde (dw_fde_ref fde, bool for_eh, bool second,
588             char *section_start_label, int fde_encoding, char *augmentation,
589             bool any_lsda_needed, int lsda_encoding)
590 {
591   const char *begin, *end;
592   static unsigned int j;
593   char l1[MAX_ARTIFICIAL_LABEL_BYTES], l2[MAX_ARTIFICIAL_LABEL_BYTES];
594
595   targetm.asm_out.emit_unwind_label (asm_out_file, fde->decl, for_eh,
596                                      /* empty */ 0);
597   targetm.asm_out.internal_label (asm_out_file, FDE_LABEL,
598                                   for_eh + j);
599   ASM_GENERATE_INTERNAL_LABEL (l1, FDE_AFTER_SIZE_LABEL, for_eh + j);
600   ASM_GENERATE_INTERNAL_LABEL (l2, FDE_END_LABEL, for_eh + j);
601   if (!XCOFF_DEBUGGING_INFO || for_eh)
602     {
603       if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4 && !for_eh)
604         dw2_asm_output_data (4, 0xffffffff, "Initial length escape value"
605                              " indicating 64-bit DWARF extension");
606       dw2_asm_output_delta (for_eh ? 4 : DWARF_OFFSET_SIZE, l2, l1,
607                             "FDE Length");
608     }
609   ASM_OUTPUT_LABEL (asm_out_file, l1);
610
611   if (for_eh)
612     dw2_asm_output_delta (4, l1, section_start_label, "FDE CIE offset");
613   else
614     dw2_asm_output_offset (DWARF_OFFSET_SIZE, section_start_label,
615                            debug_frame_section, "FDE CIE offset");
616
617   begin = second ? fde->dw_fde_second_begin : fde->dw_fde_begin;
618   end = second ? fde->dw_fde_second_end : fde->dw_fde_end;
619
620   if (for_eh)
621     {
622       rtx sym_ref = gen_rtx_SYMBOL_REF (Pmode, begin);
623       SYMBOL_REF_FLAGS (sym_ref) |= SYMBOL_FLAG_LOCAL;
624       dw2_asm_output_encoded_addr_rtx (fde_encoding, sym_ref, false,
625                                        "FDE initial location");
626       dw2_asm_output_delta (size_of_encoded_value (fde_encoding),
627                             end, begin, "FDE address range");
628     }
629   else
630     {
631       dw2_asm_output_addr (DWARF2_ADDR_SIZE, begin, "FDE initial location");
632       dw2_asm_output_delta (DWARF2_ADDR_SIZE, end, begin, "FDE address range");
633     }
634
635   if (augmentation[0])
636     {
637       if (any_lsda_needed)
638         {
639           int size = size_of_encoded_value (lsda_encoding);
640
641           if (lsda_encoding == DW_EH_PE_aligned)
642             {
643               int offset = (  4         /* Length */
644                             + 4         /* CIE offset */
645                             + 2 * size_of_encoded_value (fde_encoding)
646                             + 1         /* Augmentation size */ );
647               int pad = -offset & (PTR_SIZE - 1);
648
649               size += pad;
650               gcc_assert (size_of_uleb128 (size) == 1);
651             }
652
653           dw2_asm_output_data_uleb128 (size, "Augmentation size");
654
655           if (fde->uses_eh_lsda)
656             {
657               ASM_GENERATE_INTERNAL_LABEL (l1, second ? "LLSDAC" : "LLSDA",
658                                            fde->funcdef_number);
659               dw2_asm_output_encoded_addr_rtx (lsda_encoding,
660                                                gen_rtx_SYMBOL_REF (Pmode, l1),
661                                                false,
662                                                "Language Specific Data Area");
663             }
664           else
665             {
666               if (lsda_encoding == DW_EH_PE_aligned)
667                 ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (PTR_SIZE));
668               dw2_asm_output_data (size_of_encoded_value (lsda_encoding), 0,
669                                    "Language Specific Data Area (none)");
670             }
671         }
672       else
673         dw2_asm_output_data_uleb128 (0, "Augmentation size");
674     }
675
676   /* Loop through the Call Frame Instructions associated with this FDE.  */
677   fde->dw_fde_current_label = begin;
678   {
679     size_t from, until, i;
680
681     from = 0;
682     until = vec_safe_length (fde->dw_fde_cfi);
683
684     if (fde->dw_fde_second_begin == NULL)
685       ;
686     else if (!second)
687       until = fde->dw_fde_switch_cfi_index;
688     else
689       from = fde->dw_fde_switch_cfi_index;
690
691     for (i = from; i < until; i++)
692       output_cfi ((*fde->dw_fde_cfi)[i], fde, for_eh);
693   }
694
695   /* If we are to emit a ref/link from function bodies to their frame tables,
696      do it now.  This is typically performed to make sure that tables
697      associated with functions are dragged with them and not discarded in
698      garbage collecting links. We need to do this on a per function basis to
699      cope with -ffunction-sections.  */
700
701 #ifdef ASM_OUTPUT_DWARF_TABLE_REF
702   /* Switch to the function section, emit the ref to the tables, and
703      switch *back* into the table section.  */
704   switch_to_section (function_section (fde->decl));
705   ASM_OUTPUT_DWARF_TABLE_REF (section_start_label);
706   switch_to_frame_table_section (for_eh, true);
707 #endif
708
709   /* Pad the FDE out to an address sized boundary.  */
710   ASM_OUTPUT_ALIGN (asm_out_file,
711                     floor_log2 ((for_eh ? PTR_SIZE : DWARF2_ADDR_SIZE)));
712   ASM_OUTPUT_LABEL (asm_out_file, l2);
713
714   j += 2;
715 }
716
717 /* Return true if frame description entry FDE is needed for EH.  */
718
719 static bool
720 fde_needed_for_eh_p (dw_fde_ref fde)
721 {
722   if (flag_asynchronous_unwind_tables)
723     return true;
724
725   if (TARGET_USES_WEAK_UNWIND_INFO && DECL_WEAK (fde->decl))
726     return true;
727
728   if (fde->uses_eh_lsda)
729     return true;
730
731   /* If exceptions are enabled, we have collected nothrow info.  */
732   if (flag_exceptions && (fde->all_throwers_are_sibcalls || fde->nothrow))
733     return false;
734
735   return true;
736 }
737
738 /* Output the call frame information used to record information
739    that relates to calculating the frame pointer, and records the
740    location of saved registers.  */
741
742 static void
743 output_call_frame_info (int for_eh)
744 {
745   unsigned int i;
746   dw_fde_ref fde;
747   dw_cfi_ref cfi;
748   char l1[MAX_ARTIFICIAL_LABEL_BYTES], l2[MAX_ARTIFICIAL_LABEL_BYTES];
749   char section_start_label[MAX_ARTIFICIAL_LABEL_BYTES];
750   bool any_lsda_needed = false;
751   char augmentation[6];
752   int augmentation_size;
753   int fde_encoding = DW_EH_PE_absptr;
754   int per_encoding = DW_EH_PE_absptr;
755   int lsda_encoding = DW_EH_PE_absptr;
756   int return_reg;
757   rtx personality = NULL;
758   int dw_cie_version;
759
760   /* Don't emit a CIE if there won't be any FDEs.  */
761   if (!fde_vec)
762     return;
763
764   /* Nothing to do if the assembler's doing it all.  */
765   if (dwarf2out_do_cfi_asm ())
766     return;
767
768   /* If we don't have any functions we'll want to unwind out of, don't emit
769      any EH unwind information.  If we make FDEs linkonce, we may have to
770      emit an empty label for an FDE that wouldn't otherwise be emitted.  We
771      want to avoid having an FDE kept around when the function it refers to
772      is discarded.  Example where this matters: a primary function template
773      in C++ requires EH information, an explicit specialization doesn't.  */
774   if (for_eh)
775     {
776       bool any_eh_needed = false;
777
778       FOR_EACH_VEC_ELT (*fde_vec, i, fde)
779         {
780           if (fde->uses_eh_lsda)
781             any_eh_needed = any_lsda_needed = true;
782           else if (fde_needed_for_eh_p (fde))
783             any_eh_needed = true;
784           else if (TARGET_USES_WEAK_UNWIND_INFO)
785             targetm.asm_out.emit_unwind_label (asm_out_file, fde->decl, 1, 1);
786         }
787
788       if (!any_eh_needed)
789         return;
790     }
791
792   /* We're going to be generating comments, so turn on app.  */
793   if (flag_debug_asm)
794     app_enable ();
795
796   /* Switch to the proper frame section, first time.  */
797   switch_to_frame_table_section (for_eh, false);
798
799   ASM_GENERATE_INTERNAL_LABEL (section_start_label, FRAME_BEGIN_LABEL, for_eh);
800   ASM_OUTPUT_LABEL (asm_out_file, section_start_label);
801
802   /* Output the CIE.  */
803   ASM_GENERATE_INTERNAL_LABEL (l1, CIE_AFTER_SIZE_LABEL, for_eh);
804   ASM_GENERATE_INTERNAL_LABEL (l2, CIE_END_LABEL, for_eh);
805   if (!XCOFF_DEBUGGING_INFO || for_eh)
806     {
807       if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4 && !for_eh)
808         dw2_asm_output_data (4, 0xffffffff,
809           "Initial length escape value indicating 64-bit DWARF extension");
810       dw2_asm_output_delta (for_eh ? 4 : DWARF_OFFSET_SIZE, l2, l1,
811                             "Length of Common Information Entry");
812     }
813   ASM_OUTPUT_LABEL (asm_out_file, l1);
814
815   /* Now that the CIE pointer is PC-relative for EH,
816      use 0 to identify the CIE.  */
817   dw2_asm_output_data ((for_eh ? 4 : DWARF_OFFSET_SIZE),
818                        (for_eh ? 0 : DWARF_CIE_ID),
819                        "CIE Identifier Tag");
820
821   /* Use the CIE version 3 for DWARF3; allow DWARF2 to continue to
822      use CIE version 1, unless that would produce incorrect results
823      due to overflowing the return register column.  */
824   return_reg = DWARF2_FRAME_REG_OUT (DWARF_FRAME_RETURN_COLUMN, for_eh);
825   dw_cie_version = 1;
826   if (return_reg >= 256 || dwarf_version > 2)
827     dw_cie_version = 3;
828   dw2_asm_output_data (1, dw_cie_version, "CIE Version");
829
830   augmentation[0] = 0;
831   augmentation_size = 0;
832
833   personality = current_unit_personality;
834   if (for_eh)
835     {
836       char *p;
837
838       /* Augmentation:
839          z      Indicates that a uleb128 is present to size the
840                 augmentation section.
841          L      Indicates the encoding (and thus presence) of
842                 an LSDA pointer in the FDE augmentation.
843          R      Indicates a non-default pointer encoding for
844                 FDE code pointers.
845          P      Indicates the presence of an encoding + language
846                 personality routine in the CIE augmentation.  */
847
848       fde_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/1, /*global=*/0);
849       per_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2, /*global=*/1);
850       lsda_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0, /*global=*/0);
851
852       p = augmentation + 1;
853       if (personality)
854         {
855           *p++ = 'P';
856           augmentation_size += 1 + size_of_encoded_value (per_encoding);
857           assemble_external_libcall (personality);
858         }
859       if (any_lsda_needed)
860         {
861           *p++ = 'L';
862           augmentation_size += 1;
863         }
864       if (fde_encoding != DW_EH_PE_absptr)
865         {
866           *p++ = 'R';
867           augmentation_size += 1;
868         }
869       if (p > augmentation + 1)
870         {
871           augmentation[0] = 'z';
872           *p = '\0';
873         }
874
875       /* Ug.  Some platforms can't do unaligned dynamic relocations at all.  */
876       if (personality && per_encoding == DW_EH_PE_aligned)
877         {
878           int offset = (  4             /* Length */
879                         + 4             /* CIE Id */
880                         + 1             /* CIE version */
881                         + strlen (augmentation) + 1     /* Augmentation */
882                         + size_of_uleb128 (1)           /* Code alignment */
883                         + size_of_sleb128 (DWARF_CIE_DATA_ALIGNMENT)
884                         + 1             /* RA column */
885                         + 1             /* Augmentation size */
886                         + 1             /* Personality encoding */ );
887           int pad = -offset & (PTR_SIZE - 1);
888
889           augmentation_size += pad;
890
891           /* Augmentations should be small, so there's scarce need to
892              iterate for a solution.  Die if we exceed one uleb128 byte.  */
893           gcc_assert (size_of_uleb128 (augmentation_size) == 1);
894         }
895     }
896
897   dw2_asm_output_nstring (augmentation, -1, "CIE Augmentation");
898   if (dw_cie_version >= 4)
899     {
900       dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "CIE Address Size");
901       dw2_asm_output_data (1, 0, "CIE Segment Size");
902     }
903   dw2_asm_output_data_uleb128 (1, "CIE Code Alignment Factor");
904   dw2_asm_output_data_sleb128 (DWARF_CIE_DATA_ALIGNMENT,
905                                "CIE Data Alignment Factor");
906
907   if (dw_cie_version == 1)
908     dw2_asm_output_data (1, return_reg, "CIE RA Column");
909   else
910     dw2_asm_output_data_uleb128 (return_reg, "CIE RA Column");
911
912   if (augmentation[0])
913     {
914       dw2_asm_output_data_uleb128 (augmentation_size, "Augmentation size");
915       if (personality)
916         {
917           dw2_asm_output_data (1, per_encoding, "Personality (%s)",
918                                eh_data_format_name (per_encoding));
919           dw2_asm_output_encoded_addr_rtx (per_encoding,
920                                            personality,
921                                            true, NULL);
922         }
923
924       if (any_lsda_needed)
925         dw2_asm_output_data (1, lsda_encoding, "LSDA Encoding (%s)",
926                              eh_data_format_name (lsda_encoding));
927
928       if (fde_encoding != DW_EH_PE_absptr)
929         dw2_asm_output_data (1, fde_encoding, "FDE Encoding (%s)",
930                              eh_data_format_name (fde_encoding));
931     }
932
933   FOR_EACH_VEC_ELT (*cie_cfi_vec, i, cfi)
934     output_cfi (cfi, NULL, for_eh);
935
936   /* Pad the CIE out to an address sized boundary.  */
937   ASM_OUTPUT_ALIGN (asm_out_file,
938                     floor_log2 (for_eh ? PTR_SIZE : DWARF2_ADDR_SIZE));
939   ASM_OUTPUT_LABEL (asm_out_file, l2);
940
941   /* Loop through all of the FDE's.  */
942   FOR_EACH_VEC_ELT (*fde_vec, i, fde)
943     {
944       unsigned int k;
945
946       /* Don't emit EH unwind info for leaf functions that don't need it.  */
947       if (for_eh && !fde_needed_for_eh_p (fde))
948         continue;
949
950       for (k = 0; k < (fde->dw_fde_second_begin ? 2 : 1); k++)
951         output_fde (fde, for_eh, k, section_start_label, fde_encoding,
952                     augmentation, any_lsda_needed, lsda_encoding);
953     }
954
955   if (for_eh && targetm.terminate_dw2_eh_frame_info)
956     dw2_asm_output_data (4, 0, "End of Table");
957
958   /* Turn off app to make assembly quicker.  */
959   if (flag_debug_asm)
960     app_disable ();
961 }
962
963 /* Emit .cfi_startproc and .cfi_personality/.cfi_lsda if needed.  */
964
965 static void
966 dwarf2out_do_cfi_startproc (bool second)
967 {
968   int enc;
969   rtx ref;
970
971   fprintf (asm_out_file, "\t.cfi_startproc\n");
972
973   /* .cfi_personality and .cfi_lsda are only relevant to DWARF2
974      eh unwinders.  */
975   if (targetm_common.except_unwind_info (&global_options) != UI_DWARF2)
976     return;
977
978   rtx personality = get_personality_function (current_function_decl);
979
980   if (personality)
981     {
982       enc = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2, /*global=*/1);
983       ref = personality;
984
985       /* ??? The GAS support isn't entirely consistent.  We have to
986          handle indirect support ourselves, but PC-relative is done
987          in the assembler.  Further, the assembler can't handle any
988          of the weirder relocation types.  */
989       if (enc & DW_EH_PE_indirect)
990         ref = dw2_force_const_mem (ref, true);
991
992       fprintf (asm_out_file, "\t.cfi_personality %#x,", enc);
993       output_addr_const (asm_out_file, ref);
994       fputc ('\n', asm_out_file);
995     }
996
997   if (crtl->uses_eh_lsda)
998     {
999       char lab[MAX_ARTIFICIAL_LABEL_BYTES];
1000
1001       enc = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0, /*global=*/0);
1002       ASM_GENERATE_INTERNAL_LABEL (lab, second ? "LLSDAC" : "LLSDA",
1003                                    current_function_funcdef_no);
1004       ref = gen_rtx_SYMBOL_REF (Pmode, lab);
1005       SYMBOL_REF_FLAGS (ref) = SYMBOL_FLAG_LOCAL;
1006
1007       if (enc & DW_EH_PE_indirect)
1008         ref = dw2_force_const_mem (ref, true);
1009
1010       fprintf (asm_out_file, "\t.cfi_lsda %#x,", enc);
1011       output_addr_const (asm_out_file, ref);
1012       fputc ('\n', asm_out_file);
1013     }
1014 }
1015
1016 /* Allocate CURRENT_FDE.  Immediately initialize all we can, noting that
1017    this allocation may be done before pass_final.  */
1018
1019 dw_fde_ref
1020 dwarf2out_alloc_current_fde (void)
1021 {
1022   dw_fde_ref fde;
1023
1024   fde = ggc_cleared_alloc<dw_fde_node> ();
1025   fde->decl = current_function_decl;
1026   fde->funcdef_number = current_function_funcdef_no;
1027   fde->fde_index = vec_safe_length (fde_vec);
1028   fde->all_throwers_are_sibcalls = crtl->all_throwers_are_sibcalls;
1029   fde->uses_eh_lsda = crtl->uses_eh_lsda;
1030   fde->nothrow = crtl->nothrow;
1031   fde->drap_reg = INVALID_REGNUM;
1032   fde->vdrap_reg = INVALID_REGNUM;
1033
1034   /* Record the FDE associated with this function.  */
1035   cfun->fde = fde;
1036   vec_safe_push (fde_vec, fde);
1037
1038   return fde;
1039 }
1040
1041 /* Output a marker (i.e. a label) for the beginning of a function, before
1042    the prologue.  */
1043
1044 void
1045 dwarf2out_begin_prologue (unsigned int line ATTRIBUTE_UNUSED,
1046                           unsigned int column ATTRIBUTE_UNUSED,
1047                           const char *file ATTRIBUTE_UNUSED)
1048 {
1049   char label[MAX_ARTIFICIAL_LABEL_BYTES];
1050   char * dup_label;
1051   dw_fde_ref fde;
1052   section *fnsec;
1053   bool do_frame;
1054
1055   current_function_func_begin_label = NULL;
1056
1057   do_frame = dwarf2out_do_frame ();
1058
1059   /* ??? current_function_func_begin_label is also used by except.c for
1060      call-site information.  We must emit this label if it might be used.  */
1061   if (!do_frame
1062       && (!flag_exceptions
1063           || targetm_common.except_unwind_info (&global_options) == UI_SJLJ))
1064     return;
1065
1066   fnsec = function_section (current_function_decl);
1067   switch_to_section (fnsec);
1068   ASM_GENERATE_INTERNAL_LABEL (label, FUNC_BEGIN_LABEL,
1069                                current_function_funcdef_no);
1070   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, FUNC_BEGIN_LABEL,
1071                           current_function_funcdef_no);
1072   dup_label = xstrdup (label);
1073   current_function_func_begin_label = dup_label;
1074
1075   /* We can elide FDE allocation if we're not emitting frame unwind info.  */
1076   if (!do_frame)
1077     return;
1078
1079   /* Unlike the debug version, the EH version of frame unwind info is a per-
1080      function setting so we need to record whether we need it for the unit.  */
1081   do_eh_frame |= dwarf2out_do_eh_frame ();
1082
1083   /* Cater to the various TARGET_ASM_OUTPUT_MI_THUNK implementations that
1084      emit insns as rtx but bypass the bulk of rest_of_compilation, which
1085      would include pass_dwarf2_frame.  If we've not created the FDE yet,
1086      do so now.  */
1087   fde = cfun->fde;
1088   if (fde == NULL)
1089     fde = dwarf2out_alloc_current_fde ();
1090
1091   /* Initialize the bits of CURRENT_FDE that were not available earlier.  */
1092   fde->dw_fde_begin = dup_label;
1093   fde->dw_fde_current_label = dup_label;
1094   fde->in_std_section = (fnsec == text_section
1095                          || (cold_text_section && fnsec == cold_text_section));
1096
1097   /* We only want to output line number information for the genuine dwarf2
1098      prologue case, not the eh frame case.  */
1099 #ifdef DWARF2_DEBUGGING_INFO
1100   if (file)
1101     dwarf2out_source_line (line, column, file, 0, true);
1102 #endif
1103
1104   if (dwarf2out_do_cfi_asm ())
1105     dwarf2out_do_cfi_startproc (false);
1106   else
1107     {
1108       rtx personality = get_personality_function (current_function_decl);
1109       if (!current_unit_personality)
1110         current_unit_personality = personality;
1111
1112       /* We cannot keep a current personality per function as without CFI
1113          asm, at the point where we emit the CFI data, there is no current
1114          function anymore.  */
1115       if (personality && current_unit_personality != personality)
1116         sorry ("multiple EH personalities are supported only with assemblers "
1117                "supporting .cfi_personality directive");
1118     }
1119 }
1120
1121 /* Output a marker (i.e. a label) for the end of the generated code
1122    for a function prologue.  This gets called *after* the prologue code has
1123    been generated.  */
1124
1125 void
1126 dwarf2out_vms_end_prologue (unsigned int line ATTRIBUTE_UNUSED,
1127                             const char *file ATTRIBUTE_UNUSED)
1128 {
1129   char label[MAX_ARTIFICIAL_LABEL_BYTES];
1130
1131   /* Output a label to mark the endpoint of the code generated for this
1132      function.  */
1133   ASM_GENERATE_INTERNAL_LABEL (label, PROLOGUE_END_LABEL,
1134                                current_function_funcdef_no);
1135   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, PROLOGUE_END_LABEL,
1136                           current_function_funcdef_no);
1137   cfun->fde->dw_fde_vms_end_prologue = xstrdup (label);
1138 }
1139
1140 /* Output a marker (i.e. a label) for the beginning of the generated code
1141    for a function epilogue.  This gets called *before* the prologue code has
1142    been generated.  */
1143
1144 void
1145 dwarf2out_vms_begin_epilogue (unsigned int line ATTRIBUTE_UNUSED,
1146                           const char *file ATTRIBUTE_UNUSED)
1147 {
1148   dw_fde_ref fde = cfun->fde;
1149   char label[MAX_ARTIFICIAL_LABEL_BYTES];
1150
1151   if (fde->dw_fde_vms_begin_epilogue)
1152     return;
1153
1154   /* Output a label to mark the endpoint of the code generated for this
1155      function.  */
1156   ASM_GENERATE_INTERNAL_LABEL (label, EPILOGUE_BEGIN_LABEL,
1157                                current_function_funcdef_no);
1158   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, EPILOGUE_BEGIN_LABEL,
1159                           current_function_funcdef_no);
1160   fde->dw_fde_vms_begin_epilogue = xstrdup (label);
1161 }
1162
1163 /* Output a marker (i.e. a label) for the absolute end of the generated code
1164    for a function definition.  This gets called *after* the epilogue code has
1165    been generated.  */
1166
1167 void
1168 dwarf2out_end_epilogue (unsigned int line ATTRIBUTE_UNUSED,
1169                         const char *file ATTRIBUTE_UNUSED)
1170 {
1171   dw_fde_ref fde;
1172   char label[MAX_ARTIFICIAL_LABEL_BYTES];
1173
1174   last_var_location_insn = NULL;
1175   cached_next_real_insn = NULL;
1176
1177   if (dwarf2out_do_cfi_asm ())
1178     fprintf (asm_out_file, "\t.cfi_endproc\n");
1179
1180   /* Output a label to mark the endpoint of the code generated for this
1181      function.  */
1182   ASM_GENERATE_INTERNAL_LABEL (label, FUNC_END_LABEL,
1183                                current_function_funcdef_no);
1184   ASM_OUTPUT_LABEL (asm_out_file, label);
1185   fde = cfun->fde;
1186   gcc_assert (fde != NULL);
1187   if (fde->dw_fde_second_begin == NULL)
1188     fde->dw_fde_end = xstrdup (label);
1189 }
1190
1191 void
1192 dwarf2out_frame_finish (void)
1193 {
1194   /* Output call frame information.  */
1195   if (targetm.debug_unwind_info () == UI_DWARF2)
1196     output_call_frame_info (0);
1197
1198   /* Output another copy for the unwinder.  */
1199   if (do_eh_frame)
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 /* Describe an entry into the .debug_addr section.  */
1274
1275 enum ate_kind {
1276   ate_kind_rtx,
1277   ate_kind_rtx_dtprel,
1278   ate_kind_label
1279 };
1280
1281 struct GTY((for_user)) addr_table_entry {
1282   enum ate_kind kind;
1283   unsigned int refcount;
1284   unsigned int index;
1285   union addr_table_entry_struct_union
1286     {
1287       rtx GTY ((tag ("0"))) rtl;
1288       char * GTY ((tag ("1"))) label;
1289     }
1290   GTY ((desc ("%1.kind"))) addr;
1291 };
1292
1293 /* Location lists are ranges + location descriptions for that range,
1294    so you can track variables that are in different places over
1295    their entire life.  */
1296 typedef struct GTY(()) dw_loc_list_struct {
1297   dw_loc_list_ref dw_loc_next;
1298   const char *begin; /* Label and addr_entry for start of range */
1299   addr_table_entry *begin_entry;
1300   const char *end;  /* Label for end of range */
1301   char *ll_symbol; /* Label for beginning of location list.
1302                       Only on head of list */
1303   const char *section; /* Section this loclist is relative to */
1304   dw_loc_descr_ref expr;
1305   hashval_t hash;
1306   /* True if all addresses in this and subsequent lists are known to be
1307      resolved.  */
1308   bool resolved_addr;
1309   /* True if this list has been replaced by dw_loc_next.  */
1310   bool replaced;
1311   /* True if it has been emitted into .debug_loc* / .debug_loclists*
1312      section.  */
1313   unsigned char emitted : 1;
1314   /* True if hash field is index rather than hash value.  */
1315   unsigned char num_assigned : 1;
1316   /* True if .debug_loclists.dwo offset has been emitted for it already.  */
1317   unsigned char offset_emitted : 1;
1318   /* True if note_variable_value_in_expr has been called on it.  */
1319   unsigned char noted_variable_value : 1;
1320   /* True if the range should be emitted even if begin and end
1321      are the same.  */
1322   bool force;
1323 } dw_loc_list_node;
1324
1325 static dw_loc_descr_ref int_loc_descriptor (poly_int64);
1326 static dw_loc_descr_ref uint_loc_descriptor (unsigned HOST_WIDE_INT);
1327
1328 /* Convert a DWARF stack opcode into its string name.  */
1329
1330 static const char *
1331 dwarf_stack_op_name (unsigned int op)
1332 {
1333   const char *name = get_DW_OP_name (op);
1334
1335   if (name != NULL)
1336     return name;
1337
1338   return "OP_<unknown>";
1339 }
1340
1341 /* Return a pointer to a newly allocated location description.  Location
1342    descriptions are simple expression terms that can be strung
1343    together to form more complicated location (address) descriptions.  */
1344
1345 static inline dw_loc_descr_ref
1346 new_loc_descr (enum dwarf_location_atom op, unsigned HOST_WIDE_INT oprnd1,
1347                unsigned HOST_WIDE_INT oprnd2)
1348 {
1349   dw_loc_descr_ref descr = ggc_cleared_alloc<dw_loc_descr_node> ();
1350
1351   descr->dw_loc_opc = op;
1352   descr->dw_loc_oprnd1.val_class = dw_val_class_unsigned_const;
1353   descr->dw_loc_oprnd1.val_entry = NULL;
1354   descr->dw_loc_oprnd1.v.val_unsigned = oprnd1;
1355   descr->dw_loc_oprnd2.val_class = dw_val_class_unsigned_const;
1356   descr->dw_loc_oprnd2.val_entry = NULL;
1357   descr->dw_loc_oprnd2.v.val_unsigned = oprnd2;
1358
1359   return descr;
1360 }
1361
1362 /* Add a location description term to a location description expression.  */
1363
1364 static inline void
1365 add_loc_descr (dw_loc_descr_ref *list_head, dw_loc_descr_ref descr)
1366 {
1367   dw_loc_descr_ref *d;
1368
1369   /* Find the end of the chain.  */
1370   for (d = list_head; (*d) != NULL; d = &(*d)->dw_loc_next)
1371     ;
1372
1373   *d = descr;
1374 }
1375
1376 /* Compare two location operands for exact equality.  */
1377
1378 static bool
1379 dw_val_equal_p (dw_val_node *a, dw_val_node *b)
1380 {
1381   if (a->val_class != b->val_class)
1382     return false;
1383   switch (a->val_class)
1384     {
1385     case dw_val_class_none:
1386       return true;
1387     case dw_val_class_addr:
1388       return rtx_equal_p (a->v.val_addr, b->v.val_addr);
1389
1390     case dw_val_class_offset:
1391     case dw_val_class_unsigned_const:
1392     case dw_val_class_const:
1393     case dw_val_class_unsigned_const_implicit:
1394     case dw_val_class_const_implicit:
1395     case dw_val_class_range_list:
1396       /* These are all HOST_WIDE_INT, signed or unsigned.  */
1397       return a->v.val_unsigned == b->v.val_unsigned;
1398
1399     case dw_val_class_loc:
1400       return a->v.val_loc == b->v.val_loc;
1401     case dw_val_class_loc_list:
1402       return a->v.val_loc_list == b->v.val_loc_list;
1403     case dw_val_class_die_ref:
1404       return a->v.val_die_ref.die == b->v.val_die_ref.die;
1405     case dw_val_class_fde_ref:
1406       return a->v.val_fde_index == b->v.val_fde_index;
1407     case dw_val_class_lbl_id:
1408     case dw_val_class_lineptr:
1409     case dw_val_class_macptr:
1410     case dw_val_class_loclistsptr:
1411     case dw_val_class_high_pc:
1412       return strcmp (a->v.val_lbl_id, b->v.val_lbl_id) == 0;
1413     case dw_val_class_str:
1414       return a->v.val_str == b->v.val_str;
1415     case dw_val_class_flag:
1416       return a->v.val_flag == b->v.val_flag;
1417     case dw_val_class_file:
1418     case dw_val_class_file_implicit:
1419       return a->v.val_file == b->v.val_file;
1420     case dw_val_class_decl_ref:
1421       return a->v.val_decl_ref == b->v.val_decl_ref;
1422     
1423     case dw_val_class_const_double:
1424       return (a->v.val_double.high == b->v.val_double.high
1425               && a->v.val_double.low == b->v.val_double.low);
1426
1427     case dw_val_class_wide_int:
1428       return *a->v.val_wide == *b->v.val_wide;
1429
1430     case dw_val_class_vec:
1431       {
1432         size_t a_len = a->v.val_vec.elt_size * a->v.val_vec.length;
1433         size_t b_len = b->v.val_vec.elt_size * b->v.val_vec.length;
1434
1435         return (a_len == b_len
1436                 && !memcmp (a->v.val_vec.array, b->v.val_vec.array, a_len));
1437       }
1438
1439     case dw_val_class_data8:
1440       return memcmp (a->v.val_data8, b->v.val_data8, 8) == 0;
1441
1442     case dw_val_class_vms_delta:
1443       return (!strcmp (a->v.val_vms_delta.lbl1, b->v.val_vms_delta.lbl1)
1444               && !strcmp (a->v.val_vms_delta.lbl1, b->v.val_vms_delta.lbl1));
1445
1446     case dw_val_class_discr_value:
1447       return (a->v.val_discr_value.pos == b->v.val_discr_value.pos
1448               && a->v.val_discr_value.v.uval == b->v.val_discr_value.v.uval);
1449     case dw_val_class_discr_list:
1450       /* It makes no sense comparing two discriminant value lists.  */
1451       return false;
1452     }
1453   gcc_unreachable ();
1454 }
1455
1456 /* Compare two location atoms for exact equality.  */
1457
1458 static bool
1459 loc_descr_equal_p_1 (dw_loc_descr_ref a, dw_loc_descr_ref b)
1460 {
1461   if (a->dw_loc_opc != b->dw_loc_opc)
1462     return false;
1463
1464   /* ??? This is only ever set for DW_OP_constNu, for N equal to the
1465      address size, but since we always allocate cleared storage it
1466      should be zero for other types of locations.  */
1467   if (a->dtprel != b->dtprel)
1468     return false;
1469
1470   return (dw_val_equal_p (&a->dw_loc_oprnd1, &b->dw_loc_oprnd1)
1471           && dw_val_equal_p (&a->dw_loc_oprnd2, &b->dw_loc_oprnd2));
1472 }
1473
1474 /* Compare two complete location expressions for exact equality.  */
1475
1476 bool
1477 loc_descr_equal_p (dw_loc_descr_ref a, dw_loc_descr_ref b)
1478 {
1479   while (1)
1480     {
1481       if (a == b)
1482         return true;
1483       if (a == NULL || b == NULL)
1484         return false;
1485       if (!loc_descr_equal_p_1 (a, b))
1486         return false;
1487
1488       a = a->dw_loc_next;
1489       b = b->dw_loc_next;
1490     }
1491 }
1492
1493
1494 /* Add a constant POLY_OFFSET to a location expression.  */
1495
1496 static void
1497 loc_descr_plus_const (dw_loc_descr_ref *list_head, poly_int64 poly_offset)
1498 {
1499   dw_loc_descr_ref loc;
1500   HOST_WIDE_INT *p;
1501
1502   gcc_assert (*list_head != NULL);
1503
1504   if (known_eq (poly_offset, 0))
1505     return;
1506
1507   /* Find the end of the chain.  */
1508   for (loc = *list_head; loc->dw_loc_next != NULL; loc = loc->dw_loc_next)
1509     ;
1510
1511   HOST_WIDE_INT offset;
1512   if (!poly_offset.is_constant (&offset))
1513     {
1514       loc->dw_loc_next = int_loc_descriptor (poly_offset);
1515       add_loc_descr (&loc->dw_loc_next, new_loc_descr (DW_OP_plus, 0, 0));
1516       return;
1517     }
1518
1519   p = NULL;
1520   if (loc->dw_loc_opc == DW_OP_fbreg
1521       || (loc->dw_loc_opc >= DW_OP_breg0 && loc->dw_loc_opc <= DW_OP_breg31))
1522     p = &loc->dw_loc_oprnd1.v.val_int;
1523   else if (loc->dw_loc_opc == DW_OP_bregx)
1524     p = &loc->dw_loc_oprnd2.v.val_int;
1525
1526   /* If the last operation is fbreg, breg{0..31,x}, optimize by adjusting its
1527      offset.  Don't optimize if an signed integer overflow would happen.  */
1528   if (p != NULL
1529       && ((offset > 0 && *p <= INTTYPE_MAXIMUM (HOST_WIDE_INT) - offset)
1530           || (offset < 0 && *p >= INTTYPE_MINIMUM (HOST_WIDE_INT) - offset)))
1531     *p += offset;
1532
1533   else if (offset > 0)
1534     loc->dw_loc_next = new_loc_descr (DW_OP_plus_uconst, offset, 0);
1535
1536   else
1537     {
1538       loc->dw_loc_next
1539         = uint_loc_descriptor (-(unsigned HOST_WIDE_INT) offset);
1540       add_loc_descr (&loc->dw_loc_next, new_loc_descr (DW_OP_minus, 0, 0));
1541     }
1542 }
1543
1544 /* Return a pointer to a newly allocated location description for
1545    REG and OFFSET.  */
1546
1547 static inline dw_loc_descr_ref
1548 new_reg_loc_descr (unsigned int reg, poly_int64 offset)
1549 {
1550   HOST_WIDE_INT const_offset;
1551   if (offset.is_constant (&const_offset))
1552     {
1553       if (reg <= 31)
1554         return new_loc_descr ((enum dwarf_location_atom) (DW_OP_breg0 + reg),
1555                               const_offset, 0);
1556       else
1557         return new_loc_descr (DW_OP_bregx, reg, const_offset);
1558     }
1559   else
1560     {
1561       dw_loc_descr_ref ret = new_reg_loc_descr (reg, 0);
1562       loc_descr_plus_const (&ret, offset);
1563       return ret;
1564     }
1565 }
1566
1567 /* Add a constant OFFSET to a location list.  */
1568
1569 static void
1570 loc_list_plus_const (dw_loc_list_ref list_head, poly_int64 offset)
1571 {
1572   dw_loc_list_ref d;
1573   for (d = list_head; d != NULL; d = d->dw_loc_next)
1574     loc_descr_plus_const (&d->expr, offset);
1575 }
1576
1577 #define DWARF_REF_SIZE  \
1578   (dwarf_version == 2 ? DWARF2_ADDR_SIZE : DWARF_OFFSET_SIZE)
1579
1580 /* The number of bits that can be encoded by largest DW_FORM_dataN.
1581    In DWARF4 and earlier it is DW_FORM_data8 with 64 bits, in DWARF5
1582    DW_FORM_data16 with 128 bits.  */
1583 #define DWARF_LARGEST_DATA_FORM_BITS \
1584   (dwarf_version >= 5 ? 128 : 64)
1585
1586 /* Utility inline function for construction of ops that were GNU extension
1587    before DWARF 5.  */
1588 static inline enum dwarf_location_atom
1589 dwarf_OP (enum dwarf_location_atom op)
1590 {
1591   switch (op)
1592     {
1593     case DW_OP_implicit_pointer:
1594       if (dwarf_version < 5)
1595         return DW_OP_GNU_implicit_pointer;
1596       break;
1597
1598     case DW_OP_entry_value:
1599       if (dwarf_version < 5)
1600         return DW_OP_GNU_entry_value;
1601       break;
1602
1603     case DW_OP_const_type:
1604       if (dwarf_version < 5)
1605         return DW_OP_GNU_const_type;
1606       break;
1607
1608     case DW_OP_regval_type:
1609       if (dwarf_version < 5)
1610         return DW_OP_GNU_regval_type;
1611       break;
1612
1613     case DW_OP_deref_type:
1614       if (dwarf_version < 5)
1615         return DW_OP_GNU_deref_type;
1616       break;
1617
1618     case DW_OP_convert:
1619       if (dwarf_version < 5)
1620         return DW_OP_GNU_convert;
1621       break;
1622
1623     case DW_OP_reinterpret:
1624       if (dwarf_version < 5)
1625         return DW_OP_GNU_reinterpret;
1626       break;
1627
1628     default:
1629       break;
1630     }
1631   return op;
1632 }
1633
1634 /* Similarly for attributes.  */
1635 static inline enum dwarf_attribute
1636 dwarf_AT (enum dwarf_attribute at)
1637 {
1638   switch (at)
1639     {
1640     case DW_AT_call_return_pc:
1641       if (dwarf_version < 5)
1642         return DW_AT_low_pc;
1643       break;
1644
1645     case DW_AT_call_tail_call:
1646       if (dwarf_version < 5)
1647         return DW_AT_GNU_tail_call;
1648       break;
1649
1650     case DW_AT_call_origin:
1651       if (dwarf_version < 5)
1652         return DW_AT_abstract_origin;
1653       break;
1654
1655     case DW_AT_call_target:
1656       if (dwarf_version < 5)
1657         return DW_AT_GNU_call_site_target;
1658       break;
1659
1660     case DW_AT_call_target_clobbered:
1661       if (dwarf_version < 5)
1662         return DW_AT_GNU_call_site_target_clobbered;
1663       break;
1664
1665     case DW_AT_call_parameter:
1666       if (dwarf_version < 5)
1667         return DW_AT_abstract_origin;
1668       break;
1669
1670     case DW_AT_call_value:
1671       if (dwarf_version < 5)
1672         return DW_AT_GNU_call_site_value;
1673       break;
1674
1675     case DW_AT_call_data_value:
1676       if (dwarf_version < 5)
1677         return DW_AT_GNU_call_site_data_value;
1678       break;
1679
1680     case DW_AT_call_all_calls:
1681       if (dwarf_version < 5)
1682         return DW_AT_GNU_all_call_sites;
1683       break;
1684
1685     case DW_AT_call_all_tail_calls:
1686       if (dwarf_version < 5)
1687         return DW_AT_GNU_all_tail_call_sites;
1688       break;
1689
1690     case DW_AT_dwo_name:
1691       if (dwarf_version < 5)
1692         return DW_AT_GNU_dwo_name;
1693       break;
1694
1695     default:
1696       break;
1697     }
1698   return at;
1699 }
1700
1701 /* And similarly for tags.  */
1702 static inline enum dwarf_tag
1703 dwarf_TAG (enum dwarf_tag tag)
1704 {
1705   switch (tag)
1706     {
1707     case DW_TAG_call_site:
1708       if (dwarf_version < 5)
1709         return DW_TAG_GNU_call_site;
1710       break;
1711
1712     case DW_TAG_call_site_parameter:
1713       if (dwarf_version < 5)
1714         return DW_TAG_GNU_call_site_parameter;
1715       break;
1716
1717     default:
1718       break;
1719     }
1720   return tag;
1721 }
1722
1723 static unsigned long int get_base_type_offset (dw_die_ref);
1724
1725 /* Return the size of a location descriptor.  */
1726
1727 static unsigned long
1728 size_of_loc_descr (dw_loc_descr_ref loc)
1729 {
1730   unsigned long size = 1;
1731
1732   switch (loc->dw_loc_opc)
1733     {
1734     case DW_OP_addr:
1735       size += DWARF2_ADDR_SIZE;
1736       break;
1737     case DW_OP_GNU_addr_index:
1738     case DW_OP_GNU_const_index:
1739       gcc_assert (loc->dw_loc_oprnd1.val_entry->index != NO_INDEX_ASSIGNED);
1740       size += size_of_uleb128 (loc->dw_loc_oprnd1.val_entry->index);
1741       break;
1742     case DW_OP_const1u:
1743     case DW_OP_const1s:
1744       size += 1;
1745       break;
1746     case DW_OP_const2u:
1747     case DW_OP_const2s:
1748       size += 2;
1749       break;
1750     case DW_OP_const4u:
1751     case DW_OP_const4s:
1752       size += 4;
1753       break;
1754     case DW_OP_const8u:
1755     case DW_OP_const8s:
1756       size += 8;
1757       break;
1758     case DW_OP_constu:
1759       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
1760       break;
1761     case DW_OP_consts:
1762       size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
1763       break;
1764     case DW_OP_pick:
1765       size += 1;
1766       break;
1767     case DW_OP_plus_uconst:
1768       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
1769       break;
1770     case DW_OP_skip:
1771     case DW_OP_bra:
1772       size += 2;
1773       break;
1774     case DW_OP_breg0:
1775     case DW_OP_breg1:
1776     case DW_OP_breg2:
1777     case DW_OP_breg3:
1778     case DW_OP_breg4:
1779     case DW_OP_breg5:
1780     case DW_OP_breg6:
1781     case DW_OP_breg7:
1782     case DW_OP_breg8:
1783     case DW_OP_breg9:
1784     case DW_OP_breg10:
1785     case DW_OP_breg11:
1786     case DW_OP_breg12:
1787     case DW_OP_breg13:
1788     case DW_OP_breg14:
1789     case DW_OP_breg15:
1790     case DW_OP_breg16:
1791     case DW_OP_breg17:
1792     case DW_OP_breg18:
1793     case DW_OP_breg19:
1794     case DW_OP_breg20:
1795     case DW_OP_breg21:
1796     case DW_OP_breg22:
1797     case DW_OP_breg23:
1798     case DW_OP_breg24:
1799     case DW_OP_breg25:
1800     case DW_OP_breg26:
1801     case DW_OP_breg27:
1802     case DW_OP_breg28:
1803     case DW_OP_breg29:
1804     case DW_OP_breg30:
1805     case DW_OP_breg31:
1806       size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
1807       break;
1808     case DW_OP_regx:
1809       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
1810       break;
1811     case DW_OP_fbreg:
1812       size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
1813       break;
1814     case DW_OP_bregx:
1815       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
1816       size += size_of_sleb128 (loc->dw_loc_oprnd2.v.val_int);
1817       break;
1818     case DW_OP_piece:
1819       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
1820       break;
1821     case DW_OP_bit_piece:
1822       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
1823       size += size_of_uleb128 (loc->dw_loc_oprnd2.v.val_unsigned);
1824       break;
1825     case DW_OP_deref_size:
1826     case DW_OP_xderef_size:
1827       size += 1;
1828       break;
1829     case DW_OP_call2:
1830       size += 2;
1831       break;
1832     case DW_OP_call4:
1833       size += 4;
1834       break;
1835     case DW_OP_call_ref:
1836     case DW_OP_GNU_variable_value:
1837       size += DWARF_REF_SIZE;
1838       break;
1839     case DW_OP_implicit_value:
1840       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned)
1841               + loc->dw_loc_oprnd1.v.val_unsigned;
1842       break;
1843     case DW_OP_implicit_pointer:
1844     case DW_OP_GNU_implicit_pointer:
1845       size += DWARF_REF_SIZE + size_of_sleb128 (loc->dw_loc_oprnd2.v.val_int);
1846       break;
1847     case DW_OP_entry_value:
1848     case DW_OP_GNU_entry_value:
1849       {
1850         unsigned long op_size = size_of_locs (loc->dw_loc_oprnd1.v.val_loc);
1851         size += size_of_uleb128 (op_size) + op_size;
1852         break;
1853       }
1854     case DW_OP_const_type:
1855     case DW_OP_GNU_const_type:
1856       {
1857         unsigned long o
1858           = get_base_type_offset (loc->dw_loc_oprnd1.v.val_die_ref.die);
1859         size += size_of_uleb128 (o) + 1;
1860         switch (loc->dw_loc_oprnd2.val_class)
1861           {
1862           case dw_val_class_vec:
1863             size += loc->dw_loc_oprnd2.v.val_vec.length
1864                     * loc->dw_loc_oprnd2.v.val_vec.elt_size;
1865             break;
1866           case dw_val_class_const:
1867             size += HOST_BITS_PER_WIDE_INT / BITS_PER_UNIT;
1868             break;
1869           case dw_val_class_const_double:
1870             size += HOST_BITS_PER_DOUBLE_INT / BITS_PER_UNIT;
1871             break;
1872           case dw_val_class_wide_int:
1873             size += (get_full_len (*loc->dw_loc_oprnd2.v.val_wide)
1874                      * HOST_BITS_PER_WIDE_INT / BITS_PER_UNIT);
1875             break;
1876           default:
1877             gcc_unreachable ();
1878           }
1879         break;
1880       }
1881     case DW_OP_regval_type:
1882     case DW_OP_GNU_regval_type:
1883       {
1884         unsigned long o
1885           = get_base_type_offset (loc->dw_loc_oprnd2.v.val_die_ref.die);
1886         size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned)
1887                 + size_of_uleb128 (o);
1888       }
1889       break;
1890     case DW_OP_deref_type:
1891     case DW_OP_GNU_deref_type:
1892       {
1893         unsigned long o
1894           = get_base_type_offset (loc->dw_loc_oprnd2.v.val_die_ref.die);
1895         size += 1 + size_of_uleb128 (o);
1896       }
1897       break;
1898     case DW_OP_convert:
1899     case DW_OP_reinterpret:
1900     case DW_OP_GNU_convert:
1901     case DW_OP_GNU_reinterpret:
1902       if (loc->dw_loc_oprnd1.val_class == dw_val_class_unsigned_const)
1903         size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
1904       else
1905         {
1906           unsigned long o
1907             = get_base_type_offset (loc->dw_loc_oprnd1.v.val_die_ref.die);
1908           size += size_of_uleb128 (o);
1909         }
1910       break;
1911     case DW_OP_GNU_parameter_ref:
1912       size += 4;
1913       break;
1914     default:
1915       break;
1916     }
1917
1918   return size;
1919 }
1920
1921 /* Return the size of a series of location descriptors.  */
1922
1923 unsigned long
1924 size_of_locs (dw_loc_descr_ref loc)
1925 {
1926   dw_loc_descr_ref l;
1927   unsigned long size;
1928
1929   /* If there are no skip or bra opcodes, don't fill in the dw_loc_addr
1930      field, to avoid writing to a PCH file.  */
1931   for (size = 0, l = loc; l != NULL; l = l->dw_loc_next)
1932     {
1933       if (l->dw_loc_opc == DW_OP_skip || l->dw_loc_opc == DW_OP_bra)
1934         break;
1935       size += size_of_loc_descr (l);
1936     }
1937   if (! l)
1938     return size;
1939
1940   for (size = 0, l = loc; l != NULL; l = l->dw_loc_next)
1941     {
1942       l->dw_loc_addr = size;
1943       size += size_of_loc_descr (l);
1944     }
1945
1946   return size;
1947 }
1948
1949 /* Return the size of the value in a DW_AT_discr_value attribute.  */
1950
1951 static int
1952 size_of_discr_value (dw_discr_value *discr_value)
1953 {
1954   if (discr_value->pos)
1955     return size_of_uleb128 (discr_value->v.uval);
1956   else
1957     return size_of_sleb128 (discr_value->v.sval);
1958 }
1959
1960 /* Return the size of the value in a DW_AT_discr_list attribute.  */
1961
1962 static int
1963 size_of_discr_list (dw_discr_list_ref discr_list)
1964 {
1965   int size = 0;
1966
1967   for (dw_discr_list_ref list = discr_list;
1968        list != NULL;
1969        list = list->dw_discr_next)
1970     {
1971       /* One byte for the discriminant value descriptor, and then one or two
1972          LEB128 numbers, depending on whether it's a single case label or a
1973          range label.  */
1974       size += 1;
1975       size += size_of_discr_value (&list->dw_discr_lower_bound);
1976       if (list->dw_discr_range != 0)
1977         size += size_of_discr_value (&list->dw_discr_upper_bound);
1978     }
1979   return size;
1980 }
1981
1982 static HOST_WIDE_INT extract_int (const unsigned char *, unsigned);
1983 static void get_ref_die_offset_label (char *, dw_die_ref);
1984 static unsigned long int get_ref_die_offset (dw_die_ref);
1985
1986 /* Output location description stack opcode's operands (if any).
1987    The for_eh_or_skip parameter controls whether register numbers are
1988    converted using DWARF2_FRAME_REG_OUT, which is needed in the case that
1989    hard reg numbers have been processed via DWARF_FRAME_REGNUM (i.e. for unwind
1990    info).  This should be suppressed for the cases that have not been converted
1991    (i.e. symbolic debug info), by setting the parameter < 0.  See PR47324.  */
1992
1993 static void
1994 output_loc_operands (dw_loc_descr_ref loc, int for_eh_or_skip)
1995 {
1996   dw_val_ref val1 = &loc->dw_loc_oprnd1;
1997   dw_val_ref val2 = &loc->dw_loc_oprnd2;
1998
1999   switch (loc->dw_loc_opc)
2000     {
2001 #ifdef DWARF2_DEBUGGING_INFO
2002     case DW_OP_const2u:
2003     case DW_OP_const2s:
2004       dw2_asm_output_data (2, val1->v.val_int, NULL);
2005       break;
2006     case DW_OP_const4u:
2007       if (loc->dtprel)
2008         {
2009           gcc_assert (targetm.asm_out.output_dwarf_dtprel);
2010           targetm.asm_out.output_dwarf_dtprel (asm_out_file, 4,
2011                                                val1->v.val_addr);
2012           fputc ('\n', asm_out_file);
2013           break;
2014         }
2015       /* FALLTHRU */
2016     case DW_OP_const4s:
2017       dw2_asm_output_data (4, val1->v.val_int, NULL);
2018       break;
2019     case DW_OP_const8u:
2020       if (loc->dtprel)
2021         {
2022           gcc_assert (targetm.asm_out.output_dwarf_dtprel);
2023           targetm.asm_out.output_dwarf_dtprel (asm_out_file, 8,
2024                                                val1->v.val_addr);
2025           fputc ('\n', asm_out_file);
2026           break;
2027         }
2028       /* FALLTHRU */
2029     case DW_OP_const8s:
2030       gcc_assert (HOST_BITS_PER_WIDE_INT >= 64);
2031       dw2_asm_output_data (8, val1->v.val_int, NULL);
2032       break;
2033     case DW_OP_skip:
2034     case DW_OP_bra:
2035       {
2036         int offset;
2037
2038         gcc_assert (val1->val_class == dw_val_class_loc);
2039         offset = val1->v.val_loc->dw_loc_addr - (loc->dw_loc_addr + 3);
2040
2041         dw2_asm_output_data (2, offset, NULL);
2042       }
2043       break;
2044     case DW_OP_implicit_value:
2045       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
2046       switch (val2->val_class)
2047         {
2048         case dw_val_class_const:
2049           dw2_asm_output_data (val1->v.val_unsigned, val2->v.val_int, NULL);
2050           break;
2051         case dw_val_class_vec:
2052           {
2053             unsigned int elt_size = val2->v.val_vec.elt_size;
2054             unsigned int len = val2->v.val_vec.length;
2055             unsigned int i;
2056             unsigned char *p;
2057
2058             if (elt_size > sizeof (HOST_WIDE_INT))
2059               {
2060                 elt_size /= 2;
2061                 len *= 2;
2062               }
2063             for (i = 0, p = (unsigned char *) val2->v.val_vec.array;
2064                  i < len;
2065                  i++, p += elt_size)
2066               dw2_asm_output_data (elt_size, extract_int (p, elt_size),
2067                                    "fp or vector constant word %u", i);
2068           }
2069           break;
2070         case dw_val_class_const_double:
2071           {
2072             unsigned HOST_WIDE_INT first, second;
2073
2074             if (WORDS_BIG_ENDIAN)
2075               {
2076                 first = val2->v.val_double.high;
2077                 second = val2->v.val_double.low;
2078               }
2079             else
2080               {
2081                 first = val2->v.val_double.low;
2082                 second = val2->v.val_double.high;
2083               }
2084             dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR,
2085                                  first, NULL);
2086             dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR,
2087                                  second, NULL);
2088           }
2089           break;
2090         case dw_val_class_wide_int:
2091           {
2092             int i;
2093             int len = get_full_len (*val2->v.val_wide);
2094             if (WORDS_BIG_ENDIAN)
2095               for (i = len - 1; i >= 0; --i)
2096                 dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR,
2097                                      val2->v.val_wide->elt (i), NULL);
2098             else
2099               for (i = 0; i < len; ++i)
2100                 dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR,
2101                                      val2->v.val_wide->elt (i), NULL);
2102           }
2103           break;
2104         case dw_val_class_addr:
2105           gcc_assert (val1->v.val_unsigned == DWARF2_ADDR_SIZE);
2106           dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE, val2->v.val_addr, NULL);
2107           break;
2108         default:
2109           gcc_unreachable ();
2110         }
2111       break;
2112 #else
2113     case DW_OP_const2u:
2114     case DW_OP_const2s:
2115     case DW_OP_const4u:
2116     case DW_OP_const4s:
2117     case DW_OP_const8u:
2118     case DW_OP_const8s:
2119     case DW_OP_skip:
2120     case DW_OP_bra:
2121     case DW_OP_implicit_value:
2122       /* We currently don't make any attempt to make sure these are
2123          aligned properly like we do for the main unwind info, so
2124          don't support emitting things larger than a byte if we're
2125          only doing unwinding.  */
2126       gcc_unreachable ();
2127 #endif
2128     case DW_OP_const1u:
2129     case DW_OP_const1s:
2130       dw2_asm_output_data (1, val1->v.val_int, NULL);
2131       break;
2132     case DW_OP_constu:
2133       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
2134       break;
2135     case DW_OP_consts:
2136       dw2_asm_output_data_sleb128 (val1->v.val_int, NULL);
2137       break;
2138     case DW_OP_pick:
2139       dw2_asm_output_data (1, val1->v.val_int, NULL);
2140       break;
2141     case DW_OP_plus_uconst:
2142       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
2143       break;
2144     case DW_OP_breg0:
2145     case DW_OP_breg1:
2146     case DW_OP_breg2:
2147     case DW_OP_breg3:
2148     case DW_OP_breg4:
2149     case DW_OP_breg5:
2150     case DW_OP_breg6:
2151     case DW_OP_breg7:
2152     case DW_OP_breg8:
2153     case DW_OP_breg9:
2154     case DW_OP_breg10:
2155     case DW_OP_breg11:
2156     case DW_OP_breg12:
2157     case DW_OP_breg13:
2158     case DW_OP_breg14:
2159     case DW_OP_breg15:
2160     case DW_OP_breg16:
2161     case DW_OP_breg17:
2162     case DW_OP_breg18:
2163     case DW_OP_breg19:
2164     case DW_OP_breg20:
2165     case DW_OP_breg21:
2166     case DW_OP_breg22:
2167     case DW_OP_breg23:
2168     case DW_OP_breg24:
2169     case DW_OP_breg25:
2170     case DW_OP_breg26:
2171     case DW_OP_breg27:
2172     case DW_OP_breg28:
2173     case DW_OP_breg29:
2174     case DW_OP_breg30:
2175     case DW_OP_breg31:
2176       dw2_asm_output_data_sleb128 (val1->v.val_int, NULL);
2177       break;
2178     case DW_OP_regx:
2179       {
2180         unsigned r = val1->v.val_unsigned;
2181         if (for_eh_or_skip >= 0)
2182           r = DWARF2_FRAME_REG_OUT (r, for_eh_or_skip);
2183         gcc_assert (size_of_uleb128 (r) 
2184                     == size_of_uleb128 (val1->v.val_unsigned));
2185         dw2_asm_output_data_uleb128 (r, NULL);  
2186       }
2187       break;
2188     case DW_OP_fbreg:
2189       dw2_asm_output_data_sleb128 (val1->v.val_int, NULL);
2190       break;
2191     case DW_OP_bregx:
2192       {
2193         unsigned r = val1->v.val_unsigned;
2194         if (for_eh_or_skip >= 0)
2195           r = DWARF2_FRAME_REG_OUT (r, for_eh_or_skip);
2196         gcc_assert (size_of_uleb128 (r) 
2197                     == size_of_uleb128 (val1->v.val_unsigned));
2198         dw2_asm_output_data_uleb128 (r, NULL);  
2199         dw2_asm_output_data_sleb128 (val2->v.val_int, NULL);
2200       }
2201       break;
2202     case DW_OP_piece:
2203       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
2204       break;
2205     case DW_OP_bit_piece:
2206       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
2207       dw2_asm_output_data_uleb128 (val2->v.val_unsigned, NULL);
2208       break;
2209     case DW_OP_deref_size:
2210     case DW_OP_xderef_size:
2211       dw2_asm_output_data (1, val1->v.val_int, NULL);
2212       break;
2213
2214     case DW_OP_addr:
2215       if (loc->dtprel)
2216         {
2217           if (targetm.asm_out.output_dwarf_dtprel)
2218             {
2219               targetm.asm_out.output_dwarf_dtprel (asm_out_file,
2220                                                    DWARF2_ADDR_SIZE,
2221                                                    val1->v.val_addr);
2222               fputc ('\n', asm_out_file);
2223             }
2224           else
2225             gcc_unreachable ();
2226         }
2227       else
2228         {
2229 #ifdef DWARF2_DEBUGGING_INFO
2230           dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE, val1->v.val_addr, NULL);
2231 #else
2232           gcc_unreachable ();
2233 #endif
2234         }
2235       break;
2236
2237     case DW_OP_GNU_addr_index:
2238     case DW_OP_GNU_const_index:
2239       gcc_assert (loc->dw_loc_oprnd1.val_entry->index != NO_INDEX_ASSIGNED);
2240       dw2_asm_output_data_uleb128 (loc->dw_loc_oprnd1.val_entry->index,
2241                                    "(index into .debug_addr)");
2242       break;
2243
2244     case DW_OP_call2:
2245     case DW_OP_call4:
2246       {
2247         unsigned long die_offset
2248           = get_ref_die_offset (val1->v.val_die_ref.die);
2249         /* Make sure the offset has been computed and that we can encode it as
2250            an operand.  */
2251         gcc_assert (die_offset > 0
2252                     && die_offset <= (loc->dw_loc_opc == DW_OP_call2
2253                                      ? 0xffff
2254                                      : 0xffffffff));
2255         dw2_asm_output_data ((loc->dw_loc_opc == DW_OP_call2) ? 2 : 4,
2256                              die_offset, NULL);
2257       }
2258       break;
2259
2260     case DW_OP_call_ref:
2261     case DW_OP_GNU_variable_value:
2262       {
2263         char label[MAX_ARTIFICIAL_LABEL_BYTES
2264                    + HOST_BITS_PER_WIDE_INT / 2 + 2];
2265         gcc_assert (val1->val_class == dw_val_class_die_ref);
2266         get_ref_die_offset_label (label, val1->v.val_die_ref.die);
2267         dw2_asm_output_offset (DWARF_REF_SIZE, label, debug_info_section, NULL);
2268       }
2269       break;
2270
2271     case DW_OP_implicit_pointer:
2272     case DW_OP_GNU_implicit_pointer:
2273       {
2274         char label[MAX_ARTIFICIAL_LABEL_BYTES
2275                    + HOST_BITS_PER_WIDE_INT / 2 + 2];
2276         gcc_assert (val1->val_class == dw_val_class_die_ref);
2277         get_ref_die_offset_label (label, val1->v.val_die_ref.die);
2278         dw2_asm_output_offset (DWARF_REF_SIZE, label, debug_info_section, NULL);
2279         dw2_asm_output_data_sleb128 (val2->v.val_int, NULL);
2280       }
2281       break;
2282
2283     case DW_OP_entry_value:
2284     case DW_OP_GNU_entry_value:
2285       dw2_asm_output_data_uleb128 (size_of_locs (val1->v.val_loc), NULL);
2286       output_loc_sequence (val1->v.val_loc, for_eh_or_skip);
2287       break;
2288
2289     case DW_OP_const_type:
2290     case DW_OP_GNU_const_type:
2291       {
2292         unsigned long o = get_base_type_offset (val1->v.val_die_ref.die), l;
2293         gcc_assert (o);
2294         dw2_asm_output_data_uleb128 (o, NULL);
2295         switch (val2->val_class)
2296           {
2297           case dw_val_class_const:
2298             l = HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR;
2299             dw2_asm_output_data (1, l, NULL);
2300             dw2_asm_output_data (l, val2->v.val_int, NULL);
2301             break;
2302           case dw_val_class_vec:
2303             {
2304               unsigned int elt_size = val2->v.val_vec.elt_size;
2305               unsigned int len = val2->v.val_vec.length;
2306               unsigned int i;
2307               unsigned char *p;
2308
2309               l = len * elt_size;
2310               dw2_asm_output_data (1, l, NULL);
2311               if (elt_size > sizeof (HOST_WIDE_INT))
2312                 {
2313                   elt_size /= 2;
2314                   len *= 2;
2315                 }
2316               for (i = 0, p = (unsigned char *) val2->v.val_vec.array;
2317                    i < len;
2318                    i++, p += elt_size)
2319                 dw2_asm_output_data (elt_size, extract_int (p, elt_size),
2320                                      "fp or vector constant word %u", i);
2321             }
2322             break;
2323           case dw_val_class_const_double:
2324             {
2325               unsigned HOST_WIDE_INT first, second;
2326               l = HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR;
2327
2328               dw2_asm_output_data (1, 2 * l, NULL);
2329               if (WORDS_BIG_ENDIAN)
2330                 {
2331                   first = val2->v.val_double.high;
2332                   second = val2->v.val_double.low;
2333                 }
2334               else
2335                 {
2336                   first = val2->v.val_double.low;
2337                   second = val2->v.val_double.high;
2338                 }
2339               dw2_asm_output_data (l, first, NULL);
2340               dw2_asm_output_data (l, second, NULL);
2341             }
2342             break;
2343           case dw_val_class_wide_int:
2344             {
2345               int i;
2346               int len = get_full_len (*val2->v.val_wide);
2347               l = HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR;
2348
2349               dw2_asm_output_data (1, len * l, NULL);
2350               if (WORDS_BIG_ENDIAN)
2351                 for (i = len - 1; i >= 0; --i)
2352                   dw2_asm_output_data (l, val2->v.val_wide->elt (i), NULL);
2353               else
2354                 for (i = 0; i < len; ++i)
2355                   dw2_asm_output_data (l, val2->v.val_wide->elt (i), NULL);
2356             }
2357             break;
2358           default:
2359             gcc_unreachable ();
2360           }
2361       }
2362       break;
2363     case DW_OP_regval_type:
2364     case DW_OP_GNU_regval_type:
2365       {
2366         unsigned r = val1->v.val_unsigned;
2367         unsigned long o = get_base_type_offset (val2->v.val_die_ref.die);
2368         gcc_assert (o);
2369         if (for_eh_or_skip >= 0)
2370           {
2371             r = DWARF2_FRAME_REG_OUT (r, for_eh_or_skip);
2372             gcc_assert (size_of_uleb128 (r)
2373                         == size_of_uleb128 (val1->v.val_unsigned));
2374           }
2375         dw2_asm_output_data_uleb128 (r, NULL);
2376         dw2_asm_output_data_uleb128 (o, NULL);
2377       }
2378       break;
2379     case DW_OP_deref_type:
2380     case DW_OP_GNU_deref_type:
2381       {
2382         unsigned long o = get_base_type_offset (val2->v.val_die_ref.die);
2383         gcc_assert (o);
2384         dw2_asm_output_data (1, val1->v.val_int, NULL);
2385         dw2_asm_output_data_uleb128 (o, NULL);
2386       }
2387       break;
2388     case DW_OP_convert:
2389     case DW_OP_reinterpret:
2390     case DW_OP_GNU_convert:
2391     case DW_OP_GNU_reinterpret:
2392       if (loc->dw_loc_oprnd1.val_class == dw_val_class_unsigned_const)
2393         dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
2394       else
2395         {
2396           unsigned long o = get_base_type_offset (val1->v.val_die_ref.die);
2397           gcc_assert (o);
2398           dw2_asm_output_data_uleb128 (o, NULL);
2399         }
2400       break;
2401
2402     case DW_OP_GNU_parameter_ref:
2403       {
2404         unsigned long o;
2405         gcc_assert (val1->val_class == dw_val_class_die_ref);
2406         o = get_ref_die_offset (val1->v.val_die_ref.die);
2407         dw2_asm_output_data (4, o, NULL);
2408       }
2409       break;
2410
2411     default:
2412       /* Other codes have no operands.  */
2413       break;
2414     }
2415 }
2416
2417 /* Output a sequence of location operations.  
2418    The for_eh_or_skip parameter controls whether register numbers are
2419    converted using DWARF2_FRAME_REG_OUT, which is needed in the case that
2420    hard reg numbers have been processed via DWARF_FRAME_REGNUM (i.e. for unwind
2421    info).  This should be suppressed for the cases that have not been converted
2422    (i.e. symbolic debug info), by setting the parameter < 0.  See PR47324.  */
2423
2424 void
2425 output_loc_sequence (dw_loc_descr_ref loc, int for_eh_or_skip)
2426 {
2427   for (; loc != NULL; loc = loc->dw_loc_next)
2428     {
2429       enum dwarf_location_atom opc = loc->dw_loc_opc;
2430       /* Output the opcode.  */
2431       if (for_eh_or_skip >= 0 
2432           && opc >= DW_OP_breg0 && opc <= DW_OP_breg31)
2433         {
2434           unsigned r = (opc - DW_OP_breg0);
2435           r = DWARF2_FRAME_REG_OUT (r, for_eh_or_skip);
2436           gcc_assert (r <= 31);
2437           opc = (enum dwarf_location_atom) (DW_OP_breg0 + r);
2438         }
2439       else if (for_eh_or_skip >= 0 
2440                && opc >= DW_OP_reg0 && opc <= DW_OP_reg31)
2441         {
2442           unsigned r = (opc - DW_OP_reg0);
2443           r = DWARF2_FRAME_REG_OUT (r, for_eh_or_skip);
2444           gcc_assert (r <= 31);
2445           opc = (enum dwarf_location_atom) (DW_OP_reg0 + r);
2446         }
2447
2448       dw2_asm_output_data (1, opc,
2449                              "%s", dwarf_stack_op_name (opc));
2450
2451       /* Output the operand(s) (if any).  */
2452       output_loc_operands (loc, for_eh_or_skip);
2453     }
2454 }
2455
2456 /* Output location description stack opcode's operands (if any).
2457    The output is single bytes on a line, suitable for .cfi_escape.  */
2458
2459 static void
2460 output_loc_operands_raw (dw_loc_descr_ref loc)
2461 {
2462   dw_val_ref val1 = &loc->dw_loc_oprnd1;
2463   dw_val_ref val2 = &loc->dw_loc_oprnd2;
2464
2465   switch (loc->dw_loc_opc)
2466     {
2467     case DW_OP_addr:
2468     case DW_OP_GNU_addr_index:
2469     case DW_OP_GNU_const_index:
2470     case DW_OP_implicit_value:
2471       /* We cannot output addresses in .cfi_escape, only bytes.  */
2472       gcc_unreachable ();
2473
2474     case DW_OP_const1u:
2475     case DW_OP_const1s:
2476     case DW_OP_pick:
2477     case DW_OP_deref_size:
2478     case DW_OP_xderef_size:
2479       fputc (',', asm_out_file);
2480       dw2_asm_output_data_raw (1, val1->v.val_int);
2481       break;
2482
2483     case DW_OP_const2u:
2484     case DW_OP_const2s:
2485       fputc (',', asm_out_file);
2486       dw2_asm_output_data_raw (2, val1->v.val_int);
2487       break;
2488
2489     case DW_OP_const4u:
2490     case DW_OP_const4s:
2491       fputc (',', asm_out_file);
2492       dw2_asm_output_data_raw (4, val1->v.val_int);
2493       break;
2494
2495     case DW_OP_const8u:
2496     case DW_OP_const8s:
2497       gcc_assert (HOST_BITS_PER_WIDE_INT >= 64);
2498       fputc (',', asm_out_file);
2499       dw2_asm_output_data_raw (8, val1->v.val_int);
2500       break;
2501
2502     case DW_OP_skip:
2503     case DW_OP_bra:
2504       {
2505         int offset;
2506
2507         gcc_assert (val1->val_class == dw_val_class_loc);
2508         offset = val1->v.val_loc->dw_loc_addr - (loc->dw_loc_addr + 3);
2509
2510         fputc (',', asm_out_file);
2511         dw2_asm_output_data_raw (2, offset);
2512       }
2513       break;
2514
2515     case DW_OP_regx:
2516       {
2517         unsigned r = DWARF2_FRAME_REG_OUT (val1->v.val_unsigned, 1);
2518         gcc_assert (size_of_uleb128 (r) 
2519                     == size_of_uleb128 (val1->v.val_unsigned));
2520         fputc (',', asm_out_file);
2521         dw2_asm_output_data_uleb128_raw (r);
2522       }
2523       break;
2524       
2525     case DW_OP_constu:
2526     case DW_OP_plus_uconst:
2527     case DW_OP_piece:
2528       fputc (',', asm_out_file);
2529       dw2_asm_output_data_uleb128_raw (val1->v.val_unsigned);
2530       break;
2531
2532     case DW_OP_bit_piece:
2533       fputc (',', asm_out_file);
2534       dw2_asm_output_data_uleb128_raw (val1->v.val_unsigned);
2535       dw2_asm_output_data_uleb128_raw (val2->v.val_unsigned);
2536       break;
2537
2538     case DW_OP_consts:
2539     case DW_OP_breg0:
2540     case DW_OP_breg1:
2541     case DW_OP_breg2:
2542     case DW_OP_breg3:
2543     case DW_OP_breg4:
2544     case DW_OP_breg5:
2545     case DW_OP_breg6:
2546     case DW_OP_breg7:
2547     case DW_OP_breg8:
2548     case DW_OP_breg9:
2549     case DW_OP_breg10:
2550     case DW_OP_breg11:
2551     case DW_OP_breg12:
2552     case DW_OP_breg13:
2553     case DW_OP_breg14:
2554     case DW_OP_breg15:
2555     case DW_OP_breg16:
2556     case DW_OP_breg17:
2557     case DW_OP_breg18:
2558     case DW_OP_breg19:
2559     case DW_OP_breg20:
2560     case DW_OP_breg21:
2561     case DW_OP_breg22:
2562     case DW_OP_breg23:
2563     case DW_OP_breg24:
2564     case DW_OP_breg25:
2565     case DW_OP_breg26:
2566     case DW_OP_breg27:
2567     case DW_OP_breg28:
2568     case DW_OP_breg29:
2569     case DW_OP_breg30:
2570     case DW_OP_breg31:
2571     case DW_OP_fbreg:
2572       fputc (',', asm_out_file);
2573       dw2_asm_output_data_sleb128_raw (val1->v.val_int);
2574       break;
2575
2576     case DW_OP_bregx:
2577       {
2578         unsigned r = DWARF2_FRAME_REG_OUT (val1->v.val_unsigned, 1);
2579         gcc_assert (size_of_uleb128 (r) 
2580                     == size_of_uleb128 (val1->v.val_unsigned));
2581         fputc (',', asm_out_file);
2582         dw2_asm_output_data_uleb128_raw (r);
2583         fputc (',', asm_out_file);
2584         dw2_asm_output_data_sleb128_raw (val2->v.val_int);
2585       }
2586       break;
2587
2588     case DW_OP_implicit_pointer:
2589     case DW_OP_entry_value:
2590     case DW_OP_const_type:
2591     case DW_OP_regval_type:
2592     case DW_OP_deref_type:
2593     case DW_OP_convert:
2594     case DW_OP_reinterpret:
2595     case DW_OP_GNU_implicit_pointer:
2596     case DW_OP_GNU_entry_value:
2597     case DW_OP_GNU_const_type:
2598     case DW_OP_GNU_regval_type:
2599     case DW_OP_GNU_deref_type:
2600     case DW_OP_GNU_convert:
2601     case DW_OP_GNU_reinterpret:
2602     case DW_OP_GNU_parameter_ref:
2603       gcc_unreachable ();
2604       break;
2605
2606     default:
2607       /* Other codes have no operands.  */
2608       break;
2609     }
2610 }
2611
2612 void
2613 output_loc_sequence_raw (dw_loc_descr_ref loc)
2614 {
2615   while (1)
2616     {
2617       enum dwarf_location_atom opc = loc->dw_loc_opc;
2618       /* Output the opcode.  */
2619       if (opc >= DW_OP_breg0 && opc <= DW_OP_breg31)
2620         {
2621           unsigned r = (opc - DW_OP_breg0);
2622           r = DWARF2_FRAME_REG_OUT (r, 1);
2623           gcc_assert (r <= 31);
2624           opc = (enum dwarf_location_atom) (DW_OP_breg0 + r);
2625         }
2626       else if (opc >= DW_OP_reg0 && opc <= DW_OP_reg31)
2627         {
2628           unsigned r = (opc - DW_OP_reg0);
2629           r = DWARF2_FRAME_REG_OUT (r, 1);
2630           gcc_assert (r <= 31);
2631           opc = (enum dwarf_location_atom) (DW_OP_reg0 + r);
2632         }
2633       /* Output the opcode.  */
2634       fprintf (asm_out_file, "%#x", opc);
2635       output_loc_operands_raw (loc);
2636
2637       if (!loc->dw_loc_next)
2638         break;
2639       loc = loc->dw_loc_next;
2640
2641       fputc (',', asm_out_file);
2642     }
2643 }
2644
2645 /* This function builds a dwarf location descriptor sequence from a
2646    dw_cfa_location, adding the given OFFSET to the result of the
2647    expression.  */
2648
2649 struct dw_loc_descr_node *
2650 build_cfa_loc (dw_cfa_location *cfa, poly_int64 offset)
2651 {
2652   struct dw_loc_descr_node *head, *tmp;
2653
2654   offset += cfa->offset;
2655
2656   if (cfa->indirect)
2657     {
2658       head = new_reg_loc_descr (cfa->reg, cfa->base_offset);
2659       head->dw_loc_oprnd1.val_class = dw_val_class_const;
2660       head->dw_loc_oprnd1.val_entry = NULL;
2661       tmp = new_loc_descr (DW_OP_deref, 0, 0);
2662       add_loc_descr (&head, tmp);
2663       loc_descr_plus_const (&head, offset);
2664     }
2665   else
2666     head = new_reg_loc_descr (cfa->reg, offset);
2667
2668   return head;
2669 }
2670
2671 /* This function builds a dwarf location descriptor sequence for
2672    the address at OFFSET from the CFA when stack is aligned to
2673    ALIGNMENT byte.  */
2674
2675 struct dw_loc_descr_node *
2676 build_cfa_aligned_loc (dw_cfa_location *cfa,
2677                        poly_int64 offset, HOST_WIDE_INT alignment)
2678 {
2679   struct dw_loc_descr_node *head;
2680   unsigned int dwarf_fp
2681     = DWARF_FRAME_REGNUM (HARD_FRAME_POINTER_REGNUM);
2682
2683   /* When CFA is defined as FP+OFFSET, emulate stack alignment.  */
2684   if (cfa->reg == HARD_FRAME_POINTER_REGNUM && cfa->indirect == 0)
2685     {
2686       head = new_reg_loc_descr (dwarf_fp, 0);
2687       add_loc_descr (&head, int_loc_descriptor (alignment));
2688       add_loc_descr (&head, new_loc_descr (DW_OP_and, 0, 0));
2689       loc_descr_plus_const (&head, offset);
2690     }
2691   else
2692     head = new_reg_loc_descr (dwarf_fp, offset);
2693   return head;
2694 }
2695 \f
2696 /* And now, the support for symbolic debugging information.  */
2697
2698 /* .debug_str support.  */
2699
2700 static void dwarf2out_init (const char *);
2701 static void dwarf2out_finish (const char *);
2702 static void dwarf2out_early_finish (const char *);
2703 static void dwarf2out_assembly_start (void);
2704 static void dwarf2out_define (unsigned int, const char *);
2705 static void dwarf2out_undef (unsigned int, const char *);
2706 static void dwarf2out_start_source_file (unsigned, const char *);
2707 static void dwarf2out_end_source_file (unsigned);
2708 static void dwarf2out_function_decl (tree);
2709 static void dwarf2out_begin_block (unsigned, unsigned);
2710 static void dwarf2out_end_block (unsigned, unsigned);
2711 static bool dwarf2out_ignore_block (const_tree);
2712 static void dwarf2out_early_global_decl (tree);
2713 static void dwarf2out_late_global_decl (tree);
2714 static void dwarf2out_type_decl (tree, int);
2715 static void dwarf2out_imported_module_or_decl (tree, tree, tree, bool, bool);
2716 static void dwarf2out_imported_module_or_decl_1 (tree, tree, tree,
2717                                                  dw_die_ref);
2718 static void dwarf2out_abstract_function (tree);
2719 static void dwarf2out_var_location (rtx_insn *);
2720 static void dwarf2out_size_function (tree);
2721 static void dwarf2out_begin_function (tree);
2722 static void dwarf2out_end_function (unsigned int);
2723 static void dwarf2out_register_main_translation_unit (tree unit);
2724 static void dwarf2out_set_name (tree, tree);
2725 static void dwarf2out_register_external_die (tree decl, const char *sym,
2726                                              unsigned HOST_WIDE_INT off);
2727 static bool dwarf2out_die_ref_for_decl (tree decl, const char **sym,
2728                                         unsigned HOST_WIDE_INT *off);
2729
2730 /* The debug hooks structure.  */
2731
2732 const struct gcc_debug_hooks dwarf2_debug_hooks =
2733 {
2734   dwarf2out_init,
2735   dwarf2out_finish,
2736   dwarf2out_early_finish,
2737   dwarf2out_assembly_start,
2738   dwarf2out_define,
2739   dwarf2out_undef,
2740   dwarf2out_start_source_file,
2741   dwarf2out_end_source_file,
2742   dwarf2out_begin_block,
2743   dwarf2out_end_block,
2744   dwarf2out_ignore_block,
2745   dwarf2out_source_line,
2746   dwarf2out_begin_prologue,
2747 #if VMS_DEBUGGING_INFO
2748   dwarf2out_vms_end_prologue,
2749   dwarf2out_vms_begin_epilogue,
2750 #else
2751   debug_nothing_int_charstar,
2752   debug_nothing_int_charstar,
2753 #endif
2754   dwarf2out_end_epilogue,
2755   dwarf2out_begin_function,
2756   dwarf2out_end_function,       /* end_function */
2757   dwarf2out_register_main_translation_unit,
2758   dwarf2out_function_decl,      /* function_decl */
2759   dwarf2out_early_global_decl,
2760   dwarf2out_late_global_decl,
2761   dwarf2out_type_decl,          /* type_decl */
2762   dwarf2out_imported_module_or_decl,
2763   dwarf2out_die_ref_for_decl,
2764   dwarf2out_register_external_die,
2765   debug_nothing_tree,           /* deferred_inline_function */
2766   /* The DWARF 2 backend tries to reduce debugging bloat by not
2767      emitting the abstract description of inline functions until
2768      something tries to reference them.  */
2769   dwarf2out_abstract_function,  /* outlining_inline_function */
2770   debug_nothing_rtx_code_label, /* label */
2771   debug_nothing_int,            /* handle_pch */
2772   dwarf2out_var_location,
2773   debug_nothing_tree,           /* inline_entry */
2774   dwarf2out_size_function,      /* size_function */
2775   dwarf2out_switch_text_section,
2776   dwarf2out_set_name,
2777   1,                            /* start_end_main_source_file */
2778   TYPE_SYMTAB_IS_DIE            /* tree_type_symtab_field */
2779 };
2780
2781 const struct gcc_debug_hooks dwarf2_lineno_debug_hooks =
2782 {
2783   dwarf2out_init,
2784   debug_nothing_charstar,
2785   debug_nothing_charstar,
2786   dwarf2out_assembly_start,
2787   debug_nothing_int_charstar,
2788   debug_nothing_int_charstar,
2789   debug_nothing_int_charstar,
2790   debug_nothing_int,
2791   debug_nothing_int_int,                 /* begin_block */
2792   debug_nothing_int_int,                 /* end_block */
2793   debug_true_const_tree,                 /* ignore_block */
2794   dwarf2out_source_line,                 /* source_line */
2795   debug_nothing_int_int_charstar,        /* begin_prologue */
2796   debug_nothing_int_charstar,            /* end_prologue */
2797   debug_nothing_int_charstar,            /* begin_epilogue */
2798   debug_nothing_int_charstar,            /* end_epilogue */
2799   debug_nothing_tree,                    /* begin_function */
2800   debug_nothing_int,                     /* end_function */
2801   debug_nothing_tree,                    /* register_main_translation_unit */
2802   debug_nothing_tree,                    /* function_decl */
2803   debug_nothing_tree,                    /* early_global_decl */
2804   debug_nothing_tree,                    /* late_global_decl */
2805   debug_nothing_tree_int,                /* type_decl */
2806   debug_nothing_tree_tree_tree_bool_bool,/* imported_module_or_decl */
2807   debug_false_tree_charstarstar_uhwistar,/* die_ref_for_decl */
2808   debug_nothing_tree_charstar_uhwi,      /* register_external_die */
2809   debug_nothing_tree,                    /* deferred_inline_function */
2810   debug_nothing_tree,                    /* outlining_inline_function */
2811   debug_nothing_rtx_code_label,          /* label */
2812   debug_nothing_int,                     /* handle_pch */
2813   debug_nothing_rtx_insn,                /* var_location */
2814   debug_nothing_tree,                    /* inline_entry */
2815   debug_nothing_tree,                    /* size_function */
2816   debug_nothing_void,                    /* switch_text_section */
2817   debug_nothing_tree_tree,               /* set_name */
2818   0,                                     /* start_end_main_source_file */
2819   TYPE_SYMTAB_IS_ADDRESS                 /* tree_type_symtab_field */
2820 };
2821 \f
2822 /* NOTE: In the comments in this file, many references are made to
2823    "Debugging Information Entries".  This term is abbreviated as `DIE'
2824    throughout the remainder of this file.  */
2825
2826 /* An internal representation of the DWARF output is built, and then
2827    walked to generate the DWARF debugging info.  The walk of the internal
2828    representation is done after the entire program has been compiled.
2829    The types below are used to describe the internal representation.  */
2830
2831 /* Whether to put type DIEs into their own section .debug_types instead
2832    of making them part of the .debug_info section.  Only supported for
2833    Dwarf V4 or higher and the user didn't disable them through
2834    -fno-debug-types-section.  It is more efficient to put them in a
2835    separate comdat sections since the linker will then be able to
2836    remove duplicates.  But not all tools support .debug_types sections
2837    yet.  For Dwarf V5 or higher .debug_types doesn't exist any more,
2838    it is DW_UT_type unit type in .debug_info section.  */
2839
2840 #define use_debug_types (dwarf_version >= 4 && flag_debug_types_section)
2841
2842 /* Various DIE's use offsets relative to the beginning of the
2843    .debug_info section to refer to each other.  */
2844
2845 typedef long int dw_offset;
2846
2847 struct comdat_type_node;
2848
2849 /* The entries in the line_info table more-or-less mirror the opcodes
2850    that are used in the real dwarf line table.  Arrays of these entries
2851    are collected per section when DWARF2_ASM_LINE_DEBUG_INFO is not
2852    supported.  */
2853
2854 enum dw_line_info_opcode {
2855   /* Emit DW_LNE_set_address; the operand is the label index.  */
2856   LI_set_address,
2857
2858   /* Emit a row to the matrix with the given line.  This may be done
2859      via any combination of DW_LNS_copy, DW_LNS_advance_line, and
2860      special opcodes.  */
2861   LI_set_line,
2862
2863   /* Emit a DW_LNS_set_file.  */
2864   LI_set_file,
2865
2866   /* Emit a DW_LNS_set_column.  */
2867   LI_set_column,
2868
2869   /* Emit a DW_LNS_negate_stmt; the operand is ignored.  */
2870   LI_negate_stmt,
2871
2872   /* Emit a DW_LNS_set_prologue_end/epilogue_begin; the operand is ignored.  */
2873   LI_set_prologue_end,
2874   LI_set_epilogue_begin,
2875
2876   /* Emit a DW_LNE_set_discriminator.  */
2877   LI_set_discriminator
2878 };
2879
2880 typedef struct GTY(()) dw_line_info_struct {
2881   enum dw_line_info_opcode opcode;
2882   unsigned int val;
2883 } dw_line_info_entry;
2884
2885
2886 struct GTY(()) dw_line_info_table {
2887   /* The label that marks the end of this section.  */
2888   const char *end_label;
2889
2890   /* The values for the last row of the matrix, as collected in the table.
2891      These are used to minimize the changes to the next row.  */
2892   unsigned int file_num;
2893   unsigned int line_num;
2894   unsigned int column_num;
2895   int discrim_num;
2896   bool is_stmt;
2897   bool in_use;
2898
2899   vec<dw_line_info_entry, va_gc> *entries;
2900 };
2901
2902
2903 /* Each DIE attribute has a field specifying the attribute kind,
2904    a link to the next attribute in the chain, and an attribute value.
2905    Attributes are typically linked below the DIE they modify.  */
2906
2907 typedef struct GTY(()) dw_attr_struct {
2908   enum dwarf_attribute dw_attr;
2909   dw_val_node dw_attr_val;
2910 }
2911 dw_attr_node;
2912
2913
2914 /* The Debugging Information Entry (DIE) structure.  DIEs form a tree.
2915    The children of each node form a circular list linked by
2916    die_sib.  die_child points to the node *before* the "first" child node.  */
2917
2918 typedef struct GTY((chain_circular ("%h.die_sib"), for_user)) die_struct {
2919   union die_symbol_or_type_node
2920     {
2921       const char * GTY ((tag ("0"))) die_symbol;
2922       comdat_type_node *GTY ((tag ("1"))) die_type_node;
2923     }
2924   GTY ((desc ("%0.comdat_type_p"))) die_id;
2925   vec<dw_attr_node, va_gc> *die_attr;
2926   dw_die_ref die_parent;
2927   dw_die_ref die_child;
2928   dw_die_ref die_sib;
2929   dw_die_ref die_definition; /* ref from a specification to its definition */
2930   dw_offset die_offset;
2931   unsigned long die_abbrev;
2932   int die_mark;
2933   unsigned int decl_id;
2934   enum dwarf_tag die_tag;
2935   /* Die is used and must not be pruned as unused.  */
2936   BOOL_BITFIELD die_perennial_p : 1;
2937   BOOL_BITFIELD comdat_type_p : 1; /* DIE has a type signature */
2938   /* For an external ref to die_symbol if die_offset contains an extra
2939      offset to that symbol.  */
2940   BOOL_BITFIELD with_offset : 1;
2941   /* Whether this DIE was removed from the DIE tree, for example via
2942      prune_unused_types.  We don't consider those present from the
2943      DIE lookup routines.  */
2944   BOOL_BITFIELD removed : 1;
2945   /* Lots of spare bits.  */
2946 }
2947 die_node;
2948
2949 /* Set to TRUE while dwarf2out_early_global_decl is running.  */
2950 static bool early_dwarf;
2951 static bool early_dwarf_finished;
2952 struct set_early_dwarf {
2953   bool saved;
2954   set_early_dwarf () : saved(early_dwarf)
2955     {
2956       gcc_assert (! early_dwarf_finished);
2957       early_dwarf = true;
2958     }
2959   ~set_early_dwarf () { early_dwarf = saved; }
2960 };
2961
2962 /* Evaluate 'expr' while 'c' is set to each child of DIE in order.  */
2963 #define FOR_EACH_CHILD(die, c, expr) do {       \
2964   c = die->die_child;                           \
2965   if (c) do {                                   \
2966     c = c->die_sib;                             \
2967     expr;                                       \
2968   } while (c != die->die_child);                \
2969 } while (0)
2970
2971 /* The pubname structure */
2972
2973 typedef struct GTY(()) pubname_struct {
2974   dw_die_ref die;
2975   const char *name;
2976 }
2977 pubname_entry;
2978
2979
2980 struct GTY(()) dw_ranges {
2981   const char *label;
2982   /* If this is positive, it's a block number, otherwise it's a
2983      bitwise-negated index into dw_ranges_by_label.  */
2984   int num;
2985   /* Index for the range list for DW_FORM_rnglistx.  */
2986   unsigned int idx : 31;
2987   /* True if this range might be possibly in a different section
2988      from previous entry.  */
2989   unsigned int maybe_new_sec : 1;
2990 };
2991
2992 /* A structure to hold a macinfo entry.  */
2993
2994 typedef struct GTY(()) macinfo_struct {
2995   unsigned char code;
2996   unsigned HOST_WIDE_INT lineno;
2997   const char *info;
2998 }
2999 macinfo_entry;
3000
3001
3002 struct GTY(()) dw_ranges_by_label {
3003   const char *begin;
3004   const char *end;
3005 };
3006
3007 /* The comdat type node structure.  */
3008 struct GTY(()) comdat_type_node
3009 {
3010   dw_die_ref root_die;
3011   dw_die_ref type_die;
3012   dw_die_ref skeleton_die;
3013   char signature[DWARF_TYPE_SIGNATURE_SIZE];
3014   comdat_type_node *next;
3015 };
3016
3017 /* A list of DIEs for which we can't determine ancestry (parent_die
3018    field) just yet.  Later in dwarf2out_finish we will fill in the
3019    missing bits.  */
3020 typedef struct GTY(()) limbo_die_struct {
3021   dw_die_ref die;
3022   /* The tree for which this DIE was created.  We use this to
3023      determine ancestry later.  */
3024   tree created_for;
3025   struct limbo_die_struct *next;
3026 }
3027 limbo_die_node;
3028
3029 typedef struct skeleton_chain_struct
3030 {
3031   dw_die_ref old_die;
3032   dw_die_ref new_die;
3033   struct skeleton_chain_struct *parent;
3034 }
3035 skeleton_chain_node;
3036
3037 /* Define a macro which returns nonzero for a TYPE_DECL which was
3038    implicitly generated for a type.
3039
3040    Note that, unlike the C front-end (which generates a NULL named
3041    TYPE_DECL node for each complete tagged type, each array type,
3042    and each function type node created) the C++ front-end generates
3043    a _named_ TYPE_DECL node for each tagged type node created.
3044    These TYPE_DECLs have DECL_ARTIFICIAL set, so we know not to
3045    generate a DW_TAG_typedef DIE for them.  Likewise with the Ada
3046    front-end, but for each type, tagged or not.  */
3047
3048 #define TYPE_DECL_IS_STUB(decl)                         \
3049   (DECL_NAME (decl) == NULL_TREE                        \
3050    || (DECL_ARTIFICIAL (decl)                           \
3051        && ((decl == TYPE_STUB_DECL (TREE_TYPE (decl)))  \
3052            /* This is necessary for stub decls that     \
3053               appear in nested inline functions.  */    \
3054            || (DECL_ABSTRACT_ORIGIN (decl) != NULL_TREE \
3055                && (decl_ultimate_origin (decl)          \
3056                    == TYPE_STUB_DECL (TREE_TYPE (decl)))))))
3057
3058 /* Information concerning the compilation unit's programming
3059    language, and compiler version.  */
3060
3061 /* Fixed size portion of the DWARF compilation unit header.  */
3062 #define DWARF_COMPILE_UNIT_HEADER_SIZE \
3063   (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE                        \
3064    + (dwarf_version >= 5 ? 4 : 3))
3065
3066 /* Fixed size portion of the DWARF comdat type unit header.  */
3067 #define DWARF_COMDAT_TYPE_UNIT_HEADER_SIZE \
3068   (DWARF_COMPILE_UNIT_HEADER_SIZE                                       \
3069    + DWARF_TYPE_SIGNATURE_SIZE + DWARF_OFFSET_SIZE)
3070
3071 /* Fixed size portion of the DWARF skeleton compilation unit header.  */
3072 #define DWARF_COMPILE_UNIT_SKELETON_HEADER_SIZE \
3073   (DWARF_COMPILE_UNIT_HEADER_SIZE + (dwarf_version >= 5 ? 8 : 0))
3074
3075 /* Fixed size portion of public names info.  */
3076 #define DWARF_PUBNAMES_HEADER_SIZE (2 * DWARF_OFFSET_SIZE + 2)
3077
3078 /* Fixed size portion of the address range info.  */
3079 #define DWARF_ARANGES_HEADER_SIZE                                       \
3080   (DWARF_ROUND (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 4,      \
3081                 DWARF2_ADDR_SIZE * 2)                                   \
3082    - DWARF_INITIAL_LENGTH_SIZE)
3083
3084 /* Size of padding portion in the address range info.  It must be
3085    aligned to twice the pointer size.  */
3086 #define DWARF_ARANGES_PAD_SIZE \
3087   (DWARF_ROUND (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 4, \
3088                 DWARF2_ADDR_SIZE * 2)                              \
3089    - (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 4))
3090
3091 /* Use assembler line directives if available.  */
3092 #ifndef DWARF2_ASM_LINE_DEBUG_INFO
3093 #ifdef HAVE_AS_DWARF2_DEBUG_LINE
3094 #define DWARF2_ASM_LINE_DEBUG_INFO 1
3095 #else
3096 #define DWARF2_ASM_LINE_DEBUG_INFO 0
3097 #endif
3098 #endif
3099
3100 /* Minimum line offset in a special line info. opcode.
3101    This value was chosen to give a reasonable range of values.  */
3102 #define DWARF_LINE_BASE  -10
3103
3104 /* First special line opcode - leave room for the standard opcodes.  */
3105 #define DWARF_LINE_OPCODE_BASE  ((int)DW_LNS_set_isa + 1)
3106
3107 /* Range of line offsets in a special line info. opcode.  */
3108 #define DWARF_LINE_RANGE  (254-DWARF_LINE_OPCODE_BASE+1)
3109
3110 /* Flag that indicates the initial value of the is_stmt_start flag.
3111    In the present implementation, we do not mark any lines as
3112    the beginning of a source statement, because that information
3113    is not made available by the GCC front-end.  */
3114 #define DWARF_LINE_DEFAULT_IS_STMT_START 1
3115
3116 /* Maximum number of operations per instruction bundle.  */
3117 #ifndef DWARF_LINE_DEFAULT_MAX_OPS_PER_INSN
3118 #define DWARF_LINE_DEFAULT_MAX_OPS_PER_INSN 1
3119 #endif
3120
3121 /* This location is used by calc_die_sizes() to keep track
3122    the offset of each DIE within the .debug_info section.  */
3123 static unsigned long next_die_offset;
3124
3125 /* Record the root of the DIE's built for the current compilation unit.  */
3126 static GTY(()) dw_die_ref single_comp_unit_die;
3127
3128 /* A list of type DIEs that have been separated into comdat sections.  */
3129 static GTY(()) comdat_type_node *comdat_type_list;
3130
3131 /* A list of CU DIEs that have been separated.  */
3132 static GTY(()) limbo_die_node *cu_die_list;
3133
3134 /* A list of DIEs with a NULL parent waiting to be relocated.  */
3135 static GTY(()) limbo_die_node *limbo_die_list;
3136
3137 /* A list of DIEs for which we may have to generate
3138    DW_AT_{,MIPS_}linkage_name once their DECL_ASSEMBLER_NAMEs are set.  */
3139 static GTY(()) limbo_die_node *deferred_asm_name;
3140
3141 struct dwarf_file_hasher : ggc_ptr_hash<dwarf_file_data>
3142 {
3143   typedef const char *compare_type;
3144
3145   static hashval_t hash (dwarf_file_data *);
3146   static bool equal (dwarf_file_data *, const char *);
3147 };
3148
3149 /* Filenames referenced by this compilation unit.  */
3150 static GTY(()) hash_table<dwarf_file_hasher> *file_table;
3151
3152 struct decl_die_hasher : ggc_ptr_hash<die_node>
3153 {
3154   typedef tree compare_type;
3155
3156   static hashval_t hash (die_node *);
3157   static bool equal (die_node *, tree);
3158 };
3159 /* A hash table of references to DIE's that describe declarations.
3160    The key is a DECL_UID() which is a unique number identifying each decl.  */
3161 static GTY (()) hash_table<decl_die_hasher> *decl_die_table;
3162
3163 struct GTY ((for_user)) variable_value_struct {
3164   unsigned int decl_id;
3165   vec<dw_die_ref, va_gc> *dies;
3166 };
3167
3168 struct variable_value_hasher : ggc_ptr_hash<variable_value_struct>
3169 {
3170   typedef tree compare_type;
3171
3172   static hashval_t hash (variable_value_struct *);
3173   static bool equal (variable_value_struct *, tree);
3174 };
3175 /* A hash table of DIEs that contain DW_OP_GNU_variable_value with
3176    dw_val_class_decl_ref class, indexed by FUNCTION_DECLs which is
3177    DECL_CONTEXT of the referenced VAR_DECLs.  */
3178 static GTY (()) hash_table<variable_value_hasher> *variable_value_hash;
3179
3180 struct block_die_hasher : ggc_ptr_hash<die_struct>
3181 {
3182   static hashval_t hash (die_struct *);
3183   static bool equal (die_struct *, die_struct *);
3184 };
3185
3186 /* A hash table of references to DIE's that describe COMMON blocks.
3187    The key is DECL_UID() ^ die_parent.  */
3188 static GTY (()) hash_table<block_die_hasher> *common_block_die_table;
3189
3190 typedef struct GTY(()) die_arg_entry_struct {
3191     dw_die_ref die;
3192     tree arg;
3193 } die_arg_entry;
3194
3195
3196 /* Node of the variable location list.  */
3197 struct GTY ((chain_next ("%h.next"))) var_loc_node {
3198   /* Either NOTE_INSN_VAR_LOCATION, or, for SRA optimized variables,
3199      EXPR_LIST chain.  For small bitsizes, bitsize is encoded
3200      in mode of the EXPR_LIST node and first EXPR_LIST operand
3201      is either NOTE_INSN_VAR_LOCATION for a piece with a known
3202      location or NULL for padding.  For larger bitsizes,
3203      mode is 0 and first operand is a CONCAT with bitsize
3204      as first CONCAT operand and NOTE_INSN_VAR_LOCATION resp.
3205      NULL as second operand.  */
3206   rtx GTY (()) loc;
3207   const char * GTY (()) label;
3208   struct var_loc_node * GTY (()) next;
3209 };
3210
3211 /* Variable location list.  */
3212 struct GTY ((for_user)) var_loc_list_def {
3213   struct var_loc_node * GTY (()) first;
3214
3215   /* Pointer to the last but one or last element of the
3216      chained list.  If the list is empty, both first and
3217      last are NULL, if the list contains just one node
3218      or the last node certainly is not redundant, it points
3219      to the last node, otherwise points to the last but one.
3220      Do not mark it for GC because it is marked through the chain.  */
3221   struct var_loc_node * GTY ((skip ("%h"))) last;
3222
3223   /* Pointer to the last element before section switch,
3224      if NULL, either sections weren't switched or first
3225      is after section switch.  */
3226   struct var_loc_node * GTY ((skip ("%h"))) last_before_switch;
3227
3228   /* DECL_UID of the variable decl.  */
3229   unsigned int decl_id;
3230 };
3231 typedef struct var_loc_list_def var_loc_list;
3232
3233 /* Call argument location list.  */
3234 struct GTY ((chain_next ("%h.next"))) call_arg_loc_node {
3235   rtx GTY (()) call_arg_loc_note;
3236   const char * GTY (()) label;
3237   tree GTY (()) block;
3238   bool tail_call_p;
3239   rtx GTY (()) symbol_ref;
3240   struct call_arg_loc_node * GTY (()) next;
3241 };
3242
3243
3244 struct decl_loc_hasher : ggc_ptr_hash<var_loc_list>
3245 {
3246   typedef const_tree compare_type;
3247
3248   static hashval_t hash (var_loc_list *);
3249   static bool equal (var_loc_list *, const_tree);
3250 };
3251
3252 /* Table of decl location linked lists.  */
3253 static GTY (()) hash_table<decl_loc_hasher> *decl_loc_table;
3254
3255 /* Head and tail of call_arg_loc chain.  */
3256 static GTY (()) struct call_arg_loc_node *call_arg_locations;
3257 static struct call_arg_loc_node *call_arg_loc_last;
3258
3259 /* Number of call sites in the current function.  */
3260 static int call_site_count = -1;
3261 /* Number of tail call sites in the current function.  */
3262 static int tail_call_site_count = -1;
3263
3264 /* A cached location list.  */
3265 struct GTY ((for_user)) cached_dw_loc_list_def {
3266   /* The DECL_UID of the decl that this entry describes.  */
3267   unsigned int decl_id;
3268
3269   /* The cached location list.  */
3270   dw_loc_list_ref loc_list;
3271 };
3272 typedef struct cached_dw_loc_list_def cached_dw_loc_list;
3273
3274 struct dw_loc_list_hasher : ggc_ptr_hash<cached_dw_loc_list>
3275 {
3276
3277   typedef const_tree compare_type;
3278   
3279   static hashval_t hash (cached_dw_loc_list *);
3280   static bool equal (cached_dw_loc_list *, const_tree);
3281 };
3282
3283 /* Table of cached location lists.  */
3284 static GTY (()) hash_table<dw_loc_list_hasher> *cached_dw_loc_list_table;
3285
3286 /* A vector of references to DIE's that are uniquely identified by their tag,
3287    presence/absence of children DIE's, and list of attribute/value pairs.  */
3288 static GTY(()) vec<dw_die_ref, va_gc> *abbrev_die_table;
3289
3290 /* A hash map to remember the stack usage for DWARF procedures.  The value
3291    stored is the stack size difference between before the DWARF procedure
3292    invokation and after it returned.  In other words, for a DWARF procedure
3293    that consumes N stack slots and that pushes M ones, this stores M - N.  */
3294 static hash_map<dw_die_ref, int> *dwarf_proc_stack_usage_map;
3295
3296 /* A global counter for generating labels for line number data.  */
3297 static unsigned int line_info_label_num;
3298
3299 /* The current table to which we should emit line number information
3300    for the current function.  This will be set up at the beginning of
3301    assembly for the function.  */
3302 static GTY(()) dw_line_info_table *cur_line_info_table;
3303
3304 /* The two default tables of line number info.  */
3305 static GTY(()) dw_line_info_table *text_section_line_info;
3306 static GTY(()) dw_line_info_table *cold_text_section_line_info;
3307
3308 /* The set of all non-default tables of line number info.  */
3309 static GTY(()) vec<dw_line_info_table *, va_gc> *separate_line_info;
3310
3311 /* A flag to tell pubnames/types export if there is an info section to
3312    refer to.  */
3313 static bool info_section_emitted;
3314
3315 /* A pointer to the base of a table that contains a list of publicly
3316    accessible names.  */
3317 static GTY (()) vec<pubname_entry, va_gc> *pubname_table;
3318
3319 /* A pointer to the base of a table that contains a list of publicly
3320    accessible types.  */
3321 static GTY (()) vec<pubname_entry, va_gc> *pubtype_table;
3322
3323 /* A pointer to the base of a table that contains a list of macro
3324    defines/undefines (and file start/end markers).  */
3325 static GTY (()) vec<macinfo_entry, va_gc> *macinfo_table;
3326
3327 /* True if .debug_macinfo or .debug_macros section is going to be
3328    emitted.  */
3329 #define have_macinfo \
3330   ((!XCOFF_DEBUGGING_INFO || HAVE_XCOFF_DWARF_EXTRAS) \
3331    && debug_info_level >= DINFO_LEVEL_VERBOSE \
3332    && !macinfo_table->is_empty ())
3333
3334 /* Vector of dies for which we should generate .debug_ranges info.  */
3335 static GTY (()) vec<dw_ranges, va_gc> *ranges_table;
3336
3337 /* Vector of pairs of labels referenced in ranges_table.  */
3338 static GTY (()) vec<dw_ranges_by_label, va_gc> *ranges_by_label;
3339
3340 /* Whether we have location lists that need outputting */
3341 static GTY(()) bool have_location_lists;
3342
3343 /* Unique label counter.  */
3344 static GTY(()) unsigned int loclabel_num;
3345
3346 /* Unique label counter for point-of-call tables.  */
3347 static GTY(()) unsigned int poc_label_num;
3348
3349 /* The last file entry emitted by maybe_emit_file().  */
3350 static GTY(()) struct dwarf_file_data * last_emitted_file;
3351
3352 /* Number of internal labels generated by gen_internal_sym().  */
3353 static GTY(()) int label_num;
3354
3355 static GTY(()) vec<die_arg_entry, va_gc> *tmpl_value_parm_die_table;
3356
3357 /* Instances of generic types for which we need to generate debug
3358    info that describe their generic parameters and arguments. That
3359    generation needs to happen once all types are properly laid out so
3360    we do it at the end of compilation.  */
3361 static GTY(()) vec<tree, va_gc> *generic_type_instances;
3362
3363 /* Offset from the "steady-state frame pointer" to the frame base,
3364    within the current function.  */
3365 static poly_int64 frame_pointer_fb_offset;
3366 static bool frame_pointer_fb_offset_valid;
3367
3368 static vec<dw_die_ref> base_types;
3369
3370 /* Flags to represent a set of attribute classes for attributes that represent
3371    a scalar value (bounds, pointers, ...).  */
3372 enum dw_scalar_form
3373 {
3374   dw_scalar_form_constant = 0x01,
3375   dw_scalar_form_exprloc = 0x02,
3376   dw_scalar_form_reference = 0x04
3377 };
3378
3379 /* Forward declarations for functions defined in this file.  */
3380
3381 static int is_pseudo_reg (const_rtx);
3382 static tree type_main_variant (tree);
3383 static int is_tagged_type (const_tree);
3384 static const char *dwarf_tag_name (unsigned);
3385 static const char *dwarf_attr_name (unsigned);
3386 static const char *dwarf_form_name (unsigned);
3387 static tree decl_ultimate_origin (const_tree);
3388 static tree decl_class_context (tree);
3389 static void add_dwarf_attr (dw_die_ref, dw_attr_node *);
3390 static inline enum dw_val_class AT_class (dw_attr_node *);
3391 static inline unsigned int AT_index (dw_attr_node *);
3392 static void add_AT_flag (dw_die_ref, enum dwarf_attribute, unsigned);
3393 static inline unsigned AT_flag (dw_attr_node *);
3394 static void add_AT_int (dw_die_ref, enum dwarf_attribute, HOST_WIDE_INT);
3395 static inline HOST_WIDE_INT AT_int (dw_attr_node *);
3396 static void add_AT_unsigned (dw_die_ref, enum dwarf_attribute, unsigned HOST_WIDE_INT);
3397 static inline unsigned HOST_WIDE_INT AT_unsigned (dw_attr_node *);
3398 static void add_AT_double (dw_die_ref, enum dwarf_attribute,
3399                            HOST_WIDE_INT, unsigned HOST_WIDE_INT);
3400 static inline void add_AT_vec (dw_die_ref, enum dwarf_attribute, unsigned int,
3401                                unsigned int, unsigned char *);
3402 static void add_AT_data8 (dw_die_ref, enum dwarf_attribute, unsigned char *);
3403 static void add_AT_string (dw_die_ref, enum dwarf_attribute, const char *);
3404 static inline const char *AT_string (dw_attr_node *);
3405 static enum dwarf_form AT_string_form (dw_attr_node *);
3406 static void add_AT_die_ref (dw_die_ref, enum dwarf_attribute, dw_die_ref);
3407 static void add_AT_specification (dw_die_ref, dw_die_ref);
3408 static inline dw_die_ref AT_ref (dw_attr_node *);
3409 static inline int AT_ref_external (dw_attr_node *);
3410 static inline void set_AT_ref_external (dw_attr_node *, int);
3411 static void add_AT_fde_ref (dw_die_ref, enum dwarf_attribute, unsigned);
3412 static void add_AT_loc (dw_die_ref, enum dwarf_attribute, dw_loc_descr_ref);
3413 static inline dw_loc_descr_ref AT_loc (dw_attr_node *);
3414 static void add_AT_loc_list (dw_die_ref, enum dwarf_attribute,
3415                              dw_loc_list_ref);
3416 static inline dw_loc_list_ref AT_loc_list (dw_attr_node *);
3417 static addr_table_entry *add_addr_table_entry (void *, enum ate_kind);
3418 static void remove_addr_table_entry (addr_table_entry *);
3419 static void add_AT_addr (dw_die_ref, enum dwarf_attribute, rtx, bool);
3420 static inline rtx AT_addr (dw_attr_node *);
3421 static void add_AT_lbl_id (dw_die_ref, enum dwarf_attribute, const char *);
3422 static void add_AT_lineptr (dw_die_ref, enum dwarf_attribute, const char *);
3423 static void add_AT_macptr (dw_die_ref, enum dwarf_attribute, const char *);
3424 static void add_AT_loclistsptr (dw_die_ref, enum dwarf_attribute,
3425                                 const char *);
3426 static void add_AT_offset (dw_die_ref, enum dwarf_attribute,
3427                            unsigned HOST_WIDE_INT);
3428 static void add_AT_range_list (dw_die_ref, enum dwarf_attribute,
3429                                unsigned long, bool);
3430 static inline const char *AT_lbl (dw_attr_node *);
3431 static dw_attr_node *get_AT (dw_die_ref, enum dwarf_attribute);
3432 static const char *get_AT_low_pc (dw_die_ref);
3433 static const char *get_AT_hi_pc (dw_die_ref);
3434 static const char *get_AT_string (dw_die_ref, enum dwarf_attribute);
3435 static int get_AT_flag (dw_die_ref, enum dwarf_attribute);
3436 static unsigned get_AT_unsigned (dw_die_ref, enum dwarf_attribute);
3437 static inline dw_die_ref get_AT_ref (dw_die_ref, enum dwarf_attribute);
3438 static bool is_cxx (void);
3439 static bool is_cxx (const_tree);
3440 static bool is_fortran (void);
3441 static bool is_ada (void);
3442 static bool remove_AT (dw_die_ref, enum dwarf_attribute);
3443 static void remove_child_TAG (dw_die_ref, enum dwarf_tag);
3444 static void add_child_die (dw_die_ref, dw_die_ref);
3445 static dw_die_ref new_die (enum dwarf_tag, dw_die_ref, tree);
3446 static dw_die_ref lookup_type_die (tree);
3447 static dw_die_ref strip_naming_typedef (tree, dw_die_ref);
3448 static dw_die_ref lookup_type_die_strip_naming_typedef (tree);
3449 static void equate_type_number_to_die (tree, dw_die_ref);
3450 static dw_die_ref lookup_decl_die (tree);
3451 static var_loc_list *lookup_decl_loc (const_tree);
3452 static void equate_decl_number_to_die (tree, dw_die_ref);
3453 static struct var_loc_node *add_var_loc_to_decl (tree, rtx, const char *);
3454 static void print_spaces (FILE *);
3455 static void print_die (dw_die_ref, FILE *);
3456 static void loc_checksum (dw_loc_descr_ref, struct md5_ctx *);
3457 static void attr_checksum (dw_attr_node *, struct md5_ctx *, int *);
3458 static void die_checksum (dw_die_ref, struct md5_ctx *, int *);
3459 static void checksum_sleb128 (HOST_WIDE_INT, struct md5_ctx *);
3460 static void checksum_uleb128 (unsigned HOST_WIDE_INT, struct md5_ctx *);
3461 static void loc_checksum_ordered (dw_loc_descr_ref, struct md5_ctx *);
3462 static void attr_checksum_ordered (enum dwarf_tag, dw_attr_node *,
3463                                    struct md5_ctx *, int *);
3464 struct checksum_attributes;
3465 static void collect_checksum_attributes (struct checksum_attributes *, dw_die_ref);
3466 static void die_checksum_ordered (dw_die_ref, struct md5_ctx *, int *);
3467 static void checksum_die_context (dw_die_ref, struct md5_ctx *);
3468 static void generate_type_signature (dw_die_ref, comdat_type_node *);
3469 static int same_loc_p (dw_loc_descr_ref, dw_loc_descr_ref, int *);
3470 static int same_dw_val_p (const dw_val_node *, const dw_val_node *, int *);
3471 static int same_attr_p (dw_attr_node *, dw_attr_node *, int *);
3472 static int same_die_p (dw_die_ref, dw_die_ref, int *);
3473 static int is_type_die (dw_die_ref);
3474 static int is_comdat_die (dw_die_ref);
3475 static inline bool is_template_instantiation (dw_die_ref);
3476 static int is_declaration_die (dw_die_ref);
3477 static int should_move_die_to_comdat (dw_die_ref);
3478 static dw_die_ref clone_as_declaration (dw_die_ref);
3479 static dw_die_ref clone_die (dw_die_ref);
3480 static dw_die_ref clone_tree (dw_die_ref);
3481 static dw_die_ref copy_declaration_context (dw_die_ref, dw_die_ref);
3482 static void generate_skeleton_ancestor_tree (skeleton_chain_node *);
3483 static void generate_skeleton_bottom_up (skeleton_chain_node *);
3484 static dw_die_ref generate_skeleton (dw_die_ref);
3485 static dw_die_ref remove_child_or_replace_with_skeleton (dw_die_ref,
3486                                                          dw_die_ref,
3487                                                          dw_die_ref);
3488 static void break_out_comdat_types (dw_die_ref);
3489 static void copy_decls_for_unworthy_types (dw_die_ref);
3490
3491 static void add_sibling_attributes (dw_die_ref);
3492 static void output_location_lists (dw_die_ref);
3493 static int constant_size (unsigned HOST_WIDE_INT);
3494 static unsigned long size_of_die (dw_die_ref);
3495 static void calc_die_sizes (dw_die_ref);
3496 static void calc_base_type_die_sizes (void);
3497 static void mark_dies (dw_die_ref);
3498 static void unmark_dies (dw_die_ref);
3499 static void unmark_all_dies (dw_die_ref);
3500 static unsigned long size_of_pubnames (vec<pubname_entry, va_gc> *);
3501 static unsigned long size_of_aranges (void);
3502 static enum dwarf_form value_format (dw_attr_node *);
3503 static void output_value_format (dw_attr_node *);
3504 static void output_abbrev_section (void);
3505 static void output_die_abbrevs (unsigned long, dw_die_ref);
3506 static void output_die (dw_die_ref);
3507 static void output_compilation_unit_header (enum dwarf_unit_type);
3508 static void output_comp_unit (dw_die_ref, int, const unsigned char *);
3509 static void output_comdat_type_unit (comdat_type_node *);
3510 static const char *dwarf2_name (tree, int);
3511 static void add_pubname (tree, dw_die_ref);
3512 static void add_enumerator_pubname (const char *, dw_die_ref);
3513 static void add_pubname_string (const char *, dw_die_ref);
3514 static void add_pubtype (tree, dw_die_ref);
3515 static void output_pubnames (vec<pubname_entry, va_gc> *);
3516 static void output_aranges (void);
3517 static unsigned int add_ranges (const_tree, bool = false);
3518 static void add_ranges_by_labels (dw_die_ref, const char *, const char *,
3519                                   bool *, bool);
3520 static void output_ranges (void);
3521 static dw_line_info_table *new_line_info_table (void);
3522 static void output_line_info (bool);
3523 static void output_file_names (void);
3524 static dw_die_ref base_type_die (tree, bool);
3525 static int is_base_type (tree);
3526 static dw_die_ref subrange_type_die (tree, tree, tree, tree, dw_die_ref);
3527 static int decl_quals (const_tree);
3528 static dw_die_ref modified_type_die (tree, int, bool, dw_die_ref);
3529 static dw_die_ref generic_parameter_die (tree, tree, bool, dw_die_ref);
3530 static dw_die_ref template_parameter_pack_die (tree, tree, dw_die_ref);
3531 static int type_is_enum (const_tree);
3532 static unsigned int dbx_reg_number (const_rtx);
3533 static void add_loc_descr_op_piece (dw_loc_descr_ref *, int);
3534 static dw_loc_descr_ref reg_loc_descriptor (rtx, enum var_init_status);
3535 static dw_loc_descr_ref one_reg_loc_descriptor (unsigned int,
3536                                                 enum var_init_status);
3537 static dw_loc_descr_ref multiple_reg_loc_descriptor (rtx, rtx,
3538                                                      enum var_init_status);
3539 static dw_loc_descr_ref based_loc_descr (rtx, poly_int64,
3540                                          enum var_init_status);
3541 static int is_based_loc (const_rtx);
3542 static bool resolve_one_addr (rtx *);
3543 static dw_loc_descr_ref concat_loc_descriptor (rtx, rtx,
3544                                                enum var_init_status);
3545 static dw_loc_descr_ref loc_descriptor (rtx, machine_mode mode,
3546                                         enum var_init_status);
3547 struct loc_descr_context;
3548 static void add_loc_descr_to_each (dw_loc_list_ref list, dw_loc_descr_ref ref);
3549 static void add_loc_list (dw_loc_list_ref *ret, dw_loc_list_ref list);
3550 static dw_loc_list_ref loc_list_from_tree (tree, int,
3551                                            struct loc_descr_context *);
3552 static dw_loc_descr_ref loc_descriptor_from_tree (tree, int,
3553                                                   struct loc_descr_context *);
3554 static HOST_WIDE_INT ceiling (HOST_WIDE_INT, unsigned int);
3555 static tree field_type (const_tree);
3556 static unsigned int simple_type_align_in_bits (const_tree);
3557 static unsigned int simple_decl_align_in_bits (const_tree);
3558 static unsigned HOST_WIDE_INT simple_type_size_in_bits (const_tree);
3559 struct vlr_context;
3560 static dw_loc_descr_ref field_byte_offset (const_tree, struct vlr_context *,
3561                                            HOST_WIDE_INT *);
3562 static void add_AT_location_description (dw_die_ref, enum dwarf_attribute,
3563                                          dw_loc_list_ref);
3564 static void add_data_member_location_attribute (dw_die_ref, tree,
3565                                                 struct vlr_context *);
3566 static bool add_const_value_attribute (dw_die_ref, rtx);
3567 static void insert_int (HOST_WIDE_INT, unsigned, unsigned char *);
3568 static void insert_wide_int (const wide_int &, unsigned char *, int);
3569 static void insert_float (const_rtx, unsigned char *);
3570 static rtx rtl_for_decl_location (tree);
3571 static bool add_location_or_const_value_attribute (dw_die_ref, tree, bool);
3572 static bool tree_add_const_value_attribute (dw_die_ref, tree);
3573 static bool tree_add_const_value_attribute_for_decl (dw_die_ref, tree);
3574 static void add_name_attribute (dw_die_ref, const char *);
3575 static void add_gnat_descriptive_type_attribute (dw_die_ref, tree, dw_die_ref);
3576 static void add_comp_dir_attribute (dw_die_ref);
3577 static void add_scalar_info (dw_die_ref, enum dwarf_attribute, tree, int,
3578                              struct loc_descr_context *);
3579 static void add_bound_info (dw_die_ref, enum dwarf_attribute, tree,
3580                             struct loc_descr_context *);
3581 static void add_subscript_info (dw_die_ref, tree, bool);
3582 static void add_byte_size_attribute (dw_die_ref, tree);
3583 static void add_alignment_attribute (dw_die_ref, tree);
3584 static inline void add_bit_offset_attribute (dw_die_ref, tree,
3585                                              struct vlr_context *);
3586 static void add_bit_size_attribute (dw_die_ref, tree);
3587 static void add_prototyped_attribute (dw_die_ref, tree);
3588 static dw_die_ref add_abstract_origin_attribute (dw_die_ref, tree);
3589 static void add_pure_or_virtual_attribute (dw_die_ref, tree);
3590 static void add_src_coords_attributes (dw_die_ref, tree);
3591 static void add_name_and_src_coords_attributes (dw_die_ref, tree, bool = false);
3592 static void add_discr_value (dw_die_ref, dw_discr_value *);
3593 static void add_discr_list (dw_die_ref, dw_discr_list_ref);
3594 static inline dw_discr_list_ref AT_discr_list (dw_attr_node *);
3595 static void push_decl_scope (tree);
3596 static void pop_decl_scope (void);
3597 static dw_die_ref scope_die_for (tree, dw_die_ref);
3598 static inline int local_scope_p (dw_die_ref);
3599 static inline int class_scope_p (dw_die_ref);
3600 static inline int class_or_namespace_scope_p (dw_die_ref);
3601 static void add_type_attribute (dw_die_ref, tree, int, bool, dw_die_ref);
3602 static void add_calling_convention_attribute (dw_die_ref, tree);
3603 static const char *type_tag (const_tree);
3604 static tree member_declared_type (const_tree);
3605 #if 0
3606 static const char *decl_start_label (tree);
3607 #endif
3608 static void gen_array_type_die (tree, dw_die_ref);
3609 static void gen_descr_array_type_die (tree, struct array_descr_info *, dw_die_ref);
3610 #if 0
3611 static void gen_entry_point_die (tree, dw_die_ref);
3612 #endif
3613 static dw_die_ref gen_enumeration_type_die (tree, dw_die_ref);
3614 static dw_die_ref gen_formal_parameter_die (tree, tree, bool, dw_die_ref);
3615 static dw_die_ref gen_formal_parameter_pack_die  (tree, tree, dw_die_ref, tree*);
3616 static void gen_unspecified_parameters_die (tree, dw_die_ref);
3617 static void gen_formal_types_die (tree, dw_die_ref);
3618 static void gen_subprogram_die (tree, dw_die_ref);
3619 static void gen_variable_die (tree, tree, dw_die_ref);
3620 static void gen_const_die (tree, dw_die_ref);
3621 static void gen_label_die (tree, dw_die_ref);
3622 static void gen_lexical_block_die (tree, dw_die_ref);
3623 static void gen_inlined_subroutine_die (tree, dw_die_ref);
3624 static void gen_field_die (tree, struct vlr_context *, dw_die_ref);
3625 static void gen_ptr_to_mbr_type_die (tree, dw_die_ref);
3626 static dw_die_ref gen_compile_unit_die (const char *);
3627 static void gen_inheritance_die (tree, tree, tree, dw_die_ref);
3628 static void gen_member_die (tree, dw_die_ref);
3629 static void gen_struct_or_union_type_die (tree, dw_die_ref,
3630                                                 enum debug_info_usage);
3631 static void gen_subroutine_type_die (tree, dw_die_ref);
3632 static void gen_typedef_die (tree, dw_die_ref);
3633 static void gen_type_die (tree, dw_die_ref);
3634 static void gen_block_die (tree, dw_die_ref);
3635 static void decls_for_scope (tree, dw_die_ref);
3636 static bool is_naming_typedef_decl (const_tree);
3637 static inline dw_die_ref get_context_die (tree);
3638 static void gen_namespace_die (tree, dw_die_ref);
3639 static dw_die_ref gen_namelist_decl (tree, dw_die_ref, tree);
3640 static dw_die_ref gen_decl_die (tree, tree, struct vlr_context *, dw_die_ref);
3641 static dw_die_ref force_decl_die (tree);
3642 static dw_die_ref force_type_die (tree);
3643 static dw_die_ref setup_namespace_context (tree, dw_die_ref);
3644 static dw_die_ref declare_in_namespace (tree, dw_die_ref);
3645 static struct dwarf_file_data * lookup_filename (const char *);
3646 static void retry_incomplete_types (void);
3647 static void gen_type_die_for_member (tree, tree, dw_die_ref);
3648 static void gen_generic_params_dies (tree);
3649 static void gen_tagged_type_die (tree, dw_die_ref, enum debug_info_usage);
3650 static void gen_type_die_with_usage (tree, dw_die_ref, enum debug_info_usage);
3651 static void splice_child_die (dw_die_ref, dw_die_ref);
3652 static int file_info_cmp (const void *, const void *);
3653 static dw_loc_list_ref new_loc_list (dw_loc_descr_ref, const char *,
3654                                      const char *, const char *);
3655 static void output_loc_list (dw_loc_list_ref);
3656 static char *gen_internal_sym (const char *);
3657 static bool want_pubnames (void);
3658
3659 static void prune_unmark_dies (dw_die_ref);
3660 static void prune_unused_types_mark_generic_parms_dies (dw_die_ref);
3661 static void prune_unused_types_mark (dw_die_ref, int);
3662 static void prune_unused_types_walk (dw_die_ref);
3663 static void prune_unused_types_walk_attribs (dw_die_ref);
3664 static void prune_unused_types_prune (dw_die_ref);
3665 static void prune_unused_types (void);
3666 static int maybe_emit_file (struct dwarf_file_data *fd);
3667 static inline const char *AT_vms_delta1 (dw_attr_node *);
3668 static inline const char *AT_vms_delta2 (dw_attr_node *);
3669 static inline void add_AT_vms_delta (dw_die_ref, enum dwarf_attribute,
3670                                      const char *, const char *);
3671 static void append_entry_to_tmpl_value_parm_die_table (dw_die_ref, tree);
3672 static void gen_remaining_tmpl_value_param_die_attribute (void);
3673 static bool generic_type_p (tree);
3674 static void schedule_generic_params_dies_gen (tree t);
3675 static void gen_scheduled_generic_parms_dies (void);
3676 static void resolve_variable_values (void);
3677
3678 static const char *comp_dir_string (void);
3679
3680 static void hash_loc_operands (dw_loc_descr_ref, inchash::hash &);
3681
3682 /* enum for tracking thread-local variables whose address is really an offset
3683    relative to the TLS pointer, which will need link-time relocation, but will
3684    not need relocation by the DWARF consumer.  */
3685
3686 enum dtprel_bool
3687 {
3688   dtprel_false = 0,
3689   dtprel_true = 1
3690 };
3691
3692 /* Return the operator to use for an address of a variable.  For dtprel_true, we
3693    use DW_OP_const*.  For regular variables, which need both link-time
3694    relocation and consumer-level relocation (e.g., to account for shared objects
3695    loaded at a random address), we use DW_OP_addr*.  */
3696
3697 static inline enum dwarf_location_atom
3698 dw_addr_op (enum dtprel_bool dtprel)
3699 {
3700   if (dtprel == dtprel_true)
3701     return (dwarf_split_debug_info ? DW_OP_GNU_const_index
3702             : (DWARF2_ADDR_SIZE == 4 ? DW_OP_const4u : DW_OP_const8u));
3703   else
3704     return dwarf_split_debug_info ? DW_OP_GNU_addr_index : DW_OP_addr;
3705 }
3706
3707 /* Return a pointer to a newly allocated address location description.  If
3708    dwarf_split_debug_info is true, then record the address with the appropriate
3709    relocation.  */
3710 static inline dw_loc_descr_ref
3711 new_addr_loc_descr (rtx addr, enum dtprel_bool dtprel)
3712 {
3713   dw_loc_descr_ref ref = new_loc_descr (dw_addr_op (dtprel), 0, 0);
3714
3715   ref->dw_loc_oprnd1.val_class = dw_val_class_addr;
3716   ref->dw_loc_oprnd1.v.val_addr = addr;
3717   ref->dtprel = dtprel;
3718   if (dwarf_split_debug_info)
3719     ref->dw_loc_oprnd1.val_entry
3720       = add_addr_table_entry (addr,
3721                               dtprel ? ate_kind_rtx_dtprel : ate_kind_rtx);
3722   else
3723     ref->dw_loc_oprnd1.val_entry = NULL;
3724
3725   return ref;
3726 }
3727
3728 /* Section names used to hold DWARF debugging information.  */
3729
3730 #ifndef DEBUG_INFO_SECTION
3731 #define DEBUG_INFO_SECTION      ".debug_info"
3732 #endif
3733 #ifndef DEBUG_DWO_INFO_SECTION
3734 #define DEBUG_DWO_INFO_SECTION ".debug_info.dwo"
3735 #endif
3736 #ifndef DEBUG_LTO_INFO_SECTION
3737 #define DEBUG_LTO_INFO_SECTION  ".gnu.debuglto_.debug_info"
3738 #endif
3739 #ifndef DEBUG_LTO_DWO_INFO_SECTION
3740 #define DEBUG_LTO_DWO_INFO_SECTION ".gnu.debuglto_.debug_info.dwo"
3741 #endif
3742 #ifndef DEBUG_ABBREV_SECTION
3743 #define DEBUG_ABBREV_SECTION    ".debug_abbrev"
3744 #endif
3745 #ifndef DEBUG_LTO_ABBREV_SECTION
3746 #define DEBUG_LTO_ABBREV_SECTION ".gnu.debuglto_.debug_abbrev"
3747 #endif
3748 #ifndef DEBUG_DWO_ABBREV_SECTION
3749 #define DEBUG_DWO_ABBREV_SECTION ".debug_abbrev.dwo"
3750 #endif
3751 #ifndef DEBUG_LTO_DWO_ABBREV_SECTION
3752 #define DEBUG_LTO_DWO_ABBREV_SECTION ".gnu.debuglto_.debug_abbrev.dwo"
3753 #endif
3754 #ifndef DEBUG_ARANGES_SECTION
3755 #define DEBUG_ARANGES_SECTION   ".debug_aranges"
3756 #endif
3757 #ifndef DEBUG_ADDR_SECTION
3758 #define DEBUG_ADDR_SECTION     ".debug_addr"
3759 #endif
3760 #ifndef DEBUG_MACINFO_SECTION
3761 #define DEBUG_MACINFO_SECTION     ".debug_macinfo"
3762 #endif
3763 #ifndef DEBUG_LTO_MACINFO_SECTION
3764 #define DEBUG_LTO_MACINFO_SECTION      ".gnu.debuglto_.debug_macinfo"
3765 #endif
3766 #ifndef DEBUG_DWO_MACINFO_SECTION
3767 #define DEBUG_DWO_MACINFO_SECTION      ".debug_macinfo.dwo"
3768 #endif
3769 #ifndef DEBUG_LTO_DWO_MACINFO_SECTION
3770 #define DEBUG_LTO_DWO_MACINFO_SECTION  ".gnu.debuglto_.debug_macinfo.dwo"
3771 #endif
3772 #ifndef DEBUG_MACRO_SECTION
3773 #define DEBUG_MACRO_SECTION     ".debug_macro"
3774 #endif
3775 #ifndef DEBUG_LTO_MACRO_SECTION
3776 #define DEBUG_LTO_MACRO_SECTION ".gnu.debuglto_.debug_macro"
3777 #endif
3778 #ifndef DEBUG_DWO_MACRO_SECTION
3779 #define DEBUG_DWO_MACRO_SECTION        ".debug_macro.dwo"
3780 #endif
3781 #ifndef DEBUG_LTO_DWO_MACRO_SECTION
3782 #define DEBUG_LTO_DWO_MACRO_SECTION    ".gnu.debuglto_.debug_macro.dwo"
3783 #endif
3784 #ifndef DEBUG_LINE_SECTION
3785 #define DEBUG_LINE_SECTION      ".debug_line"
3786 #endif
3787 #ifndef DEBUG_LTO_LINE_SECTION
3788 #define DEBUG_LTO_LINE_SECTION ".gnu.debuglto_.debug_line"
3789 #endif
3790 #ifndef DEBUG_DWO_LINE_SECTION
3791 #define DEBUG_DWO_LINE_SECTION ".debug_line.dwo"
3792 #endif
3793 #ifndef DEBUG_LTO_DWO_LINE_SECTION
3794 #define DEBUG_LTO_DWO_LINE_SECTION ".gnu.debuglto_.debug_line.dwo"
3795 #endif
3796 #ifndef DEBUG_LOC_SECTION
3797 #define DEBUG_LOC_SECTION       ".debug_loc"
3798 #endif
3799 #ifndef DEBUG_DWO_LOC_SECTION
3800 #define DEBUG_DWO_LOC_SECTION  ".debug_loc.dwo"
3801 #endif
3802 #ifndef DEBUG_LOCLISTS_SECTION
3803 #define DEBUG_LOCLISTS_SECTION  ".debug_loclists"
3804 #endif
3805 #ifndef DEBUG_DWO_LOCLISTS_SECTION
3806 #define DEBUG_DWO_LOCLISTS_SECTION  ".debug_loclists.dwo"
3807 #endif
3808 #ifndef DEBUG_PUBNAMES_SECTION
3809 #define DEBUG_PUBNAMES_SECTION  \
3810   ((debug_generate_pub_sections == 2) \
3811    ? ".debug_gnu_pubnames" : ".debug_pubnames")
3812 #endif
3813 #ifndef DEBUG_PUBTYPES_SECTION
3814 #define DEBUG_PUBTYPES_SECTION  \
3815   ((debug_generate_pub_sections == 2) \
3816    ? ".debug_gnu_pubtypes" : ".debug_pubtypes")
3817 #endif
3818 #ifndef DEBUG_STR_OFFSETS_SECTION
3819 #define DEBUG_STR_OFFSETS_SECTION ".debug_str_offsets"
3820 #endif
3821 #ifndef DEBUG_DWO_STR_OFFSETS_SECTION
3822 #define DEBUG_DWO_STR_OFFSETS_SECTION ".debug_str_offsets.dwo"
3823 #endif
3824 #ifndef DEBUG_LTO_DWO_STR_OFFSETS_SECTION
3825 #define DEBUG_LTO_DWO_STR_OFFSETS_SECTION ".gnu.debuglto_.debug_str_offsets.dwo"
3826 #endif
3827 #ifndef DEBUG_STR_SECTION
3828 #define DEBUG_STR_SECTION  ".debug_str"
3829 #endif
3830 #ifndef DEBUG_LTO_STR_SECTION
3831 #define DEBUG_LTO_STR_SECTION ".gnu.debuglto_.debug_str"
3832 #endif
3833 #ifndef DEBUG_STR_DWO_SECTION
3834 #define DEBUG_STR_DWO_SECTION   ".debug_str.dwo"
3835 #endif
3836 #ifndef DEBUG_LTO_STR_DWO_SECTION
3837 #define DEBUG_LTO_STR_DWO_SECTION ".gnu.debuglto_.debug_str.dwo"
3838 #endif
3839 #ifndef DEBUG_RANGES_SECTION
3840 #define DEBUG_RANGES_SECTION    ".debug_ranges"
3841 #endif
3842 #ifndef DEBUG_RNGLISTS_SECTION
3843 #define DEBUG_RNGLISTS_SECTION  ".debug_rnglists"
3844 #endif
3845 #ifndef DEBUG_LINE_STR_SECTION
3846 #define DEBUG_LINE_STR_SECTION  ".debug_line_str"
3847 #endif
3848 #ifndef DEBUG_LTO_LINE_STR_SECTION
3849 #define DEBUG_LTO_LINE_STR_SECTION  ".gnu.debuglto_.debug_line_str"
3850 #endif
3851
3852 /* Standard ELF section names for compiled code and data.  */
3853 #ifndef TEXT_SECTION_NAME
3854 #define TEXT_SECTION_NAME       ".text"
3855 #endif
3856
3857 /* Section flags for .debug_str section.  */
3858 #define DEBUG_STR_SECTION_FLAGS                                 \
3859   (HAVE_GAS_SHF_MERGE && flag_merge_debug_strings               \
3860    ? SECTION_DEBUG | SECTION_MERGE | SECTION_STRINGS | 1        \
3861    : SECTION_DEBUG)
3862
3863 /* Section flags for .debug_str.dwo section.  */
3864 #define DEBUG_STR_DWO_SECTION_FLAGS (SECTION_DEBUG | SECTION_EXCLUDE)
3865
3866 /* Attribute used to refer to the macro section.  */
3867 #define DEBUG_MACRO_ATTRIBUTE (dwarf_version >= 5 ? DW_AT_macros \
3868                    : dwarf_strict ? DW_AT_macro_info : DW_AT_GNU_macros)
3869
3870 /* Labels we insert at beginning sections we can reference instead of
3871    the section names themselves.  */
3872
3873 #ifndef TEXT_SECTION_LABEL
3874 #define TEXT_SECTION_LABEL                 "Ltext"
3875 #endif
3876 #ifndef COLD_TEXT_SECTION_LABEL
3877 #define COLD_TEXT_SECTION_LABEL             "Ltext_cold"
3878 #endif
3879 #ifndef DEBUG_LINE_SECTION_LABEL
3880 #define DEBUG_LINE_SECTION_LABEL           "Ldebug_line"
3881 #endif
3882 #ifndef DEBUG_SKELETON_LINE_SECTION_LABEL
3883 #define DEBUG_SKELETON_LINE_SECTION_LABEL   "Lskeleton_debug_line"
3884 #endif
3885 #ifndef DEBUG_INFO_SECTION_LABEL
3886 #define DEBUG_INFO_SECTION_LABEL           "Ldebug_info"
3887 #endif
3888 #ifndef DEBUG_SKELETON_INFO_SECTION_LABEL
3889 #define DEBUG_SKELETON_INFO_SECTION_LABEL   "Lskeleton_debug_info"
3890 #endif
3891 #ifndef DEBUG_ABBREV_SECTION_LABEL
3892 #define DEBUG_ABBREV_SECTION_LABEL         "Ldebug_abbrev"
3893 #endif
3894 #ifndef DEBUG_SKELETON_ABBREV_SECTION_LABEL
3895 #define DEBUG_SKELETON_ABBREV_SECTION_LABEL "Lskeleton_debug_abbrev"
3896 #endif
3897 #ifndef DEBUG_ADDR_SECTION_LABEL
3898 #define DEBUG_ADDR_SECTION_LABEL           "Ldebug_addr"
3899 #endif
3900 #ifndef DEBUG_LOC_SECTION_LABEL
3901 #define DEBUG_LOC_SECTION_LABEL                    "Ldebug_loc"
3902 #endif
3903 #ifndef DEBUG_RANGES_SECTION_LABEL
3904 #define DEBUG_RANGES_SECTION_LABEL         "Ldebug_ranges"
3905 #endif
3906 #ifndef DEBUG_MACINFO_SECTION_LABEL
3907 #define DEBUG_MACINFO_SECTION_LABEL         "Ldebug_macinfo"
3908 #endif
3909 #ifndef DEBUG_MACRO_SECTION_LABEL
3910 #define DEBUG_MACRO_SECTION_LABEL          "Ldebug_macro"
3911 #endif
3912 #define SKELETON_COMP_DIE_ABBREV 1
3913 #define SKELETON_TYPE_DIE_ABBREV 2
3914
3915 /* Definitions of defaults for formats and names of various special
3916    (artificial) labels which may be generated within this file (when the -g
3917    options is used and DWARF2_DEBUGGING_INFO is in effect.
3918    If necessary, these may be overridden from within the tm.h file, but
3919    typically, overriding these defaults is unnecessary.  */
3920
3921 static char text_end_label[MAX_ARTIFICIAL_LABEL_BYTES];
3922 static char text_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3923 static char cold_text_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3924 static char cold_end_label[MAX_ARTIFICIAL_LABEL_BYTES];
3925 static char abbrev_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3926 static char debug_info_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3927 static char debug_skeleton_info_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3928 static char debug_skeleton_abbrev_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3929 static char debug_line_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3930 static char debug_addr_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3931 static char debug_skeleton_line_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3932 static char macinfo_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3933 static char loc_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3934 static char ranges_section_label[2 * MAX_ARTIFICIAL_LABEL_BYTES];
3935 static char ranges_base_label[2 * MAX_ARTIFICIAL_LABEL_BYTES];
3936
3937 #ifndef TEXT_END_LABEL
3938 #define TEXT_END_LABEL          "Letext"
3939 #endif
3940 #ifndef COLD_END_LABEL
3941 #define COLD_END_LABEL          "Letext_cold"
3942 #endif
3943 #ifndef BLOCK_BEGIN_LABEL
3944 #define BLOCK_BEGIN_LABEL       "LBB"
3945 #endif
3946 #ifndef BLOCK_END_LABEL
3947 #define BLOCK_END_LABEL         "LBE"
3948 #endif
3949 #ifndef LINE_CODE_LABEL
3950 #define LINE_CODE_LABEL         "LM"
3951 #endif
3952
3953 \f
3954 /* Return the root of the DIE's built for the current compilation unit.  */
3955 static dw_die_ref
3956 comp_unit_die (void)
3957 {
3958   if (!single_comp_unit_die)
3959     single_comp_unit_die = gen_compile_unit_die (NULL);
3960   return single_comp_unit_die;
3961 }
3962
3963 /* We allow a language front-end to designate a function that is to be
3964    called to "demangle" any name before it is put into a DIE.  */
3965
3966 static const char *(*demangle_name_func) (const char *);
3967
3968 void
3969 dwarf2out_set_demangle_name_func (const char *(*func) (const char *))
3970 {
3971   demangle_name_func = func;
3972 }
3973
3974 /* Test if rtl node points to a pseudo register.  */
3975
3976 static inline int
3977 is_pseudo_reg (const_rtx rtl)
3978 {
3979   return ((REG_P (rtl) && REGNO (rtl) >= FIRST_PSEUDO_REGISTER)
3980           || (GET_CODE (rtl) == SUBREG
3981               && REGNO (SUBREG_REG (rtl)) >= FIRST_PSEUDO_REGISTER));
3982 }
3983
3984 /* Return a reference to a type, with its const and volatile qualifiers
3985    removed.  */
3986
3987 static inline tree
3988 type_main_variant (tree type)
3989 {
3990   type = TYPE_MAIN_VARIANT (type);
3991
3992   /* ??? There really should be only one main variant among any group of
3993      variants of a given type (and all of the MAIN_VARIANT values for all
3994      members of the group should point to that one type) but sometimes the C
3995      front-end messes this up for array types, so we work around that bug
3996      here.  */
3997   if (TREE_CODE (type) == ARRAY_TYPE)
3998     while (type != TYPE_MAIN_VARIANT (type))
3999       type = TYPE_MAIN_VARIANT (type);
4000
4001   return type;
4002 }
4003
4004 /* Return nonzero if the given type node represents a tagged type.  */
4005
4006 static inline int
4007 is_tagged_type (const_tree type)
4008 {
4009   enum tree_code code = TREE_CODE (type);
4010
4011   return (code == RECORD_TYPE || code == UNION_TYPE
4012           || code == QUAL_UNION_TYPE || code == ENUMERAL_TYPE);
4013 }
4014
4015 /* Set label to debug_info_section_label + die_offset of a DIE reference.  */
4016
4017 static void
4018 get_ref_die_offset_label (char *label, dw_die_ref ref)
4019 {
4020   sprintf (label, "%s+%ld", debug_info_section_label, ref->die_offset);
4021 }
4022
4023 /* Return die_offset of a DIE reference to a base type.  */
4024
4025 static unsigned long int
4026 get_base_type_offset (dw_die_ref ref)
4027 {
4028   if (ref->die_offset)
4029     return ref->die_offset;
4030   if (comp_unit_die ()->die_abbrev)
4031     {
4032       calc_base_type_die_sizes ();
4033       gcc_assert (ref->die_offset);
4034     }
4035   return ref->die_offset;
4036 }
4037
4038 /* Return die_offset of a DIE reference other than base type.  */
4039
4040 static unsigned long int
4041 get_ref_die_offset (dw_die_ref ref)
4042 {
4043   gcc_assert (ref->die_offset);
4044   return ref->die_offset;
4045 }
4046
4047 /* Convert a DIE tag into its string name.  */
4048
4049 static const char *
4050 dwarf_tag_name (unsigned int tag)
4051 {
4052   const char *name = get_DW_TAG_name (tag);
4053
4054   if (name != NULL)
4055     return name;
4056
4057   return "DW_TAG_<unknown>";
4058 }
4059
4060 /* Convert a DWARF attribute code into its string name.  */
4061
4062 static const char *
4063 dwarf_attr_name (unsigned int attr)
4064 {
4065   const char *name;
4066
4067   switch (attr)
4068     {
4069 #if VMS_DEBUGGING_INFO
4070     case DW_AT_HP_prologue:
4071       return "DW_AT_HP_prologue";
4072 #else
4073     case DW_AT_MIPS_loop_unroll_factor:
4074       return "DW_AT_MIPS_loop_unroll_factor";
4075 #endif
4076
4077 #if VMS_DEBUGGING_INFO
4078     case DW_AT_HP_epilogue:
4079       return "DW_AT_HP_epilogue";
4080 #else
4081     case DW_AT_MIPS_stride:
4082       return "DW_AT_MIPS_stride";
4083 #endif
4084     }
4085
4086   name = get_DW_AT_name (attr);
4087
4088   if (name != NULL)
4089     return name;
4090
4091   return "DW_AT_<unknown>";
4092 }
4093
4094 /* Convert a DWARF value form code into its string name.  */
4095
4096 static const char *
4097 dwarf_form_name (unsigned int form)
4098 {
4099   const char *name = get_DW_FORM_name (form);
4100
4101   if (name != NULL)
4102     return name;
4103
4104   return "DW_FORM_<unknown>";
4105 }
4106 \f
4107 /* Determine the "ultimate origin" of a decl.  The decl may be an inlined
4108    instance of an inlined instance of a decl which is local to an inline
4109    function, so we have to trace all of the way back through the origin chain
4110    to find out what sort of node actually served as the original seed for the
4111    given block.  */
4112
4113 static tree
4114 decl_ultimate_origin (const_tree decl)
4115 {
4116   if (!CODE_CONTAINS_STRUCT (TREE_CODE (decl), TS_DECL_COMMON))
4117     return NULL_TREE;
4118
4119   /* DECL_ABSTRACT_ORIGIN can point to itself; ignore that if
4120      we're trying to output the abstract instance of this function.  */
4121   if (DECL_ABSTRACT_P (decl) && DECL_ABSTRACT_ORIGIN (decl) == decl)
4122     return NULL_TREE;
4123
4124   /* Since the DECL_ABSTRACT_ORIGIN for a DECL is supposed to be the
4125      most distant ancestor, this should never happen.  */
4126   gcc_assert (!DECL_FROM_INLINE (DECL_ORIGIN (decl)));
4127
4128   return DECL_ABSTRACT_ORIGIN (decl);
4129 }
4130
4131 /* Get the class to which DECL belongs, if any.  In g++, the DECL_CONTEXT
4132    of a virtual function may refer to a base class, so we check the 'this'
4133    parameter.  */
4134
4135 static tree
4136 decl_class_context (tree decl)
4137 {
4138   tree context = NULL_TREE;
4139
4140   if (TREE_CODE (decl) != FUNCTION_DECL || ! DECL_VINDEX (decl))
4141     context = DECL_CONTEXT (decl);
4142   else
4143     context = TYPE_MAIN_VARIANT
4144       (TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (decl)))));
4145
4146   if (context && !TYPE_P (context))
4147     context = NULL_TREE;
4148
4149   return context;
4150 }
4151 \f
4152 /* Add an attribute/value pair to a DIE.  */
4153
4154 static inline void
4155 add_dwarf_attr (dw_die_ref die, dw_attr_node *attr)
4156 {
4157   /* Maybe this should be an assert?  */
4158   if (die == NULL)
4159     return;
4160
4161   if (flag_checking)
4162     {
4163       /* Check we do not add duplicate attrs.  Can't use get_AT here
4164          because that recurses to the specification/abstract origin DIE.  */
4165       dw_attr_node *a;
4166       unsigned ix;
4167       FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
4168         gcc_assert (a->dw_attr != attr->dw_attr);
4169     }
4170
4171   vec_safe_reserve (die->die_attr, 1);
4172   vec_safe_push (die->die_attr, *attr);
4173 }
4174
4175 static inline enum dw_val_class
4176 AT_class (dw_attr_node *a)
4177 {
4178   return a->dw_attr_val.val_class;
4179 }
4180
4181 /* Return the index for any attribute that will be referenced with a
4182    DW_FORM_GNU_addr_index or DW_FORM_GNU_str_index.  String indices
4183    are stored in dw_attr_val.v.val_str for reference counting
4184    pruning.  */
4185
4186 static inline unsigned int
4187 AT_index (dw_attr_node *a)
4188 {
4189   if (AT_class (a) == dw_val_class_str)
4190     return a->dw_attr_val.v.val_str->index;
4191   else if (a->dw_attr_val.val_entry != NULL)
4192     return a->dw_attr_val.val_entry->index;
4193   return NOT_INDEXED;
4194 }
4195
4196 /* Add a flag value attribute to a DIE.  */
4197
4198 static inline void
4199 add_AT_flag (dw_die_ref die, enum dwarf_attribute attr_kind, unsigned int flag)
4200 {
4201   dw_attr_node attr;
4202
4203   attr.dw_attr = attr_kind;
4204   attr.dw_attr_val.val_class = dw_val_class_flag;
4205   attr.dw_attr_val.val_entry = NULL;
4206   attr.dw_attr_val.v.val_flag = flag;
4207   add_dwarf_attr (die, &attr);
4208 }
4209
4210 static inline unsigned
4211 AT_flag (dw_attr_node *a)
4212 {
4213   gcc_assert (a && AT_class (a) == dw_val_class_flag);
4214   return a->dw_attr_val.v.val_flag;
4215 }
4216
4217 /* Add a signed integer attribute value to a DIE.  */
4218
4219 static inline void
4220 add_AT_int (dw_die_ref die, enum dwarf_attribute attr_kind, HOST_WIDE_INT int_val)
4221 {
4222   dw_attr_node attr;
4223
4224   attr.dw_attr = attr_kind;
4225   attr.dw_attr_val.val_class = dw_val_class_const;
4226   attr.dw_attr_val.val_entry = NULL;
4227   attr.dw_attr_val.v.val_int = int_val;
4228   add_dwarf_attr (die, &attr);
4229 }
4230
4231 static inline HOST_WIDE_INT
4232 AT_int (dw_attr_node *a)
4233 {
4234   gcc_assert (a && (AT_class (a) == dw_val_class_const
4235                     || AT_class (a) == dw_val_class_const_implicit));
4236   return a->dw_attr_val.v.val_int;
4237 }
4238
4239 /* Add an unsigned integer attribute value to a DIE.  */
4240
4241 static inline void
4242 add_AT_unsigned (dw_die_ref die, enum dwarf_attribute attr_kind,
4243                  unsigned HOST_WIDE_INT unsigned_val)
4244 {
4245   dw_attr_node attr;
4246
4247   attr.dw_attr = attr_kind;
4248   attr.dw_attr_val.val_class = dw_val_class_unsigned_const;
4249   attr.dw_attr_val.val_entry = NULL;
4250   attr.dw_attr_val.v.val_unsigned = unsigned_val;
4251   add_dwarf_attr (die, &attr);
4252 }
4253
4254 static inline unsigned HOST_WIDE_INT
4255 AT_unsigned (dw_attr_node *a)
4256 {
4257   gcc_assert (a && (AT_class (a) == dw_val_class_unsigned_const
4258                     || AT_class (a) == dw_val_class_unsigned_const_implicit));
4259   return a->dw_attr_val.v.val_unsigned;
4260 }
4261
4262 /* Add an unsigned wide integer attribute value to a DIE.  */
4263
4264 static inline void
4265 add_AT_wide (dw_die_ref die, enum dwarf_attribute attr_kind,
4266              const wide_int& w)
4267 {
4268   dw_attr_node attr;
4269
4270   attr.dw_attr = attr_kind;
4271   attr.dw_attr_val.val_class = dw_val_class_wide_int;
4272   attr.dw_attr_val.val_entry = NULL;
4273   attr.dw_attr_val.v.val_wide = ggc_alloc<wide_int> ();
4274   *attr.dw_attr_val.v.val_wide = w;
4275   add_dwarf_attr (die, &attr);
4276 }
4277
4278 /* Add an unsigned double integer attribute value to a DIE.  */
4279
4280 static inline void
4281 add_AT_double (dw_die_ref die, enum dwarf_attribute attr_kind,
4282                HOST_WIDE_INT high, unsigned HOST_WIDE_INT low)
4283 {
4284   dw_attr_node attr;
4285
4286   attr.dw_attr = attr_kind;
4287   attr.dw_attr_val.val_class = dw_val_class_const_double;
4288   attr.dw_attr_val.val_entry = NULL;
4289   attr.dw_attr_val.v.val_double.high = high;
4290   attr.dw_attr_val.v.val_double.low = low;
4291   add_dwarf_attr (die, &attr);
4292 }
4293
4294 /* Add a floating point attribute value to a DIE and return it.  */
4295
4296 static inline void
4297 add_AT_vec (dw_die_ref die, enum dwarf_attribute attr_kind,
4298             unsigned int length, unsigned int elt_size, unsigned char *array)
4299 {
4300   dw_attr_node attr;
4301
4302   attr.dw_attr = attr_kind;
4303   attr.dw_attr_val.val_class = dw_val_class_vec;
4304   attr.dw_attr_val.val_entry = NULL;
4305   attr.dw_attr_val.v.val_vec.length = length;
4306   attr.dw_attr_val.v.val_vec.elt_size = elt_size;
4307   attr.dw_attr_val.v.val_vec.array = array;
4308   add_dwarf_attr (die, &attr);
4309 }
4310
4311 /* Add an 8-byte data attribute value to a DIE.  */
4312
4313 static inline void
4314 add_AT_data8 (dw_die_ref die, enum dwarf_attribute attr_kind,
4315               unsigned char data8[8])
4316 {
4317   dw_attr_node attr;
4318
4319   attr.dw_attr = attr_kind;
4320   attr.dw_attr_val.val_class = dw_val_class_data8;
4321   attr.dw_attr_val.val_entry = NULL;
4322   memcpy (attr.dw_attr_val.v.val_data8, data8, 8);
4323   add_dwarf_attr (die, &attr);
4324 }
4325
4326 /* Add DW_AT_low_pc and DW_AT_high_pc to a DIE.  When using
4327    dwarf_split_debug_info, address attributes in dies destined for the
4328    final executable have force_direct set to avoid using indexed
4329    references.  */
4330
4331 static inline void
4332 add_AT_low_high_pc (dw_die_ref die, const char *lbl_low, const char *lbl_high,
4333                     bool force_direct)
4334 {
4335   dw_attr_node attr;
4336   char * lbl_id;
4337
4338   lbl_id = xstrdup (lbl_low);
4339   attr.dw_attr = DW_AT_low_pc;
4340   attr.dw_attr_val.val_class = dw_val_class_lbl_id;
4341   attr.dw_attr_val.v.val_lbl_id = lbl_id;
4342   if (dwarf_split_debug_info && !force_direct)
4343     attr.dw_attr_val.val_entry
4344       = add_addr_table_entry (lbl_id, ate_kind_label);
4345   else
4346     attr.dw_attr_val.val_entry = NULL;
4347   add_dwarf_attr (die, &attr);
4348
4349   attr.dw_attr = DW_AT_high_pc;
4350   if (dwarf_version < 4)
4351     attr.dw_attr_val.val_class = dw_val_class_lbl_id;
4352   else
4353     attr.dw_attr_val.val_class = dw_val_class_high_pc;
4354   lbl_id = xstrdup (lbl_high);
4355   attr.dw_attr_val.v.val_lbl_id = lbl_id;
4356   if (attr.dw_attr_val.val_class == dw_val_class_lbl_id
4357       && dwarf_split_debug_info && !force_direct)
4358     attr.dw_attr_val.val_entry
4359       = add_addr_table_entry (lbl_id, ate_kind_label);
4360   else
4361     attr.dw_attr_val.val_entry = NULL;
4362   add_dwarf_attr (die, &attr);
4363 }
4364
4365 /* Hash and equality functions for debug_str_hash.  */
4366
4367 hashval_t
4368 indirect_string_hasher::hash (indirect_string_node *x)
4369 {
4370   return htab_hash_string (x->str);
4371 }
4372
4373 bool
4374 indirect_string_hasher::equal (indirect_string_node *x1, const char *x2)
4375 {
4376   return strcmp (x1->str, x2) == 0;
4377 }
4378
4379 /* Add STR to the given string hash table.  */
4380
4381 static struct indirect_string_node *
4382 find_AT_string_in_table (const char *str,
4383                          hash_table<indirect_string_hasher> *table)
4384 {
4385   struct indirect_string_node *node;
4386
4387   indirect_string_node **slot
4388     = table->find_slot_with_hash (str, htab_hash_string (str), INSERT);
4389   if (*slot == NULL)
4390     {
4391       node = ggc_cleared_alloc<indirect_string_node> ();
4392       node->str = ggc_strdup (str);
4393       *slot = node;
4394     }
4395   else
4396     node = *slot;
4397
4398   node->refcount++;
4399   return node;
4400 }
4401
4402 /* Add STR to the indirect string hash table.  */
4403
4404 static struct indirect_string_node *
4405 find_AT_string (const char *str)
4406 {
4407   if (! debug_str_hash)
4408     debug_str_hash = hash_table<indirect_string_hasher>::create_ggc (10);
4409
4410   return find_AT_string_in_table (str, debug_str_hash);
4411 }
4412
4413 /* Add a string attribute value to a DIE.  */
4414
4415 static inline void
4416 add_AT_string (dw_die_ref die, enum dwarf_attribute attr_kind, const char *str)
4417 {
4418   dw_attr_node attr;
4419   struct indirect_string_node *node;
4420
4421   node = find_AT_string (str);
4422
4423   attr.dw_attr = attr_kind;
4424   attr.dw_attr_val.val_class = dw_val_class_str;
4425   attr.dw_attr_val.val_entry = NULL;
4426   attr.dw_attr_val.v.val_str = node;
4427   add_dwarf_attr (die, &attr);
4428 }
4429
4430 static inline const char *
4431 AT_string (dw_attr_node *a)
4432 {
4433   gcc_assert (a && AT_class (a) == dw_val_class_str);
4434   return a->dw_attr_val.v.val_str->str;
4435 }
4436
4437 /* Call this function directly to bypass AT_string_form's logic to put
4438    the string inline in the die. */
4439
4440 static void
4441 set_indirect_string (struct indirect_string_node *node)
4442 {
4443   char label[MAX_ARTIFICIAL_LABEL_BYTES];
4444   /* Already indirect is a no op.  */
4445   if (node->form == DW_FORM_strp
4446       || node->form == DW_FORM_line_strp
4447       || node->form == DW_FORM_GNU_str_index)
4448     {
4449       gcc_assert (node->label);
4450       return;
4451     }
4452   ASM_GENERATE_INTERNAL_LABEL (label, "LASF", dw2_string_counter);
4453   ++dw2_string_counter;
4454   node->label = xstrdup (label);
4455
4456   if (!dwarf_split_debug_info)
4457     {
4458       node->form = DW_FORM_strp;
4459       node->index = NOT_INDEXED;
4460     }
4461   else
4462     {
4463       node->form = DW_FORM_GNU_str_index;
4464       node->index = NO_INDEX_ASSIGNED;
4465     }
4466 }
4467
4468 /* A helper function for dwarf2out_finish, called to reset indirect
4469    string decisions done for early LTO dwarf output before fat object
4470    dwarf output.  */
4471
4472 int
4473 reset_indirect_string (indirect_string_node **h, void *)
4474 {
4475   struct indirect_string_node *node = *h;
4476   if (node->form == DW_FORM_strp || node->form == DW_FORM_GNU_str_index)
4477     {
4478       free (node->label);
4479       node->label = NULL;
4480       node->form = (dwarf_form) 0;
4481       node->index = 0;
4482     }
4483   return 1;
4484 }
4485
4486 /* Find out whether a string should be output inline in DIE
4487    or out-of-line in .debug_str section.  */
4488
4489 static enum dwarf_form
4490 find_string_form (struct indirect_string_node *node)
4491 {
4492   unsigned int len;
4493
4494   if (node->form)
4495     return node->form;
4496
4497   len = strlen (node->str) + 1;
4498
4499   /* If the string is shorter or equal to the size of the reference, it is
4500      always better to put it inline.  */
4501   if (len <= DWARF_OFFSET_SIZE || node->refcount == 0)
4502     return node->form = DW_FORM_string;
4503
4504   /* If we cannot expect the linker to merge strings in .debug_str
4505      section, only put it into .debug_str if it is worth even in this
4506      single module.  */
4507   if (DWARF2_INDIRECT_STRING_SUPPORT_MISSING_ON_TARGET
4508       || ((debug_str_section->common.flags & SECTION_MERGE) == 0
4509           && (len - DWARF_OFFSET_SIZE) * node->refcount <= len))
4510     return node->form = DW_FORM_string;
4511
4512   set_indirect_string (node);
4513
4514   return node->form;
4515 }
4516
4517 /* Find out whether the string referenced from the attribute should be
4518    output inline in DIE or out-of-line in .debug_str section.  */
4519
4520 static enum dwarf_form
4521 AT_string_form (dw_attr_node *a)
4522 {
4523   gcc_assert (a && AT_class (a) == dw_val_class_str);
4524   return find_string_form (a->dw_attr_val.v.val_str);
4525 }
4526
4527 /* Add a DIE reference attribute value to a DIE.  */
4528
4529 static inline void
4530 add_AT_die_ref (dw_die_ref die, enum dwarf_attribute attr_kind, dw_die_ref targ_die)
4531 {
4532   dw_attr_node attr;
4533   gcc_checking_assert (targ_die != NULL);
4534
4535   /* With LTO we can end up trying to reference something we didn't create
4536      a DIE for.  Avoid crashing later on a NULL referenced DIE.  */
4537   if (targ_die == NULL)
4538     return;
4539
4540   attr.dw_attr = attr_kind;
4541   attr.dw_attr_val.val_class = dw_val_class_die_ref;
4542   attr.dw_attr_val.val_entry = NULL;
4543   attr.dw_attr_val.v.val_die_ref.die = targ_die;
4544   attr.dw_attr_val.v.val_die_ref.external = 0;
4545   add_dwarf_attr (die, &attr);
4546 }
4547
4548 /* Change DIE reference REF to point to NEW_DIE instead.  */
4549
4550 static inline void
4551 change_AT_die_ref (dw_attr_node *ref, dw_die_ref new_die)
4552 {
4553   gcc_assert (ref->dw_attr_val.val_class == dw_val_class_die_ref);
4554   ref->dw_attr_val.v.val_die_ref.die = new_die;
4555   ref->dw_attr_val.v.val_die_ref.external = 0;
4556 }
4557
4558 /* Add an AT_specification attribute to a DIE, and also make the back
4559    pointer from the specification to the definition.  */
4560
4561 static inline void
4562 add_AT_specification (dw_die_ref die, dw_die_ref targ_die)
4563 {
4564   add_AT_die_ref (die, DW_AT_specification, targ_die);
4565   gcc_assert (!targ_die->die_definition);
4566   targ_die->die_definition = die;
4567 }
4568
4569 static inline dw_die_ref
4570 AT_ref (dw_attr_node *a)
4571 {
4572   gcc_assert (a && AT_class (a) == dw_val_class_die_ref);
4573   return a->dw_attr_val.v.val_die_ref.die;
4574 }
4575
4576 static inline int
4577 AT_ref_external (dw_attr_node *a)
4578 {
4579   if (a && AT_class (a) == dw_val_class_die_ref)
4580     return a->dw_attr_val.v.val_die_ref.external;
4581
4582   return 0;
4583 }
4584
4585 static inline void
4586 set_AT_ref_external (dw_attr_node *a, int i)
4587 {
4588   gcc_assert (a && AT_class (a) == dw_val_class_die_ref);
4589   a->dw_attr_val.v.val_die_ref.external = i;
4590 }
4591
4592 /* Add an FDE reference attribute value to a DIE.  */
4593
4594 static inline void
4595 add_AT_fde_ref (dw_die_ref die, enum dwarf_attribute attr_kind, unsigned int targ_fde)
4596 {
4597   dw_attr_node attr;
4598
4599   attr.dw_attr = attr_kind;
4600   attr.dw_attr_val.val_class = dw_val_class_fde_ref;
4601   attr.dw_attr_val.val_entry = NULL;
4602   attr.dw_attr_val.v.val_fde_index = targ_fde;
4603   add_dwarf_attr (die, &attr);
4604 }
4605
4606 /* Add a location description attribute value to a DIE.  */
4607
4608 static inline void
4609 add_AT_loc (dw_die_ref die, enum dwarf_attribute attr_kind, dw_loc_descr_ref loc)
4610 {
4611   dw_attr_node attr;
4612
4613   attr.dw_attr = attr_kind;
4614   attr.dw_attr_val.val_class = dw_val_class_loc;
4615   attr.dw_attr_val.val_entry = NULL;
4616   attr.dw_attr_val.v.val_loc = loc;
4617   add_dwarf_attr (die, &attr);
4618 }
4619
4620 static inline dw_loc_descr_ref
4621 AT_loc (dw_attr_node *a)
4622 {
4623   gcc_assert (a && AT_class (a) == dw_val_class_loc);
4624   return a->dw_attr_val.v.val_loc;
4625 }
4626
4627 static inline void
4628 add_AT_loc_list (dw_die_ref die, enum dwarf_attribute attr_kind, dw_loc_list_ref loc_list)
4629 {
4630   dw_attr_node attr;
4631
4632   if (XCOFF_DEBUGGING_INFO && !HAVE_XCOFF_DWARF_EXTRAS)
4633     return;
4634
4635   attr.dw_attr = attr_kind;
4636   attr.dw_attr_val.val_class = dw_val_class_loc_list;
4637   attr.dw_attr_val.val_entry = NULL;
4638   attr.dw_attr_val.v.val_loc_list = loc_list;
4639   add_dwarf_attr (die, &attr);
4640   have_location_lists = true;
4641 }
4642
4643 static inline dw_loc_list_ref
4644 AT_loc_list (dw_attr_node *a)
4645 {
4646   gcc_assert (a && AT_class (a) == dw_val_class_loc_list);
4647   return a->dw_attr_val.v.val_loc_list;
4648 }
4649
4650 static inline dw_loc_list_ref *
4651 AT_loc_list_ptr (dw_attr_node *a)
4652 {
4653   gcc_assert (a && AT_class (a) == dw_val_class_loc_list);
4654   return &a->dw_attr_val.v.val_loc_list;
4655 }
4656
4657 struct addr_hasher : ggc_ptr_hash<addr_table_entry>
4658 {
4659   static hashval_t hash (addr_table_entry *);
4660   static bool equal (addr_table_entry *, addr_table_entry *);
4661 };
4662
4663 /* Table of entries into the .debug_addr section.  */
4664
4665 static GTY (()) hash_table<addr_hasher> *addr_index_table;
4666
4667 /* Hash an address_table_entry.  */
4668
4669 hashval_t
4670 addr_hasher::hash (addr_table_entry *a)
4671 {
4672   inchash::hash hstate;
4673   switch (a->kind)
4674     {
4675       case ate_kind_rtx:
4676         hstate.add_int (0);
4677         break;
4678       case ate_kind_rtx_dtprel:
4679         hstate.add_int (1);
4680         break;
4681       case ate_kind_label:
4682         return htab_hash_string (a->addr.label);
4683       default:
4684         gcc_unreachable ();
4685     }
4686   inchash::add_rtx (a->addr.rtl, hstate);
4687   return hstate.end ();
4688 }
4689
4690 /* Determine equality for two address_table_entries.  */
4691
4692 bool
4693 addr_hasher::equal (addr_table_entry *a1, addr_table_entry *a2)
4694 {
4695   if (a1->kind != a2->kind)
4696     return 0;
4697   switch (a1->kind)
4698     {
4699       case ate_kind_rtx:
4700       case ate_kind_rtx_dtprel:
4701         return rtx_equal_p (a1->addr.rtl, a2->addr.rtl);
4702       case ate_kind_label:
4703         return strcmp (a1->addr.label, a2->addr.label) == 0;
4704       default:
4705         gcc_unreachable ();
4706     }
4707 }
4708
4709 /* Initialize an addr_table_entry.  */
4710
4711 void
4712 init_addr_table_entry (addr_table_entry *e, enum ate_kind kind, void *addr)
4713 {
4714   e->kind = kind;
4715   switch (kind)
4716     {
4717       case ate_kind_rtx:
4718       case ate_kind_rtx_dtprel:
4719         e->addr.rtl = (rtx) addr;
4720         break;
4721       case ate_kind_label:
4722         e->addr.label = (char *) addr;
4723         break;
4724     }
4725   e->refcount = 0;
4726   e->index = NO_INDEX_ASSIGNED;
4727 }
4728
4729 /* Add attr to the address table entry to the table.  Defer setting an
4730    index until output time.  */
4731
4732 static addr_table_entry *
4733 add_addr_table_entry (void *addr, enum ate_kind kind)
4734 {
4735   addr_table_entry *node;
4736   addr_table_entry finder;
4737
4738   gcc_assert (dwarf_split_debug_info);
4739   if (! addr_index_table)
4740     addr_index_table = hash_table<addr_hasher>::create_ggc (10);
4741   init_addr_table_entry (&finder, kind, addr);
4742   addr_table_entry **slot = addr_index_table->find_slot (&finder, INSERT);
4743
4744   if (*slot == HTAB_EMPTY_ENTRY)
4745     {
4746       node = ggc_cleared_alloc<addr_table_entry> ();
4747       init_addr_table_entry (node, kind, addr);
4748       *slot = node;
4749     }
4750   else
4751     node = *slot;
4752
4753   node->refcount++;
4754   return node;
4755 }
4756
4757 /* Remove an entry from the addr table by decrementing its refcount.
4758    Strictly, decrementing the refcount would be enough, but the
4759    assertion that the entry is actually in the table has found
4760    bugs.  */
4761
4762 static void
4763 remove_addr_table_entry (addr_table_entry *entry)
4764 {
4765   gcc_assert (dwarf_split_debug_info && addr_index_table);
4766   /* After an index is assigned, the table is frozen.  */
4767   gcc_assert (entry->refcount > 0 && entry->index == NO_INDEX_ASSIGNED);
4768   entry->refcount--;
4769 }
4770
4771 /* Given a location list, remove all addresses it refers to from the
4772    address_table.  */
4773
4774 static void
4775 remove_loc_list_addr_table_entries (dw_loc_descr_ref descr)
4776 {
4777   for (; descr; descr = descr->dw_loc_next)
4778     if (descr->dw_loc_oprnd1.val_entry != NULL)
4779       {
4780         gcc_assert (descr->dw_loc_oprnd1.val_entry->index == NO_INDEX_ASSIGNED);
4781         remove_addr_table_entry (descr->dw_loc_oprnd1.val_entry);
4782       }
4783 }
4784
4785 /* A helper function for dwarf2out_finish called through
4786    htab_traverse.  Assign an addr_table_entry its index.  All entries
4787    must be collected into the table when this function is called,
4788    because the indexing code relies on htab_traverse to traverse nodes
4789    in the same order for each run. */
4790
4791 int
4792 index_addr_table_entry (addr_table_entry **h, unsigned int *index)
4793 {
4794   addr_table_entry *node = *h;
4795
4796   /* Don't index unreferenced nodes.  */
4797   if (node->refcount == 0)
4798     return 1;
4799
4800   gcc_assert (node->index == NO_INDEX_ASSIGNED);
4801   node->index = *index;
4802   *index += 1;
4803
4804   return 1;
4805 }
4806
4807 /* Add an address constant attribute value to a DIE.  When using
4808    dwarf_split_debug_info, address attributes in dies destined for the
4809    final executable should be direct references--setting the parameter
4810    force_direct ensures this behavior.  */
4811
4812 static inline void
4813 add_AT_addr (dw_die_ref die, enum dwarf_attribute attr_kind, rtx addr,
4814              bool force_direct)
4815 {
4816   dw_attr_node attr;
4817
4818   attr.dw_attr = attr_kind;
4819   attr.dw_attr_val.val_class = dw_val_class_addr;
4820   attr.dw_attr_val.v.val_addr = addr;
4821   if (dwarf_split_debug_info && !force_direct)
4822     attr.dw_attr_val.val_entry = add_addr_table_entry (addr, ate_kind_rtx);
4823   else
4824     attr.dw_attr_val.val_entry = NULL;
4825   add_dwarf_attr (die, &attr);
4826 }
4827
4828 /* Get the RTX from to an address DIE attribute.  */
4829
4830 static inline rtx
4831 AT_addr (dw_attr_node *a)
4832 {
4833   gcc_assert (a && AT_class (a) == dw_val_class_addr);
4834   return a->dw_attr_val.v.val_addr;
4835 }
4836
4837 /* Add a file attribute value to a DIE.  */
4838
4839 static inline void
4840 add_AT_file (dw_die_ref die, enum dwarf_attribute attr_kind,
4841              struct dwarf_file_data *fd)
4842 {
4843   dw_attr_node attr;
4844
4845   attr.dw_attr = attr_kind;
4846   attr.dw_attr_val.val_class = dw_val_class_file;
4847   attr.dw_attr_val.val_entry = NULL;
4848   attr.dw_attr_val.v.val_file = fd;
4849   add_dwarf_attr (die, &attr);
4850 }
4851
4852 /* Get the dwarf_file_data from a file DIE attribute.  */
4853
4854 static inline struct dwarf_file_data *
4855 AT_file (dw_attr_node *a)
4856 {
4857   gcc_assert (a && (AT_class (a) == dw_val_class_file
4858                     || AT_class (a) == dw_val_class_file_implicit));
4859   return a->dw_attr_val.v.val_file;
4860 }
4861
4862 /* Add a vms delta attribute value to a DIE.  */
4863
4864 static inline void
4865 add_AT_vms_delta (dw_die_ref die, enum dwarf_attribute attr_kind,
4866                   const char *lbl1, const char *lbl2)
4867 {
4868   dw_attr_node attr;
4869
4870   attr.dw_attr = attr_kind;
4871   attr.dw_attr_val.val_class = dw_val_class_vms_delta;
4872   attr.dw_attr_val.val_entry = NULL;
4873   attr.dw_attr_val.v.val_vms_delta.lbl1 = xstrdup (lbl1);
4874   attr.dw_attr_val.v.val_vms_delta.lbl2 = xstrdup (lbl2);
4875   add_dwarf_attr (die, &attr);
4876 }
4877
4878 /* Add a label identifier attribute value to a DIE.  */
4879
4880 static inline void
4881 add_AT_lbl_id (dw_die_ref die, enum dwarf_attribute attr_kind,
4882                const char *lbl_id)
4883 {
4884   dw_attr_node attr;
4885
4886   attr.dw_attr = attr_kind;
4887   attr.dw_attr_val.val_class = dw_val_class_lbl_id;
4888   attr.dw_attr_val.val_entry = NULL;
4889   attr.dw_attr_val.v.val_lbl_id = xstrdup (lbl_id);
4890   if (dwarf_split_debug_info)
4891     attr.dw_attr_val.val_entry
4892         = add_addr_table_entry (attr.dw_attr_val.v.val_lbl_id,
4893                                 ate_kind_label);
4894   add_dwarf_attr (die, &attr);
4895 }
4896
4897 /* Add a section offset attribute value to a DIE, an offset into the
4898    debug_line section.  */
4899
4900 static inline void
4901 add_AT_lineptr (dw_die_ref die, enum dwarf_attribute attr_kind,
4902                 const char *label)
4903 {
4904   dw_attr_node attr;
4905
4906   attr.dw_attr = attr_kind;
4907   attr.dw_attr_val.val_class = dw_val_class_lineptr;
4908   attr.dw_attr_val.val_entry = NULL;
4909   attr.dw_attr_val.v.val_lbl_id = xstrdup (label);
4910   add_dwarf_attr (die, &attr);
4911 }
4912
4913 /* Add a section offset attribute value to a DIE, an offset into the
4914    debug_loclists section.  */
4915
4916 static inline void
4917 add_AT_loclistsptr (dw_die_ref die, enum dwarf_attribute attr_kind,
4918                     const char *label)
4919 {
4920   dw_attr_node attr;
4921
4922   attr.dw_attr = attr_kind;
4923   attr.dw_attr_val.val_class = dw_val_class_loclistsptr;
4924   attr.dw_attr_val.val_entry = NULL;
4925   attr.dw_attr_val.v.val_lbl_id = xstrdup (label);
4926   add_dwarf_attr (die, &attr);
4927 }
4928
4929 /* Add a section offset attribute value to a DIE, an offset into the
4930    debug_macinfo section.  */
4931
4932 static inline void
4933 add_AT_macptr (dw_die_ref die, enum dwarf_attribute attr_kind,
4934                const char *label)
4935 {
4936   dw_attr_node attr;
4937
4938   attr.dw_attr = attr_kind;
4939   attr.dw_attr_val.val_class = dw_val_class_macptr;
4940   attr.dw_attr_val.val_entry = NULL;
4941   attr.dw_attr_val.v.val_lbl_id = xstrdup (label);
4942   add_dwarf_attr (die, &attr);
4943 }
4944
4945 /* Add an offset attribute value to a DIE.  */
4946
4947 static inline void
4948 add_AT_offset (dw_die_ref die, enum dwarf_attribute attr_kind,
4949                unsigned HOST_WIDE_INT offset)
4950 {
4951   dw_attr_node attr;
4952
4953   attr.dw_attr = attr_kind;
4954   attr.dw_attr_val.val_class = dw_val_class_offset;
4955   attr.dw_attr_val.val_entry = NULL;
4956   attr.dw_attr_val.v.val_offset = offset;
4957   add_dwarf_attr (die, &attr);
4958 }
4959
4960 /* Add a range_list attribute value to a DIE.  When using
4961    dwarf_split_debug_info, address attributes in dies destined for the
4962    final executable should be direct references--setting the parameter
4963    force_direct ensures this behavior.  */
4964
4965 #define UNRELOCATED_OFFSET ((addr_table_entry *) 1)
4966 #define RELOCATED_OFFSET (NULL)
4967
4968 static void
4969 add_AT_range_list (dw_die_ref die, enum dwarf_attribute attr_kind,
4970                    long unsigned int offset, bool force_direct)
4971 {
4972   dw_attr_node attr;
4973
4974   attr.dw_attr = attr_kind;
4975   attr.dw_attr_val.val_class = dw_val_class_range_list;
4976   /* For the range_list attribute, use val_entry to store whether the
4977      offset should follow split-debug-info or normal semantics.  This
4978      value is read in output_range_list_offset.  */
4979   if (dwarf_split_debug_info && !force_direct)
4980     attr.dw_attr_val.val_entry = UNRELOCATED_OFFSET;
4981   else
4982     attr.dw_attr_val.val_entry = RELOCATED_OFFSET;
4983   attr.dw_attr_val.v.val_offset = offset;
4984   add_dwarf_attr (die, &attr);
4985 }
4986
4987 /* Return the start label of a delta attribute.  */
4988
4989 static inline const char *
4990 AT_vms_delta1 (dw_attr_node *a)
4991 {
4992   gcc_assert (a && (AT_class (a) == dw_val_class_vms_delta));
4993   return a->dw_attr_val.v.val_vms_delta.lbl1;
4994 }
4995
4996 /* Return the end label of a delta attribute.  */
4997
4998 static inline const char *
4999 AT_vms_delta2 (dw_attr_node *a)
5000 {
5001   gcc_assert (a && (AT_class (a) == dw_val_class_vms_delta));
5002   return a->dw_attr_val.v.val_vms_delta.lbl2;
5003 }
5004
5005 static inline const char *
5006 AT_lbl (dw_attr_node *a)
5007 {
5008   gcc_assert (a && (AT_class (a) == dw_val_class_lbl_id
5009                     || AT_class (a) == dw_val_class_lineptr
5010                     || AT_class (a) == dw_val_class_macptr
5011                     || AT_class (a) == dw_val_class_loclistsptr
5012                     || AT_class (a) == dw_val_class_high_pc));
5013   return a->dw_attr_val.v.val_lbl_id;
5014 }
5015
5016 /* Get the attribute of type attr_kind.  */
5017
5018 static dw_attr_node *
5019 get_AT (dw_die_ref die, enum dwarf_attribute attr_kind)
5020 {
5021   dw_attr_node *a;
5022   unsigned ix;
5023   dw_die_ref spec = NULL;
5024
5025   if (! die)
5026     return NULL;
5027
5028   FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
5029     if (a->dw_attr == attr_kind)
5030       return a;
5031     else if (a->dw_attr == DW_AT_specification
5032              || a->dw_attr == DW_AT_abstract_origin)
5033       spec = AT_ref (a);
5034
5035   if (spec)
5036     return get_AT (spec, attr_kind);
5037
5038   return NULL;
5039 }
5040
5041 /* Returns the parent of the declaration of DIE.  */
5042
5043 static dw_die_ref
5044 get_die_parent (dw_die_ref die)
5045 {
5046   dw_die_ref t;
5047
5048   if (!die)
5049     return NULL;
5050
5051   if ((t = get_AT_ref (die, DW_AT_abstract_origin))
5052       || (t = get_AT_ref (die, DW_AT_specification)))
5053     die = t;
5054
5055   return die->die_parent;
5056 }
5057
5058 /* Return the "low pc" attribute value, typically associated with a subprogram
5059    DIE.  Return null if the "low pc" attribute is either not present, or if it
5060    cannot be represented as an assembler label identifier.  */
5061
5062 static inline const char *
5063 get_AT_low_pc (dw_die_ref die)
5064 {
5065   dw_attr_node *a = get_AT (die, DW_AT_low_pc);
5066
5067   return a ? AT_lbl (a) : NULL;
5068 }
5069
5070 /* Return the "high pc" attribute value, typically associated with a subprogram
5071    DIE.  Return null if the "high pc" attribute is either not present, or if it
5072    cannot be represented as an assembler label identifier.  */
5073
5074 static inline const char *
5075 get_AT_hi_pc (dw_die_ref die)
5076 {
5077   dw_attr_node *a = get_AT (die, DW_AT_high_pc);
5078
5079   return a ? AT_lbl (a) : NULL;
5080 }
5081
5082 /* Return the value of the string attribute designated by ATTR_KIND, or
5083    NULL if it is not present.  */
5084
5085 static inline const char *
5086 get_AT_string (dw_die_ref die, enum dwarf_attribute attr_kind)
5087 {
5088   dw_attr_node *a = get_AT (die, attr_kind);
5089
5090   return a ? AT_string (a) : NULL;
5091 }
5092
5093 /* Return the value of the flag attribute designated by ATTR_KIND, or -1
5094    if it is not present.  */
5095
5096 static inline int
5097 get_AT_flag (dw_die_ref die, enum dwarf_attribute attr_kind)
5098 {
5099   dw_attr_node *a = get_AT (die, attr_kind);
5100
5101   return a ? AT_flag (a) : 0;
5102 }
5103
5104 /* Return the value of the unsigned attribute designated by ATTR_KIND, or 0
5105    if it is not present.  */
5106
5107 static inline unsigned
5108 get_AT_unsigned (dw_die_ref die, enum dwarf_attribute attr_kind)
5109 {
5110   dw_attr_node *a = get_AT (die, attr_kind);
5111
5112   return a ? AT_unsigned (a) : 0;
5113 }
5114
5115 static inline dw_die_ref
5116 get_AT_ref (dw_die_ref die, enum dwarf_attribute attr_kind)
5117 {
5118   dw_attr_node *a = get_AT (die, attr_kind);
5119
5120   return a ? AT_ref (a) : NULL;
5121 }
5122
5123 static inline struct dwarf_file_data *
5124 get_AT_file (dw_die_ref die, enum dwarf_attribute attr_kind)
5125 {
5126   dw_attr_node *a = get_AT (die, attr_kind);
5127
5128   return a ? AT_file (a) : NULL;
5129 }
5130
5131 /* Return TRUE if the language is C++.  */
5132
5133 static inline bool
5134 is_cxx (void)
5135 {
5136   unsigned int lang = get_AT_unsigned (comp_unit_die (), DW_AT_language);
5137
5138   return (lang == DW_LANG_C_plus_plus || lang == DW_LANG_ObjC_plus_plus
5139           || lang == DW_LANG_C_plus_plus_11 || lang == DW_LANG_C_plus_plus_14);
5140 }
5141
5142 /* Return TRUE if DECL was created by the C++ frontend.  */
5143
5144 static bool
5145 is_cxx (const_tree decl)
5146 {
5147   if (in_lto_p)
5148     {
5149       const_tree context = get_ultimate_context (decl);
5150       if (context && TRANSLATION_UNIT_LANGUAGE (context))
5151         return strncmp (TRANSLATION_UNIT_LANGUAGE (context), "GNU C++", 7) == 0;
5152     }
5153   return is_cxx ();
5154 }
5155
5156 /* Return TRUE if the language is Fortran.  */
5157
5158 static inline bool
5159 is_fortran (void)
5160 {
5161   unsigned int lang = get_AT_unsigned (comp_unit_die (), DW_AT_language);
5162
5163   return (lang == DW_LANG_Fortran77
5164           || lang == DW_LANG_Fortran90
5165           || lang == DW_LANG_Fortran95
5166           || lang == DW_LANG_Fortran03
5167           || lang == DW_LANG_Fortran08);
5168 }
5169
5170 static inline bool
5171 is_fortran (const_tree decl)
5172 {
5173   if (in_lto_p)
5174     {
5175       const_tree context = get_ultimate_context (decl);
5176       if (context && TRANSLATION_UNIT_LANGUAGE (context))
5177         return (strncmp (TRANSLATION_UNIT_LANGUAGE (context),
5178                          "GNU Fortran", 11) == 0
5179                 || strcmp (TRANSLATION_UNIT_LANGUAGE (context),
5180                            "GNU F77") == 0);
5181     }
5182   return is_fortran ();
5183 }
5184
5185 /* Return TRUE if the language is Ada.  */
5186
5187 static inline bool
5188 is_ada (void)
5189 {
5190   unsigned int lang = get_AT_unsigned (comp_unit_die (), DW_AT_language);
5191
5192   return lang == DW_LANG_Ada95 || lang == DW_LANG_Ada83;
5193 }
5194
5195 /* Remove the specified attribute if present.  Return TRUE if removal
5196    was successful.  */
5197
5198 static bool
5199 remove_AT (dw_die_ref die, enum dwarf_attribute attr_kind)
5200 {
5201   dw_attr_node *a;
5202   unsigned ix;
5203
5204   if (! die)
5205     return false;
5206
5207   FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
5208     if (a->dw_attr == attr_kind)
5209       {
5210         if (AT_class (a) == dw_val_class_str)
5211           if (a->dw_attr_val.v.val_str->refcount)
5212             a->dw_attr_val.v.val_str->refcount--;
5213
5214         /* vec::ordered_remove should help reduce the number of abbrevs
5215            that are needed.  */
5216         die->die_attr->ordered_remove (ix);
5217         return true;
5218       }
5219   return false;
5220 }
5221
5222 /* Remove CHILD from its parent.  PREV must have the property that
5223    PREV->DIE_SIB == CHILD.  Does not alter CHILD.  */
5224
5225 static void
5226 remove_child_with_prev (dw_die_ref child, dw_die_ref prev)
5227 {
5228   gcc_assert (child->die_parent == prev->die_parent);
5229   gcc_assert (prev->die_sib == child);
5230   if (prev == child)
5231     {
5232       gcc_assert (child->die_parent->die_child == child);
5233       prev = NULL;
5234     }
5235   else
5236     prev->die_sib = child->die_sib;
5237   if (child->die_parent->die_child == child)
5238     child->die_parent->die_child = prev;
5239   child->die_sib = NULL;
5240 }
5241
5242 /* Replace OLD_CHILD with NEW_CHILD.  PREV must have the property that
5243    PREV->DIE_SIB == OLD_CHILD.  Does not alter OLD_CHILD.  */
5244
5245 static void
5246 replace_child (dw_die_ref old_child, dw_die_ref new_child, dw_die_ref prev)
5247 {
5248   dw_die_ref parent = old_child->die_parent;
5249
5250   gcc_assert (parent == prev->die_parent);
5251   gcc_assert (prev->die_sib == old_child);
5252
5253   new_child->die_parent = parent;
5254   if (prev == old_child)
5255     {
5256       gcc_assert (parent->die_child == old_child);
5257       new_child->die_sib = new_child;
5258     }
5259   else
5260     {
5261       prev->die_sib = new_child;
5262       new_child->die_sib = old_child->die_sib;
5263     }
5264   if (old_child->die_parent->die_child == old_child)
5265     old_child->die_parent->die_child = new_child;
5266   old_child->die_sib = NULL;
5267 }
5268
5269 /* Move all children from OLD_PARENT to NEW_PARENT.  */
5270
5271 static void
5272 move_all_children (dw_die_ref old_parent, dw_die_ref new_parent)
5273 {
5274   dw_die_ref c;
5275   new_parent->die_child = old_parent->die_child;
5276   old_parent->die_child = NULL;
5277   FOR_EACH_CHILD (new_parent, c, c->die_parent = new_parent);
5278 }
5279
5280 /* Remove child DIE whose die_tag is TAG.  Do nothing if no child
5281    matches TAG.  */
5282
5283 static void
5284 remove_child_TAG (dw_die_ref die, enum dwarf_tag tag)
5285 {
5286   dw_die_ref c;
5287
5288   c = die->die_child;
5289   if (c) do {
5290     dw_die_ref prev = c;
5291     c = c->die_sib;
5292     while (c->die_tag == tag)
5293       {
5294         remove_child_with_prev (c, prev);
5295         c->die_parent = NULL;
5296         /* Might have removed every child.  */
5297         if (die->die_child == NULL)
5298           return;
5299         c = prev->die_sib;
5300       }
5301   } while (c != die->die_child);
5302 }
5303
5304 /* Add a CHILD_DIE as the last child of DIE.  */
5305
5306 static void
5307 add_child_die (dw_die_ref die, dw_die_ref child_die)
5308 {
5309   /* FIXME this should probably be an assert.  */
5310   if (! die || ! child_die)
5311     return;
5312   gcc_assert (die != child_die);
5313
5314   child_die->die_parent = die;
5315   if (die->die_child)
5316     {
5317       child_die->die_sib = die->die_child->die_sib;
5318       die->die_child->die_sib = child_die;
5319     }
5320   else
5321     child_die->die_sib = child_die;
5322   die->die_child = child_die;
5323 }
5324
5325 /* Like add_child_die, but put CHILD_DIE after AFTER_DIE.  */
5326
5327 static void
5328 add_child_die_after (dw_die_ref die, dw_die_ref child_die,
5329                      dw_die_ref after_die)
5330 {
5331   gcc_assert (die
5332               && child_die
5333               && after_die
5334               && die->die_child
5335               && die != child_die);
5336
5337   child_die->die_parent = die;
5338   child_die->die_sib = after_die->die_sib;
5339   after_die->die_sib = child_die;
5340   if (die->die_child == after_die)
5341     die->die_child = child_die;
5342 }
5343
5344 /* Unassociate CHILD from its parent, and make its parent be
5345    NEW_PARENT.  */
5346
5347 static void
5348 reparent_child (dw_die_ref child, dw_die_ref new_parent)
5349 {
5350   for (dw_die_ref p = child->die_parent->die_child; ; p = p->die_sib)
5351     if (p->die_sib == child)
5352       {
5353         remove_child_with_prev (child, p);
5354         break;
5355       }
5356   add_child_die (new_parent, child);
5357 }
5358
5359 /* Move CHILD, which must be a child of PARENT or the DIE for which PARENT
5360    is the specification, to the end of PARENT's list of children.
5361    This is done by removing and re-adding it.  */
5362
5363 static void
5364 splice_child_die (dw_die_ref parent, dw_die_ref child)
5365 {
5366   /* We want the declaration DIE from inside the class, not the
5367      specification DIE at toplevel.  */
5368   if (child->die_parent != parent)
5369     {
5370       dw_die_ref tmp = get_AT_ref (child, DW_AT_specification);
5371
5372       if (tmp)
5373         child = tmp;
5374     }
5375
5376   gcc_assert (child->die_parent == parent
5377               || (child->die_parent
5378                   == get_AT_ref (parent, DW_AT_specification)));
5379
5380   reparent_child (child, parent);
5381 }
5382
5383 /* Create and return a new die with TAG_VALUE as tag.  */
5384  
5385 static inline dw_die_ref
5386 new_die_raw (enum dwarf_tag tag_value)
5387 {
5388   dw_die_ref die = ggc_cleared_alloc<die_node> ();
5389   die->die_tag = tag_value;
5390   return die;
5391 }
5392
5393 /* Create and return a new die with a parent of PARENT_DIE.  If
5394    PARENT_DIE is NULL, the new DIE is placed in limbo and an
5395    associated tree T must be supplied to determine parenthood
5396    later.  */
5397
5398 static inline dw_die_ref
5399 new_die (enum dwarf_tag tag_value, dw_die_ref parent_die, tree t)
5400 {
5401   dw_die_ref die = new_die_raw (tag_value);
5402
5403   if (parent_die != NULL)
5404     add_child_die (parent_die, die);
5405   else
5406     {
5407       limbo_die_node *limbo_node;
5408
5409       /* No DIEs created after early dwarf should end up in limbo,
5410          because the limbo list should not persist past LTO
5411          streaming.  */
5412       if (tag_value != DW_TAG_compile_unit
5413           /* These are allowed because they're generated while
5414              breaking out COMDAT units late.  */
5415           && tag_value != DW_TAG_type_unit
5416           && tag_value != DW_TAG_skeleton_unit
5417           && !early_dwarf
5418           /* Allow nested functions to live in limbo because they will
5419              only temporarily live there, as decls_for_scope will fix
5420              them up.  */
5421           && (TREE_CODE (t) != FUNCTION_DECL
5422               || !decl_function_context (t))
5423           /* Same as nested functions above but for types.  Types that
5424              are local to a function will be fixed in
5425              decls_for_scope.  */
5426           && (!RECORD_OR_UNION_TYPE_P (t)
5427               || !TYPE_CONTEXT (t)
5428               || TREE_CODE (TYPE_CONTEXT (t)) != FUNCTION_DECL)
5429           /* FIXME debug-early: Allow late limbo DIE creation for LTO,
5430              especially in the ltrans stage, but once we implement LTO
5431              dwarf streaming, we should remove this exception.  */
5432           && !in_lto_p)
5433         {
5434           fprintf (stderr, "symbol ended up in limbo too late:");
5435           debug_generic_stmt (t);
5436           gcc_unreachable ();
5437         }
5438
5439       limbo_node = ggc_cleared_alloc<limbo_die_node> ();
5440       limbo_node->die = die;
5441       limbo_node->created_for = t;
5442       limbo_node->next = limbo_die_list;
5443       limbo_die_list = limbo_node;
5444     }
5445
5446   return die;
5447 }
5448
5449 /* Return the DIE associated with the given type specifier.  */
5450
5451 static inline dw_die_ref
5452 lookup_type_die (tree type)
5453 {
5454   dw_die_ref die = TYPE_SYMTAB_DIE (type);
5455   if (die && die->removed)
5456     {
5457       TYPE_SYMTAB_DIE (type) = NULL;
5458       return NULL;
5459     }
5460   return die;
5461 }
5462
5463 /* Given a TYPE_DIE representing the type TYPE, if TYPE is an
5464    anonymous type named by the typedef TYPE_DIE, return the DIE of the
5465    anonymous type instead the one of the naming typedef.  */
5466
5467 static inline dw_die_ref
5468 strip_naming_typedef (tree type, dw_die_ref type_die)
5469 {
5470   if (type
5471       && TREE_CODE (type) == RECORD_TYPE
5472       && type_die
5473       && type_die->die_tag == DW_TAG_typedef
5474       && is_naming_typedef_decl (TYPE_NAME (type)))
5475     type_die = get_AT_ref (type_die, DW_AT_type);
5476   return type_die;
5477 }
5478
5479 /* Like lookup_type_die, but if type is an anonymous type named by a
5480    typedef[1], return the DIE of the anonymous type instead the one of
5481    the naming typedef.  This is because in gen_typedef_die, we did
5482    equate the anonymous struct named by the typedef with the DIE of
5483    the naming typedef. So by default, lookup_type_die on an anonymous
5484    struct yields the DIE of the naming typedef.
5485
5486    [1]: Read the comment of is_naming_typedef_decl to learn about what
5487    a naming typedef is.  */
5488
5489 static inline dw_die_ref
5490 lookup_type_die_strip_naming_typedef (tree type)
5491 {
5492   dw_die_ref die = lookup_type_die (type);
5493   return strip_naming_typedef (type, die);
5494 }
5495
5496 /* Equate a DIE to a given type specifier.  */
5497
5498 static inline void
5499 equate_type_number_to_die (tree type, dw_die_ref type_die)
5500 {
5501   TYPE_SYMTAB_DIE (type) = type_die;
5502 }
5503
5504 /* Returns a hash value for X (which really is a die_struct).  */
5505
5506 inline hashval_t
5507 decl_die_hasher::hash (die_node *x)
5508 {
5509   return (hashval_t) x->decl_id;
5510 }
5511
5512 /* Return nonzero if decl_id of die_struct X is the same as UID of decl *Y.  */
5513
5514 inline bool
5515 decl_die_hasher::equal (die_node *x, tree y)
5516 {
5517   return (x->decl_id == DECL_UID (y));
5518 }
5519
5520 /* Return the DIE associated with a given declaration.  */
5521
5522 static inline dw_die_ref
5523 lookup_decl_die (tree decl)
5524 {
5525   dw_die_ref *die = decl_die_table->find_slot_with_hash (decl, DECL_UID (decl),
5526                                                          NO_INSERT);
5527   if (!die)
5528     return NULL;
5529   if ((*die)->removed)
5530     {
5531       decl_die_table->clear_slot (die);
5532       return NULL;
5533     }
5534   return *die;
5535 }
5536
5537
5538 /* For DECL which might have early dwarf output query a SYMBOL + OFFSET
5539    style reference.  Return true if we found one refering to a DIE for
5540    DECL, otherwise return false.  */
5541
5542 static bool
5543 dwarf2out_die_ref_for_decl (tree decl, const char **sym,
5544                             unsigned HOST_WIDE_INT *off)
5545 {
5546   dw_die_ref die;
5547
5548   if (flag_wpa && !decl_die_table)
5549     return false;
5550
5551   if (TREE_CODE (decl) == BLOCK)
5552     die = BLOCK_DIE (decl);
5553   else
5554     die = lookup_decl_die (decl);
5555   if (!die)
5556     return false;
5557
5558   /* During WPA stage we currently use DIEs to store the
5559      decl <-> label + offset map.  That's quite inefficient but it
5560      works for now.  */
5561   if (flag_wpa)
5562     {
5563       dw_die_ref ref = get_AT_ref (die, DW_AT_abstract_origin);
5564       if (!ref)
5565         {
5566           gcc_assert (die == comp_unit_die ());
5567           return false;
5568         }
5569       *off = ref->die_offset;
5570       *sym = ref->die_id.die_symbol;
5571       return true;
5572     }
5573
5574   /* Similar to get_ref_die_offset_label, but using the "correct"
5575      label.  */
5576   *off = die->die_offset;
5577   while (die->die_parent)
5578     die = die->die_parent;
5579   /* For the containing CU DIE we compute a die_symbol in
5580      compute_comp_unit_symbol.  */
5581   gcc_assert (die->die_tag == DW_TAG_compile_unit
5582               && die->die_id.die_symbol != NULL);
5583   *sym = die->die_id.die_symbol;
5584   return true;
5585 }
5586
5587 /* Add a reference of kind ATTR_KIND to a DIE at SYMBOL + OFFSET to DIE.  */
5588
5589 static void
5590 add_AT_external_die_ref (dw_die_ref die, enum dwarf_attribute attr_kind,
5591                          const char *symbol, HOST_WIDE_INT offset)
5592 {
5593   /* Create a fake DIE that contains the reference.  Don't use
5594      new_die because we don't want to end up in the limbo list.  */
5595   dw_die_ref ref = new_die_raw (die->die_tag);
5596   ref->die_id.die_symbol = IDENTIFIER_POINTER (get_identifier (symbol));
5597   ref->die_offset = offset;
5598   ref->with_offset = 1;
5599   add_AT_die_ref (die, attr_kind, ref);
5600 }
5601
5602 /* Create a DIE for DECL if required and add a reference to a DIE
5603    at SYMBOL + OFFSET which contains attributes dumped early.  */
5604
5605 static void
5606 dwarf2out_register_external_die (tree decl, const char *sym,
5607                                  unsigned HOST_WIDE_INT off)
5608 {
5609   if (debug_info_level == DINFO_LEVEL_NONE)
5610     return;
5611
5612   if (flag_wpa && !decl_die_table)
5613     decl_die_table = hash_table<decl_die_hasher>::create_ggc (1000);
5614
5615   dw_die_ref die
5616     = TREE_CODE (decl) == BLOCK ? BLOCK_DIE (decl) : lookup_decl_die (decl);
5617   gcc_assert (!die);
5618
5619   tree ctx;
5620   dw_die_ref parent = NULL;
5621   /* Need to lookup a DIE for the decls context - the containing
5622      function or translation unit.  */
5623   if (TREE_CODE (decl) == BLOCK)
5624     {
5625       ctx = BLOCK_SUPERCONTEXT (decl);
5626       /* ???  We do not output DIEs for all scopes thus skip as
5627          many DIEs as needed.  */
5628       while (TREE_CODE (ctx) == BLOCK
5629              && !BLOCK_DIE (ctx))
5630         ctx = BLOCK_SUPERCONTEXT (ctx);
5631     }
5632   else
5633     ctx = DECL_CONTEXT (decl);
5634   while (ctx && TYPE_P (ctx))
5635     ctx = TYPE_CONTEXT (ctx);
5636   if (ctx)
5637     {
5638       if (TREE_CODE (ctx) == BLOCK)
5639         parent = BLOCK_DIE (ctx);
5640       else if (TREE_CODE (ctx) == TRANSLATION_UNIT_DECL
5641                /* Keep the 1:1 association during WPA.  */
5642                && !flag_wpa)
5643         /* Otherwise all late annotations go to the main CU which
5644            imports the original CUs.  */
5645         parent = comp_unit_die ();
5646       else if (TREE_CODE (ctx) == FUNCTION_DECL
5647                && TREE_CODE (decl) != PARM_DECL
5648                && TREE_CODE (decl) != BLOCK)
5649         /* Leave function local entities parent determination to when
5650            we process scope vars.  */
5651         ;
5652       else
5653         parent = lookup_decl_die (ctx);
5654     }
5655   else
5656     /* In some cases the FEs fail to set DECL_CONTEXT properly.
5657        Handle this case gracefully by globalizing stuff.  */
5658     parent = comp_unit_die ();
5659   /* Create a DIE "stub".  */
5660   switch (TREE_CODE (decl))
5661     {
5662     case TRANSLATION_UNIT_DECL:
5663       if (! flag_wpa)
5664         {
5665           die = comp_unit_die ();
5666           dw_die_ref import = new_die (DW_TAG_imported_unit, die, NULL_TREE);
5667           add_AT_external_die_ref (import, DW_AT_import, sym, off);
5668           /* We re-target all CU decls to the LTRANS CU DIE, so no need
5669              to create a DIE for the original CUs.  */
5670           return;
5671         }
5672       /* Keep the 1:1 association during WPA.  */
5673       die = new_die (DW_TAG_compile_unit, NULL, decl);
5674       break;
5675     case NAMESPACE_DECL:
5676       if (is_fortran (decl))
5677         die = new_die (DW_TAG_module, parent, decl);
5678       else
5679         die = new_die (DW_TAG_namespace, parent, decl);
5680       break;
5681     case FUNCTION_DECL:
5682       die = new_die (DW_TAG_subprogram, parent, decl);
5683       break;
5684     case VAR_DECL:
5685       die = new_die (DW_TAG_variable, parent, decl);
5686       break;
5687     case RESULT_DECL:
5688       die = new_die (DW_TAG_variable, parent, decl);
5689       break;
5690     case PARM_DECL:
5691       die = new_die (DW_TAG_formal_parameter, parent, decl);
5692       break;
5693     case CONST_DECL:
5694       die = new_die (DW_TAG_constant, parent, decl);
5695       break;
5696     case LABEL_DECL:
5697       die = new_die (DW_TAG_label, parent, decl);
5698       break;
5699     case BLOCK:
5700       die = new_die (DW_TAG_lexical_block, parent, decl);
5701       break;
5702     default:
5703       gcc_unreachable ();
5704     }
5705   if (TREE_CODE (decl) == BLOCK)
5706     BLOCK_DIE (decl) = die;
5707   else
5708     equate_decl_number_to_die (decl, die);
5709
5710   /* Add a reference to the DIE providing early debug at $sym + off.  */
5711   add_AT_external_die_ref (die, DW_AT_abstract_origin, sym, off);
5712 }
5713
5714 /* Returns a hash value for X (which really is a var_loc_list).  */
5715
5716 inline hashval_t
5717 decl_loc_hasher::hash (var_loc_list *x)
5718 {
5719   return (hashval_t) x->decl_id;
5720 }
5721
5722 /* Return nonzero if decl_id of var_loc_list X is the same as
5723    UID of decl *Y.  */
5724
5725 inline bool
5726 decl_loc_hasher::equal (var_loc_list *x, const_tree y)
5727 {
5728   return (x->decl_id == DECL_UID (y));
5729 }
5730
5731 /* Return the var_loc list associated with a given declaration.  */
5732
5733 static inline var_loc_list *
5734 lookup_decl_loc (const_tree decl)
5735 {
5736   if (!decl_loc_table)
5737     return NULL;
5738   return decl_loc_table->find_with_hash (decl, DECL_UID (decl));
5739 }
5740
5741 /* Returns a hash value for X (which really is a cached_dw_loc_list_list).  */
5742
5743 inline hashval_t
5744 dw_loc_list_hasher::hash (cached_dw_loc_list *x)
5745 {
5746   return (hashval_t) x->decl_id;
5747 }
5748
5749 /* Return nonzero if decl_id of cached_dw_loc_list X is the same as
5750    UID of decl *Y.  */
5751
5752 inline bool
5753 dw_loc_list_hasher::equal (cached_dw_loc_list *x, const_tree y)
5754 {
5755   return (x->decl_id == DECL_UID (y));
5756 }
5757
5758 /* Equate a DIE to a particular declaration.  */
5759
5760 static void
5761 equate_decl_number_to_die (tree decl, dw_die_ref decl_die)
5762 {
5763   unsigned int decl_id = DECL_UID (decl);
5764
5765   *decl_die_table->find_slot_with_hash (decl, decl_id, INSERT) = decl_die;
5766   decl_die->decl_id = decl_id;
5767 }
5768
5769 /* Return how many bits covers PIECE EXPR_LIST.  */
5770
5771 static HOST_WIDE_INT
5772 decl_piece_bitsize (rtx piece)
5773 {
5774   int ret = (int) GET_MODE (piece);
5775   if (ret)
5776     return ret;
5777   gcc_assert (GET_CODE (XEXP (piece, 0)) == CONCAT
5778               && CONST_INT_P (XEXP (XEXP (piece, 0), 0)));
5779   return INTVAL (XEXP (XEXP (piece, 0), 0));
5780 }
5781
5782 /* Return pointer to the location of location note in PIECE EXPR_LIST.  */
5783
5784 static rtx *
5785 decl_piece_varloc_ptr (rtx piece)
5786 {
5787   if ((int) GET_MODE (piece))
5788     return &XEXP (piece, 0);
5789   else
5790     return &XEXP (XEXP (piece, 0), 1);
5791 }
5792
5793 /* Create an EXPR_LIST for location note LOC_NOTE covering BITSIZE bits.
5794    Next is the chain of following piece nodes.  */
5795
5796 static rtx_expr_list *
5797 decl_piece_node (rtx loc_note, HOST_WIDE_INT bitsize, rtx next)
5798 {
5799   if (bitsize > 0 && bitsize <= (int) MAX_MACHINE_MODE)
5800     return alloc_EXPR_LIST (bitsize, loc_note, next);
5801   else
5802     return alloc_EXPR_LIST (0, gen_rtx_CONCAT (VOIDmode,
5803                                                GEN_INT (bitsize),
5804                                                loc_note), next);
5805 }
5806
5807 /* Return rtx that should be stored into loc field for
5808    LOC_NOTE and BITPOS/BITSIZE.  */
5809
5810 static rtx
5811 construct_piece_list (rtx loc_note, HOST_WIDE_INT bitpos,
5812                       HOST_WIDE_INT bitsize)
5813 {
5814   if (bitsize != -1)
5815     {
5816       loc_note = decl_piece_node (loc_note, bitsize, NULL_RTX);
5817       if (bitpos != 0)
5818         loc_note = decl_piece_node (NULL_RTX, bitpos, loc_note);
5819     }
5820   return loc_note;
5821 }
5822
5823 /* This function either modifies location piece list *DEST in
5824    place (if SRC and INNER is NULL), or copies location piece list
5825    *SRC to *DEST while modifying it.  Location BITPOS is modified
5826    to contain LOC_NOTE, any pieces overlapping it are removed resp.
5827    not copied and if needed some padding around it is added.
5828    When modifying in place, DEST should point to EXPR_LIST where
5829    earlier pieces cover PIECE_BITPOS bits, when copying SRC points
5830    to the start of the whole list and INNER points to the EXPR_LIST
5831    where earlier pieces cover PIECE_BITPOS bits.  */
5832
5833 static void
5834 adjust_piece_list (rtx *dest, rtx *src, rtx *inner,
5835                    HOST_WIDE_INT bitpos, HOST_WIDE_INT piece_bitpos,
5836                    HOST_WIDE_INT bitsize, rtx loc_note)
5837 {
5838   HOST_WIDE_INT diff;
5839   bool copy = inner != NULL;
5840
5841   if (copy)
5842     {
5843       /* First copy all nodes preceding the current bitpos.  */
5844       while (src != inner)
5845         {
5846           *dest = decl_piece_node (*decl_piece_varloc_ptr (*src),
5847                                    decl_piece_bitsize (*src), NULL_RTX);
5848           dest = &XEXP (*dest, 1);
5849           src = &XEXP (*src, 1);
5850         }
5851     }
5852   /* Add padding if needed.  */
5853   if (bitpos != piece_bitpos)
5854     {
5855       *dest = decl_piece_node (NULL_RTX, bitpos - piece_bitpos,
5856                                copy ? NULL_RTX : *dest);
5857       dest = &XEXP (*dest, 1);
5858     }
5859   else if (*dest && decl_piece_bitsize (*dest) == bitsize)
5860     {
5861       gcc_assert (!copy);
5862       /* A piece with correct bitpos and bitsize already exist,
5863          just update the location for it and return.  */
5864       *decl_piece_varloc_ptr (*dest) = loc_note;
5865       return;
5866     }
5867   /* Add the piece that changed.  */
5868   *dest = decl_piece_node (loc_note, bitsize, copy ? NULL_RTX : *dest);
5869   dest = &XEXP (*dest, 1);
5870   /* Skip over pieces that overlap it.  */
5871   diff = bitpos - piece_bitpos + bitsize;
5872   if (!copy)
5873     src = dest;
5874   while (diff > 0 && *src)
5875     {
5876       rtx piece = *src;
5877       diff -= decl_piece_bitsize (piece);
5878       if (copy)
5879         src = &XEXP (piece, 1);
5880       else
5881         {
5882           *src = XEXP (piece, 1);
5883           free_EXPR_LIST_node (piece);
5884         }
5885     }
5886   /* Add padding if needed.  */
5887   if (diff < 0 && *src)
5888     {
5889       if (!copy)
5890         dest = src;
5891       *dest = decl_piece_node (NULL_RTX, -diff, copy ? NULL_RTX : *dest);
5892       dest = &XEXP (*dest, 1);
5893     }
5894   if (!copy)
5895     return;
5896   /* Finally copy all nodes following it.  */
5897   while (*src)
5898     {
5899       *dest = decl_piece_node (*decl_piece_varloc_ptr (*src),
5900                                decl_piece_bitsize (*src), NULL_RTX);
5901       dest = &XEXP (*dest, 1);
5902       src = &XEXP (*src, 1);
5903     }
5904 }
5905
5906 /* Add a variable location node to the linked list for DECL.  */
5907
5908 static struct var_loc_node *
5909 add_var_loc_to_decl (tree decl, rtx loc_note, const char *label)
5910 {
5911   unsigned int decl_id;
5912   var_loc_list *temp;
5913   struct var_loc_node *loc = NULL;
5914   HOST_WIDE_INT bitsize = -1, bitpos = -1;
5915
5916   if (VAR_P (decl) && DECL_HAS_DEBUG_EXPR_P (decl))
5917     {
5918       tree realdecl = DECL_DEBUG_EXPR (decl);
5919       if (handled_component_p (realdecl)
5920           || (TREE_CODE (realdecl) == MEM_REF
5921               && TREE_CODE (TREE_OPERAND (realdecl, 0)) == ADDR_EXPR))
5922         {
5923           bool reverse;
5924           tree innerdecl = get_ref_base_and_extent_hwi (realdecl, &bitpos,
5925                                                         &bitsize, &reverse);
5926           if (!innerdecl
5927               || !DECL_P (innerdecl)
5928               || DECL_IGNORED_P (innerdecl)
5929               || TREE_STATIC (innerdecl)
5930               || bitsize == 0
5931               || bitpos + bitsize > 256)
5932             return NULL;
5933           decl = innerdecl;
5934         }
5935     }
5936
5937   decl_id = DECL_UID (decl);
5938   var_loc_list **slot
5939     = decl_loc_table->find_slot_with_hash (decl, decl_id, INSERT);
5940   if (*slot == NULL)
5941     {
5942       temp = ggc_cleared_alloc<var_loc_list> ();
5943       temp->decl_id = decl_id;
5944       *slot = temp;
5945     }
5946   else
5947     temp = *slot;
5948
5949   /* For PARM_DECLs try to keep around the original incoming value,
5950      even if that means we'll emit a zero-range .debug_loc entry.  */
5951   if (temp->last
5952       && temp->first == temp->last
5953       && TREE_CODE (decl) == PARM_DECL
5954       && NOTE_P (temp->first->loc)
5955       && NOTE_VAR_LOCATION_DECL (temp->first->loc) == decl
5956       && DECL_INCOMING_RTL (decl)
5957       && NOTE_VAR_LOCATION_LOC (temp->first->loc)
5958       && GET_CODE (NOTE_VAR_LOCATION_LOC (temp->first->loc))
5959          == GET_CODE (DECL_INCOMING_RTL (decl))
5960       && prev_real_insn (as_a<rtx_insn *> (temp->first->loc)) == NULL_RTX
5961       && (bitsize != -1
5962           || !rtx_equal_p (NOTE_VAR_LOCATION_LOC (temp->first->loc),
5963                            NOTE_VAR_LOCATION_LOC (loc_note))
5964           || (NOTE_VAR_LOCATION_STATUS (temp->first->loc)
5965               != NOTE_VAR_LOCATION_STATUS (loc_note))))
5966     {
5967       loc = ggc_cleared_alloc<var_loc_node> ();
5968       temp->first->next = loc;
5969       temp->last = loc;
5970       loc->loc = construct_piece_list (loc_note, bitpos, bitsize);
5971     }
5972   else if (temp->last)
5973     {
5974       struct var_loc_node *last = temp->last, *unused = NULL;
5975       rtx *piece_loc = NULL, last_loc_note;
5976       HOST_WIDE_INT piece_bitpos = 0;
5977       if (last->next)
5978         {
5979           last = last->next;
5980           gcc_assert (last->next == NULL);
5981         }
5982       if (bitsize != -1 && GET_CODE (last->loc) == EXPR_LIST)
5983         {
5984           piece_loc = &last->loc;
5985           do
5986             {
5987               HOST_WIDE_INT cur_bitsize = decl_piece_bitsize (*piece_loc);
5988               if (piece_bitpos + cur_bitsize > bitpos)
5989                 break;
5990               piece_bitpos += cur_bitsize;
5991               piece_loc = &XEXP (*piece_loc, 1);
5992             }
5993           while (*piece_loc);
5994         }
5995       /* TEMP->LAST here is either pointer to the last but one or
5996          last element in the chained list, LAST is pointer to the
5997          last element.  */
5998       if (label && strcmp (last->label, label) == 0)
5999         {
6000           /* For SRA optimized variables if there weren't any real
6001              insns since last note, just modify the last node.  */
6002           if (piece_loc != NULL)
6003             {
6004               adjust_piece_list (piece_loc, NULL, NULL,
6005                                  bitpos, piece_bitpos, bitsize, loc_note);
6006               return NULL;
6007             }
6008           /* If the last note doesn't cover any instructions, remove it.  */
6009           if (temp->last != last)
6010             {
6011               temp->last->next = NULL;
6012               unused = last;
6013               last = temp->last;
6014               gcc_assert (strcmp (last->label, label) != 0);
6015             }
6016           else
6017             {
6018               gcc_assert (temp->first == temp->last
6019                           || (temp->first->next == temp->last
6020                               && TREE_CODE (decl) == PARM_DECL));
6021               memset (temp->last, '\0', sizeof (*temp->last));
6022               temp->last->loc = construct_piece_list (loc_note, bitpos, bitsize);
6023               return temp->last;
6024             }
6025         }
6026       if (bitsize == -1 && NOTE_P (last->loc))
6027         last_loc_note = last->loc;
6028       else if (piece_loc != NULL
6029                && *piece_loc != NULL_RTX
6030                && piece_bitpos == bitpos
6031                && decl_piece_bitsize (*piece_loc) == bitsize)
6032         last_loc_note = *decl_piece_varloc_ptr (*piece_loc);
6033       else
6034         last_loc_note = NULL_RTX;
6035       /* If the current location is the same as the end of the list,
6036          and either both or neither of the locations is uninitialized,
6037          we have nothing to do.  */
6038       if (last_loc_note == NULL_RTX
6039           || (!rtx_equal_p (NOTE_VAR_LOCATION_LOC (last_loc_note),
6040                             NOTE_VAR_LOCATION_LOC (loc_note)))
6041           || ((NOTE_VAR_LOCATION_STATUS (last_loc_note)
6042                != NOTE_VAR_LOCATION_STATUS (loc_note))
6043               && ((NOTE_VAR_LOCATION_STATUS (last_loc_note)
6044                    == VAR_INIT_STATUS_UNINITIALIZED)
6045                   || (NOTE_VAR_LOCATION_STATUS (loc_note)
6046                       == VAR_INIT_STATUS_UNINITIALIZED))))
6047         {
6048           /* Add LOC to the end of list and update LAST.  If the last
6049              element of the list has been removed above, reuse its
6050              memory for the new node, otherwise allocate a new one.  */
6051           if (unused)
6052             {
6053               loc = unused;
6054               memset (loc, '\0', sizeof (*loc));
6055             }
6056           else
6057             loc = ggc_cleared_alloc<var_loc_node> ();
6058           if (bitsize == -1 || piece_loc == NULL)
6059             loc->loc = construct_piece_list (loc_note, bitpos, bitsize);
6060           else
6061             adjust_piece_list (&loc->loc, &last->loc, piece_loc,
6062                                bitpos, piece_bitpos, bitsize, loc_note);
6063           last->next = loc;
6064           /* Ensure TEMP->LAST will point either to the new last but one
6065              element of the chain, or to the last element in it.  */
6066           if (last != temp->last)
6067             temp->last = last;
6068         }
6069       else if (unused)
6070         ggc_free (unused);
6071     }
6072   else
6073     {
6074       loc = ggc_cleared_alloc<var_loc_node> ();
6075       temp->first = loc;
6076       temp->last = loc;
6077       loc->loc = construct_piece_list (loc_note, bitpos, bitsize);
6078     }
6079   return loc;
6080 }
6081 \f
6082 /* Keep track of the number of spaces used to indent the
6083    output of the debugging routines that print the structure of
6084    the DIE internal representation.  */
6085 static int print_indent;
6086
6087 /* Indent the line the number of spaces given by print_indent.  */
6088
6089 static inline void
6090 print_spaces (FILE *outfile)
6091 {
6092   fprintf (outfile, "%*s", print_indent, "");
6093 }
6094
6095 /* Print a type signature in hex.  */
6096
6097 static inline void
6098 print_signature (FILE *outfile, char *sig)
6099 {
6100   int i;
6101
6102   for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++)
6103     fprintf (outfile, "%02x", sig[i] & 0xff);
6104 }
6105
6106 static inline void
6107 print_discr_value (FILE *outfile, dw_discr_value *discr_value)
6108 {
6109   if (discr_value->pos)
6110     fprintf (outfile, HOST_WIDE_INT_PRINT_UNSIGNED, discr_value->v.sval);
6111   else
6112     fprintf (outfile, HOST_WIDE_INT_PRINT_DEC, discr_value->v.uval);
6113 }
6114
6115 static void print_loc_descr (dw_loc_descr_ref, FILE *);
6116
6117 /* Print the value associated to the VAL DWARF value node to OUTFILE.  If
6118    RECURSE, output location descriptor operations.  */
6119
6120 static void
6121 print_dw_val (dw_val_node *val, bool recurse, FILE *outfile)
6122 {
6123   switch (val->val_class)
6124     {
6125     case dw_val_class_addr:
6126       fprintf (outfile, "address");
6127       break;
6128     case dw_val_class_offset:
6129       fprintf (outfile, "offset");
6130       break;
6131     case dw_val_class_loc:
6132       fprintf (outfile, "location descriptor");
6133       if (val->v.val_loc == NULL)
6134         fprintf (outfile, " -> <null>\n");
6135       else if (recurse)
6136         {
6137           fprintf (outfile, ":\n");
6138           print_indent += 4;
6139           print_loc_descr (val->v.val_loc, outfile);
6140           print_indent -= 4;
6141         }
6142       else
6143         fprintf (outfile, " (%p)\n", (void *) val->v.val_loc);
6144       break;
6145     case dw_val_class_loc_list:
6146       fprintf (outfile, "location list -> label:%s",
6147                val->v.val_loc_list->ll_symbol);
6148       break;
6149     case dw_val_class_range_list:
6150       fprintf (outfile, "range list");
6151       break;
6152     case dw_val_class_const:
6153     case dw_val_class_const_implicit:
6154       fprintf (outfile, HOST_WIDE_INT_PRINT_DEC, val->v.val_int);
6155       break;
6156     case dw_val_class_unsigned_const:
6157     case dw_val_class_unsigned_const_implicit:
6158       fprintf (outfile, HOST_WIDE_INT_PRINT_UNSIGNED, val->v.val_unsigned);
6159       break;
6160     case dw_val_class_const_double:
6161       fprintf (outfile, "constant (" HOST_WIDE_INT_PRINT_DEC","\
6162                         HOST_WIDE_INT_PRINT_UNSIGNED")",
6163                val->v.val_double.high,
6164                val->v.val_double.low);
6165       break;
6166     case dw_val_class_wide_int:
6167       {
6168         int i = val->v.val_wide->get_len ();
6169         fprintf (outfile, "constant (");
6170         gcc_assert (i > 0);
6171         if (val->v.val_wide->elt (i - 1) == 0)
6172           fprintf (outfile, "0x");
6173         fprintf (outfile, HOST_WIDE_INT_PRINT_HEX,
6174                  val->v.val_wide->elt (--i));
6175         while (--i >= 0)
6176           fprintf (outfile, HOST_WIDE_INT_PRINT_PADDED_HEX,
6177                    val->v.val_wide->elt (i));
6178         fprintf (outfile, ")");
6179         break;
6180       }
6181     case dw_val_class_vec:
6182       fprintf (outfile, "floating-point or vector constant");
6183       break;
6184     case dw_val_class_flag:
6185       fprintf (outfile, "%u", val->v.val_flag);
6186       break;
6187     case dw_val_class_die_ref:
6188       if (val->v.val_die_ref.die != NULL)
6189         {
6190           dw_die_ref die = val->v.val_die_ref.die;
6191
6192           if (die->comdat_type_p)
6193             {
6194               fprintf (outfile, "die -> signature: ");
6195               print_signature (outfile,
6196                                die->die_id.die_type_node->signature);
6197             }
6198           else if (die->die_id.die_symbol)
6199             {
6200               fprintf (outfile, "die -> label: %s", die->die_id.die_symbol);
6201               if (die->with_offset)
6202                 fprintf (outfile, " + %ld", die->die_offset);
6203             }
6204           else
6205             fprintf (outfile, "die -> %ld", die->die_offset);
6206           fprintf (outfile, " (%p)", (void *) die);
6207         }
6208       else
6209         fprintf (outfile, "die -> <null>");
6210       break;
6211     case dw_val_class_vms_delta:
6212       fprintf (outfile, "delta: @slotcount(%s-%s)",
6213                val->v.val_vms_delta.lbl2, val->v.val_vms_delta.lbl1);
6214       break;
6215     case dw_val_class_lbl_id:
6216     case dw_val_class_lineptr:
6217     case dw_val_class_macptr:
6218     case dw_val_class_loclistsptr:
6219     case dw_val_class_high_pc:
6220       fprintf (outfile, "label: %s", val->v.val_lbl_id);
6221       break;
6222     case dw_val_class_str:
6223       if (val->v.val_str->str != NULL)
6224         fprintf (outfile, "\"%s\"", val->v.val_str->str);
6225       else
6226         fprintf (outfile, "<null>");
6227       break;
6228     case dw_val_class_file:
6229     case dw_val_class_file_implicit:
6230       fprintf (outfile, "\"%s\" (%d)", val->v.val_file->filename,
6231                val->v.val_file->emitted_number);
6232       break;
6233     case dw_val_class_data8:
6234       {
6235         int i;
6236
6237         for (i = 0; i < 8; i++)
6238           fprintf (outfile, "%02x", val->v.val_data8[i]);
6239         break;
6240       }
6241     case dw_val_class_discr_value:
6242       print_discr_value (outfile, &val->v.val_discr_value);
6243       break;
6244     case dw_val_class_discr_list:
6245       for (dw_discr_list_ref node = val->v.val_discr_list;
6246            node != NULL;
6247            node = node->dw_discr_next)
6248         {
6249           if (node->dw_discr_range)
6250             {
6251               fprintf (outfile, " .. ");
6252               print_discr_value (outfile, &node->dw_discr_lower_bound);
6253               print_discr_value (outfile, &node->dw_discr_upper_bound);
6254             }
6255           else
6256             print_discr_value (outfile, &node->dw_discr_lower_bound);
6257
6258           if (node->dw_discr_next != NULL)
6259             fprintf (outfile, " | ");
6260         }
6261     default:
6262       break;
6263     }
6264 }
6265
6266 /* Likewise, for a DIE attribute.  */
6267
6268 static void
6269 print_attribute (dw_attr_node *a, bool recurse, FILE *outfile)
6270 {
6271   print_dw_val (&a->dw_attr_val, recurse, outfile);
6272 }
6273
6274
6275 /* Print the list of operands in the LOC location description to OUTFILE.  This
6276    routine is a debugging aid only.  */
6277
6278 static void
6279 print_loc_descr (dw_loc_descr_ref loc, FILE *outfile)
6280 {
6281   dw_loc_descr_ref l = loc;
6282
6283   if (loc == NULL)
6284     {
6285       print_spaces (outfile);
6286       fprintf (outfile, "<null>\n");
6287       return;
6288     }
6289
6290   for (l = loc; l != NULL; l = l->dw_loc_next)
6291     {
6292       print_spaces (outfile);
6293       fprintf (outfile, "(%p) %s",
6294                (void *) l,
6295                dwarf_stack_op_name (l->dw_loc_opc));
6296       if (l->dw_loc_oprnd1.val_class != dw_val_class_none)
6297         {
6298           fprintf (outfile, " ");
6299           print_dw_val (&l->dw_loc_oprnd1, false, outfile);
6300         }
6301       if (l->dw_loc_oprnd2.val_class != dw_val_class_none)
6302         {
6303           fprintf (outfile, ", ");
6304           print_dw_val (&l->dw_loc_oprnd2, false, outfile);
6305         }
6306       fprintf (outfile, "\n");
6307     }
6308 }
6309
6310 /* Print the information associated with a given DIE, and its children.
6311    This routine is a debugging aid only.  */
6312
6313 static void
6314 print_die (dw_die_ref die, FILE *outfile)
6315 {
6316   dw_attr_node *a;
6317   dw_die_ref c;
6318   unsigned ix;
6319
6320   print_spaces (outfile);
6321   fprintf (outfile, "DIE %4ld: %s (%p)\n",
6322            die->die_offset, dwarf_tag_name (die->die_tag),
6323            (void*) die);
6324   print_spaces (outfile);
6325   fprintf (outfile, "  abbrev id: %lu", die->die_abbrev);
6326   fprintf (outfile, " offset: %ld", die->die_offset);
6327   fprintf (outfile, " mark: %d\n", die->die_mark);
6328
6329   if (die->comdat_type_p)
6330     {
6331       print_spaces (outfile);
6332       fprintf (outfile, "  signature: ");
6333       print_signature (outfile, die->die_id.die_type_node->signature);
6334       fprintf (outfile, "\n");
6335     }
6336
6337   FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
6338     {
6339       print_spaces (outfile);
6340       fprintf (outfile, "  %s: ", dwarf_attr_name (a->dw_attr));
6341
6342       print_attribute (a, true, outfile);
6343       fprintf (outfile, "\n");
6344     }
6345
6346   if (die->die_child != NULL)
6347     {
6348       print_indent += 4;
6349       FOR_EACH_CHILD (die, c, print_die (c, outfile));
6350       print_indent -= 4;
6351     }
6352   if (print_indent == 0)
6353     fprintf (outfile, "\n");
6354 }
6355
6356 /* Print the list of operations in the LOC location description.  */
6357
6358 DEBUG_FUNCTION void
6359 debug_dwarf_loc_descr (dw_loc_descr_ref loc)
6360 {
6361   print_loc_descr (loc, stderr);
6362 }
6363
6364 /* Print the information collected for a given DIE.  */
6365
6366 DEBUG_FUNCTION void
6367 debug_dwarf_die (dw_die_ref die)
6368 {
6369   print_die (die, stderr);
6370 }
6371
6372 DEBUG_FUNCTION void
6373 debug (die_struct &ref)
6374 {
6375   print_die (&ref, stderr);
6376 }
6377
6378 DEBUG_FUNCTION void
6379 debug (die_struct *ptr)
6380 {
6381   if (ptr)
6382     debug (*ptr);
6383   else
6384     fprintf (stderr, "<nil>\n");
6385 }
6386
6387
6388 /* Print all DWARF information collected for the compilation unit.
6389    This routine is a debugging aid only.  */
6390
6391 DEBUG_FUNCTION void
6392 debug_dwarf (void)
6393 {
6394   print_indent = 0;
6395   print_die (comp_unit_die (), stderr);
6396 }
6397
6398 /* Verify the DIE tree structure.  */
6399
6400 DEBUG_FUNCTION void
6401 verify_die (dw_die_ref die)
6402 {
6403   gcc_assert (!die->die_mark);
6404   if (die->die_parent == NULL
6405       && die->die_sib == NULL)
6406     return;
6407   /* Verify the die_sib list is cyclic.  */
6408   dw_die_ref x = die;
6409   do
6410     {
6411       x->die_mark = 1;
6412       x = x->die_sib;
6413     }
6414   while (x && !x->die_mark);
6415   gcc_assert (x == die);
6416   x = die;
6417   do
6418     {
6419       /* Verify all dies have the same parent.  */
6420       gcc_assert (x->die_parent == die->die_parent);
6421       if (x->die_child)
6422         {
6423           /* Verify the child has the proper parent and recurse.  */
6424           gcc_assert (x->die_child->die_parent == x);
6425           verify_die (x->die_child);
6426         }
6427       x->die_mark = 0;
6428       x = x->die_sib;
6429     }
6430   while (x && x->die_mark);
6431 }
6432
6433 /* Sanity checks on DIEs.  */
6434
6435 static void
6436 check_die (dw_die_ref die)
6437 {
6438   unsigned ix;
6439   dw_attr_node *a;
6440   bool inline_found = false;
6441   int n_location = 0, n_low_pc = 0, n_high_pc = 0, n_artificial = 0;
6442   int n_decl_line = 0, n_decl_column = 0, n_decl_file = 0;
6443   FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
6444     {
6445       switch (a->dw_attr)
6446         {
6447         case DW_AT_inline:
6448           if (a->dw_attr_val.v.val_unsigned)
6449             inline_found = true;
6450           break;
6451         case DW_AT_location:
6452           ++n_location;
6453           break;
6454         case DW_AT_low_pc:
6455           ++n_low_pc;
6456           break;
6457         case DW_AT_high_pc:
6458           ++n_high_pc;
6459           break;
6460         case DW_AT_artificial:
6461           ++n_artificial;
6462           break;
6463         case DW_AT_decl_column:
6464           ++n_decl_column;
6465           break;
6466         case DW_AT_decl_line:
6467           ++n_decl_line;
6468           break;
6469         case DW_AT_decl_file:
6470           ++n_decl_file;
6471           break;
6472         default:
6473           break;
6474         }
6475     }
6476   if (n_location > 1 || n_low_pc > 1 || n_high_pc > 1 || n_artificial > 1
6477       || n_decl_column > 1 || n_decl_line > 1 || n_decl_file > 1)
6478     {
6479       fprintf (stderr, "Duplicate attributes in DIE:\n");
6480       debug_dwarf_die (die);
6481       gcc_unreachable ();
6482     }
6483   if (inline_found)
6484     {
6485       /* A debugging information entry that is a member of an abstract
6486          instance tree [that has DW_AT_inline] should not contain any
6487          attributes which describe aspects of the subroutine which vary
6488          between distinct inlined expansions or distinct out-of-line
6489          expansions.  */
6490       FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
6491         gcc_assert (a->dw_attr != DW_AT_low_pc
6492                     && a->dw_attr != DW_AT_high_pc
6493                     && a->dw_attr != DW_AT_location
6494                     && a->dw_attr != DW_AT_frame_base
6495                     && a->dw_attr != DW_AT_call_all_calls
6496                     && a->dw_attr != DW_AT_GNU_all_call_sites);
6497     }
6498 }
6499 \f
6500 #define CHECKSUM(FOO) md5_process_bytes (&(FOO), sizeof (FOO), ctx)
6501 #define CHECKSUM_BLOCK(FOO, SIZE) md5_process_bytes ((FOO), (SIZE), ctx)
6502 #define CHECKSUM_STRING(FOO) md5_process_bytes ((FOO), strlen (FOO), ctx)
6503
6504 /* Calculate the checksum of a location expression.  */
6505
6506 static inline void
6507 loc_checksum (dw_loc_descr_ref loc, struct md5_ctx *ctx)
6508 {
6509   int tem;
6510   inchash::hash hstate;
6511   hashval_t hash;
6512
6513   tem = (loc->dtprel << 8) | ((unsigned int) loc->dw_loc_opc);
6514   CHECKSUM (tem);
6515   hash_loc_operands (loc, hstate);
6516   hash = hstate.end();
6517   CHECKSUM (hash);
6518 }
6519
6520 /* Calculate the checksum of an attribute.  */
6521
6522 static void
6523 attr_checksum (dw_attr_node *at, struct md5_ctx *ctx, int *mark)
6524 {
6525   dw_loc_descr_ref loc;
6526   rtx r;
6527
6528   CHECKSUM (at->dw_attr);
6529
6530   /* We don't care that this was compiled with a different compiler
6531      snapshot; if the output is the same, that's what matters.  */
6532   if (at->dw_attr == DW_AT_producer)
6533     return;
6534
6535   switch (AT_class (at))
6536     {
6537     case dw_val_class_const:
6538     case dw_val_class_const_implicit:
6539       CHECKSUM (at->dw_attr_val.v.val_int);
6540       break;
6541     case dw_val_class_unsigned_const:
6542     case dw_val_class_unsigned_const_implicit:
6543       CHECKSUM (at->dw_attr_val.v.val_unsigned);
6544       break;
6545     case dw_val_class_const_double:
6546       CHECKSUM (at->dw_attr_val.v.val_double);
6547       break;
6548     case dw_val_class_wide_int:
6549       CHECKSUM_BLOCK (at->dw_attr_val.v.val_wide->get_val (),
6550                       get_full_len (*at->dw_attr_val.v.val_wide)
6551                       * HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR);
6552       break;
6553     case dw_val_class_vec:
6554       CHECKSUM_BLOCK (at->dw_attr_val.v.val_vec.array,
6555                       (at->dw_attr_val.v.val_vec.length
6556                        * at->dw_attr_val.v.val_vec.elt_size));
6557       break;
6558     case dw_val_class_flag:
6559       CHECKSUM (at->dw_attr_val.v.val_flag);
6560       break;
6561     case dw_val_class_str:
6562       CHECKSUM_STRING (AT_string (at));
6563       break;
6564
6565     case dw_val_class_addr:
6566       r = AT_addr (at);
6567       gcc_assert (GET_CODE (r) == SYMBOL_REF);
6568       CHECKSUM_STRING (XSTR (r, 0));
6569       break;
6570
6571     case dw_val_class_offset:
6572       CHECKSUM (at->dw_attr_val.v.val_offset);
6573       break;
6574
6575     case dw_val_class_loc:
6576       for (loc = AT_loc (at); loc; loc = loc->dw_loc_next)
6577         loc_checksum (loc, ctx);
6578       break;
6579
6580     case dw_val_class_die_ref:
6581       die_checksum (AT_ref (at), ctx, mark);
6582       break;
6583
6584     case dw_val_class_fde_ref:
6585     case dw_val_class_vms_delta:
6586     case dw_val_class_lbl_id:
6587     case dw_val_class_lineptr:
6588     case dw_val_class_macptr:
6589     case dw_val_class_loclistsptr:
6590     case dw_val_class_high_pc:
6591       break;
6592
6593     case dw_val_class_file:
6594     case dw_val_class_file_implicit:
6595       CHECKSUM_STRING (AT_file (at)->filename);
6596       break;
6597
6598     case dw_val_class_data8:
6599       CHECKSUM (at->dw_attr_val.v.val_data8);
6600       break;
6601
6602     default:
6603       break;
6604     }
6605 }
6606
6607 /* Calculate the checksum of a DIE.  */
6608
6609 static void
6610 die_checksum (dw_die_ref die, struct md5_ctx *ctx, int *mark)
6611 {
6612   dw_die_ref c;
6613   dw_attr_node *a;
6614   unsigned ix;
6615
6616   /* To avoid infinite recursion.  */
6617   if (die->die_mark)
6618     {
6619       CHECKSUM (die->die_mark);
6620       return;
6621     }
6622   die->die_mark = ++(*mark);
6623
6624   CHECKSUM (die->die_tag);
6625
6626   FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
6627     attr_checksum (a, ctx, mark);
6628
6629   FOR_EACH_CHILD (die, c, die_checksum (c, ctx, mark));
6630 }
6631
6632 #undef CHECKSUM
6633 #undef CHECKSUM_BLOCK
6634 #undef CHECKSUM_STRING
6635
6636 /* For DWARF-4 types, include the trailing NULL when checksumming strings.  */
6637 #define CHECKSUM(FOO) md5_process_bytes (&(FOO), sizeof (FOO), ctx)
6638 #define CHECKSUM_BLOCK(FOO, SIZE) md5_process_bytes ((FOO), (SIZE), ctx)
6639 #define CHECKSUM_STRING(FOO) md5_process_bytes ((FOO), strlen (FOO) + 1, ctx)
6640 #define CHECKSUM_SLEB128(FOO) checksum_sleb128 ((FOO), ctx)
6641 #define CHECKSUM_ULEB128(FOO) checksum_uleb128 ((FOO), ctx)
6642 #define CHECKSUM_ATTR(FOO) \
6643   if (FOO) attr_checksum_ordered (die->die_tag, (FOO), ctx, mark)
6644
6645 /* Calculate the checksum of a number in signed LEB128 format.  */
6646
6647 static void
6648 checksum_sleb128 (HOST_WIDE_INT value, struct md5_ctx *ctx)
6649 {
6650   unsigned char byte;
6651   bool more;
6652
6653   while (1)
6654     {
6655       byte = (value & 0x7f);
6656       value >>= 7;
6657       more = !((value == 0 && (byte & 0x40) == 0)
6658                 || (value == -1 && (byte & 0x40) != 0));
6659       if (more)
6660         byte |= 0x80;
6661       CHECKSUM (byte);
6662       if (!more)
6663         break;
6664     }
6665 }
6666
6667 /* Calculate the checksum of a number in unsigned LEB128 format.  */
6668
6669 static void
6670 checksum_uleb128 (unsigned HOST_WIDE_INT value, struct md5_ctx *ctx)
6671 {
6672   while (1)
6673     {
6674       unsigned char byte = (value & 0x7f);
6675       value >>= 7;
6676       if (value != 0)
6677         /* More bytes to follow.  */
6678         byte |= 0x80;
6679       CHECKSUM (byte);
6680       if (value == 0)
6681         break;
6682     }
6683 }
6684
6685 /* Checksum the context of the DIE.  This adds the names of any
6686    surrounding namespaces or structures to the checksum.  */
6687
6688 static void
6689 checksum_die_context (dw_die_ref die, struct md5_ctx *ctx)
6690 {
6691   const char *name;
6692   dw_die_ref spec;
6693   int tag = die->die_tag;
6694
6695   if (tag != DW_TAG_namespace
6696       && tag != DW_TAG_structure_type
6697       && tag != DW_TAG_class_type)
6698     return;
6699
6700   name = get_AT_string (die, DW_AT_name);
6701
6702   spec = get_AT_ref (die, DW_AT_specification);
6703   if (spec != NULL)
6704     die = spec;
6705
6706   if (die->die_parent != NULL)
6707     checksum_die_context (die->die_parent, ctx);
6708
6709   CHECKSUM_ULEB128 ('C');
6710   CHECKSUM_ULEB128 (tag);
6711   if (name != NULL)
6712     CHECKSUM_STRING (name);
6713 }
6714
6715 /* Calculate the checksum of a location expression.  */
6716
6717 static inline void
6718 loc_checksum_ordered (dw_loc_descr_ref loc, struct md5_ctx *ctx)
6719 {
6720   /* Special case for lone DW_OP_plus_uconst: checksum as if the location
6721      were emitted as a DW_FORM_sdata instead of a location expression.  */
6722   if (loc->dw_loc_opc == DW_OP_plus_uconst && loc->dw_loc_next == NULL)
6723     {
6724       CHECKSUM_ULEB128 (DW_FORM_sdata);
6725       CHECKSUM_SLEB128 ((HOST_WIDE_INT) loc->dw_loc_oprnd1.v.val_unsigned);
6726       return;
6727     }
6728
6729   /* Otherwise, just checksum the raw location expression.  */
6730   while (loc != NULL)
6731     {
6732       inchash::hash hstate;
6733       hashval_t hash;
6734
6735       CHECKSUM_ULEB128 (loc->dtprel);
6736       CHECKSUM_ULEB128 (loc->dw_loc_opc);
6737       hash_loc_operands (loc, hstate);
6738       hash = hstate.end ();
6739       CHECKSUM (hash);
6740       loc = loc->dw_loc_next;
6741     }
6742 }
6743
6744 /* Calculate the checksum of an attribute.  */
6745
6746 static void
6747 attr_checksum_ordered (enum dwarf_tag tag, dw_attr_node *at,
6748                        struct md5_ctx *ctx, int *mark)
6749 {
6750   dw_loc_descr_ref loc;
6751   rtx r;
6752
6753   if (AT_class (at) == dw_val_class_die_ref)
6754     {
6755       dw_die_ref target_die = AT_ref (at);
6756
6757       /* For pointer and reference types, we checksum only the (qualified)
6758          name of the target type (if there is a name).  For friend entries,
6759          we checksum only the (qualified) name of the target type or function.
6760          This allows the checksum to remain the same whether the target type
6761          is complete or not.  */
6762       if ((at->dw_attr == DW_AT_type
6763            && (tag == DW_TAG_pointer_type
6764                || tag == DW_TAG_reference_type
6765                || tag == DW_TAG_rvalue_reference_type
6766                || tag == DW_TAG_ptr_to_member_type))
6767           || (at->dw_attr == DW_AT_friend
6768               && tag == DW_TAG_friend))
6769         {
6770           dw_attr_node *name_attr = get_AT (target_die, DW_AT_name);
6771
6772           if (name_attr != NULL)
6773             {
6774               dw_die_ref decl = get_AT_ref (target_die, DW_AT_specification);
6775
6776               if (decl == NULL)
6777                 decl = target_die;
6778               CHECKSUM_ULEB128 ('N');
6779               CHECKSUM_ULEB128 (at->dw_attr);
6780               if (decl->die_parent != NULL)
6781                 checksum_die_context (decl->die_parent, ctx);
6782               CHECKSUM_ULEB128 ('E');
6783               CHECKSUM_STRING (AT_string (name_attr));
6784               return;
6785             }
6786         }
6787
6788       /* For all other references to another DIE, we check to see if the
6789          target DIE has already been visited.  If it has, we emit a
6790          backward reference; if not, we descend recursively.  */
6791       if (target_die->die_mark > 0)
6792         {
6793           CHECKSUM_ULEB128 ('R');
6794           CHECKSUM_ULEB128 (at->dw_attr);
6795           CHECKSUM_ULEB128 (target_die->die_mark);
6796         }
6797       else
6798         {
6799           dw_die_ref decl = get_AT_ref (target_die, DW_AT_specification);
6800
6801           if (decl == NULL)
6802             decl = target_die;
6803           target_die->die_mark = ++(*mark);
6804           CHECKSUM_ULEB128 ('T');
6805           CHECKSUM_ULEB128 (at->dw_attr);
6806           if (decl->die_parent != NULL)
6807             checksum_die_context (decl->die_parent, ctx);
6808           die_checksum_ordered (target_die, ctx, mark);
6809         }
6810       return;
6811     }
6812
6813   CHECKSUM_ULEB128 ('A');
6814   CHECKSUM_ULEB128 (at->dw_attr);
6815
6816   switch (AT_class (at))
6817     {
6818     case dw_val_class_const:
6819     case dw_val_class_const_implicit:
6820       CHECKSUM_ULEB128 (DW_FORM_sdata);
6821       CHECKSUM_SLEB128 (at->dw_attr_val.v.val_int);
6822       break;
6823
6824     case dw_val_class_unsigned_const:
6825     case dw_val_class_unsigned_const_implicit:
6826       CHECKSUM_ULEB128 (DW_FORM_sdata);
6827       CHECKSUM_SLEB128 ((int) at->dw_attr_val.v.val_unsigned);
6828       break;
6829
6830     case dw_val_class_const_double:
6831       CHECKSUM_ULEB128 (DW_FORM_block);
6832       CHECKSUM_ULEB128 (sizeof (at->dw_attr_val.v.val_double));
6833       CHECKSUM (at->dw_attr_val.v.val_double);
6834       break;
6835
6836     case dw_val_class_wide_int:
6837       CHECKSUM_ULEB128 (DW_FORM_block);
6838       CHECKSUM_ULEB128 (get_full_len (*at->dw_attr_val.v.val_wide)
6839                         * HOST_BITS_PER_WIDE_INT / BITS_PER_UNIT);
6840       CHECKSUM_BLOCK (at->dw_attr_val.v.val_wide->get_val (),
6841                       get_full_len (*at->dw_attr_val.v.val_wide)
6842                       * HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR);
6843       break;
6844
6845     case dw_val_class_vec:
6846       CHECKSUM_ULEB128 (DW_FORM_block);
6847       CHECKSUM_ULEB128 (at->dw_attr_val.v.val_vec.length
6848                         * at->dw_attr_val.v.val_vec.elt_size);
6849       CHECKSUM_BLOCK (at->dw_attr_val.v.val_vec.array,
6850                       (at->dw_attr_val.v.val_vec.length
6851                        * at->dw_attr_val.v.val_vec.elt_size));
6852       break;
6853
6854     case dw_val_class_flag:
6855       CHECKSUM_ULEB128 (DW_FORM_flag);
6856       CHECKSUM_ULEB128 (at->dw_attr_val.v.val_flag ? 1 : 0);
6857       break;
6858
6859     case dw_val_class_str:
6860       CHECKSUM_ULEB128 (DW_FORM_string);
6861       CHECKSUM_STRING (AT_string (at));
6862       break;
6863
6864     case dw_val_class_addr:
6865       r = AT_addr (at);
6866       gcc_assert (GET_CODE (r) == SYMBOL_REF);
6867       CHECKSUM_ULEB128 (DW_FORM_string);
6868       CHECKSUM_STRING (XSTR (r, 0));
6869       break;
6870
6871     case dw_val_class_offset:
6872       CHECKSUM_ULEB128 (DW_FORM_sdata);
6873       CHECKSUM_ULEB128 (at->dw_attr_val.v.val_offset);
6874       break;
6875
6876     case dw_val_class_loc:
6877       for (loc = AT_loc (at); loc; loc = loc->dw_loc_next)
6878         loc_checksum_ordered (loc, ctx);
6879       break;
6880
6881     case dw_val_class_fde_ref:
6882     case dw_val_class_lbl_id:
6883     case dw_val_class_lineptr:
6884     case dw_val_class_macptr:
6885     case dw_val_class_loclistsptr:
6886     case dw_val_class_high_pc:
6887       break;
6888
6889     case dw_val_class_file:
6890     case dw_val_class_file_implicit:
6891       CHECKSUM_ULEB128 (DW_FORM_string);
6892       CHECKSUM_STRING (AT_file (at)->filename);
6893       break;
6894
6895     case dw_val_class_data8:
6896       CHECKSUM (at->dw_attr_val.v.val_data8);
6897       break;
6898
6899     default:
6900       break;
6901     }
6902 }
6903
6904 struct checksum_attributes
6905 {
6906   dw_attr_node *at_name;
6907   dw_attr_node *at_type;
6908   dw_attr_node *at_friend;
6909   dw_attr_node *at_accessibility;
6910   dw_attr_node *at_address_class;
6911   dw_attr_node *at_alignment;
6912   dw_attr_node *at_allocated;
6913   dw_attr_node *at_artificial;
6914   dw_attr_node *at_associated;
6915   dw_attr_node *at_binary_scale;
6916   dw_attr_node *at_bit_offset;
6917   dw_attr_node *at_bit_size;
6918   dw_attr_node *at_bit_stride;
6919   dw_attr_node *at_byte_size;
6920   dw_attr_node *at_byte_stride;
6921   dw_attr_node *at_const_value;
6922   dw_attr_node *at_containing_type;
6923   dw_attr_node *at_count;
6924   dw_attr_node *at_data_location;
6925   dw_attr_node *at_data_member_location;
6926   dw_attr_node *at_decimal_scale;
6927   dw_attr_node *at_decimal_sign;
6928   dw_attr_node *at_default_value;
6929   dw_attr_node *at_digit_count;
6930   dw_attr_node *at_discr;
6931   dw_attr_node *at_discr_list;
6932   dw_attr_node *at_discr_value;
6933   dw_attr_node *at_encoding;
6934   dw_attr_node *at_endianity;
6935   dw_attr_node *at_explicit;
6936   dw_attr_node *at_is_optional;
6937   dw_attr_node *at_location;
6938   dw_attr_node *at_lower_bound;
6939   dw_attr_node *at_mutable;
6940   dw_attr_node *at_ordering;
6941   dw_attr_node *at_picture_string;
6942   dw_attr_node *at_prototyped;
6943   dw_attr_node *at_small;
6944   dw_attr_node *at_segment;
6945   dw_attr_node *at_string_length;
6946   dw_attr_node *at_string_length_bit_size;
6947   dw_attr_node *at_string_length_byte_size;
6948   dw_attr_node *at_threads_scaled;
6949   dw_attr_node *at_upper_bound;
6950   dw_attr_node *at_use_location;
6951   dw_attr_node *at_use_UTF8;
6952   dw_attr_node *at_variable_parameter;
6953   dw_attr_node *at_virtuality;
6954   dw_attr_node *at_visibility;
6955   dw_attr_node *at_vtable_elem_location;
6956 };
6957
6958 /* Collect the attributes that we will want to use for the checksum.  */
6959
6960 static void
6961 collect_checksum_attributes (struct checksum_attributes *attrs, dw_die_ref die)
6962 {
6963   dw_attr_node *a;
6964   unsigned ix;
6965
6966   FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
6967     {
6968       switch (a->dw_attr)
6969         {
6970         case DW_AT_name:
6971           attrs->at_name = a;
6972           break;
6973         case DW_AT_type:
6974           attrs->at_type = a;
6975           break;
6976         case DW_AT_friend:
6977           attrs->at_friend = a;
6978           break;
6979         case DW_AT_accessibility:
6980           attrs->at_accessibility = a;
6981           break;
6982         case DW_AT_address_class:
6983           attrs->at_address_class = a;
6984           break;
6985         case DW_AT_alignment:
6986           attrs->at_alignment = a;
6987           break;
6988         case DW_AT_allocated:
6989           attrs->at_allocated = a;
6990           break;
6991         case DW_AT_artificial:
6992           attrs->at_artificial = a;
6993           break;
6994         case DW_AT_associated:
6995           attrs->at_associated = a;
6996           break;
6997         case DW_AT_binary_scale:
6998           attrs->at_binary_scale = a;
6999           break;
7000         case DW_AT_bit_offset:
7001           attrs->at_bit_offset = a;
7002           break;
7003         case DW_AT_bit_size:
7004           attrs->at_bit_size = a;
7005           break;
7006         case DW_AT_bit_stride:
7007           attrs->at_bit_stride = a;
7008           break;
7009         case DW_AT_byte_size:
7010           attrs->at_byte_size = a;
7011           break;
7012         case DW_AT_byte_stride:
7013           attrs->at_byte_stride = a;
7014           break;
7015         case DW_AT_const_value:
7016           attrs->at_const_value = a;
7017           break;
7018         case DW_AT_containing_type:
7019           attrs->at_containing_type = a;
7020           break;
7021         case DW_AT_count:
7022           attrs->at_count = a;
7023           break;
7024         case DW_AT_data_location:
7025           attrs->at_data_location = a;
7026           break;
7027         case DW_AT_data_member_location:
7028           attrs->at_data_member_location = a;
7029           break;
7030         case DW_AT_decimal_scale:
7031           attrs->at_decimal_scale = a;
7032           break;
7033         case DW_AT_decimal_sign:
7034           attrs->at_decimal_sign = a;
7035           break;
7036         case DW_AT_default_value:
7037           attrs->at_default_value = a;
7038           break;
7039         case DW_AT_digit_count:
7040           attrs->at_digit_count = a;
7041           break;
7042         case DW_AT_discr:
7043           attrs->at_discr = a;
7044           break;
7045         case DW_AT_discr_list:
7046           attrs->at_discr_list = a;
7047           break;
7048         case DW_AT_discr_value:
7049           attrs->at_discr_value = a;
7050           break;
7051         case DW_AT_encoding:
7052           attrs->at_encoding = a;
7053           break;
7054         case DW_AT_endianity:
7055           attrs->at_endianity = a;
7056           break;
7057         case DW_AT_explicit:
7058           attrs->at_explicit = a;
7059           break;
7060         case DW_AT_is_optional:
7061           attrs->at_is_optional = a;
7062           break;
7063         case DW_AT_location:
7064           attrs->at_location = a;
7065           break;
7066         case DW_AT_lower_bound:
7067           attrs->at_lower_bound = a;
7068           break;
7069         case DW_AT_mutable:
7070           attrs->at_mutable = a;
7071           break;
7072         case DW_AT_ordering:
7073           attrs->at_ordering = a;
7074           break;
7075         case DW_AT_picture_string:
7076           attrs->at_picture_string = a;
7077           break;
7078         case DW_AT_prototyped:
7079           attrs->at_prototyped = a;
7080           break;
7081         case DW_AT_small:
7082           attrs->at_small = a;
7083           break;
7084         case DW_AT_segment:
7085           attrs->at_segment = a;
7086           break;
7087         case DW_AT_string_length:
7088           attrs->at_string_length = a;
7089           break;
7090         case DW_AT_string_length_bit_size:
7091           attrs->at_string_length_bit_size = a;
7092           break;
7093         case DW_AT_string_length_byte_size:
7094           attrs->at_string_length_byte_size = a;
7095           break;
7096         case DW_AT_threads_scaled:
7097           attrs->at_threads_scaled = a;
7098           break;
7099         case DW_AT_upper_bound:
7100           attrs->at_upper_bound = a;
7101           break;
7102         case DW_AT_use_location:
7103           attrs->at_use_location = a;
7104           break;
7105         case DW_AT_use_UTF8:
7106           attrs->at_use_UTF8 = a;
7107           break;
7108         case DW_AT_variable_parameter:
7109           attrs->at_variable_parameter = a;
7110           break;
7111         case DW_AT_virtuality:
7112           attrs->at_virtuality = a;
7113           break;
7114         case DW_AT_visibility:
7115           attrs->at_visibility = a;
7116           break;
7117         case DW_AT_vtable_elem_location:
7118           attrs->at_vtable_elem_location = a;
7119           break;
7120         default:
7121           break;
7122         }
7123     }
7124 }
7125
7126 /* Calculate the checksum of a DIE, using an ordered subset of attributes.  */
7127
7128 static void
7129 die_checksum_ordered (dw_die_ref die, struct md5_ctx *ctx, int *mark)
7130 {
7131   dw_die_ref c;
7132   dw_die_ref decl;
7133   struct checksum_attributes attrs;
7134
7135   CHECKSUM_ULEB128 ('D');
7136   CHECKSUM_ULEB128 (die->die_tag);
7137
7138   memset (&attrs, 0, sizeof (attrs));
7139
7140   decl = get_AT_ref (die, DW_AT_specification);
7141   if (decl != NULL)
7142     collect_checksum_attributes (&attrs, decl);
7143   collect_checksum_attributes (&attrs, die);
7144
7145   CHECKSUM_ATTR (attrs.at_name);
7146   CHECKSUM_ATTR (attrs.at_accessibility);
7147   CHECKSUM_ATTR (attrs.at_address_class);
7148   CHECKSUM_ATTR (attrs.at_allocated);
7149   CHECKSUM_ATTR (attrs.at_artificial);
7150   CHECKSUM_ATTR (attrs.at_associated);
7151   CHECKSUM_ATTR (attrs.at_binary_scale);
7152   CHECKSUM_ATTR (attrs.at_bit_offset);
7153   CHECKSUM_ATTR (attrs.at_bit_size);
7154   CHECKSUM_ATTR (attrs.at_bit_stride);
7155   CHECKSUM_ATTR (attrs.at_byte_size);
7156   CHECKSUM_ATTR (attrs.at_byte_stride);
7157   CHECKSUM_ATTR (attrs.at_const_value);
7158   CHECKSUM_ATTR (attrs.at_containing_type);
7159   CHECKSUM_ATTR (attrs.at_count);
7160   CHECKSUM_ATTR (attrs.at_data_location);
7161   CHECKSUM_ATTR (attrs.at_data_member_location);
7162   CHECKSUM_ATTR (attrs.at_decimal_scale);
7163   CHECKSUM_ATTR (attrs.at_decimal_sign);
7164   CHECKSUM_ATTR (attrs.at_default_value);
7165   CHECKSUM_ATTR (attrs.at_digit_count);
7166   CHECKSUM_ATTR (attrs.at_discr);
7167   CHECKSUM_ATTR (attrs.at_discr_list);
7168   CHECKSUM_ATTR (attrs.at_discr_value);
7169   CHECKSUM_ATTR (attrs.at_encoding);
7170   CHECKSUM_ATTR (attrs.at_endianity);
7171   CHECKSUM_ATTR (attrs.at_explicit);
7172   CHECKSUM_ATTR (attrs.at_is_optional);
7173   CHECKSUM_ATTR (attrs.at_location);
7174   CHECKSUM_ATTR (attrs.at_lower_bound);
7175   CHECKSUM_ATTR (attrs.at_mutable);
7176   CHECKSUM_ATTR (attrs.at_ordering);
7177   CHECKSUM_ATTR (attrs.at_picture_string);
7178   CHECKSUM_ATTR (attrs.at_prototyped);
7179   CHECKSUM_ATTR (attrs.at_small);
7180   CHECKSUM_ATTR (attrs.at_segment);
7181   CHECKSUM_ATTR (attrs.at_string_length);
7182   CHECKSUM_ATTR (attrs.at_string_length_bit_size);
7183   CHECKSUM_ATTR (attrs.at_string_length_byte_size);
7184   CHECKSUM_ATTR (attrs.at_threads_scaled);
7185   CHECKSUM_ATTR (attrs.at_upper_bound);
7186   CHECKSUM_ATTR (attrs.at_use_location);
7187   CHECKSUM_ATTR (attrs.at_use_UTF8);
7188   CHECKSUM_ATTR (attrs.at_variable_parameter);
7189   CHECKSUM_ATTR (attrs.at_virtuality);
7190   CHECKSUM_ATTR (attrs.at_visibility);
7191   CHECKSUM_ATTR (attrs.at_vtable_elem_location);
7192   CHECKSUM_ATTR (attrs.at_type);
7193   CHECKSUM_ATTR (attrs.at_friend);
7194   CHECKSUM_ATTR (attrs.at_alignment);
7195
7196   /* Checksum the child DIEs.  */
7197   c = die->die_child;
7198   if (c) do {
7199     dw_attr_node *name_attr;
7200
7201     c = c->die_sib;
7202     name_attr = get_AT (c, DW_AT_name);
7203     if (is_template_instantiation (c))
7204       {
7205         /* Ignore instantiations of member type and function templates.  */
7206       }
7207     else if (name_attr != NULL
7208              && (is_type_die (c) || c->die_tag == DW_TAG_subprogram))
7209       {
7210         /* Use a shallow checksum for named nested types and member
7211            functions.  */
7212         CHECKSUM_ULEB128 ('S');
7213         CHECKSUM_ULEB128 (c->die_tag);
7214         CHECKSUM_STRING (AT_string (name_attr));
7215       }
7216     else
7217       {
7218         /* Use a deep checksum for other children.  */
7219         /* Mark this DIE so it gets processed when unmarking.  */
7220         if (c->die_mark == 0)
7221           c->die_mark = -1;
7222         die_checksum_ordered (c, ctx, mark);
7223       }
7224   } while (c != die->die_child);
7225
7226   CHECKSUM_ULEB128 (0);
7227 }
7228
7229 /* Add a type name and tag to a hash.  */
7230 static void
7231 die_odr_checksum (int tag, const char *name, md5_ctx *ctx)
7232 {
7233   CHECKSUM_ULEB128 (tag);
7234   CHECKSUM_STRING (name);
7235 }
7236
7237 #undef CHECKSUM
7238 #undef CHECKSUM_STRING
7239 #undef CHECKSUM_ATTR
7240 #undef CHECKSUM_LEB128
7241 #undef CHECKSUM_ULEB128
7242
7243 /* Generate the type signature for DIE.  This is computed by generating an
7244    MD5 checksum over the DIE's tag, its relevant attributes, and its
7245    children.  Attributes that are references to other DIEs are processed
7246    by recursion, using the MARK field to prevent infinite recursion.
7247    If the DIE is nested inside a namespace or another type, we also
7248    need to include that context in the signature.  The lower 64 bits
7249    of the resulting MD5 checksum comprise the signature.  */
7250
7251 static void
7252 generate_type_signature (dw_die_ref die, comdat_type_node *type_node)
7253 {
7254   int mark;
7255   const char *name;
7256   unsigned char checksum[16];
7257   struct md5_ctx ctx;
7258   dw_die_ref decl;
7259   dw_die_ref parent;
7260
7261   name = get_AT_string (die, DW_AT_name);
7262   decl = get_AT_ref (die, DW_AT_specification);
7263   parent = get_die_parent (die);
7264
7265   /* First, compute a signature for just the type name (and its surrounding
7266      context, if any.  This is stored in the type unit DIE for link-time
7267      ODR (one-definition rule) checking.  */
7268
7269   if (is_cxx () && name != NULL)
7270     {
7271       md5_init_ctx (&ctx);
7272
7273       /* Checksum the names of surrounding namespaces and structures.  */
7274       if (parent != NULL)
7275         checksum_die_context (parent, &ctx);
7276
7277       /* Checksum the current DIE. */
7278       die_odr_checksum (die->die_tag, name, &ctx);
7279       md5_finish_ctx (&ctx, checksum);
7280
7281       add_AT_data8 (type_node->root_die, DW_AT_GNU_odr_signature, &checksum[8]);
7282     }
7283
7284   /* Next, compute the complete type signature.  */
7285
7286   md5_init_ctx (&ctx);
7287   mark = 1;
7288   die->die_mark = mark;
7289
7290   /* Checksum the names of surrounding namespaces and structures.  */
7291   if (parent != NULL)
7292     checksum_die_context (parent, &ctx);
7293
7294   /* Checksum the DIE and its children.  */
7295   die_checksum_ordered (die, &ctx, &mark);
7296   unmark_all_dies (die);
7297   md5_finish_ctx (&ctx, checksum);
7298
7299   /* Store the signature in the type node and link the type DIE and the
7300      type node together.  */
7301   memcpy (type_node->signature, &checksum[16 - DWARF_TYPE_SIGNATURE_SIZE],
7302           DWARF_TYPE_SIGNATURE_SIZE);
7303   die->comdat_type_p = true;
7304   die->die_id.die_type_node = type_node;
7305   type_node->type_die = die;
7306
7307   /* If the DIE is a specification, link its declaration to the type node
7308      as well.  */
7309   if (decl != NULL)
7310     {
7311       decl->comdat_type_p = true;
7312       decl->die_id.die_type_node = type_node;
7313     }
7314 }
7315
7316 /* Do the location expressions look same?  */
7317 static inline int
7318 same_loc_p (dw_loc_descr_ref loc1, dw_loc_descr_ref loc2, int *mark)
7319 {
7320   return loc1->dw_loc_opc == loc2->dw_loc_opc
7321          && same_dw_val_p (&loc1->dw_loc_oprnd1, &loc2->dw_loc_oprnd1, mark)
7322          && same_dw_val_p (&loc1->dw_loc_oprnd2, &loc2->dw_loc_oprnd2, mark);
7323 }
7324
7325 /* Do the values look the same?  */
7326 static int
7327 same_dw_val_p (const dw_val_node *v1, const dw_val_node *v2, int *mark)
7328 {
7329   dw_loc_descr_ref loc1, loc2;
7330   rtx r1, r2;
7331
7332   if (v1->val_class != v2->val_class)
7333     return 0;
7334
7335   switch (v1->val_class)
7336     {
7337     case dw_val_class_const:
7338     case dw_val_class_const_implicit:
7339       return v1->v.val_int == v2->v.val_int;
7340     case dw_val_class_unsigned_const:
7341     case dw_val_class_unsigned_const_implicit:
7342       return v1->v.val_unsigned == v2->v.val_unsigned;
7343     case dw_val_class_const_double:
7344       return v1->v.val_double.high == v2->v.val_double.high
7345              && v1->v.val_double.low == v2->v.val_double.low;
7346     case dw_val_class_wide_int:
7347       return *v1->v.val_wide == *v2->v.val_wide;
7348     case dw_val_class_vec:
7349       if (v1->v.val_vec.length != v2->v.val_vec.length
7350           || v1->v.val_vec.elt_size != v2->v.val_vec.elt_size)
7351         return 0;
7352       if (memcmp (v1->v.val_vec.array, v2->v.val_vec.array,
7353                   v1->v.val_vec.length * v1->v.val_vec.elt_size))
7354         return 0;
7355       return 1;
7356     case dw_val_class_flag:
7357       return v1->v.val_flag == v2->v.val_flag;
7358     case dw_val_class_str:
7359       return !strcmp (v1->v.val_str->str, v2->v.val_str->str);
7360
7361     case dw_val_class_addr:
7362       r1 = v1->v.val_addr;
7363       r2 = v2->v.val_addr;
7364       if (GET_CODE (r1) != GET_CODE (r2))
7365         return 0;
7366       return !rtx_equal_p (r1, r2);
7367
7368     case dw_val_class_offset:
7369       return v1->v.val_offset == v2->v.val_offset;
7370
7371     case dw_val_class_loc:
7372       for (loc1 = v1->v.val_loc, loc2 = v2->v.val_loc;
7373            loc1 && loc2;
7374            loc1 = loc1->dw_loc_next, loc2 = loc2->dw_loc_next)
7375         if (!same_loc_p (loc1, loc2, mark))
7376           return 0;
7377       return !loc1 && !loc2;
7378
7379     case dw_val_class_die_ref:
7380       return same_die_p (v1->v.val_die_ref.die, v2->v.val_die_ref.die, mark);
7381
7382     case dw_val_class_fde_ref:
7383     case dw_val_class_vms_delta:
7384     case dw_val_class_lbl_id:
7385     case dw_val_class_lineptr:
7386     case dw_val_class_macptr:
7387     case dw_val_class_loclistsptr:
7388     case dw_val_class_high_pc:
7389       return 1;
7390
7391     case dw_val_class_file:
7392     case dw_val_class_file_implicit:
7393       return v1->v.val_file == v2->v.val_file;
7394
7395     case dw_val_class_data8:
7396       return !memcmp (v1->v.val_data8, v2->v.val_data8, 8);
7397
7398     default:
7399       return 1;
7400     }
7401 }
7402
7403 /* Do the attributes look the same?  */
7404
7405 static int
7406 same_attr_p (dw_attr_node *at1, dw_attr_node *at2, int *mark)
7407 {
7408   if (at1->dw_attr != at2->dw_attr)
7409     return 0;
7410
7411   /* We don't care that this was compiled with a different compiler
7412      snapshot; if the output is the same, that's what matters. */
7413   if (at1->dw_attr == DW_AT_producer)
7414     return 1;
7415
7416   return same_dw_val_p (&at1->dw_attr_val, &at2->dw_attr_val, mark);
7417 }
7418
7419 /* Do the dies look the same?  */
7420
7421 static int
7422 same_die_p (dw_die_ref die1, dw_die_ref die2, int *mark)
7423 {
7424   dw_die_ref c1, c2;
7425   dw_attr_node *a1;
7426   unsigned ix;
7427
7428   /* To avoid infinite recursion.  */
7429   if (die1->die_mark)
7430     return die1->die_mark == die2->die_mark;
7431   die1->die_mark = die2->die_mark = ++(*mark);
7432
7433   if (die1->die_tag != die2->die_tag)
7434     return 0;
7435
7436   if (vec_safe_length (die1->die_attr) != vec_safe_length (die2->die_attr))
7437     return 0;
7438
7439   FOR_EACH_VEC_SAFE_ELT (die1->die_attr, ix, a1)
7440     if (!same_attr_p (a1, &(*die2->die_attr)[ix], mark))
7441       return 0;
7442
7443   c1 = die1->die_child;
7444   c2 = die2->die_child;
7445   if (! c1)
7446     {
7447       if (c2)
7448         return 0;
7449     }
7450   else
7451     for (;;)
7452       {
7453         if (!same_die_p (c1, c2, mark))
7454           return 0;
7455         c1 = c1->die_sib;
7456         c2 = c2->die_sib;
7457         if (c1 == die1->die_child)
7458           {
7459             if (c2 == die2->die_child)
7460               break;
7461             else
7462               return 0;
7463           }
7464     }
7465
7466   return 1;
7467 }
7468
7469 /* Calculate the MD5 checksum of the compilation unit DIE UNIT_DIE and its
7470    children, and set die_symbol.  */
7471
7472 static void
7473 compute_comp_unit_symbol (dw_die_ref unit_die)
7474 {
7475   const char *die_name = get_AT_string (unit_die, DW_AT_name);
7476   const char *base = die_name ? lbasename (die_name) : "anonymous";
7477   char *name = XALLOCAVEC (char, strlen (base) + 64);
7478   char *p;
7479   int i, mark;
7480   unsigned char checksum[16];
7481   struct md5_ctx ctx;
7482
7483   /* Compute the checksum of the DIE, then append part of it as hex digits to
7484      the name filename of the unit.  */
7485
7486   md5_init_ctx (&ctx);
7487   mark = 0;
7488   die_checksum (unit_die, &ctx, &mark);
7489   unmark_all_dies (unit_die);
7490   md5_finish_ctx (&ctx, checksum);
7491
7492   /* When we this for comp_unit_die () we have a DW_AT_name that might
7493      not start with a letter but with anything valid for filenames and
7494      clean_symbol_name doesn't fix that up.  Prepend 'g' if the first
7495      character is not a letter.  */
7496   sprintf (name, "%s%s.", ISALPHA (*base) ? "" : "g", base);
7497   clean_symbol_name (name);
7498
7499   p = name + strlen (name);
7500   for (i = 0; i < 4; i++)
7501     {
7502       sprintf (p, "%.2x", checksum[i]);
7503       p += 2;
7504     }
7505
7506   unit_die->die_id.die_symbol = xstrdup (name);
7507 }
7508
7509 /* Returns nonzero if DIE represents a type, in the sense of TYPE_P.  */
7510
7511 static int
7512 is_type_die (dw_die_ref die)
7513 {
7514   switch (die->die_tag)
7515     {
7516     case DW_TAG_array_type:
7517     case DW_TAG_class_type:
7518     case DW_TAG_interface_type:
7519     case DW_TAG_enumeration_type:
7520     case DW_TAG_pointer_type:
7521     case DW_TAG_reference_type:
7522     case DW_TAG_rvalue_reference_type:
7523     case DW_TAG_string_type:
7524     case DW_TAG_structure_type:
7525     case DW_TAG_subroutine_type:
7526     case DW_TAG_union_type:
7527     case DW_TAG_ptr_to_member_type:
7528     case DW_TAG_set_type:
7529     case DW_TAG_subrange_type:
7530     case DW_TAG_base_type:
7531     case DW_TAG_const_type:
7532     case DW_TAG_file_type:
7533     case DW_TAG_packed_type:
7534     case DW_TAG_volatile_type:
7535     case DW_TAG_typedef:
7536       return 1;
7537     default:
7538       return 0;
7539     }
7540 }
7541
7542 /* Returns 1 iff C is the sort of DIE that should go into a COMDAT CU.
7543    Basically, we want to choose the bits that are likely to be shared between
7544    compilations (types) and leave out the bits that are specific to individual
7545    compilations (functions).  */
7546
7547 static int
7548 is_comdat_die (dw_die_ref c)
7549 {
7550   /* I think we want to leave base types and __vtbl_ptr_type in the main CU, as
7551      we do for stabs.  The advantage is a greater likelihood of sharing between
7552      objects that don't include headers in the same order (and therefore would
7553      put the base types in a different comdat).  jason 8/28/00 */
7554
7555   if (c->die_tag == DW_TAG_base_type)
7556     return 0;
7557
7558   if (c->die_tag == DW_TAG_pointer_type
7559       || c->die_tag == DW_TAG_reference_type
7560       || c->die_tag == DW_TAG_rvalue_reference_type
7561       || c->die_tag == DW_TAG_const_type
7562       || c->die_tag == DW_TAG_volatile_type)
7563     {
7564       dw_die_ref t = get_AT_ref (c, DW_AT_type);
7565
7566       return t ? is_comdat_die (t) : 0;
7567     }
7568
7569   return is_type_die (c);
7570 }
7571
7572 /* Returns true iff C is a compile-unit DIE.  */
7573
7574 static inline bool
7575 is_cu_die (dw_die_ref c)
7576 {
7577   return c && (c->die_tag == DW_TAG_compile_unit
7578                || c->die_tag == DW_TAG_skeleton_unit);
7579 }
7580
7581 /* Returns true iff C is a unit DIE of some sort.  */
7582
7583 static inline bool
7584 is_unit_die (dw_die_ref c)
7585 {
7586   return c && (c->die_tag == DW_TAG_compile_unit
7587                || c->die_tag == DW_TAG_partial_unit
7588                || c->die_tag == DW_TAG_type_unit
7589                || c->die_tag == DW_TAG_skeleton_unit);
7590 }
7591
7592 /* Returns true iff C is a namespace DIE.  */
7593
7594 static inline bool
7595 is_namespace_die (dw_die_ref c)
7596 {
7597   return c && c->die_tag == DW_TAG_namespace;
7598 }
7599
7600 /* Returns true iff C is a class or structure DIE.  */
7601
7602 static inline bool
7603 is_class_die (dw_die_ref c)
7604 {
7605   return c && (c->die_tag == DW_TAG_class_type
7606                || c->die_tag == DW_TAG_structure_type);
7607 }
7608
7609 /* Return non-zero if this DIE is a template parameter.  */
7610
7611 static inline bool
7612 is_template_parameter (dw_die_ref die)
7613 {
7614   switch (die->die_tag)
7615     {
7616     case DW_TAG_template_type_param:
7617     case DW_TAG_template_value_param:
7618     case DW_TAG_GNU_template_template_param:
7619     case DW_TAG_GNU_template_parameter_pack:
7620       return true;
7621     default:
7622       return false;
7623     }
7624 }
7625
7626 /* Return non-zero if this DIE represents a template instantiation.  */
7627
7628 static inline bool
7629 is_template_instantiation (dw_die_ref die)
7630 {
7631   dw_die_ref c;
7632
7633   if (!is_type_die (die) && die->die_tag != DW_TAG_subprogram)
7634     return false;
7635   FOR_EACH_CHILD (die, c, if (is_template_parameter (c)) return true);
7636   return false;
7637 }
7638
7639 static char *
7640 gen_internal_sym (const char *prefix)
7641 {
7642   char buf[MAX_ARTIFICIAL_LABEL_BYTES];
7643
7644   ASM_GENERATE_INTERNAL_LABEL (buf, prefix, label_num++);
7645   return xstrdup (buf);
7646 }
7647
7648 /* Return non-zero if this DIE is a declaration.  */
7649
7650 static int
7651 is_declaration_die (dw_die_ref die)
7652 {
7653   dw_attr_node *a;
7654   unsigned ix;
7655
7656   FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
7657     if (a->dw_attr == DW_AT_declaration)
7658       return 1;
7659
7660   return 0;
7661 }
7662
7663 /* Return non-zero if this DIE is nested inside a subprogram.  */
7664
7665 static int
7666 is_nested_in_subprogram (dw_die_ref die)
7667 {
7668   dw_die_ref decl = get_AT_ref (die, DW_AT_specification);
7669
7670   if (decl == NULL)
7671     decl = die;
7672   return local_scope_p (decl);
7673 }
7674
7675 /* Return non-zero if this DIE contains a defining declaration of a
7676    subprogram.  */
7677
7678 static int
7679 contains_subprogram_definition (dw_die_ref die)
7680 {
7681   dw_die_ref c;
7682
7683   if (die->die_tag == DW_TAG_subprogram && ! is_declaration_die (die))
7684     return 1;
7685   FOR_EACH_CHILD (die, c, if (contains_subprogram_definition (c)) return 1);
7686   return 0;
7687 }
7688
7689 /* Return non-zero if this is a type DIE that should be moved to a
7690    COMDAT .debug_types section or .debug_info section with DW_UT_*type
7691    unit type.  */
7692
7693 static int
7694 should_move_die_to_comdat (dw_die_ref die)
7695 {
7696   switch (die->die_tag)
7697     {
7698     case DW_TAG_class_type:
7699     case DW_TAG_structure_type:
7700     case DW_TAG_enumeration_type:
7701     case DW_TAG_union_type:
7702       /* Don't move declarations, inlined instances, types nested in a
7703          subprogram, or types that contain subprogram definitions.  */
7704       if (is_declaration_die (die)
7705           || get_AT (die, DW_AT_abstract_origin)
7706           || is_nested_in_subprogram (die)
7707           || contains_subprogram_definition (die))
7708         return 0;
7709       return 1;
7710     case DW_TAG_array_type:
7711     case DW_TAG_interface_type:
7712     case DW_TAG_pointer_type:
7713     case DW_TAG_reference_type:
7714     case DW_TAG_rvalue_reference_type:
7715     case DW_TAG_string_type:
7716     case DW_TAG_subroutine_type:
7717     case DW_TAG_ptr_to_member_type:
7718     case DW_TAG_set_type:
7719     case DW_TAG_subrange_type:
7720     case DW_TAG_base_type:
7721     case DW_TAG_const_type:
7722     case DW_TAG_file_type:
7723     case DW_TAG_packed_type:
7724     case DW_TAG_volatile_type:
7725     case DW_TAG_typedef:
7726     default:
7727       return 0;
7728     }
7729 }
7730
7731 /* Make a clone of DIE.  */
7732
7733 static dw_die_ref
7734 clone_die (dw_die_ref die)
7735 {
7736   dw_die_ref clone = new_die_raw (die->die_tag);
7737   dw_attr_node *a;
7738   unsigned ix;
7739
7740   FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
7741     add_dwarf_attr (clone, a);
7742
7743   return clone;
7744 }
7745
7746 /* Make a clone of the tree rooted at DIE.  */
7747
7748 static dw_die_ref
7749 clone_tree (dw_die_ref die)
7750 {
7751   dw_die_ref c;
7752   dw_die_ref clone = clone_die (die);
7753
7754   FOR_EACH_CHILD (die, c, add_child_die (clone, clone_tree (c)));
7755
7756   return clone;
7757 }
7758
7759 /* Make a clone of DIE as a declaration.  */
7760
7761 static dw_die_ref
7762 clone_as_declaration (dw_die_ref die)
7763 {
7764   dw_die_ref clone;
7765   dw_die_ref decl;
7766   dw_attr_node *a;
7767   unsigned ix;
7768
7769   /* If the DIE is already a declaration, just clone it.  */
7770   if (is_declaration_die (die))
7771     return clone_die (die);
7772
7773   /* If the DIE is a specification, just clone its declaration DIE.  */
7774   decl = get_AT_ref (die, DW_AT_specification);
7775   if (decl != NULL)
7776     {
7777       clone = clone_die (decl);
7778       if (die->comdat_type_p)
7779         add_AT_die_ref (clone, DW_AT_signature, die);
7780       return clone;
7781     }
7782
7783   clone = new_die_raw (die->die_tag);
7784
7785   FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
7786     {
7787       /* We don't want to copy over all attributes.
7788          For example we don't want DW_AT_byte_size because otherwise we will no
7789          longer have a declaration and GDB will treat it as a definition.  */
7790
7791       switch (a->dw_attr)
7792         {
7793         case DW_AT_abstract_origin:
7794         case DW_AT_artificial:
7795         case DW_AT_containing_type:
7796         case DW_AT_external:
7797         case DW_AT_name:
7798         case DW_AT_type:
7799         case DW_AT_virtuality:
7800         case DW_AT_linkage_name:
7801         case DW_AT_MIPS_linkage_name:
7802           add_dwarf_attr (clone, a);
7803           break;
7804         case DW_AT_byte_size:
7805         case DW_AT_alignment:
7806         default:
7807           break;
7808         }
7809     }
7810
7811   if (die->comdat_type_p)
7812     add_AT_die_ref (clone, DW_AT_signature, die);
7813
7814   add_AT_flag (clone, DW_AT_declaration, 1);
7815   return clone;
7816 }
7817
7818
7819 /* Structure to map a DIE in one CU to its copy in a comdat type unit.  */
7820
7821 struct decl_table_entry
7822 {
7823   dw_die_ref orig;
7824   dw_die_ref copy;
7825 };
7826
7827 /* Helpers to manipulate hash table of copied declarations.  */
7828
7829 /* Hashtable helpers.  */
7830
7831 struct decl_table_entry_hasher : free_ptr_hash <decl_table_entry>
7832 {
7833   typedef die_struct *compare_type;
7834   static inline hashval_t hash (const decl_table_entry *);
7835   static inline bool equal (const decl_table_entry *, const die_struct *);
7836 };
7837
7838 inline hashval_t
7839 decl_table_entry_hasher::hash (const decl_table_entry *entry)
7840 {
7841   return htab_hash_pointer (entry->orig);
7842 }
7843
7844 inline bool
7845 decl_table_entry_hasher::equal (const decl_table_entry *entry1,
7846                                 const die_struct *entry2)
7847 {
7848   return entry1->orig == entry2;
7849 }
7850
7851 typedef hash_table<decl_table_entry_hasher> decl_hash_type;
7852
7853 /* Copy DIE and its ancestors, up to, but not including, the compile unit
7854    or type unit entry, to a new tree.  Adds the new tree to UNIT and returns
7855    a pointer to the copy of DIE.  If DECL_TABLE is provided, it is used
7856    to check if the ancestor has already been copied into UNIT.  */
7857
7858 static dw_die_ref
7859 copy_ancestor_tree (dw_die_ref unit, dw_die_ref die,
7860                     decl_hash_type *decl_table)
7861 {
7862   dw_die_ref parent = die->die_parent;
7863   dw_die_ref new_parent = unit;
7864   dw_die_ref copy;
7865   decl_table_entry **slot = NULL;
7866   struct decl_table_entry *entry = NULL;
7867
7868   if (decl_table)
7869     {
7870       /* Check if the entry has already been copied to UNIT.  */
7871       slot = decl_table->find_slot_with_hash (die, htab_hash_pointer (die),
7872                                               INSERT);
7873       if (*slot != HTAB_EMPTY_ENTRY)
7874         {
7875           entry = *slot;
7876           return entry->copy;
7877         }
7878
7879       /* Record in DECL_TABLE that DIE has been copied to UNIT.  */
7880       entry = XCNEW (struct decl_table_entry);
7881       entry->orig = die;
7882       entry->copy = NULL;
7883       *slot = entry;
7884     }
7885
7886   if (parent != NULL)
7887     {
7888       dw_die_ref spec = get_AT_ref (parent, DW_AT_specification);
7889       if (spec != NULL)
7890         parent = spec;
7891       if (!is_unit_die (parent))
7892         new_parent = copy_ancestor_tree (unit, parent, decl_table);
7893     }
7894
7895   copy = clone_as_declaration (die);
7896   add_child_die (new_parent, copy);
7897
7898   if (decl_table)
7899     {
7900       /* Record the pointer to the copy.  */
7901       entry->copy = copy;
7902     }
7903
7904   return copy;
7905 }
7906 /* Copy the declaration context to the new type unit DIE.  This includes
7907    any surrounding namespace or type declarations.  If the DIE has an
7908    AT_specification attribute, it also includes attributes and children
7909    attached to the specification, and returns a pointer to the original
7910    parent of the declaration DIE.  Returns NULL otherwise.  */
7911
7912 static dw_die_ref
7913 copy_declaration_context (dw_die_ref unit, dw_die_ref die)
7914 {
7915   dw_die_ref decl;
7916   dw_die_ref new_decl;
7917   dw_die_ref orig_parent = NULL;
7918
7919   decl = get_AT_ref (die, DW_AT_specification);
7920   if (decl == NULL)
7921     decl = die;
7922   else
7923     {
7924       unsigned ix;
7925       dw_die_ref c;
7926       dw_attr_node *a;
7927
7928       /* The original DIE will be changed to a declaration, and must
7929          be moved to be a child of the original declaration DIE.  */
7930       orig_parent = decl->die_parent;
7931
7932       /* Copy the type node pointer from the new DIE to the original
7933          declaration DIE so we can forward references later.  */
7934       decl->comdat_type_p = true;
7935       decl->die_id.die_type_node = die->die_id.die_type_node;
7936
7937       remove_AT (die, DW_AT_specification);
7938
7939       FOR_EACH_VEC_SAFE_ELT (decl->die_attr, ix, a)
7940         {
7941           if (a->dw_attr != DW_AT_name
7942               && a->dw_attr != DW_AT_declaration
7943               && a->dw_attr != DW_AT_external)
7944             add_dwarf_attr (die, a);
7945         }
7946
7947       FOR_EACH_CHILD (decl, c, add_child_die (die, clone_tree (c)));
7948     }
7949
7950   if (decl->die_parent != NULL
7951       && !is_unit_die (decl->die_parent))
7952     {
7953       new_decl = copy_ancestor_tree (unit, decl, NULL);
7954       if (new_decl != NULL)
7955         {
7956           remove_AT (new_decl, DW_AT_signature);
7957           add_AT_specification (die, new_decl);
7958         }
7959     }
7960
7961   return orig_parent;
7962 }
7963
7964 /* Generate the skeleton ancestor tree for the given NODE, then clone
7965    the DIE and add the clone into the tree.  */
7966
7967 static void
7968 generate_skeleton_ancestor_tree (skeleton_chain_node *node)
7969 {
7970   if (node->new_die != NULL)
7971     return;
7972
7973   node->new_die = clone_as_declaration (node->old_die);
7974
7975   if (node->parent != NULL)
7976     {
7977       generate_skeleton_ancestor_tree (node->parent);
7978       add_child_die (node->parent->new_die, node->new_die);
7979     }
7980 }
7981
7982 /* Generate a skeleton tree of DIEs containing any declarations that are
7983    found in the original tree.  We traverse the tree looking for declaration
7984    DIEs, and construct the skeleton from the bottom up whenever we find one.  */
7985
7986 static void
7987 generate_skeleton_bottom_up (skeleton_chain_node *parent)
7988 {
7989   skeleton_chain_node node;
7990   dw_die_ref c;
7991   dw_die_ref first;
7992   dw_die_ref prev = NULL;
7993   dw_die_ref next = NULL;
7994
7995   node.parent = parent;
7996
7997   first = c = parent->old_die->die_child;
7998   if (c)
7999     next = c->die_sib;
8000   if (c) do {
8001     if (prev == NULL || prev->die_sib == c)
8002       prev = c;
8003     c = next;
8004     next = (c == first ? NULL : c->die_sib);
8005     node.old_die = c;
8006     node.new_die = NULL;
8007     if (is_declaration_die (c))
8008       {
8009         if (is_template_instantiation (c))
8010           {
8011             /* Instantiated templates do not need to be cloned into the
8012                type unit.  Just move the DIE and its children back to
8013                the skeleton tree (in the main CU).  */
8014             remove_child_with_prev (c, prev);
8015             add_child_die (parent->new_die, c);
8016             c = prev;
8017           }
8018         else if (c->comdat_type_p)
8019           {
8020             /* This is the skeleton of earlier break_out_comdat_types
8021                type.  Clone the existing DIE, but keep the children
8022                under the original (which is in the main CU).  */
8023             dw_die_ref clone = clone_die (c);
8024
8025             replace_child (c, clone, prev);
8026             generate_skeleton_ancestor_tree (parent);
8027             add_child_die (parent->new_die, c);
8028             c = clone;
8029             continue;
8030           }
8031         else
8032           {
8033             /* Clone the existing DIE, move the original to the skeleton
8034                tree (which is in the main CU), and put the clone, with
8035                all the original's children, where the original came from
8036                (which is about to be moved to the type unit).  */
8037             dw_die_ref clone = clone_die (c);
8038             move_all_children (c, clone);
8039
8040             /* If the original has a DW_AT_object_pointer attribute,
8041                it would now point to a child DIE just moved to the
8042                cloned tree, so we need to remove that attribute from
8043                the original.  */
8044             remove_AT (c, DW_AT_object_pointer);
8045
8046             replace_child (c, clone, prev);
8047             generate_skeleton_ancestor_tree (parent);
8048             add_child_die (parent->new_die, c);
8049             node.old_die = clone;
8050             node.new_die = c;
8051             c = clone;
8052           }
8053       }
8054     generate_skeleton_bottom_up (&node);
8055   } while (next != NULL);
8056 }
8057
8058 /* Wrapper function for generate_skeleton_bottom_up.  */
8059
8060 static dw_die_ref
8061 generate_skeleton (dw_die_ref die)
8062 {
8063   skeleton_chain_node node;
8064
8065   node.old_die = die;
8066   node.new_die = NULL;
8067   node.parent = NULL;
8068
8069   /* If this type definition is nested inside another type,
8070      and is not an instantiation of a template, always leave
8071      at least a declaration in its place.  */
8072   if (die->die_parent != NULL
8073       && is_type_die (die->die_parent)
8074       && !is_template_instantiation (die))
8075     node.new_die = clone_as_declaration (die);
8076
8077   generate_skeleton_bottom_up (&node);
8078   return node.new_die;
8079 }
8080
8081 /* Remove the CHILD DIE from its parent, possibly replacing it with a cloned
8082    declaration.  The original DIE is moved to a new compile unit so that
8083    existing references to it follow it to the new location.  If any of the
8084    original DIE's descendants is a declaration, we need to replace the
8085    original DIE with a skeleton tree and move the declarations back into the
8086    skeleton tree.  */
8087
8088 static dw_die_ref
8089 remove_child_or_replace_with_skeleton (dw_die_ref unit, dw_die_ref child,
8090                                        dw_die_ref prev)
8091 {
8092   dw_die_ref skeleton, orig_parent;
8093
8094   /* Copy the declaration context to the type unit DIE.  If the returned
8095      ORIG_PARENT is not NULL, the skeleton needs to be added as a child of
8096      that DIE.  */
8097   orig_parent = copy_declaration_context (unit, child);
8098
8099   skeleton = generate_skeleton (child);
8100   if (skeleton == NULL)
8101     remove_child_with_prev (child, prev);
8102   else
8103     {
8104       skeleton->comdat_type_p = true;
8105       skeleton->die_id.die_type_node = child->die_id.die_type_node;
8106
8107       /* If the original DIE was a specification, we need to put
8108          the skeleton under the parent DIE of the declaration.
8109          This leaves the original declaration in the tree, but
8110          it will be pruned later since there are no longer any
8111          references to it.  */
8112       if (orig_parent != NULL)
8113         {
8114           remove_child_with_prev (child, prev);
8115           add_child_die (orig_parent, skeleton);
8116         }
8117       else
8118         replace_child (child, skeleton, prev);
8119     }
8120
8121   return skeleton;
8122 }
8123
8124 static void
8125 copy_dwarf_procs_ref_in_attrs (dw_die_ref die,
8126                                comdat_type_node *type_node,
8127                                hash_map<dw_die_ref, dw_die_ref> &copied_dwarf_procs);
8128
8129 /* Helper for copy_dwarf_procs_ref_in_dies.  Make a copy of the DIE DWARF
8130    procedure, put it under TYPE_NODE and return the copy.  Continue looking for
8131    DWARF procedure references in the DW_AT_location attribute.  */
8132
8133 static dw_die_ref
8134 copy_dwarf_procedure (dw_die_ref die,
8135                       comdat_type_node *type_node,
8136                       hash_map<dw_die_ref, dw_die_ref> &copied_dwarf_procs)
8137 {
8138   gcc_assert (die->die_tag == DW_TAG_dwarf_procedure);
8139
8140   /* DWARF procedures are not supposed to have children...  */
8141   gcc_assert (die->die_child == NULL);
8142
8143   /* ... and they are supposed to have only one attribute: DW_AT_location.  */
8144   gcc_assert (vec_safe_length (die->die_attr) == 1
8145               && ((*die->die_attr)[0].dw_attr == DW_AT_location));
8146
8147   /* Do not copy more than once DWARF procedures.  */
8148   bool existed;
8149   dw_die_ref &die_copy = copied_dwarf_procs.get_or_insert (die, &existed);
8150   if (existed)
8151     return die_copy;
8152
8153   die_copy = clone_die (die);
8154   add_child_die (type_node->root_die, die_copy);
8155   copy_dwarf_procs_ref_in_attrs (die_copy, type_node, copied_dwarf_procs);
8156   return die_copy;
8157 }
8158
8159 /* Helper for copy_dwarf_procs_ref_in_dies.  Look for references to DWARF
8160    procedures in DIE's attributes.  */
8161
8162 static void
8163 copy_dwarf_procs_ref_in_attrs (dw_die_ref die,
8164                                comdat_type_node *type_node,
8165                                hash_map<dw_die_ref, dw_die_ref> &copied_dwarf_procs)
8166 {
8167   dw_attr_node *a;
8168   unsigned i;
8169
8170   FOR_EACH_VEC_SAFE_ELT (die->die_attr, i, a)
8171     {
8172       dw_loc_descr_ref loc;
8173
8174       if (a->dw_attr_val.val_class != dw_val_class_loc)
8175         continue;
8176
8177       for (loc = a->dw_attr_val.v.val_loc; loc != NULL; loc = loc->dw_loc_next)
8178         {
8179           switch (loc->dw_loc_opc)
8180             {
8181             case DW_OP_call2:
8182             case DW_OP_call4:
8183             case DW_OP_call_ref:
8184               gcc_assert (loc->dw_loc_oprnd1.val_class
8185                           == dw_val_class_die_ref);
8186               loc->dw_loc_oprnd1.v.val_die_ref.die
8187                 = copy_dwarf_procedure (loc->dw_loc_oprnd1.v.val_die_ref.die,
8188                                         type_node,
8189                                         copied_dwarf_procs);
8190
8191             default:
8192               break;
8193             }
8194         }
8195     }
8196 }
8197
8198 /* Copy DWARF procedures that are referenced by the DIE tree to TREE_NODE and
8199    rewrite references to point to the copies.
8200
8201    References are looked for in DIE's attributes and recursively in all its
8202    children attributes that are location descriptions. COPIED_DWARF_PROCS is a
8203    mapping from old DWARF procedures to their copy. It is used not to copy
8204    twice the same DWARF procedure under TYPE_NODE.  */
8205
8206 static void
8207 copy_dwarf_procs_ref_in_dies (dw_die_ref die,
8208                               comdat_type_node *type_node,
8209                               hash_map<dw_die_ref, dw_die_ref> &copied_dwarf_procs)
8210 {
8211   dw_die_ref c;
8212
8213   copy_dwarf_procs_ref_in_attrs (die, type_node, copied_dwarf_procs);
8214   FOR_EACH_CHILD (die, c, copy_dwarf_procs_ref_in_dies (c,
8215                                                         type_node,
8216                                                         copied_dwarf_procs));
8217 }
8218
8219 /* Traverse the DIE and set up additional .debug_types or .debug_info
8220    DW_UT_*type sections for each type worthy of being placed in a COMDAT
8221    section.  */
8222
8223 static void
8224 break_out_comdat_types (dw_die_ref die)
8225 {
8226   dw_die_ref c;
8227   dw_die_ref first;
8228   dw_die_ref prev = NULL;
8229   dw_die_ref next = NULL;
8230   dw_die_ref unit = NULL;
8231
8232   first = c = die->die_child;
8233   if (c)
8234     next = c->die_sib;
8235   if (c) do {
8236     if (prev == NULL || prev->die_sib == c)
8237       prev = c;
8238     c = next;
8239     next = (c == first ? NULL : c->die_sib);
8240     if (should_move_die_to_comdat (c))
8241       {
8242         dw_die_ref replacement;
8243         comdat_type_node *type_node;
8244
8245         /* Break out nested types into their own type units.  */
8246         break_out_comdat_types (c);
8247
8248         /* Create a new type unit DIE as the root for the new tree, and
8249            add it to the list of comdat types.  */
8250         unit = new_die (DW_TAG_type_unit, NULL, NULL);
8251         add_AT_unsigned (unit, DW_AT_language,
8252                          get_AT_unsigned (comp_unit_die (), DW_AT_language));
8253         type_node = ggc_cleared_alloc<comdat_type_node> ();
8254         type_node->root_die = unit;
8255         type_node->next = comdat_type_list;
8256         comdat_type_list = type_node;
8257
8258         /* Generate the type signature.  */
8259         generate_type_signature (c, type_node);
8260
8261         /* Copy the declaration context, attributes, and children of the
8262            declaration into the new type unit DIE, then remove this DIE
8263            from the main CU (or replace it with a skeleton if necessary).  */
8264         replacement = remove_child_or_replace_with_skeleton (unit, c, prev);
8265         type_node->skeleton_die = replacement;
8266
8267         /* Add the DIE to the new compunit.  */
8268         add_child_die (unit, c);
8269
8270         /* Types can reference DWARF procedures for type size or data location
8271            expressions.  Calls in DWARF expressions cannot target procedures
8272            that are not in the same section.  So we must copy DWARF procedures
8273            along with this type and then rewrite references to them.  */
8274         hash_map<dw_die_ref, dw_die_ref> copied_dwarf_procs;
8275         copy_dwarf_procs_ref_in_dies (c, type_node, copied_dwarf_procs);
8276
8277         if (replacement != NULL)
8278           c = replacement;
8279       }
8280     else if (c->die_tag == DW_TAG_namespace
8281              || c->die_tag == DW_TAG_class_type
8282              || c->die_tag == DW_TAG_structure_type
8283              || c->die_tag == DW_TAG_union_type)
8284       {
8285         /* Look for nested types that can be broken out.  */
8286         break_out_comdat_types (c);
8287       }
8288   } while (next != NULL);
8289 }
8290
8291 /* Like clone_tree, but copy DW_TAG_subprogram DIEs as declarations.
8292    Enter all the cloned children into the hash table decl_table.  */
8293
8294 static dw_die_ref
8295 clone_tree_partial (dw_die_ref die, decl_hash_type *decl_table)
8296 {
8297   dw_die_ref c;
8298   dw_die_ref clone;
8299   struct decl_table_entry *entry;
8300   decl_table_entry **slot;
8301
8302   if (die->die_tag == DW_TAG_subprogram)
8303     clone = clone_as_declaration (die);
8304   else
8305     clone = clone_die (die);
8306
8307   slot = decl_table->find_slot_with_hash (die,
8308                                           htab_hash_pointer (die), INSERT);
8309
8310   /* Assert that DIE isn't in the hash table yet.  If it would be there
8311      before, the ancestors would be necessarily there as well, therefore
8312      clone_tree_partial wouldn't be called.  */
8313   gcc_assert (*slot == HTAB_EMPTY_ENTRY);
8314
8315   entry = XCNEW (struct decl_table_entry);
8316   entry->orig = die;
8317   entry->copy = clone;
8318   *slot = entry;
8319
8320   if (die->die_tag != DW_TAG_subprogram)
8321     FOR_EACH_CHILD (die, c,
8322                     add_child_die (clone, clone_tree_partial (c, decl_table)));
8323
8324   return clone;
8325 }
8326
8327 /* Walk the DIE and its children, looking for references to incomplete
8328    or trivial types that are unmarked (i.e., that are not in the current
8329    type_unit).  */
8330
8331 static void
8332 copy_decls_walk (dw_die_ref unit, dw_die_ref die, decl_hash_type *decl_table)
8333 {
8334   dw_die_ref c;
8335   dw_attr_node *a;
8336   unsigned ix;
8337
8338   FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
8339     {
8340       if (AT_class (a) == dw_val_class_die_ref)
8341         {
8342           dw_die_ref targ = AT_ref (a);
8343           decl_table_entry **slot;
8344           struct decl_table_entry *entry;
8345
8346           if (targ->die_mark != 0 || targ->comdat_type_p)
8347             continue;
8348
8349           slot = decl_table->find_slot_with_hash (targ,
8350                                                   htab_hash_pointer (targ),
8351                                                   INSERT);
8352
8353           if (*slot != HTAB_EMPTY_ENTRY)
8354             {
8355               /* TARG has already been copied, so we just need to
8356                  modify the reference to point to the copy.  */
8357               entry = *slot;
8358               a->dw_attr_val.v.val_die_ref.die = entry->copy;
8359             }
8360           else
8361             {
8362               dw_die_ref parent = unit;
8363               dw_die_ref copy = clone_die (targ);
8364
8365               /* Record in DECL_TABLE that TARG has been copied.
8366                  Need to do this now, before the recursive call,
8367                  because DECL_TABLE may be expanded and SLOT
8368                  would no longer be a valid pointer.  */
8369               entry = XCNEW (struct decl_table_entry);
8370               entry->orig = targ;
8371               entry->copy = copy;
8372               *slot = entry;
8373
8374               /* If TARG is not a declaration DIE, we need to copy its
8375                  children.  */
8376               if (!is_declaration_die (targ))
8377                 {
8378                   FOR_EACH_CHILD (
8379                       targ, c,
8380                       add_child_die (copy,
8381                                      clone_tree_partial (c, decl_table)));
8382                 }
8383
8384               /* Make sure the cloned tree is marked as part of the
8385                  type unit.  */
8386               mark_dies (copy);
8387
8388               /* If TARG has surrounding context, copy its ancestor tree
8389                  into the new type unit.  */
8390               if (targ->die_parent != NULL
8391                   && !is_unit_die (targ->die_parent))
8392                 parent = copy_ancestor_tree (unit, targ->die_parent,
8393                                              decl_table);
8394
8395               add_child_die (parent, copy);
8396               a->dw_attr_val.v.val_die_ref.die = copy;
8397
8398               /* Make sure the newly-copied DIE is walked.  If it was
8399                  installed in a previously-added context, it won't
8400                  get visited otherwise.  */
8401               if (parent != unit)
8402                 {
8403                   /* Find the highest point of the newly-added tree,
8404                      mark each node along the way, and walk from there.  */
8405                   parent->die_mark = 1;
8406                   while (parent->die_parent
8407                          && parent->die_parent->die_mark == 0)
8408                     {
8409                       parent = parent->die_parent;
8410                       parent->die_mark = 1;
8411                     }
8412                   copy_decls_walk (unit, parent, decl_table);
8413                 }
8414             }
8415         }
8416     }
8417
8418   FOR_EACH_CHILD (die, c, copy_decls_walk (unit, c, decl_table));
8419 }
8420
8421 /* Copy declarations for "unworthy" types into the new comdat section.
8422    Incomplete types, modified types, and certain other types aren't broken
8423    out into comdat sections of their own, so they don't have a signature,
8424    and we need to copy the declaration into the same section so that we
8425    don't have an external reference.  */
8426
8427 static void
8428 copy_decls_for_unworthy_types (dw_die_ref unit)
8429 {
8430   mark_dies (unit);
8431   decl_hash_type decl_table (10);
8432   copy_decls_walk (unit, unit, &decl_table);
8433   unmark_dies (unit);
8434 }
8435
8436 /* Traverse the DIE and add a sibling attribute if it may have the
8437    effect of speeding up access to siblings.  To save some space,
8438    avoid generating sibling attributes for DIE's without children.  */
8439
8440 static void
8441 add_sibling_attributes (dw_die_ref die)
8442 {
8443   dw_die_ref c;
8444
8445   if (! die->die_child)
8446     return;
8447
8448   if (die->die_parent && die != die->die_parent->die_child)
8449     add_AT_die_ref (die, DW_AT_sibling, die->die_sib);
8450
8451   FOR_EACH_CHILD (die, c, add_sibling_attributes (c));
8452 }
8453
8454 /* Output all location lists for the DIE and its children.  */
8455
8456 static void
8457 output_location_lists (dw_die_ref die)
8458 {
8459   dw_die_ref c;
8460   dw_attr_node *a;
8461   unsigned ix;
8462
8463   FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
8464     if (AT_class (a) == dw_val_class_loc_list)
8465       output_loc_list (AT_loc_list (a));
8466
8467   FOR_EACH_CHILD (die, c, output_location_lists (c));
8468 }
8469
8470 /* During assign_location_list_indexes and output_loclists_offset the
8471    current index, after it the number of assigned indexes (i.e. how
8472    large the .debug_loclists* offset table should be).  */
8473 static unsigned int loc_list_idx;
8474
8475 /* Output all location list offsets for the DIE and its children.  */
8476
8477 static void
8478 output_loclists_offsets (dw_die_ref die)
8479 {
8480   dw_die_ref c;
8481   dw_attr_node *a;
8482   unsigned ix;
8483
8484   FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
8485     if (AT_class (a) == dw_val_class_loc_list)
8486       {
8487         dw_loc_list_ref l = AT_loc_list (a);
8488         if (l->offset_emitted)
8489           continue;
8490         dw2_asm_output_delta (DWARF_OFFSET_SIZE, l->ll_symbol,
8491                               loc_section_label, NULL);
8492         gcc_assert (l->hash == loc_list_idx);
8493         loc_list_idx++;
8494         l->offset_emitted = true;
8495       }
8496
8497   FOR_EACH_CHILD (die, c, output_loclists_offsets (c));
8498 }
8499
8500 /* Recursively set indexes of location lists.  */
8501
8502 static void
8503 assign_location_list_indexes (dw_die_ref die)
8504 {
8505   dw_die_ref c;
8506   dw_attr_node *a;
8507   unsigned ix;
8508
8509   FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
8510     if (AT_class (a) == dw_val_class_loc_list)
8511       {
8512         dw_loc_list_ref list = AT_loc_list (a);
8513         if (!list->num_assigned)
8514           {
8515             list->num_assigned = true;
8516             list->hash = loc_list_idx++;
8517           }
8518       }
8519
8520   FOR_EACH_CHILD (die, c, assign_location_list_indexes (c));
8521 }
8522
8523 /* We want to limit the number of external references, because they are
8524    larger than local references: a relocation takes multiple words, and
8525    even a sig8 reference is always eight bytes, whereas a local reference
8526    can be as small as one byte (though DW_FORM_ref is usually 4 in GCC).
8527    So if we encounter multiple external references to the same type DIE, we
8528    make a local typedef stub for it and redirect all references there.
8529
8530    This is the element of the hash table for keeping track of these
8531    references.  */
8532
8533 struct external_ref
8534 {
8535   dw_die_ref type;
8536   dw_die_ref stub;
8537   unsigned n_refs;
8538 };
8539
8540 /* Hashtable helpers.  */
8541
8542 struct external_ref_hasher : free_ptr_hash <external_ref>
8543 {
8544   static inline hashval_t hash (const external_ref *);
8545   static inline bool equal (const external_ref *, const external_ref *);
8546 };
8547
8548 inline hashval_t
8549 external_ref_hasher::hash (const external_ref *r)
8550 {
8551   dw_die_ref die = r->type;
8552   hashval_t h = 0;
8553
8554   /* We can't use the address of the DIE for hashing, because
8555      that will make the order of the stub DIEs non-deterministic.  */
8556   if (! die->comdat_type_p)
8557     /* We have a symbol; use it to compute a hash.  */
8558     h = htab_hash_string (die->die_id.die_symbol);
8559   else
8560     {
8561       /* We have a type signature; use a subset of the bits as the hash.
8562          The 8-byte signature is at least as large as hashval_t.  */
8563       comdat_type_node *type_node = die->die_id.die_type_node;
8564       memcpy (&h, type_node->signature, sizeof (h));
8565     }
8566   return h;
8567 }
8568
8569 inline bool
8570 external_ref_hasher::equal (const external_ref *r1, const external_ref *r2)
8571 {
8572   return r1->type == r2->type;
8573 }
8574
8575 typedef hash_table<external_ref_hasher> external_ref_hash_type;
8576
8577 /* Return a pointer to the external_ref for references to DIE.  */
8578
8579 static struct external_ref *
8580 lookup_external_ref (external_ref_hash_type *map, dw_die_ref die)
8581 {
8582   struct external_ref ref, *ref_p;
8583   external_ref **slot;
8584
8585   ref.type = die;
8586   slot = map->find_slot (&ref, INSERT);
8587   if (*slot != HTAB_EMPTY_ENTRY)
8588     return *slot;
8589
8590   ref_p = XCNEW (struct external_ref);
8591   ref_p->type = die;
8592   *slot = ref_p;
8593   return ref_p;
8594 }
8595
8596 /* Subroutine of optimize_external_refs, below.
8597
8598    If we see a type skeleton, record it as our stub.  If we see external
8599    references, remember how many we've seen.  */
8600
8601 static void
8602 optimize_external_refs_1 (dw_die_ref die, external_ref_hash_type *map)
8603 {
8604   dw_die_ref c;
8605   dw_attr_node *a;
8606   unsigned ix;
8607   struct external_ref *ref_p;
8608
8609   if (is_type_die (die)
8610       && (c = get_AT_ref (die, DW_AT_signature)))
8611     {
8612       /* This is a local skeleton; use it for local references.  */
8613       ref_p = lookup_external_ref (map, c);
8614       ref_p->stub = die;
8615     }
8616
8617   /* Scan the DIE references, and remember any that refer to DIEs from
8618      other CUs (i.e. those which are not marked).  */
8619   FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
8620     if (AT_class (a) == dw_val_class_die_ref
8621         && (c = AT_ref (a))->die_mark == 0
8622         && is_type_die (c))
8623       {
8624         ref_p = lookup_external_ref (map, c);
8625         ref_p->n_refs++;
8626       }
8627
8628   FOR_EACH_CHILD (die, c, optimize_external_refs_1 (c, map));
8629 }
8630
8631 /* htab_traverse callback function for optimize_external_refs, below.  SLOT
8632    points to an external_ref, DATA is the CU we're processing.  If we don't
8633    already have a local stub, and we have multiple refs, build a stub.  */
8634
8635 int
8636 dwarf2_build_local_stub (external_ref **slot, dw_die_ref data)
8637 {
8638   struct external_ref *ref_p = *slot;
8639
8640   if (ref_p->stub == NULL && ref_p->n_refs > 1 && !dwarf_strict)
8641     {
8642       /* We have multiple references to this type, so build a small stub.
8643          Both of these forms are a bit dodgy from the perspective of the
8644          DWARF standard, since technically they should have names.  */
8645       dw_die_ref cu = data;
8646       dw_die_ref type = ref_p->type;
8647       dw_die_ref stub = NULL;
8648
8649       if (type->comdat_type_p)
8650         {
8651           /* If we refer to this type via sig8, use AT_signature.  */
8652           stub = new_die (type->die_tag, cu, NULL_TREE);
8653           add_AT_die_ref (stub, DW_AT_signature, type);
8654         }
8655       else
8656         {
8657           /* Otherwise, use a typedef with no name.  */
8658           stub = new_die (DW_TAG_typedef, cu, NULL_TREE);
8659           add_AT_die_ref (stub, DW_AT_type, type);
8660         }
8661
8662       stub->die_mark++;
8663       ref_p->stub = stub;
8664     }
8665   return 1;
8666 }
8667
8668 /* DIE is a unit; look through all the DIE references to see if there are
8669    any external references to types, and if so, create local stubs for
8670    them which will be applied in build_abbrev_table.  This is useful because
8671    references to local DIEs are smaller.  */
8672
8673 static external_ref_hash_type *
8674 optimize_external_refs (dw_die_ref die)
8675 {
8676   external_ref_hash_type *map = new external_ref_hash_type (10);
8677   optimize_external_refs_1 (die, map);
8678   map->traverse <dw_die_ref, dwarf2_build_local_stub> (die);
8679   return map;
8680 }
8681
8682 /* The following 3 variables are temporaries that are computed only during the
8683    build_abbrev_table call and used and released during the following
8684    optimize_abbrev_table call.  */
8685
8686 /* First abbrev_id that can be optimized based on usage.  */
8687 static unsigned int abbrev_opt_start;
8688
8689 /* Maximum abbrev_id of a base type plus one (we can't optimize DIEs with
8690    abbrev_id smaller than this, because they must be already sized
8691    during build_abbrev_table).  */
8692 static unsigned int abbrev_opt_base_type_end;
8693
8694 /* Vector of usage counts during build_abbrev_table.  Indexed by
8695    abbrev_id - abbrev_opt_start.  */
8696 static vec<unsigned int> abbrev_usage_count;
8697
8698 /* Vector of all DIEs added with die_abbrev >= abbrev_opt_start.  */
8699 static vec<dw_die_ref> sorted_abbrev_dies;
8700
8701 /* The format of each DIE (and its attribute value pairs) is encoded in an
8702    abbreviation table.  This routine builds the abbreviation table and assigns
8703    a unique abbreviation id for each abbreviation entry.  The children of each
8704    die are visited recursively.  */
8705
8706 static void
8707 build_abbrev_table (dw_die_ref die, external_ref_hash_type *extern_map)
8708 {
8709   unsigned int abbrev_id = 0;
8710   dw_die_ref c;
8711   dw_attr_node *a;
8712   unsigned ix;
8713   dw_die_ref abbrev;
8714
8715   /* Scan the DIE references, and replace any that refer to
8716      DIEs from other CUs (i.e. those which are not marked) with
8717      the local stubs we built in optimize_external_refs.  */
8718   FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
8719     if (AT_class (a) == dw_val_class_die_ref
8720         && (c = AT_ref (a))->die_mark == 0)
8721       {
8722         struct external_ref *ref_p;
8723         gcc_assert (AT_ref (a)->comdat_type_p || AT_ref (a)->die_id.die_symbol);
8724
8725         ref_p = lookup_external_ref (extern_map, c);
8726         if (ref_p->stub && ref_p->stub != die)
8727           change_AT_die_ref (a, ref_p->stub);
8728         else
8729           /* We aren't changing this reference, so mark it external.  */
8730           set_AT_ref_external (a, 1);
8731       }
8732
8733   FOR_EACH_VEC_SAFE_ELT (abbrev_die_table, abbrev_id, abbrev)
8734     {
8735       dw_attr_node *die_a, *abbrev_a;
8736       unsigned ix;
8737       bool ok = true;
8738
8739       if (abbrev_id == 0)
8740         continue;
8741       if (abbrev->die_tag != die->die_tag)
8742         continue;
8743       if ((abbrev->die_child != NULL) != (die->die_child != NULL))
8744         continue;
8745
8746       if (vec_safe_length (abbrev->die_attr) != vec_safe_length (die->die_attr))
8747         continue;
8748
8749       FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, die_a)
8750         {
8751           abbrev_a = &(*abbrev->die_attr)[ix];
8752           if ((abbrev_a->dw_attr != die_a->dw_attr)
8753               || (value_format (abbrev_a) != value_format (die_a)))
8754             {
8755               ok = false;
8756               break;
8757             }
8758         }
8759       if (ok)
8760         break;
8761     }
8762
8763   if (abbrev_id >= vec_safe_length (abbrev_die_table))
8764     {
8765       vec_safe_push (abbrev_die_table, die);
8766       if (abbrev_opt_start)
8767         abbrev_usage_count.safe_push (0);
8768     }
8769   if (abbrev_opt_start && abbrev_id >= abbrev_opt_start)
8770     {
8771       abbrev_usage_count[abbrev_id - abbrev_opt_start]++;
8772       sorted_abbrev_dies.safe_push (die);
8773     }
8774
8775   die->die_abbrev = abbrev_id;
8776   FOR_EACH_CHILD (die, c, build_abbrev_table (c, extern_map));
8777 }
8778
8779 /* Callback function for sorted_abbrev_dies vector sorting.  We sort
8780    by die_abbrev's usage count, from the most commonly used
8781    abbreviation to the least.  */
8782
8783 static int
8784 die_abbrev_cmp (const void *p1, const void *p2)
8785 {
8786   dw_die_ref die1 = *(const dw_die_ref *) p1;
8787   dw_die_ref die2 = *(const dw_die_ref *) p2;
8788
8789   gcc_checking_assert (die1->die_abbrev >= abbrev_opt_start);
8790   gcc_checking_assert (die2->die_abbrev >= abbrev_opt_start);
8791
8792   if (die1->die_abbrev >= abbrev_opt_base_type_end
8793       && die2->die_abbrev >= abbrev_opt_base_type_end)
8794     {
8795       if (abbrev_usage_count[die1->die_abbrev - abbrev_opt_start]
8796           > abbrev_usage_count[die2->die_abbrev - abbrev_opt_start])
8797         return -1;
8798       if (abbrev_usage_count[die1->die_abbrev - abbrev_opt_start]
8799           < abbrev_usage_count[die2->die_abbrev - abbrev_opt_start])
8800         return 1;
8801     }
8802
8803   /* Stabilize the sort.  */
8804   if (die1->die_abbrev < die2->die_abbrev)
8805     return -1;
8806   if (die1->die_abbrev > die2->die_abbrev)
8807     return 1;
8808
8809   return 0;
8810 }
8811
8812 /* Convert dw_val_class_const and dw_val_class_unsigned_const class attributes
8813    of DIEs in between sorted_abbrev_dies[first_id] and abbrev_dies[end_id - 1]
8814    into dw_val_class_const_implicit or
8815    dw_val_class_unsigned_const_implicit.  */
8816
8817 static void
8818 optimize_implicit_const (unsigned int first_id, unsigned int end,
8819                          vec<bool> &implicit_consts)
8820 {
8821   /* It never makes sense if there is just one DIE using the abbreviation.  */
8822   if (end < first_id + 2)
8823     return;
8824
8825   dw_attr_node *a;
8826   unsigned ix, i;
8827   dw_die_ref die = sorted_abbrev_dies[first_id];
8828   FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
8829     if (implicit_consts[ix])
8830       {
8831         enum dw_val_class new_class = dw_val_class_none;
8832         switch (AT_class (a))
8833           {
8834           case dw_val_class_unsigned_const:
8835             if ((HOST_WIDE_INT) AT_unsigned (a) < 0)
8836               continue;
8837
8838             /* The .debug_abbrev section will grow by
8839                size_of_sleb128 (AT_unsigned (a)) and we avoid the constants
8840                in all the DIEs using that abbreviation.  */
8841             if (constant_size (AT_unsigned (a)) * (end - first_id)
8842                 <= (unsigned) size_of_sleb128 (AT_unsigned (a)))
8843               continue;
8844
8845             new_class = dw_val_class_unsigned_const_implicit;
8846             break;
8847
8848           case dw_val_class_const:
8849             new_class = dw_val_class_const_implicit;
8850             break;
8851
8852           case dw_val_class_file:
8853             new_class = dw_val_class_file_implicit;
8854             break;
8855
8856           default:
8857             continue;
8858           }
8859         for (i = first_id; i < end; i++)
8860           (*sorted_abbrev_dies[i]->die_attr)[ix].dw_attr_val.val_class
8861             = new_class;
8862       }
8863 }
8864
8865 /* Attempt to optimize abbreviation table from abbrev_opt_start
8866    abbreviation above.  */
8867
8868 static void
8869 optimize_abbrev_table (void)
8870 {
8871   if (abbrev_opt_start
8872       && vec_safe_length (abbrev_die_table) > abbrev_opt_start
8873       && (dwarf_version >= 5 || vec_safe_length (abbrev_die_table) > 127))
8874     {
8875       auto_vec<bool, 32> implicit_consts;
8876       sorted_abbrev_dies.qsort (die_abbrev_cmp);
8877
8878       unsigned int abbrev_id = abbrev_opt_start - 1;
8879       unsigned int first_id = ~0U;
8880       unsigned int last_abbrev_id = 0;
8881       unsigned int i;
8882       dw_die_ref die;
8883       if (abbrev_opt_base_type_end > abbrev_opt_start)
8884         abbrev_id = abbrev_opt_base_type_end - 1;
8885       /* Reassign abbreviation ids from abbrev_opt_start above, so that
8886          most commonly used abbreviations come first.  */
8887       FOR_EACH_VEC_ELT (sorted_abbrev_dies, i, die)
8888         {
8889           dw_attr_node *a;
8890           unsigned ix;
8891
8892           /* If calc_base_type_die_sizes has been called, the CU and
8893              base types after it can't be optimized, because we've already
8894              calculated their DIE offsets.  We've sorted them first.  */
8895           if (die->die_abbrev < abbrev_opt_base_type_end)
8896             continue;
8897           if (die->die_abbrev != last_abbrev_id)
8898             {
8899               last_abbrev_id = die->die_abbrev;
8900               if (dwarf_version >= 5 && first_id != ~0U)
8901                 optimize_implicit_const (first_id, i, implicit_consts);
8902               abbrev_id++;
8903               (*abbrev_die_table)[abbrev_id] = die;
8904               if (dwarf_version >= 5)
8905                 {
8906                   first_id = i;
8907                   implicit_consts.truncate (0);
8908
8909                   FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
8910                     switch (AT_class (a))
8911                       {
8912                       case dw_val_class_const:
8913                       case dw_val_class_unsigned_const:
8914                       case dw_val_class_file:
8915                         implicit_consts.safe_push (true);
8916                         break;
8917                       default:
8918                         implicit_consts.safe_push (false);
8919                         break;
8920                       }
8921                 }
8922             }
8923           else if (dwarf_version >= 5)
8924             {
8925               FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
8926                 if (!implicit_consts[ix])
8927                   continue;
8928                 else
8929                   {
8930                     dw_attr_node *other_a
8931                       = &(*(*abbrev_die_table)[abbrev_id]->die_attr)[ix];
8932                     if (!dw_val_equal_p (&a->dw_attr_val,
8933                                          &other_a->dw_attr_val))
8934                       implicit_consts[ix] = false;
8935                   }
8936             }
8937           die->die_abbrev = abbrev_id;
8938         }
8939       gcc_assert (abbrev_id == vec_safe_length (abbrev_die_table) - 1);
8940       if (dwarf_version >= 5 && first_id != ~0U)
8941         optimize_implicit_const (first_id, i, implicit_consts);
8942     }
8943
8944   abbrev_opt_start = 0;
8945   abbrev_opt_base_type_end = 0;
8946   abbrev_usage_count.release ();
8947   sorted_abbrev_dies.release ();
8948 }
8949 \f
8950 /* Return the power-of-two number of bytes necessary to represent VALUE.  */
8951
8952 static int
8953 constant_size (unsigned HOST_WIDE_INT value)
8954 {
8955   int log;
8956
8957   if (value == 0)
8958     log = 0;
8959   else
8960     log = floor_log2 (value);
8961
8962   log = log / 8;
8963   log = 1 << (floor_log2 (log) + 1);
8964
8965   return log;
8966 }
8967
8968 /* Return the size of a DIE as it is represented in the
8969    .debug_info section.  */
8970
8971 static unsigned long
8972 size_of_die (dw_die_ref die)
8973 {
8974   unsigned long size = 0;
8975   dw_attr_node *a;
8976   unsigned ix;
8977   enum dwarf_form form;
8978
8979   size += size_of_uleb128 (die->die_abbrev);
8980   FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
8981     {
8982       switch (AT_class (a))
8983         {
8984         case dw_val_class_addr:
8985           if (dwarf_split_debug_info && AT_index (a) != NOT_INDEXED)
8986             {
8987               gcc_assert (AT_index (a) != NO_INDEX_ASSIGNED);
8988               size += size_of_uleb128 (AT_index (a));
8989             }
8990           else
8991             size += DWARF2_ADDR_SIZE;
8992           break;
8993         case dw_val_class_offset:
8994           size += DWARF_OFFSET_SIZE;
8995           break;
8996         case dw_val_class_loc:
8997           {
8998             unsigned long lsize = size_of_locs (AT_loc (a));
8999
9000             /* Block length.  */
9001             if (dwarf_version >= 4)
9002               size += size_of_uleb128 (lsize);
9003             else
9004               size += constant_size (lsize);
9005             size += lsize;
9006           }
9007           break;
9008         case dw_val_class_loc_list:
9009           if (dwarf_split_debug_info && dwarf_version >= 5)
9010             {
9011               gcc_assert (AT_loc_list (a)->num_assigned);
9012               size += size_of_uleb128 (AT_loc_list (a)->hash);
9013             }
9014           else
9015             size += DWARF_OFFSET_SIZE;
9016           break;
9017         case dw_val_class_range_list:
9018           if (value_format (a) == DW_FORM_rnglistx)
9019             {
9020               gcc_assert (rnglist_idx);
9021               dw_ranges *r = &(*ranges_table)[a->dw_attr_val.v.val_offset];
9022               size += size_of_uleb128 (r->idx);
9023             }
9024           else
9025             size += DWARF_OFFSET_SIZE;
9026           break;
9027         case dw_val_class_const:
9028           size += size_of_sleb128 (AT_int (a));
9029           break;
9030         case dw_val_class_unsigned_const:
9031           {
9032             int csize = constant_size (AT_unsigned (a));
9033             if (dwarf_version == 3
9034                 && a->dw_attr == DW_AT_data_member_location
9035                 && csize >= 4)
9036               size += size_of_uleb128 (AT_unsigned (a));
9037             else
9038               size += csize;
9039           }
9040           break;
9041         case dw_val_class_const_implicit:
9042         case dw_val_class_unsigned_const_implicit:
9043         case dw_val_class_file_implicit:
9044           /* These occupy no size in the DIE, just an extra sleb128 in
9045              .debug_abbrev.  */
9046           break;
9047         case dw_val_class_const_double:
9048           size += HOST_BITS_PER_DOUBLE_INT / HOST_BITS_PER_CHAR;
9049           if (HOST_BITS_PER_WIDE_INT >= DWARF_LARGEST_DATA_FORM_BITS)
9050             size++; /* block */
9051           break;
9052         case dw_val_class_wide_int:
9053           size += (get_full_len (*a->dw_attr_val.v.val_wide)
9054                    * HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR);
9055           if (get_full_len (*a->dw_attr_val.v.val_wide)
9056               * HOST_BITS_PER_WIDE_INT > DWARF_LARGEST_DATA_FORM_BITS)
9057             size++; /* block */
9058           break;
9059         case dw_val_class_vec:
9060           size += constant_size (a->dw_attr_val.v.val_vec.length
9061                                  * a->dw_attr_val.v.val_vec.elt_size)
9062                   + a->dw_attr_val.v.val_vec.length
9063                     * a->dw_attr_val.v.val_vec.elt_size; /* block */
9064           break;
9065         case dw_val_class_flag:
9066           if (dwarf_version >= 4)
9067             /* Currently all add_AT_flag calls pass in 1 as last argument,
9068                so DW_FORM_flag_present can be used.  If that ever changes,
9069                we'll need to use DW_FORM_flag and have some optimization
9070                in build_abbrev_table that will change those to
9071                DW_FORM_flag_present if it is set to 1 in all DIEs using
9072                the same abbrev entry.  */
9073             gcc_assert (a->dw_attr_val.v.val_flag == 1);
9074           else
9075             size += 1;
9076           break;
9077         case dw_val_class_die_ref:
9078           if (AT_ref_external (a))
9079             {
9080               /* In DWARF4, we use DW_FORM_ref_sig8; for earlier versions
9081                  we use DW_FORM_ref_addr.  In DWARF2, DW_FORM_ref_addr
9082                  is sized by target address length, whereas in DWARF3
9083                  it's always sized as an offset.  */
9084               if (use_debug_types)
9085                 size += DWARF_TYPE_SIGNATURE_SIZE;
9086               else if (dwarf_version == 2)
9087                 size += DWARF2_ADDR_SIZE;
9088               else
9089                 size += DWARF_OFFSET_SIZE;
9090             }
9091           else
9092             size += DWARF_OFFSET_SIZE;
9093           break;
9094         case dw_val_class_fde_ref:
9095           size += DWARF_OFFSET_SIZE;
9096           break;
9097         case dw_val_class_lbl_id:
9098           if (dwarf_split_debug_info && AT_index (a) != NOT_INDEXED)
9099             {
9100               gcc_assert (AT_index (a) != NO_INDEX_ASSIGNED);
9101               size += size_of_uleb128 (AT_index (a));
9102             }
9103           else
9104             size += DWARF2_ADDR_SIZE;
9105           break;
9106         case dw_val_class_lineptr:
9107         case dw_val_class_macptr:
9108         case dw_val_class_loclistsptr:
9109           size += DWARF_OFFSET_SIZE;
9110           break;
9111         case dw_val_class_str:
9112           form = AT_string_form (a);
9113           if (form == DW_FORM_strp || form == DW_FORM_line_strp)
9114             size += DWARF_OFFSET_SIZE;
9115           else if (form == DW_FORM_GNU_str_index)
9116             size += size_of_uleb128 (AT_index (a));
9117           else
9118             size += strlen (a->dw_attr_val.v.val_str->str) + 1;
9119           break;
9120         case dw_val_class_file:
9121           size += constant_size (maybe_emit_file (a->dw_attr_val.v.val_file));
9122           break;
9123         case dw_val_class_data8:
9124           size += 8;
9125           break;
9126         case dw_val_class_vms_delta:
9127           size += DWARF_OFFSET_SIZE;
9128           break;
9129         case dw_val_class_high_pc:
9130           size += DWARF2_ADDR_SIZE;
9131           break;
9132         case dw_val_class_discr_value:
9133           size += size_of_discr_value (&a->dw_attr_val.v.val_discr_value);
9134           break;
9135         case dw_val_class_discr_list:
9136             {
9137               unsigned block_size = size_of_discr_list (AT_discr_list (a));
9138
9139               /* This is a block, so we have the block length and then its
9140                  data.  */
9141               size += constant_size (block_size) + block_size;
9142             }
9143           break;
9144         default:
9145           gcc_unreachable ();
9146         }
9147     }
9148
9149   return size;
9150 }
9151
9152 /* Size the debugging information associated with a given DIE.  Visits the
9153    DIE's children recursively.  Updates the global variable next_die_offset, on
9154    each time through.  Uses the current value of next_die_offset to update the
9155    die_offset field in each DIE.  */
9156
9157 static void
9158 calc_die_sizes (dw_die_ref die)
9159 {
9160   dw_die_ref c;
9161
9162   gcc_assert (die->die_offset == 0
9163               || (unsigned long int) die->die_offset == next_die_offset);
9164   die->die_offset = next_die_offset;
9165   next_die_offset += size_of_die (die);
9166
9167   FOR_EACH_CHILD (die, c, calc_die_sizes (c));
9168
9169   if (die->die_child != NULL)
9170     /* Count the null byte used to terminate sibling lists.  */
9171     next_die_offset += 1;
9172 }
9173
9174 /* Size just the base type children at the start of the CU.
9175    This is needed because build_abbrev needs to size locs
9176    and sizing of type based stack ops needs to know die_offset
9177    values for the base types.  */
9178
9179 static void
9180 calc_base_type_die_sizes (void)
9181 {
9182   unsigned long die_offset = (dwarf_split_debug_info
9183                               ? DWARF_COMPILE_UNIT_SKELETON_HEADER_SIZE
9184                               : DWARF_COMPILE_UNIT_HEADER_SIZE);
9185   unsigned int i;
9186   dw_die_ref base_type;
9187 #if ENABLE_ASSERT_CHECKING
9188   dw_die_ref prev = comp_unit_die ()->die_child;
9189 #endif
9190
9191   die_offset += size_of_die (comp_unit_die ());
9192   for (i = 0; base_types.iterate (i, &base_type); i++)
9193     {
9194 #if ENABLE_ASSERT_CHECKING
9195       gcc_assert (base_type->die_offset == 0
9196                   && prev->die_sib == base_type
9197                   && base_type->die_child == NULL
9198                   && base_type->die_abbrev);
9199       prev = base_type;
9200 #endif
9201       if (abbrev_opt_start
9202           && base_type->die_abbrev >= abbrev_opt_base_type_end)
9203         abbrev_opt_base_type_end = base_type->die_abbrev + 1;
9204       base_type->die_offset = die_offset;
9205       die_offset += size_of_die (base_type);
9206     }
9207 }
9208
9209 /* Set the marks for a die and its children.  We do this so
9210    that we know whether or not a reference needs to use FORM_ref_addr; only
9211    DIEs in the same CU will be marked.  We used to clear out the offset
9212    and use that as the flag, but ran into ordering problems.  */
9213
9214 static void
9215 mark_dies (dw_die_ref die)
9216 {
9217   dw_die_ref c;
9218
9219   gcc_assert (!die->die_mark);
9220
9221   die->die_mark = 1;
9222   FOR_EACH_CHILD (die, c, mark_dies (c));
9223 }
9224
9225 /* Clear the marks for a die and its children.  */
9226
9227 static void
9228 unmark_dies (dw_die_ref die)
9229 {
9230   dw_die_ref c;
9231
9232   if (! use_debug_types)
9233     gcc_assert (die->die_mark);
9234
9235   die->die_mark = 0;
9236   FOR_EACH_CHILD (die, c, unmark_dies (c));
9237 }
9238
9239 /* Clear the marks for a die, its children and referred dies.  */
9240
9241 static void
9242 unmark_all_dies (dw_die_ref die)
9243 {
9244   dw_die_ref c;
9245   dw_attr_node *a;
9246   unsigned ix;
9247
9248   if (!die->die_mark)
9249     return;
9250   die->die_mark = 0;
9251
9252   FOR_EACH_CHILD (die, c, unmark_all_dies (c));
9253
9254   FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
9255     if (AT_class (a) == dw_val_class_die_ref)
9256       unmark_all_dies (AT_ref (a));
9257 }
9258
9259 /* Calculate if the entry should appear in the final output file.  It may be
9260    from a pruned a type.  */
9261
9262 static bool
9263 include_pubname_in_output (vec<pubname_entry, va_gc> *table, pubname_entry *p)
9264 {
9265   /* By limiting gnu pubnames to definitions only, gold can generate a
9266      gdb index without entries for declarations, which don't include
9267      enough information to be useful.  */
9268   if (debug_generate_pub_sections == 2 && is_declaration_die (p->die))
9269     return false;
9270
9271   if (table == pubname_table)
9272     {
9273       /* Enumerator names are part of the pubname table, but the
9274          parent DW_TAG_enumeration_type die may have been pruned.
9275          Don't output them if that is the case.  */
9276       if (p->die->die_tag == DW_TAG_enumerator &&
9277           (p->die->die_parent == NULL
9278            || !p->die->die_parent->die_perennial_p))
9279         return false;
9280
9281       /* Everything else in the pubname table is included.  */
9282       return true;
9283     }
9284
9285   /* The pubtypes table shouldn't include types that have been
9286      pruned.  */
9287   return (p->die->die_offset != 0
9288           || !flag_eliminate_unused_debug_types);
9289 }
9290
9291 /* Return the size of the .debug_pubnames or .debug_pubtypes table
9292    generated for the compilation unit.  */
9293
9294 static unsigned long
9295 size_of_pubnames (vec<pubname_entry, va_gc> *names)
9296 {
9297   unsigned long size;
9298   unsigned i;
9299   pubname_entry *p;
9300   int space_for_flags = (debug_generate_pub_sections == 2) ? 1 : 0;
9301
9302   size = DWARF_PUBNAMES_HEADER_SIZE;
9303   FOR_EACH_VEC_ELT (*names, i, p)
9304     if (include_pubname_in_output (names, p))
9305       size += strlen (p->name) + DWARF_OFFSET_SIZE + 1 + space_for_flags;
9306
9307   size += DWARF_OFFSET_SIZE;
9308   return size;
9309 }
9310
9311 /* Return the size of the information in the .debug_aranges section.  */
9312
9313 static unsigned long
9314 size_of_aranges (void)
9315 {
9316   unsigned long size;
9317
9318   size = DWARF_ARANGES_HEADER_SIZE;
9319
9320   /* Count the address/length pair for this compilation unit.  */
9321   if (text_section_used)
9322     size += 2 * DWARF2_ADDR_SIZE;
9323   if (cold_text_section_used)
9324     size += 2 * DWARF2_ADDR_SIZE;
9325   if (have_multiple_function_sections)
9326     {
9327       unsigned fde_idx;
9328       dw_fde_ref fde;
9329
9330       FOR_EACH_VEC_ELT (*fde_vec, fde_idx, fde)
9331         {
9332           if (DECL_IGNORED_P (fde->decl))
9333             continue;
9334           if (!fde->in_std_section)
9335             size += 2 * DWARF2_ADDR_SIZE;
9336           if (fde->dw_fde_second_begin && !fde->second_in_std_section)
9337             size += 2 * DWARF2_ADDR_SIZE;
9338         }
9339     }
9340
9341   /* Count the two zero words used to terminated the address range table.  */
9342   size += 2 * DWARF2_ADDR_SIZE;
9343   return size;
9344 }
9345 \f
9346 /* Select the encoding of an attribute value.  */
9347
9348 static enum dwarf_form
9349 value_format (dw_attr_node *a)
9350 {
9351   switch (AT_class (a))
9352     {
9353     case dw_val_class_addr:
9354       /* Only very few attributes allow DW_FORM_addr.  */
9355       switch (a->dw_attr)
9356         {
9357         case DW_AT_low_pc:
9358         case DW_AT_high_pc:
9359         case DW_AT_entry_pc:
9360         case DW_AT_trampoline:
9361           return (AT_index (a) == NOT_INDEXED
9362                   ? DW_FORM_addr : DW_FORM_GNU_addr_index);
9363         default:
9364           break;
9365         }
9366       switch (DWARF2_ADDR_SIZE)
9367         {
9368         case 1:
9369           return DW_FORM_data1;
9370         case 2:
9371           return DW_FORM_data2;
9372         case 4:
9373           return DW_FORM_data4;
9374         case 8:
9375           return DW_FORM_data8;
9376         default:
9377           gcc_unreachable ();
9378         }
9379     case dw_val_class_loc_list:
9380       if (dwarf_split_debug_info
9381           && dwarf_version >= 5
9382           && AT_loc_list (a)->num_assigned)
9383         return DW_FORM_loclistx;
9384       /* FALLTHRU */
9385     case dw_val_class_range_list:
9386       /* For range lists in DWARF 5, use DW_FORM_rnglistx from .debug_info.dwo
9387          but in .debug_info use DW_FORM_sec_offset, which is shorter if we
9388          care about sizes of .debug* sections in shared libraries and
9389          executables and don't take into account relocations that affect just
9390          relocatable objects - for DW_FORM_rnglistx we'd have to emit offset
9391          table in the .debug_rnglists section.  */
9392       if (dwarf_split_debug_info
9393           && dwarf_version >= 5
9394           && AT_class (a) == dw_val_class_range_list
9395           && rnglist_idx
9396           && a->dw_attr_val.val_entry != RELOCATED_OFFSET)
9397         return DW_FORM_rnglistx;
9398       if (dwarf_version >= 4)
9399         return DW_FORM_sec_offset;
9400       /* FALLTHRU */
9401     case dw_val_class_vms_delta:
9402     case dw_val_class_offset:
9403       switch (DWARF_OFFSET_SIZE)
9404         {
9405         case 4:
9406           return DW_FORM_data4;
9407         case 8:
9408           return DW_FORM_data8;
9409         default:
9410           gcc_unreachable ();
9411         }
9412     case dw_val_class_loc:
9413       if (dwarf_version >= 4)
9414         return DW_FORM_exprloc;
9415       switch (constant_size (size_of_locs (AT_loc (a))))
9416         {
9417         case 1:
9418           return DW_FORM_block1;
9419         case 2:
9420           return DW_FORM_block2;
9421         case 4:
9422           return DW_FORM_block4;
9423         default:
9424           gcc_unreachable ();
9425         }
9426     case dw_val_class_const:
9427       return DW_FORM_sdata;
9428     case dw_val_class_unsigned_const:
9429       switch (constant_size (AT_unsigned (a)))
9430         {
9431         case 1:
9432           return DW_FORM_data1;
9433         case 2:
9434           return DW_FORM_data2;
9435         case 4:
9436           /* In DWARF3 DW_AT_data_member_location with
9437              DW_FORM_data4 or DW_FORM_data8 is a loclistptr, not
9438              constant, so we need to use DW_FORM_udata if we need
9439              a large constant.  */
9440           if (dwarf_version == 3 && a->dw_attr == DW_AT_data_member_location)
9441             return DW_FORM_udata;
9442           return DW_FORM_data4;
9443         case 8:
9444           if (dwarf_version == 3 && a->dw_attr == DW_AT_data_member_location)
9445             return DW_FORM_udata;
9446           return DW_FORM_data8;
9447         default:
9448           gcc_unreachable ();
9449         }
9450     case dw_val_class_const_implicit:
9451     case dw_val_class_unsigned_const_implicit:
9452     case dw_val_class_file_implicit:
9453       return DW_FORM_implicit_const;
9454     case dw_val_class_const_double:
9455       switch (HOST_BITS_PER_WIDE_INT)
9456         {
9457         case 8:
9458           return DW_FORM_data2;
9459         case 16:
9460           return DW_FORM_data4;
9461         case 32:
9462           return DW_FORM_data8;
9463         case 64:
9464           if (dwarf_version >= 5)
9465             return DW_FORM_data16;
9466           /* FALLTHRU */
9467         default:
9468           return DW_FORM_block1;
9469         }
9470     case dw_val_class_wide_int:
9471       switch (get_full_len (*a->dw_attr_val.v.val_wide) * HOST_BITS_PER_WIDE_INT)
9472         {
9473         case 8:
9474           return DW_FORM_data1;
9475         case 16:
9476           return DW_FORM_data2;
9477         case 32:
9478           return DW_FORM_data4;
9479         case 64:
9480           return DW_FORM_data8;
9481         case 128:
9482           if (dwarf_version >= 5)
9483             return DW_FORM_data16;
9484           /* FALLTHRU */
9485         default:
9486           return DW_FORM_block1;
9487         }
9488     case dw_val_class_vec:
9489       switch (constant_size (a->dw_attr_val.v.val_vec.length
9490                              * a->dw_attr_val.v.val_vec.elt_size))
9491         {
9492         case 1:
9493           return DW_FORM_block1;
9494         case 2:
9495           return DW_FORM_block2;
9496         case 4:
9497           return DW_FORM_block4;
9498         default:
9499           gcc_unreachable ();
9500         }
9501     case dw_val_class_flag:
9502       if (dwarf_version >= 4)
9503         {
9504           /* Currently all add_AT_flag calls pass in 1 as last argument,
9505              so DW_FORM_flag_present can be used.  If that ever changes,
9506              we'll need to use DW_FORM_flag and have some optimization
9507              in build_abbrev_table that will change those to
9508              DW_FORM_flag_present if it is set to 1 in all DIEs using
9509              the same abbrev entry.  */
9510           gcc_assert (a->dw_attr_val.v.val_flag == 1);
9511           return DW_FORM_flag_present;
9512         }
9513       return DW_FORM_flag;
9514     case dw_val_class_die_ref:
9515       if (AT_ref_external (a))
9516         return use_debug_types ? DW_FORM_ref_sig8 : DW_FORM_ref_addr;
9517       else
9518         return DW_FORM_ref;
9519     case dw_val_class_fde_ref:
9520       return DW_FORM_data;
9521     case dw_val_class_lbl_id:
9522       return (AT_index (a) == NOT_INDEXED
9523               ? DW_FORM_addr : DW_FORM_GNU_addr_index);
9524     case dw_val_class_lineptr:
9525     case dw_val_class_macptr:
9526     case dw_val_class_loclistsptr:
9527       return dwarf_version >= 4 ? DW_FORM_sec_offset : DW_FORM_data;
9528     case dw_val_class_str:
9529       return AT_string_form (a);
9530     case dw_val_class_file:
9531       switch (constant_size (maybe_emit_file (a->dw_attr_val.v.val_file)))
9532         {
9533         case 1:
9534           return DW_FORM_data1;
9535         case 2:
9536           return DW_FORM_data2;
9537         case 4:
9538           return DW_FORM_data4;
9539         default:
9540           gcc_unreachable ();
9541         }
9542
9543     case dw_val_class_data8:
9544       return DW_FORM_data8;
9545
9546     case dw_val_class_high_pc:
9547       switch (DWARF2_ADDR_SIZE)
9548         {
9549         case 1:
9550           return DW_FORM_data1;
9551         case 2:
9552           return DW_FORM_data2;
9553         case 4:
9554           return DW_FORM_data4;
9555         case 8:
9556           return DW_FORM_data8;
9557         default:
9558           gcc_unreachable ();
9559         }
9560
9561     case dw_val_class_discr_value:
9562       return (a->dw_attr_val.v.val_discr_value.pos
9563               ? DW_FORM_udata
9564               : DW_FORM_sdata);
9565     case dw_val_class_discr_list:
9566       switch (constant_size (size_of_discr_list (AT_discr_list (a))))
9567         {
9568         case 1:
9569           return DW_FORM_block1;
9570         case 2:
9571           return DW_FORM_block2;
9572         case 4:
9573           return DW_FORM_block4;
9574         default:
9575           gcc_unreachable ();
9576         }
9577
9578     default:
9579       gcc_unreachable ();
9580     }
9581 }
9582
9583 /* Output the encoding of an attribute value.  */
9584
9585 static void
9586 output_value_format (dw_attr_node *a)
9587 {
9588   enum dwarf_form form = value_format (a);
9589
9590   dw2_asm_output_data_uleb128 (form, "(%s)", dwarf_form_name (form));
9591 }
9592
9593 /* Given a die and id, produce the appropriate abbreviations.  */
9594
9595 static void
9596 output_die_abbrevs (unsigned long abbrev_id, dw_die_ref abbrev)
9597 {
9598   unsigned ix;
9599   dw_attr_node *a_attr;
9600
9601   dw2_asm_output_data_uleb128 (abbrev_id, "(abbrev code)");
9602   dw2_asm_output_data_uleb128 (abbrev->die_tag, "(TAG: %s)",
9603                                dwarf_tag_name (abbrev->die_tag));
9604
9605   if (abbrev->die_child != NULL)
9606     dw2_asm_output_data (1, DW_children_yes, "DW_children_yes");
9607   else
9608     dw2_asm_output_data (1, DW_children_no, "DW_children_no");
9609
9610   for (ix = 0; vec_safe_iterate (abbrev->die_attr, ix, &a_attr); ix++)
9611     {
9612       dw2_asm_output_data_uleb128 (a_attr->dw_attr, "(%s)",
9613                                    dwarf_attr_name (a_attr->dw_attr));
9614       output_value_format (a_attr);
9615       if (value_format (a_attr) == DW_FORM_implicit_const)
9616         {
9617           if (AT_class (a_attr) == dw_val_class_file_implicit)
9618             {
9619               int f = maybe_emit_file (a_attr->dw_attr_val.v.val_file);
9620               const char *filename = a_attr->dw_attr_val.v.val_file->filename;
9621               dw2_asm_output_data_sleb128 (f, "(%s)", filename);
9622             }
9623           else
9624             dw2_asm_output_data_sleb128 (a_attr->dw_attr_val.v.val_int, NULL);
9625         }
9626     }
9627
9628   dw2_asm_output_data (1, 0, NULL);
9629   dw2_asm_output_data (1, 0, NULL);
9630 }
9631
9632
9633 /* Output the .debug_abbrev section which defines the DIE abbreviation
9634    table.  */
9635
9636 static void
9637 output_abbrev_section (void)
9638 {
9639   unsigned int abbrev_id;
9640   dw_die_ref abbrev;
9641
9642   FOR_EACH_VEC_SAFE_ELT (abbrev_die_table, abbrev_id, abbrev)
9643     if (abbrev_id != 0)
9644       output_die_abbrevs (abbrev_id, abbrev);
9645
9646   /* Terminate the table.  */
9647   dw2_asm_output_data (1, 0, NULL);
9648 }
9649
9650 /* Return a new location list, given the begin and end range, and the
9651    expression.  */
9652
9653 static inline dw_loc_list_ref
9654 new_loc_list (dw_loc_descr_ref expr, const char *begin, const char *end,
9655               const char *section)
9656 {
9657   dw_loc_list_ref retlist = ggc_cleared_alloc<dw_loc_list_node> ();
9658
9659   retlist->begin = begin;
9660   retlist->begin_entry = NULL;
9661   retlist->end = end;
9662   retlist->expr = expr;
9663   retlist->section = section;
9664
9665   return retlist;
9666 }
9667
9668 /* Generate a new internal symbol for this location list node, if it
9669    hasn't got one yet.  */
9670
9671 static inline void
9672 gen_llsym (dw_loc_list_ref list)
9673 {
9674   gcc_assert (!list->ll_symbol);
9675   list->ll_symbol = gen_internal_sym ("LLST");
9676 }
9677
9678 /* Output the location list given to us.  */
9679
9680 static void
9681 output_loc_list (dw_loc_list_ref list_head)
9682 {
9683   if (list_head->emitted)
9684     return;
9685   list_head->emitted = true;
9686
9687   ASM_OUTPUT_LABEL (asm_out_file, list_head->ll_symbol);
9688
9689   dw_loc_list_ref curr = list_head;
9690   const char *last_section = NULL;
9691   const char *base_label = NULL;
9692
9693   /* Walk the location list, and output each range + expression.  */
9694   for (curr = list_head; curr != NULL; curr = curr->dw_loc_next)
9695     {
9696       unsigned long size;
9697       /* Don't output an entry that starts and ends at the same address.  */
9698       if (strcmp (curr->begin, curr->end) == 0 && !curr->force)
9699         continue;
9700       size = size_of_locs (curr->expr);
9701       /* If the expression is too large, drop it on the floor.  We could
9702          perhaps put it into DW_TAG_dwarf_procedure and refer to that
9703          in the expression, but >= 64KB expressions for a single value
9704          in a single range are unlikely very useful.  */
9705       if (dwarf_version < 5 && size > 0xffff)
9706         continue;
9707       if (dwarf_version >= 5)
9708         {
9709           if (dwarf_split_debug_info)
9710             {
9711               /* For -gsplit-dwarf, emit DW_LLE_starx_length, which has
9712                  uleb128 index into .debug_addr and uleb128 length.  */
9713               dw2_asm_output_data (1, DW_LLE_startx_length,
9714                                    "DW_LLE_startx_length (%s)",
9715                                    list_head->ll_symbol);
9716               dw2_asm_output_data_uleb128 (curr->begin_entry->index,
9717                                            "Location list range start index "
9718                                            "(%s)", curr->begin);
9719               /* FIXME: This will ICE ifndef HAVE_AS_LEB128.
9720                  For that case we probably need to emit DW_LLE_startx_endx,
9721                  but we'd need 2 .debug_addr entries rather than just one.  */
9722               dw2_asm_output_delta_uleb128 (curr->end, curr->begin,
9723                                             "Location list length (%s)",
9724                                             list_head->ll_symbol);
9725             }
9726           else if (!have_multiple_function_sections && HAVE_AS_LEB128)
9727             {
9728               /* If all code is in .text section, the base address is
9729                  already provided by the CU attributes.  Use
9730                  DW_LLE_offset_pair where both addresses are uleb128 encoded
9731                  offsets against that base.  */
9732               dw2_asm_output_data (1, DW_LLE_offset_pair,
9733                                    "DW_LLE_offset_pair (%s)",
9734                                    list_head->ll_symbol);
9735               dw2_asm_output_delta_uleb128 (curr->begin, curr->section,
9736                                             "Location list begin address (%s)",
9737                                             list_head->ll_symbol);
9738               dw2_asm_output_delta_uleb128 (curr->end, curr->section,
9739                                             "Location list end address (%s)",
9740                                             list_head->ll_symbol);
9741             }
9742           else if (HAVE_AS_LEB128)
9743             {
9744               /* Otherwise, find out how many consecutive entries could share
9745                  the same base entry.  If just one, emit DW_LLE_start_length,
9746                  otherwise emit DW_LLE_base_address for the base address
9747                  followed by a series of DW_LLE_offset_pair.  */
9748               if (last_section == NULL || curr->section != last_section)
9749                 {
9750                   dw_loc_list_ref curr2;
9751                   for (curr2 = curr->dw_loc_next; curr2 != NULL;
9752                        curr2 = curr2->dw_loc_next)
9753                     {
9754                       if (strcmp (curr2->begin, curr2->end) == 0
9755                           && !curr2->force)
9756                         continue;
9757                       break;
9758                     }
9759                   if (curr2 == NULL || curr->section != curr2->section)
9760                     last_section = NULL;
9761                   else
9762                     {
9763                       last_section = curr->section;
9764                       base_label = curr->begin;
9765                       dw2_asm_output_data (1, DW_LLE_base_address,
9766                                            "DW_LLE_base_address (%s)",
9767                                            list_head->ll_symbol);
9768                       dw2_asm_output_addr (DWARF2_ADDR_SIZE, base_label,
9769                                            "Base address (%s)",
9770                                            list_head->ll_symbol);
9771                     }
9772                 }
9773               /* Only one entry with the same base address.  Use
9774                  DW_LLE_start_length with absolute address and uleb128
9775                  length.  */
9776               if (last_section == NULL)
9777                 {
9778                   dw2_asm_output_data (1, DW_LLE_start_length,
9779                                        "DW_LLE_start_length (%s)",
9780                                        list_head->ll_symbol);
9781                   dw2_asm_output_addr (DWARF2_ADDR_SIZE, curr->begin,
9782                                        "Location list begin address (%s)",
9783                                        list_head->ll_symbol);
9784                   dw2_asm_output_delta_uleb128 (curr->end, curr->begin,
9785                                                 "Location list length "
9786                                                 "(%s)", list_head->ll_symbol);
9787                 }
9788               /* Otherwise emit DW_LLE_offset_pair, relative to above emitted
9789                  DW_LLE_base_address.  */
9790               else
9791                 {
9792                   dw2_asm_output_data (1, DW_LLE_offset_pair,
9793                                        "DW_LLE_offset_pair (%s)",
9794                                        list_head->ll_symbol);
9795                   dw2_asm_output_delta_uleb128 (curr->begin, base_label,
9796                                                 "Location list begin address "
9797                                                 "(%s)", list_head->ll_symbol);
9798                   dw2_asm_output_delta_uleb128 (curr->end, base_label,
9799                                                 "Location list end address "
9800                                                 "(%s)", list_head->ll_symbol);
9801                 }
9802             }
9803           /* The assembler does not support .uleb128 directive.  Emit
9804              DW_LLE_start_end with a pair of absolute addresses.  */
9805           else
9806             {
9807               dw2_asm_output_data (1, DW_LLE_start_end,
9808                                    "DW_LLE_start_end (%s)",
9809                                    list_head->ll_symbol);
9810               dw2_asm_output_addr (DWARF2_ADDR_SIZE, curr->begin,
9811                                    "Location list begin address (%s)",
9812                                    list_head->ll_symbol);
9813               dw2_asm_output_addr (DWARF2_ADDR_SIZE, curr->end,
9814                                    "Location list end address (%s)",
9815                                    list_head->ll_symbol);
9816             }
9817         }
9818       else if (dwarf_split_debug_info)
9819         {
9820           /* For -gsplit-dwarf -gdwarf-{2,3,4} emit index into .debug_addr
9821              and 4 byte length.  */
9822           dw2_asm_output_data (1, DW_LLE_GNU_start_length_entry,
9823                                "Location list start/length entry (%s)",
9824                                list_head->ll_symbol);
9825           dw2_asm_output_data_uleb128 (curr->begin_entry->index,
9826                                        "Location list range start index (%s)",
9827                                        curr->begin);
9828           /* The length field is 4 bytes.  If we ever need to support
9829              an 8-byte length, we can add a new DW_LLE code or fall back
9830              to DW_LLE_GNU_start_end_entry.  */
9831           dw2_asm_output_delta (4, curr->end, curr->begin,
9832                                 "Location list range length (%s)",
9833                                 list_head->ll_symbol);
9834         }
9835       else if (!have_multiple_function_sections)
9836         {
9837           /* Pair of relative addresses against start of text section.  */
9838           dw2_asm_output_delta (DWARF2_ADDR_SIZE, curr->begin, curr->section,
9839                                 "Location list begin address (%s)",
9840                                 list_head->ll_symbol);
9841           dw2_asm_output_delta (DWARF2_ADDR_SIZE, curr->end, curr->section,
9842                                 "Location list end address (%s)",
9843                                 list_head->ll_symbol);
9844         }
9845       else
9846         {
9847           /* Pair of absolute addresses.  */
9848           dw2_asm_output_addr (DWARF2_ADDR_SIZE, curr->begin,
9849                                "Location list begin address (%s)",
9850                                list_head->ll_symbol);
9851           dw2_asm_output_addr (DWARF2_ADDR_SIZE, curr->end,
9852                                "Location list end address (%s)",
9853                                list_head->ll_symbol);
9854         }
9855
9856       /* Output the block length for this list of location operations.  */
9857       if (dwarf_version >= 5)
9858         dw2_asm_output_data_uleb128 (size, "Location expression size");
9859       else
9860         {
9861           gcc_assert (size <= 0xffff);
9862           dw2_asm_output_data (2, size, "Location expression size");
9863         }
9864
9865       output_loc_sequence (curr->expr, -1);
9866     }
9867
9868   /* And finally list termination.  */
9869   if (dwarf_version >= 5)
9870     dw2_asm_output_data (1, DW_LLE_end_of_list,
9871                          "DW_LLE_end_of_list (%s)", list_head->ll_symbol);
9872   else if (dwarf_split_debug_info)
9873     dw2_asm_output_data (1, DW_LLE_GNU_end_of_list_entry,
9874                          "Location list terminator (%s)",
9875                          list_head->ll_symbol);
9876   else
9877     {
9878       dw2_asm_output_data (DWARF2_ADDR_SIZE, 0,
9879                            "Location list terminator begin (%s)",
9880                            list_head->ll_symbol);
9881       dw2_asm_output_data (DWARF2_ADDR_SIZE, 0,
9882                            "Location list terminator end (%s)",
9883                            list_head->ll_symbol);
9884     }
9885 }
9886
9887 /* Output a range_list offset into the .debug_ranges or .debug_rnglists
9888    section.  Emit a relocated reference if val_entry is NULL, otherwise,
9889    emit an indirect reference.  */
9890
9891 static void
9892 output_range_list_offset (dw_attr_node *a)
9893 {
9894   const char *name = dwarf_attr_name (a->dw_attr);
9895
9896   if (a->dw_attr_val.val_entry == RELOCATED_OFFSET)
9897     {
9898       if (dwarf_version >= 5)
9899         {
9900           dw_ranges *r = &(*ranges_table)[a->dw_attr_val.v.val_offset];
9901           dw2_asm_output_offset (DWARF_OFFSET_SIZE, r->label,
9902                                  debug_ranges_section, "%s", name);
9903         }
9904       else
9905         {
9906           char *p = strchr (ranges_section_label, '\0');
9907           sprintf (p, "+" HOST_WIDE_INT_PRINT_HEX,
9908                    a->dw_attr_val.v.val_offset * 2 * DWARF2_ADDR_SIZE);
9909           dw2_asm_output_offset (DWARF_OFFSET_SIZE, ranges_section_label,
9910                                  debug_ranges_section, "%s", name);
9911           *p = '\0';
9912         }
9913     }
9914   else if (dwarf_version >= 5)
9915     {
9916       dw_ranges *r = &(*ranges_table)[a->dw_attr_val.v.val_offset];
9917       gcc_assert (rnglist_idx);
9918       dw2_asm_output_data_uleb128 (r->idx, "%s", name);
9919     }
9920   else
9921     dw2_asm_output_data (DWARF_OFFSET_SIZE,
9922                          a->dw_attr_val.v.val_offset * 2 * DWARF2_ADDR_SIZE,
9923                          "%s (offset from %s)", name, ranges_section_label);
9924 }
9925
9926 /* Output the offset into the debug_loc section.  */
9927
9928 static void
9929 output_loc_list_offset (dw_attr_node *a)
9930 {
9931   char *sym = AT_loc_list (a)->ll_symbol;
9932
9933   gcc_assert (sym);
9934   if (!dwarf_split_debug_info)
9935     dw2_asm_output_offset (DWARF_OFFSET_SIZE, sym, debug_loc_section,
9936                            "%s", dwarf_attr_name (a->dw_attr));
9937   else if (dwarf_version >= 5)
9938     {
9939       gcc_assert (AT_loc_list (a)->num_assigned);
9940       dw2_asm_output_data_uleb128 (AT_loc_list (a)->hash, "%s (%s)",
9941                                    dwarf_attr_name (a->dw_attr),
9942                                    sym);
9943     }
9944   else
9945     dw2_asm_output_delta (DWARF_OFFSET_SIZE, sym, loc_section_label,
9946                           "%s", dwarf_attr_name (a->dw_attr));
9947 }
9948
9949 /* Output an attribute's index or value appropriately.  */
9950
9951 static void
9952 output_attr_index_or_value (dw_attr_node *a)
9953 {
9954   const char *name = dwarf_attr_name (a->dw_attr);
9955
9956   if (dwarf_split_debug_info && AT_index (a) != NOT_INDEXED)
9957     {
9958       dw2_asm_output_data_uleb128 (AT_index (a), "%s", name);
9959       return;
9960     }
9961   switch (AT_class (a))
9962     {
9963     case dw_val_class_addr:
9964       dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE, AT_addr (a), "%s", name);
9965       break;
9966     case dw_val_class_high_pc:
9967     case dw_val_class_lbl_id:
9968       dw2_asm_output_addr (DWARF2_ADDR_SIZE, AT_lbl (a), "%s", name);
9969       break;
9970     default:
9971       gcc_unreachable ();
9972     }
9973 }
9974
9975 /* Output a type signature.  */
9976
9977 static inline void
9978 output_signature (const char *sig, const char *name)
9979 {
9980   int i;
9981
9982   for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++)
9983     dw2_asm_output_data (1, sig[i], i == 0 ? "%s" : NULL, name);
9984 }
9985
9986 /* Output a discriminant value.  */
9987
9988 static inline void
9989 output_discr_value (dw_discr_value *discr_value, const char *name)
9990 {
9991   if (discr_value->pos)
9992     dw2_asm_output_data_uleb128 (discr_value->v.uval, "%s", name);
9993   else
9994     dw2_asm_output_data_sleb128 (discr_value->v.sval, "%s", name);
9995 }
9996
9997 /* Output the DIE and its attributes.  Called recursively to generate
9998    the definitions of each child DIE.  */
9999
10000 static void
10001 output_die (dw_die_ref die)
10002 {
10003   dw_attr_node *a;
10004   dw_die_ref c;
10005   unsigned long size;
10006   unsigned ix;
10007
10008   dw2_asm_output_data_uleb128 (die->die_abbrev, "(DIE (%#lx) %s)",
10009                                (unsigned long)die->die_offset,
10010                                dwarf_tag_name (die->die_tag));
10011
10012   FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
10013     {
10014       const char *name = dwarf_attr_name (a->dw_attr);
10015
10016       switch (AT_class (a))
10017         {
10018         case dw_val_class_addr:
10019           output_attr_index_or_value (a);
10020           break;
10021
10022         case dw_val_class_offset:
10023           dw2_asm_output_data (DWARF_OFFSET_SIZE, a->dw_attr_val.v.val_offset,
10024                                "%s", name);
10025           break;
10026
10027         case dw_val_class_range_list:
10028           output_range_list_offset (a);
10029           break;
10030
10031         case dw_val_class_loc:
10032           size = size_of_locs (AT_loc (a));
10033
10034           /* Output the block length for this list of location operations.  */
10035           if (dwarf_version >= 4)
10036             dw2_asm_output_data_uleb128 (size, "%s", name);
10037           else
10038             dw2_asm_output_data (constant_size (size), size, "%s", name);
10039
10040           output_loc_sequence (AT_loc (a), -1);
10041           break;
10042
10043         case dw_val_class_const:
10044           /* ??? It would be slightly more efficient to use a scheme like is
10045              used for unsigned constants below, but gdb 4.x does not sign
10046              extend.  Gdb 5.x does sign extend.  */
10047           dw2_asm_output_data_sleb128 (AT_int (a), "%s", name);
10048           break;
10049
10050         case dw_val_class_unsigned_const:
10051           {
10052             int csize = constant_size (AT_unsigned (a));
10053             if (dwarf_version == 3
10054                 && a->dw_attr == DW_AT_data_member_location
10055                 && csize >= 4)
10056               dw2_asm_output_data_uleb128 (AT_unsigned (a), "%s", name);
10057             else
10058               dw2_asm_output_data (csize, AT_unsigned (a), "%s", name);
10059           }
10060           break;
10061
10062         case dw_val_class_const_implicit:
10063           if (flag_debug_asm)
10064             fprintf (asm_out_file, "\t\t\t%s %s ("
10065                                    HOST_WIDE_INT_PRINT_DEC ")\n",
10066                      ASM_COMMENT_START, name, AT_int (a));
10067           break;
10068
10069         case dw_val_class_unsigned_const_implicit:
10070           if (flag_debug_asm)
10071             fprintf (asm_out_file, "\t\t\t%s %s ("
10072                                    HOST_WIDE_INT_PRINT_HEX ")\n",
10073                      ASM_COMMENT_START, name, AT_unsigned (a));
10074           break;
10075
10076         case dw_val_class_const_double:
10077           {
10078             unsigned HOST_WIDE_INT first, second;
10079
10080             if (HOST_BITS_PER_WIDE_INT >= DWARF_LARGEST_DATA_FORM_BITS)
10081               dw2_asm_output_data (1,
10082                                    HOST_BITS_PER_DOUBLE_INT
10083                                    / HOST_BITS_PER_CHAR,
10084                                    NULL);
10085
10086             if (WORDS_BIG_ENDIAN)
10087               {
10088                 first = a->dw_attr_val.v.val_double.high;
10089                 second = a->dw_attr_val.v.val_double.low;
10090               }
10091             else
10092               {
10093                 first = a->dw_attr_val.v.val_double.low;
10094                 second = a->dw_attr_val.v.val_double.high;
10095               }
10096
10097             dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR,
10098                                  first, "%s", name);
10099             dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR,
10100                                  second, NULL);
10101           }
10102           break;
10103
10104         case dw_val_class_wide_int:
10105           {
10106             int i;
10107             int len = get_full_len (*a->dw_attr_val.v.val_wide);
10108             int l = HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR;
10109             if (len * HOST_BITS_PER_WIDE_INT > DWARF_LARGEST_DATA_FORM_BITS)
10110               dw2_asm_output_data (1, get_full_len (*a->dw_attr_val.v.val_wide)
10111                                       * l, NULL);
10112
10113             if (WORDS_BIG_ENDIAN)
10114               for (i = len - 1; i >= 0; --i)
10115                 {
10116                   dw2_asm_output_data (l, a->dw_attr_val.v.val_wide->elt (i),
10117                                        "%s", name);
10118                   name = "";
10119                 }
10120             else
10121               for (i = 0; i < len; ++i)
10122                 {
10123                   dw2_asm_output_data (l, a->dw_attr_val.v.val_wide->elt (i),
10124                                        "%s", name);
10125                   name = "";
10126                 }
10127           }
10128           break;
10129
10130         case dw_val_class_vec:
10131           {
10132             unsigned int elt_size = a->dw_attr_val.v.val_vec.elt_size;
10133             unsigned int len = a->dw_attr_val.v.val_vec.length;
10134             unsigned int i;
10135             unsigned char *p;
10136
10137             dw2_asm_output_data (constant_size (len * elt_size),
10138                                  len * elt_size, "%s", name);
10139             if (elt_size > sizeof (HOST_WIDE_INT))
10140               {
10141                 elt_size /= 2;
10142                 len *= 2;
10143               }
10144             for (i = 0, p = (unsigned char *) a->dw_attr_val.v.val_vec.array;
10145                  i < len;
10146                  i++, p += elt_size)
10147               dw2_asm_output_data (elt_size, extract_int (p, elt_size),
10148                                    "fp or vector constant word %u", i);
10149             break;
10150           }
10151
10152         case dw_val_class_flag:
10153           if (dwarf_version >= 4)
10154             {
10155               /* Currently all add_AT_flag calls pass in 1 as last argument,
10156                  so DW_FORM_flag_present can be used.  If that ever changes,
10157                  we'll need to use DW_FORM_flag and have some optimization
10158                  in build_abbrev_table that will change those to
10159                  DW_FORM_flag_present if it is set to 1 in all DIEs using
10160                  the same abbrev entry.  */
10161               gcc_assert (AT_flag (a) == 1);
10162               if (flag_debug_asm)
10163                 fprintf (asm_out_file, "\t\t\t%s %s\n",
10164                          ASM_COMMENT_START, name);
10165               break;
10166             }
10167           dw2_asm_output_data (1, AT_flag (a), "%s", name);
10168           break;
10169
10170         case dw_val_class_loc_list:
10171           output_loc_list_offset (a);
10172           break;
10173
10174         case dw_val_class_die_ref:
10175           if (AT_ref_external (a))
10176             {
10177               if (AT_ref (a)->comdat_type_p)
10178                 {
10179                   comdat_type_node *type_node
10180                     = AT_ref (a)->die_id.die_type_node;
10181
10182                   gcc_assert (type_node);
10183                   output_signature (type_node->signature, name);
10184                 }
10185               else
10186                 {
10187                   const char *sym = AT_ref (a)->die_id.die_symbol;
10188                   int size;
10189
10190                   gcc_assert (sym);
10191                   /* In DWARF2, DW_FORM_ref_addr is sized by target address
10192                      length, whereas in DWARF3 it's always sized as an
10193                      offset.  */
10194                   if (dwarf_version == 2)
10195                     size = DWARF2_ADDR_SIZE;
10196                   else
10197                     size = DWARF_OFFSET_SIZE;
10198                   /* ???  We cannot unconditionally output die_offset if
10199                      non-zero - others might create references to those
10200                      DIEs via symbols.
10201                      And we do not clear its DIE offset after outputting it
10202                      (and the label refers to the actual DIEs, not the
10203                      DWARF CU unit header which is when using label + offset
10204                      would be the correct thing to do).
10205                      ???  This is the reason for the with_offset flag.  */
10206                   if (AT_ref (a)->with_offset)
10207                     dw2_asm_output_offset (size, sym, AT_ref (a)->die_offset,
10208                                            debug_info_section, "%s", name);
10209                   else
10210                     dw2_asm_output_offset (size, sym, debug_info_section, "%s",
10211                                            name);
10212                 }
10213             }
10214           else
10215             {
10216               gcc_assert (AT_ref (a)->die_offset);
10217               dw2_asm_output_data (DWARF_OFFSET_SIZE, AT_ref (a)->die_offset,
10218                                    "%s", name);
10219             }
10220           break;
10221
10222         case dw_val_class_fde_ref:
10223           {
10224             char l1[MAX_ARTIFICIAL_LABEL_BYTES];
10225
10226             ASM_GENERATE_INTERNAL_LABEL (l1, FDE_LABEL,
10227                                          a->dw_attr_val.v.val_fde_index * 2);
10228             dw2_asm_output_offset (DWARF_OFFSET_SIZE, l1, debug_frame_section,
10229                                    "%s", name);
10230           }
10231           break;
10232
10233         case dw_val_class_vms_delta:
10234 #ifdef ASM_OUTPUT_DWARF_VMS_DELTA
10235           dw2_asm_output_vms_delta (DWARF_OFFSET_SIZE,
10236                                     AT_vms_delta2 (a), AT_vms_delta1 (a),
10237                                     "%s", name);
10238 #else
10239           dw2_asm_output_delta (DWARF_OFFSET_SIZE,
10240                                 AT_vms_delta2 (a), AT_vms_delta1 (a),
10241                                 "%s", name);
10242 #endif
10243           break;
10244
10245         case dw_val_class_lbl_id:
10246           output_attr_index_or_value (a);
10247           break;
10248
10249         case dw_val_class_lineptr:
10250           dw2_asm_output_offset (DWARF_OFFSET_SIZE, AT_lbl (a),
10251                                  debug_line_section, "%s", name);
10252           break;
10253
10254         case dw_val_class_macptr:
10255           dw2_asm_output_offset (DWARF_OFFSET_SIZE, AT_lbl (a),
10256                                  debug_macinfo_section, "%s", name);
10257           break;
10258
10259         case dw_val_class_loclistsptr:
10260           dw2_asm_output_offset (DWARF_OFFSET_SIZE, AT_lbl (a),
10261                                  debug_loc_section, "%s", name);
10262           break;
10263
10264         case dw_val_class_str:
10265           if (a->dw_attr_val.v.val_str->form == DW_FORM_strp)
10266             dw2_asm_output_offset (DWARF_OFFSET_SIZE,
10267                                    a->dw_attr_val.v.val_str->label,
10268                                    debug_str_section,
10269                                    "%s: \"%s\"", name, AT_string (a));
10270           else if (a->dw_attr_val.v.val_str->form == DW_FORM_line_strp)
10271             dw2_asm_output_offset (DWARF_OFFSET_SIZE,
10272                                    a->dw_attr_val.v.val_str->label,
10273                                    debug_line_str_section,
10274                                    "%s: \"%s\"", name, AT_string (a));
10275           else if (a->dw_attr_val.v.val_str->form == DW_FORM_GNU_str_index)
10276             dw2_asm_output_data_uleb128 (AT_index (a),
10277                                          "%s: \"%s\"", name, AT_string (a));
10278           else
10279             dw2_asm_output_nstring (AT_string (a), -1, "%s", name);
10280           break;
10281
10282         case dw_val_class_file:
10283           {
10284             int f = maybe_emit_file (a->dw_attr_val.v.val_file);
10285
10286             dw2_asm_output_data (constant_size (f), f, "%s (%s)", name,
10287                                  a->dw_attr_val.v.val_file->filename);
10288             break;
10289           }
10290
10291         case dw_val_class_file_implicit:
10292           if (flag_debug_asm)
10293             fprintf (asm_out_file, "\t\t\t%s %s (%d, %s)\n",
10294                      ASM_COMMENT_START, name,
10295                      maybe_emit_file (a->dw_attr_val.v.val_file),
10296                      a->dw_attr_val.v.val_file->filename);
10297           break;
10298
10299         case dw_val_class_data8:
10300           {
10301             int i;
10302
10303             for (i = 0; i < 8; i++)
10304               dw2_asm_output_data (1, a->dw_attr_val.v.val_data8[i],
10305                                    i == 0 ? "%s" : NULL, name);
10306             break;
10307           }
10308
10309         case dw_val_class_high_pc:
10310           dw2_asm_output_delta (DWARF2_ADDR_SIZE, AT_lbl (a),
10311                                 get_AT_low_pc (die), "DW_AT_high_pc");
10312           break;
10313
10314         case dw_val_class_discr_value:
10315           output_discr_value (&a->dw_attr_val.v.val_discr_value, name);
10316           break;
10317
10318         case dw_val_class_discr_list:
10319           {
10320             dw_discr_list_ref list = AT_discr_list (a);
10321             const int size = size_of_discr_list (list);
10322
10323             /* This is a block, so output its length first.  */
10324             dw2_asm_output_data (constant_size (size), size,
10325                                  "%s: block size", name);
10326
10327             for (; list != NULL; list = list->dw_discr_next)
10328               {
10329                 /* One byte for the discriminant value descriptor, and then as
10330                    many LEB128 numbers as required.  */
10331                 if (list->dw_discr_range)
10332                   dw2_asm_output_data (1, DW_DSC_range,
10333                                        "%s: DW_DSC_range", name);
10334                 else
10335                   dw2_asm_output_data (1, DW_DSC_label,
10336                                        "%s: DW_DSC_label", name);
10337
10338                 output_discr_value (&list->dw_discr_lower_bound, name);
10339                 if (list->dw_discr_range)
10340                   output_discr_value (&list->dw_discr_upper_bound, name);
10341               }
10342             break;
10343           }
10344
10345         default:
10346           gcc_unreachable ();
10347         }
10348     }
10349
10350   FOR_EACH_CHILD (die, c, output_die (c));
10351
10352   /* Add null byte to terminate sibling list.  */
10353   if (die->die_child != NULL)
10354     dw2_asm_output_data (1, 0, "end of children of DIE %#lx",
10355                          (unsigned long) die->die_offset);
10356 }
10357
10358 /* Output the compilation unit that appears at the beginning of the
10359    .debug_info section, and precedes the DIE descriptions.  */
10360
10361 static void
10362 output_compilation_unit_header (enum dwarf_unit_type ut)
10363 {
10364   if (!XCOFF_DEBUGGING_INFO)
10365     {
10366       if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
10367         dw2_asm_output_data (4, 0xffffffff,
10368           "Initial length escape value indicating 64-bit DWARF extension");
10369       dw2_asm_output_data (DWARF_OFFSET_SIZE,
10370                            next_die_offset - DWARF_INITIAL_LENGTH_SIZE,
10371                            "Length of Compilation Unit Info");
10372     }
10373
10374   dw2_asm_output_data (2, dwarf_version, "DWARF version number");
10375   if (dwarf_version >= 5)
10376     {
10377       const char *name;
10378       switch (ut)
10379         {
10380         case DW_UT_compile: name = "DW_UT_compile"; break;
10381         case DW_UT_type: name = "DW_UT_type"; break;
10382         case DW_UT_split_compile: name = "DW_UT_split_compile"; break;
10383         case DW_UT_split_type: name = "DW_UT_split_type"; break;
10384         default: gcc_unreachable ();
10385         }
10386       dw2_asm_output_data (1, ut, "%s", name);
10387       dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Pointer Size (in bytes)");
10388     }
10389   dw2_asm_output_offset (DWARF_OFFSET_SIZE, abbrev_section_label,
10390                          debug_abbrev_section,
10391                          "Offset Into Abbrev. Section");
10392   if (dwarf_version < 5)
10393     dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Pointer Size (in bytes)");
10394 }
10395
10396 /* Output the compilation unit DIE and its children.  */
10397
10398 static void
10399 output_comp_unit (dw_die_ref die, int output_if_empty,
10400                   const unsigned char *dwo_id)
10401 {
10402   const char *secname, *oldsym;
10403   char *tmp;
10404
10405   /* Unless we are outputting main CU, we may throw away empty ones.  */
10406   if (!output_if_empty && die->die_child == NULL)
10407     return;
10408
10409   /* Even if there are no children of this DIE, we must output the information
10410      about the compilation unit.  Otherwise, on an empty translation unit, we
10411      will generate a present, but empty, .debug_info section.  IRIX 6.5 `nm'
10412      will then complain when examining the file.  First mark all the DIEs in
10413      this CU so we know which get local refs.  */
10414   mark_dies (die);
10415
10416   external_ref_hash_type *extern_map = optimize_external_refs (die);
10417
10418   /* For now, optimize only the main CU, in order to optimize the rest
10419      we'd need to see all of them earlier.  Leave the rest for post-linking
10420      tools like DWZ.  */
10421   if (die == comp_unit_die ())
10422     abbrev_opt_start = vec_safe_length (abbrev_die_table);
10423
10424   build_abbrev_table (die, extern_map);
10425
10426   optimize_abbrev_table ();
10427
10428   delete extern_map;
10429
10430   /* Initialize the beginning DIE offset - and calculate sizes/offsets.  */
10431   next_die_offset = (dwo_id
10432                      ? DWARF_COMPILE_UNIT_SKELETON_HEADER_SIZE
10433                      : DWARF_COMPILE_UNIT_HEADER_SIZE);
10434   calc_die_sizes (die);
10435
10436   oldsym = die->die_id.die_symbol;
10437   if (oldsym && die->comdat_type_p)
10438     {
10439       tmp = XALLOCAVEC (char, strlen (oldsym) + 24);
10440
10441       sprintf (tmp, ".gnu.linkonce.wi.%s", oldsym);
10442       secname = tmp;
10443       die->die_id.die_symbol = NULL;
10444       switch_to_section (get_section (secname, SECTION_DEBUG, NULL));
10445     }
10446   else
10447     {
10448       switch_to_section (debug_info_section);
10449       ASM_OUTPUT_LABEL (asm_out_file, debug_info_section_label);
10450       info_section_emitted = true;
10451     }
10452
10453   /* For LTO cross unit DIE refs we want a symbol on the start of the
10454      debuginfo section, not on the CU DIE.  */
10455   if ((flag_generate_lto || flag_generate_offload) && oldsym)
10456     {
10457       /* ???  No way to get visibility assembled without a decl.  */
10458       tree decl = build_decl (UNKNOWN_LOCATION, VAR_DECL,
10459                               get_identifier (oldsym), char_type_node);
10460       TREE_PUBLIC (decl) = true;
10461       TREE_STATIC (decl) = true;
10462       DECL_ARTIFICIAL (decl) = true;
10463       DECL_VISIBILITY (decl) = VISIBILITY_HIDDEN;
10464       DECL_VISIBILITY_SPECIFIED (decl) = true;
10465       targetm.asm_out.assemble_visibility (decl, VISIBILITY_HIDDEN);
10466 #ifdef ASM_WEAKEN_LABEL
10467       /* We prefer a .weak because that handles duplicates from duplicate
10468          archive members in a graceful way.  */
10469       ASM_WEAKEN_LABEL (asm_out_file, oldsym);
10470 #else
10471       targetm.asm_out.globalize_label (asm_out_file, oldsym);
10472 #endif
10473       ASM_OUTPUT_LABEL (asm_out_file, oldsym);
10474     }
10475
10476   /* Output debugging information.  */
10477   output_compilation_unit_header (dwo_id
10478                                   ? DW_UT_split_compile : DW_UT_compile);
10479   if (dwarf_version >= 5)
10480     {
10481       if (dwo_id != NULL)
10482         for (int i = 0; i < 8; i++)
10483           dw2_asm_output_data (1, dwo_id[i], i == 0 ? "DWO id" : NULL);
10484     }
10485   output_die (die);
10486
10487   /* Leave the marks on the main CU, so we can check them in
10488      output_pubnames.  */
10489   if (oldsym)
10490     {
10491       unmark_dies (die);
10492       die->die_id.die_symbol = oldsym;
10493     }
10494 }
10495
10496 /* Whether to generate the DWARF accelerator tables in .debug_pubnames
10497    and .debug_pubtypes.  This is configured per-target, but can be
10498    overridden by the -gpubnames or -gno-pubnames options.  */
10499
10500 static inline bool
10501 want_pubnames (void)
10502 {
10503   if (debug_info_level <= DINFO_LEVEL_TERSE)
10504     return false;
10505   if (debug_generate_pub_sections != -1)
10506     return debug_generate_pub_sections;
10507   return targetm.want_debug_pub_sections;
10508 }
10509
10510 /* Add the DW_AT_GNU_pubnames and DW_AT_GNU_pubtypes attributes.  */
10511
10512 static void
10513 add_AT_pubnames (dw_die_ref die)
10514 {
10515   if (want_pubnames ())
10516     add_AT_flag (die, DW_AT_GNU_pubnames, 1);
10517 }
10518
10519 /* Add a string attribute value to a skeleton DIE.  */
10520
10521 static inline void
10522 add_skeleton_AT_string (dw_die_ref die, enum dwarf_attribute attr_kind,
10523                         const char *str)
10524 {
10525   dw_attr_node attr;
10526   struct indirect_string_node *node;
10527
10528   if (! skeleton_debug_str_hash)
10529     skeleton_debug_str_hash
10530       = hash_table<indirect_string_hasher>::create_ggc (10);
10531
10532   node = find_AT_string_in_table (str, skeleton_debug_str_hash);
10533   find_string_form (node);
10534   if (node->form == DW_FORM_GNU_str_index)
10535     node->form = DW_FORM_strp;
10536
10537   attr.dw_attr = attr_kind;
10538   attr.dw_attr_val.val_class = dw_val_class_str;
10539   attr.dw_attr_val.val_entry = NULL;
10540   attr.dw_attr_val.v.val_str = node;
10541   add_dwarf_attr (die, &attr);
10542 }
10543
10544 /* Helper function to generate top-level dies for skeleton debug_info and
10545    debug_types.  */
10546
10547 static void
10548 add_top_level_skeleton_die_attrs (dw_die_ref die)
10549 {
10550   const char *dwo_file_name = concat (aux_base_name, ".dwo", NULL);
10551   const char *comp_dir = comp_dir_string ();
10552
10553   add_skeleton_AT_string (die, dwarf_AT (DW_AT_dwo_name), dwo_file_name);
10554   if (comp_dir != NULL)
10555     add_skeleton_AT_string (die, DW_AT_comp_dir, comp_dir);
10556   add_AT_pubnames (die);
10557   add_AT_lineptr (die, DW_AT_GNU_addr_base, debug_addr_section_label);
10558 }
10559
10560 /* Output skeleton debug sections that point to the dwo file.  */
10561
10562 static void
10563 output_skeleton_debug_sections (dw_die_ref comp_unit,
10564                                 const unsigned char *dwo_id)
10565 {
10566   /* These attributes will be found in the full debug_info section.  */
10567   remove_AT (comp_unit, DW_AT_producer);
10568   remove_AT (comp_unit, DW_AT_language);
10569
10570   switch_to_section (debug_skeleton_info_section);
10571   ASM_OUTPUT_LABEL (asm_out_file, debug_skeleton_info_section_label);
10572
10573   /* Produce the skeleton compilation-unit header.  This one differs enough from
10574      a normal CU header that it's better not to call output_compilation_unit
10575      header.  */
10576   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
10577     dw2_asm_output_data (4, 0xffffffff,
10578                          "Initial length escape value indicating 64-bit "
10579                          "DWARF extension");
10580
10581   dw2_asm_output_data (DWARF_OFFSET_SIZE,
10582                        DWARF_COMPILE_UNIT_SKELETON_HEADER_SIZE
10583                        - DWARF_INITIAL_LENGTH_SIZE
10584                        + size_of_die (comp_unit),
10585                       "Length of Compilation Unit Info");
10586   dw2_asm_output_data (2, dwarf_version, "DWARF version number");
10587   if (dwarf_version >= 5)
10588     {
10589       dw2_asm_output_data (1, DW_UT_skeleton, "DW_UT_skeleton");
10590       dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Pointer Size (in bytes)");
10591     }
10592   dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_skeleton_abbrev_section_label,
10593                          debug_skeleton_abbrev_section,
10594                          "Offset Into Abbrev. Section");
10595   if (dwarf_version < 5)
10596     dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Pointer Size (in bytes)");
10597   else
10598     for (int i = 0; i < 8; i++)
10599       dw2_asm_output_data (1, dwo_id[i], i == 0 ? "DWO id" : NULL);
10600
10601   comp_unit->die_abbrev = SKELETON_COMP_DIE_ABBREV;
10602   output_die (comp_unit);
10603
10604   /* Build the skeleton debug_abbrev section.  */
10605   switch_to_section (debug_skeleton_abbrev_section);
10606   ASM_OUTPUT_LABEL (asm_out_file, debug_skeleton_abbrev_section_label);
10607
10608   output_die_abbrevs (SKELETON_COMP_DIE_ABBREV, comp_unit);
10609
10610   dw2_asm_output_data (1, 0, "end of skeleton .debug_abbrev");
10611 }
10612
10613 /* Output a comdat type unit DIE and its children.  */
10614
10615 static void
10616 output_comdat_type_unit (comdat_type_node *node)
10617 {
10618   const char *secname;
10619   char *tmp;
10620   int i;
10621 #if defined (OBJECT_FORMAT_ELF)
10622   tree comdat_key;
10623 #endif
10624
10625   /* First mark all the DIEs in this CU so we know which get local refs.  */
10626   mark_dies (node->root_die);
10627
10628   external_ref_hash_type *extern_map = optimize_external_refs (node->root_die);
10629
10630   build_abbrev_table (node->root_die, extern_map);
10631
10632   delete extern_map;
10633   extern_map = NULL;
10634
10635   /* Initialize the beginning DIE offset - and calculate sizes/offsets.  */
10636   next_die_offset = DWARF_COMDAT_TYPE_UNIT_HEADER_SIZE;
10637   calc_die_sizes (node->root_die);
10638
10639 #if defined (OBJECT_FORMAT_ELF)
10640   if (dwarf_version >= 5)
10641     {
10642       if (!dwarf_split_debug_info)
10643         secname = ".debug_info";
10644       else
10645         secname = ".debug_info.dwo";
10646     }
10647   else if (!dwarf_split_debug_info)
10648     secname = ".debug_types";
10649   else
10650     secname = ".debug_types.dwo";
10651
10652   tmp = XALLOCAVEC (char, 4 + DWARF_TYPE_SIGNATURE_SIZE * 2);
10653   sprintf (tmp, dwarf_version >= 5 ? "wi." : "wt.");
10654   for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++)
10655     sprintf (tmp + 3 + i * 2, "%02x", node->signature[i] & 0xff);
10656   comdat_key = get_identifier (tmp);
10657   targetm.asm_out.named_section (secname,
10658                                  SECTION_DEBUG | SECTION_LINKONCE,
10659                                  comdat_key);
10660 #else
10661   tmp = XALLOCAVEC (char, 18 + DWARF_TYPE_SIGNATURE_SIZE * 2);
10662   sprintf (tmp, (dwarf_version >= 5
10663                  ? ".gnu.linkonce.wi." : ".gnu.linkonce.wt."));
10664   for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++)
10665     sprintf (tmp + 17 + i * 2, "%02x", node->signature[i] & 0xff);
10666   secname = tmp;
10667   switch_to_section (get_section (secname, SECTION_DEBUG, NULL));
10668 #endif
10669
10670   /* Output debugging information.  */
10671   output_compilation_unit_header (dwarf_split_debug_info
10672                                   ? DW_UT_split_type : DW_UT_type);
10673   output_signature (node->signature, "Type Signature");
10674   dw2_asm_output_data (DWARF_OFFSET_SIZE, node->type_die->die_offset,
10675                        "Offset to Type DIE");
10676   output_die (node->root_die);
10677
10678   unmark_dies (node->root_die);
10679 }
10680
10681 /* Return the DWARF2/3 pubname associated with a decl.  */
10682
10683 static const char *
10684 dwarf2_name (tree decl, int scope)
10685 {
10686   if (DECL_NAMELESS (decl))
10687     return NULL;
10688   return lang_hooks.dwarf_name (decl, scope ? 1 : 0);
10689 }
10690
10691 /* Add a new entry to .debug_pubnames if appropriate.  */
10692
10693 static void
10694 add_pubname_string (const char *str, dw_die_ref die)
10695 {
10696   pubname_entry e;
10697
10698   e.die = die;
10699   e.name = xstrdup (str);
10700   vec_safe_push (pubname_table, e);
10701 }
10702
10703 static void
10704 add_pubname (tree decl, dw_die_ref die)
10705 {
10706   if (!want_pubnames ())
10707     return;
10708
10709   /* Don't add items to the table when we expect that the consumer will have
10710      just read the enclosing die.  For example, if the consumer is looking at a
10711      class_member, it will either be inside the class already, or will have just
10712      looked up the class to find the member.  Either way, searching the class is
10713      faster than searching the index.  */
10714   if ((TREE_PUBLIC (decl) && !class_scope_p (die->die_parent))
10715       || is_cu_die (die->die_parent) || is_namespace_die (die->die_parent))
10716     {
10717       const char *name = dwarf2_name (decl, 1);
10718
10719       if (name)
10720         add_pubname_string (name, die);
10721     }
10722 }
10723
10724 /* Add an enumerator to the pubnames section.  */
10725
10726 static void
10727 add_enumerator_pubname (const char *scope_name, dw_die_ref die)
10728 {
10729   pubname_entry e;
10730
10731   gcc_assert (scope_name);
10732   e.name = concat (scope_name, get_AT_string (die, DW_AT_name), NULL);
10733   e.die = die;
10734   vec_safe_push (pubname_table, e);
10735 }
10736
10737 /* Add a new entry to .debug_pubtypes if appropriate.  */
10738
10739 static void
10740 add_pubtype (tree decl, dw_die_ref die)
10741 {
10742   pubname_entry e;
10743
10744   if (!want_pubnames ())
10745     return;
10746
10747   if ((TREE_PUBLIC (decl)
10748        || is_cu_die (die->die_parent) || is_namespace_die (die->die_parent))
10749       && (die->die_tag == DW_TAG_typedef || COMPLETE_TYPE_P (decl)))
10750     {
10751       tree scope = NULL;
10752       const char *scope_name = "";
10753       const char *sep = is_cxx () ? "::" : ".";
10754       const char *name;
10755
10756       scope = TYPE_P (decl) ? TYPE_CONTEXT (decl) : NULL;
10757       if (scope && TREE_CODE (scope) == NAMESPACE_DECL)
10758         {
10759           scope_name = lang_hooks.dwarf_name (scope, 1);
10760           if (scope_name != NULL && scope_name[0] != '\0')
10761             scope_name = concat (scope_name, sep, NULL);
10762           else
10763             scope_name = "";
10764         }
10765
10766       if (TYPE_P (decl))
10767         name = type_tag (decl);
10768       else
10769         name = lang_hooks.dwarf_name (decl, 1);
10770
10771       /* If we don't have a name for the type, there's no point in adding
10772          it to the table.  */
10773       if (name != NULL && name[0] != '\0')
10774         {
10775           e.die = die;
10776           e.name = concat (scope_name, name, NULL);
10777           vec_safe_push (pubtype_table, e);
10778         }
10779
10780       /* Although it might be more consistent to add the pubinfo for the
10781          enumerators as their dies are created, they should only be added if the
10782          enum type meets the criteria above.  So rather than re-check the parent
10783          enum type whenever an enumerator die is created, just output them all
10784          here.  This isn't protected by the name conditional because anonymous
10785          enums don't have names.  */
10786       if (die->die_tag == DW_TAG_enumeration_type)
10787         {
10788           dw_die_ref c;
10789
10790           FOR_EACH_CHILD (die, c, add_enumerator_pubname (scope_name, c));
10791         }
10792     }
10793 }
10794
10795 /* Output a single entry in the pubnames table.  */
10796
10797 static void
10798 output_pubname (dw_offset die_offset, pubname_entry *entry)
10799 {
10800   dw_die_ref die = entry->die;
10801   int is_static = get_AT_flag (die, DW_AT_external) ? 0 : 1;
10802
10803   dw2_asm_output_data (DWARF_OFFSET_SIZE, die_offset, "DIE offset");
10804
10805   if (debug_generate_pub_sections == 2)
10806     {
10807       /* This logic follows gdb's method for determining the value of the flag
10808          byte.  */
10809       uint32_t flags = GDB_INDEX_SYMBOL_KIND_NONE;
10810       switch (die->die_tag)
10811       {
10812         case DW_TAG_typedef:
10813         case DW_TAG_base_type:
10814         case DW_TAG_subrange_type:
10815           GDB_INDEX_SYMBOL_KIND_SET_VALUE(flags, GDB_INDEX_SYMBOL_KIND_TYPE);
10816           GDB_INDEX_SYMBOL_STATIC_SET_VALUE(flags, 1);
10817           break;
10818         case DW_TAG_enumerator:
10819           GDB_INDEX_SYMBOL_KIND_SET_VALUE(flags,
10820                                           GDB_INDEX_SYMBOL_KIND_VARIABLE);
10821           if (!is_cxx ())
10822             GDB_INDEX_SYMBOL_STATIC_SET_VALUE(flags, 1);
10823           break;
10824         case DW_TAG_subprogram:
10825           GDB_INDEX_SYMBOL_KIND_SET_VALUE(flags,
10826                                           GDB_INDEX_SYMBOL_KIND_FUNCTION);
10827           if (!is_ada ())
10828             GDB_INDEX_SYMBOL_STATIC_SET_VALUE(flags, is_static);
10829           break;
10830         case DW_TAG_constant:
10831           GDB_INDEX_SYMBOL_KIND_SET_VALUE(flags,
10832                                           GDB_INDEX_SYMBOL_KIND_VARIABLE);
10833           GDB_INDEX_SYMBOL_STATIC_SET_VALUE(flags, is_static);
10834           break;
10835         case DW_TAG_variable:
10836           GDB_INDEX_SYMBOL_KIND_SET_VALUE(flags,
10837                                           GDB_INDEX_SYMBOL_KIND_VARIABLE);
10838           GDB_INDEX_SYMBOL_STATIC_SET_VALUE(flags, is_static);
10839           break;
10840         case DW_TAG_namespace:
10841         case DW_TAG_imported_declaration:
10842           GDB_INDEX_SYMBOL_KIND_SET_VALUE(flags, GDB_INDEX_SYMBOL_KIND_TYPE);
10843           break;
10844         case DW_TAG_class_type:
10845         case DW_TAG_interface_type:
10846         case DW_TAG_structure_type:
10847         case DW_TAG_union_type:
10848         case DW_TAG_enumeration_type:
10849           GDB_INDEX_SYMBOL_KIND_SET_VALUE(flags, GDB_INDEX_SYMBOL_KIND_TYPE);
10850           if (!is_cxx ())
10851             GDB_INDEX_SYMBOL_STATIC_SET_VALUE(flags, 1);
10852           break;
10853         default:
10854           /* An unusual tag.  Leave the flag-byte empty.  */
10855           break;
10856       }
10857       dw2_asm_output_data (1, flags >> GDB_INDEX_CU_BITSIZE,
10858                            "GDB-index flags");
10859     }
10860
10861   dw2_asm_output_nstring (entry->name, -1, "external name");
10862 }
10863
10864
10865 /* Output the public names table used to speed up access to externally
10866    visible names; or the public types table used to find type definitions.  */
10867
10868 static void
10869 output_pubnames (vec<pubname_entry, va_gc> *names)
10870 {
10871   unsigned i;
10872   unsigned long pubnames_length = size_of_pubnames (names);
10873   pubname_entry *pub;
10874
10875   if (!XCOFF_DEBUGGING_INFO)
10876     {
10877       if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
10878         dw2_asm_output_data (4, 0xffffffff,
10879           "Initial length escape value indicating 64-bit DWARF extension");
10880       dw2_asm_output_data (DWARF_OFFSET_SIZE, pubnames_length,
10881                            "Pub Info Length");
10882     }
10883
10884   /* Version number for pubnames/pubtypes is independent of dwarf version.  */
10885   dw2_asm_output_data (2, 2, "DWARF Version");
10886
10887   if (dwarf_split_debug_info)
10888     dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_skeleton_info_section_label,
10889                            debug_skeleton_info_section,
10890                            "Offset of Compilation Unit Info");
10891   else
10892     dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_info_section_label,
10893                            debug_info_section,
10894                            "Offset of Compilation Unit Info");
10895   dw2_asm_output_data (DWARF_OFFSET_SIZE, next_die_offset,
10896                        "Compilation Unit Length");
10897
10898   FOR_EACH_VEC_ELT (*names, i, pub)
10899     {
10900       if (include_pubname_in_output (names, pub))
10901         {
10902           dw_offset die_offset = pub->die->die_offset;
10903
10904           /* We shouldn't see pubnames for DIEs outside of the main CU.  */
10905           if (names == pubname_table && pub->die->die_tag != DW_TAG_enumerator)
10906             gcc_assert (pub->die->die_mark);
10907
10908           /* If we're putting types in their own .debug_types sections,
10909              the .debug_pubtypes table will still point to the compile
10910              unit (not the type unit), so we want to use the offset of
10911              the skeleton DIE (if there is one).  */
10912           if (pub->die->comdat_type_p && names == pubtype_table)
10913             {
10914               comdat_type_node *type_node = pub->die->die_id.die_type_node;
10915
10916               if (type_node != NULL)
10917                 die_offset = (type_node->skeleton_die != NULL
10918                               ? type_node->skeleton_die->die_offset
10919                               : comp_unit_die ()->die_offset);
10920             }
10921
10922           output_pubname (die_offset, pub);
10923         }
10924     }
10925
10926   dw2_asm_output_data (DWARF_OFFSET_SIZE, 0, NULL);
10927 }
10928
10929 /* Output public names and types tables if necessary.  */
10930
10931 static void
10932 output_pubtables (void)
10933 {
10934   if (!want_pubnames () || !info_section_emitted)
10935     return;
10936
10937   switch_to_section (debug_pubnames_section);
10938   output_pubnames (pubname_table);
10939   /* ??? Only defined by DWARF3, but emitted by Darwin for DWARF2.
10940      It shouldn't hurt to emit it always, since pure DWARF2 consumers
10941      simply won't look for the section.  */
10942   switch_to_section (debug_pubtypes_section);
10943   output_pubnames (pubtype_table);
10944 }
10945
10946
10947 /* Output the information that goes into the .debug_aranges table.
10948    Namely, define the beginning and ending address range of the
10949    text section generated for this compilation unit.  */
10950
10951 static void
10952 output_aranges (void)
10953 {
10954   unsigned i;
10955   unsigned long aranges_length = size_of_aranges ();
10956   
10957   if (!XCOFF_DEBUGGING_INFO)
10958     {
10959       if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
10960         dw2_asm_output_data (4, 0xffffffff,
10961           "Initial length escape value indicating 64-bit DWARF extension");
10962       dw2_asm_output_data (DWARF_OFFSET_SIZE, aranges_length,
10963                            "Length of Address Ranges Info");
10964     }
10965
10966   /* Version number for aranges is still 2, even up to DWARF5.  */
10967   dw2_asm_output_data (2, 2, "DWARF Version");
10968   if (dwarf_split_debug_info)
10969     dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_skeleton_info_section_label,
10970                            debug_skeleton_info_section,
10971                            "Offset of Compilation Unit Info");
10972   else
10973     dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_info_section_label,
10974                            debug_info_section,
10975                            "Offset of Compilation Unit Info");
10976   dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Size of Address");
10977   dw2_asm_output_data (1, 0, "Size of Segment Descriptor");
10978
10979   /* We need to align to twice the pointer size here.  */
10980   if (DWARF_ARANGES_PAD_SIZE)
10981     {
10982       /* Pad using a 2 byte words so that padding is correct for any
10983          pointer size.  */
10984       dw2_asm_output_data (2, 0, "Pad to %d byte boundary",
10985                            2 * DWARF2_ADDR_SIZE);
10986       for (i = 2; i < (unsigned) DWARF_ARANGES_PAD_SIZE; i += 2)
10987         dw2_asm_output_data (2, 0, NULL);
10988     }
10989
10990   /* It is necessary not to output these entries if the sections were
10991      not used; if the sections were not used, the length will be 0 and
10992      the address may end up as 0 if the section is discarded by ld
10993      --gc-sections, leaving an invalid (0, 0) entry that can be
10994      confused with the terminator.  */
10995   if (text_section_used)
10996     {
10997       dw2_asm_output_addr (DWARF2_ADDR_SIZE, text_section_label, "Address");
10998       dw2_asm_output_delta (DWARF2_ADDR_SIZE, text_end_label,
10999                             text_section_label, "Length");
11000     }
11001   if (cold_text_section_used)
11002     {
11003       dw2_asm_output_addr (DWARF2_ADDR_SIZE, cold_text_section_label,
11004                            "Address");
11005       dw2_asm_output_delta (DWARF2_ADDR_SIZE, cold_end_label,
11006                             cold_text_section_label, "Length");
11007     }
11008
11009   if (have_multiple_function_sections)
11010     {
11011       unsigned fde_idx;
11012       dw_fde_ref fde;
11013
11014       FOR_EACH_VEC_ELT (*fde_vec, fde_idx, fde)
11015         {
11016           if (DECL_IGNORED_P (fde->decl))
11017             continue;
11018           if (!fde->in_std_section)
11019             {
11020               dw2_asm_output_addr (DWARF2_ADDR_SIZE, fde->dw_fde_begin,
11021                                    "Address");
11022               dw2_asm_output_delta (DWARF2_ADDR_SIZE, fde->dw_fde_end,
11023                                     fde->dw_fde_begin, "Length");
11024             }
11025           if (fde->dw_fde_second_begin && !fde->second_in_std_section)
11026             {
11027               dw2_asm_output_addr (DWARF2_ADDR_SIZE, fde->dw_fde_second_begin,
11028                                    "Address");
11029               dw2_asm_output_delta (DWARF2_ADDR_SIZE, fde->dw_fde_second_end,
11030                                     fde->dw_fde_second_begin, "Length");
11031             }
11032         }
11033     }
11034
11035   /* Output the terminator words.  */
11036   dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
11037   dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
11038 }
11039
11040 /* Add a new entry to .debug_ranges.  Return its index into
11041    ranges_table vector.  */
11042
11043 static unsigned int
11044 add_ranges_num (int num, bool maybe_new_sec)
11045 {
11046   dw_ranges r = { NULL, num, 0, maybe_new_sec };
11047   vec_safe_push (ranges_table, r);
11048   return vec_safe_length (ranges_table) - 1;
11049 }
11050
11051 /* Add a new entry to .debug_ranges corresponding to a block, or a
11052    range terminator if BLOCK is NULL.  MAYBE_NEW_SEC is true if
11053    this entry might be in a different section from previous range.  */
11054
11055 static unsigned int
11056 add_ranges (const_tree block, bool maybe_new_sec)
11057 {
11058   return add_ranges_num (block ? BLOCK_NUMBER (block) : 0, maybe_new_sec);
11059 }
11060
11061 /* Note that (*rnglist_table)[offset] is either a head of a rnglist
11062    chain, or middle entry of a chain that will be directly referred to.  */
11063
11064 static void
11065 note_rnglist_head (unsigned int offset)
11066 {
11067   if (dwarf_version < 5 || (*ranges_table)[offset].label)
11068     return;
11069   (*ranges_table)[offset].label = gen_internal_sym ("LLRL");
11070 }
11071
11072 /* Add a new entry to .debug_ranges corresponding to a pair of labels.
11073    When using dwarf_split_debug_info, address attributes in dies destined
11074    for the final executable should be direct references--setting the
11075    parameter force_direct ensures this behavior.  */
11076
11077 static void
11078 add_ranges_by_labels (dw_die_ref die, const char *begin, const char *end,
11079                       bool *added, bool force_direct)
11080 {
11081   unsigned int in_use = vec_safe_length (ranges_by_label);
11082   unsigned int offset;
11083   dw_ranges_by_label rbl = { begin, end };
11084   vec_safe_push (ranges_by_label, rbl);
11085   offset = add_ranges_num (-(int)in_use - 1, true);
11086   if (!*added)
11087     {
11088       add_AT_range_list (die, DW_AT_ranges, offset, force_direct);
11089       *added = true;
11090       note_rnglist_head (offset);
11091     }
11092 }
11093
11094 /* Emit .debug_ranges section.  */
11095
11096 static void
11097 output_ranges (void)
11098 {
11099   unsigned i;
11100   static const char *const start_fmt = "Offset %#x";
11101   const char *fmt = start_fmt;
11102   dw_ranges *r;
11103
11104   switch_to_section (debug_ranges_section);
11105   ASM_OUTPUT_LABEL (asm_out_file, ranges_section_label);
11106   FOR_EACH_VEC_SAFE_ELT (ranges_table, i, r)
11107     {
11108       int block_num = r->num;
11109
11110       if (block_num > 0)
11111         {
11112           char blabel[MAX_ARTIFICIAL_LABEL_BYTES];
11113           char elabel[MAX_ARTIFICIAL_LABEL_BYTES];
11114
11115           ASM_GENERATE_INTERNAL_LABEL (blabel, BLOCK_BEGIN_LABEL, block_num);
11116           ASM_GENERATE_INTERNAL_LABEL (elabel, BLOCK_END_LABEL, block_num);
11117
11118           /* If all code is in the text section, then the compilation
11119              unit base address defaults to DW_AT_low_pc, which is the
11120              base of the text section.  */
11121           if (!have_multiple_function_sections)
11122             {
11123               dw2_asm_output_delta (DWARF2_ADDR_SIZE, blabel,
11124                                     text_section_label,
11125                                     fmt, i * 2 * DWARF2_ADDR_SIZE);
11126               dw2_asm_output_delta (DWARF2_ADDR_SIZE, elabel,
11127                                     text_section_label, NULL);
11128             }
11129
11130           /* Otherwise, the compilation unit base address is zero,
11131              which allows us to use absolute addresses, and not worry
11132              about whether the target supports cross-section
11133              arithmetic.  */
11134           else
11135             {
11136               dw2_asm_output_addr (DWARF2_ADDR_SIZE, blabel,
11137                                    fmt, i * 2 * DWARF2_ADDR_SIZE);
11138               dw2_asm_output_addr (DWARF2_ADDR_SIZE, elabel, NULL);
11139             }
11140
11141           fmt = NULL;
11142         }
11143
11144       /* Negative block_num stands for an index into ranges_by_label.  */
11145       else if (block_num < 0)
11146         {
11147           int lab_idx = - block_num - 1;
11148
11149           if (!have_multiple_function_sections)
11150             {
11151               gcc_unreachable ();
11152 #if 0
11153               /* If we ever use add_ranges_by_labels () for a single
11154                  function section, all we have to do is to take out
11155                  the #if 0 above.  */
11156               dw2_asm_output_delta (DWARF2_ADDR_SIZE,
11157                                     (*ranges_by_label)[lab_idx].begin,
11158                                     text_section_label,
11159                                     fmt, i * 2 * DWARF2_ADDR_SIZE);
11160               dw2_asm_output_delta (DWARF2_ADDR_SIZE,
11161                                     (*ranges_by_label)[lab_idx].end,
11162                                     text_section_label, NULL);
11163 #endif
11164             }
11165           else
11166             {
11167               dw2_asm_output_addr (DWARF2_ADDR_SIZE,
11168                                    (*ranges_by_label)[lab_idx].begin,
11169                                    fmt, i * 2 * DWARF2_ADDR_SIZE);
11170               dw2_asm_output_addr (DWARF2_ADDR_SIZE,
11171                                    (*ranges_by_label)[lab_idx].end,
11172                                    NULL);
11173             }
11174         }
11175       else
11176         {
11177           dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
11178           dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
11179           fmt = start_fmt;
11180         }
11181     }
11182 }
11183
11184 /* Non-zero if .debug_line_str should be used for .debug_line section
11185    strings or strings that are likely shareable with those.  */
11186 #define DWARF5_USE_DEBUG_LINE_STR \
11187   (!DWARF2_INDIRECT_STRING_SUPPORT_MISSING_ON_TARGET            \
11188    && (DEBUG_STR_SECTION_FLAGS & SECTION_MERGE) != 0            \
11189    /* FIXME: there is no .debug_line_str.dwo section,           \
11190       for -gsplit-dwarf we should use DW_FORM_strx instead.  */ \
11191    && !dwarf_split_debug_info)
11192
11193 /* Assign .debug_rnglists indexes.  */
11194
11195 static void
11196 index_rnglists (void)
11197 {
11198   unsigned i;
11199   dw_ranges *r;
11200
11201   FOR_EACH_VEC_SAFE_ELT (ranges_table, i, r)
11202     if (r->label)
11203       r->idx = rnglist_idx++;
11204 }
11205
11206 /* Emit .debug_rnglists section.  */
11207
11208 static void
11209 output_rnglists (unsigned generation)
11210 {
11211   unsigned i;
11212   dw_ranges *r;
11213   char l1[MAX_ARTIFICIAL_LABEL_BYTES];
11214   char l2[MAX_ARTIFICIAL_LABEL_BYTES];
11215   char basebuf[MAX_ARTIFICIAL_LABEL_BYTES];
11216
11217   switch_to_section (debug_ranges_section);
11218   ASM_OUTPUT_LABEL (asm_out_file, ranges_section_label);
11219   /* There are up to 4 unique ranges labels per generation.
11220      See also init_sections_and_labels.  */
11221   ASM_GENERATE_INTERNAL_LABEL (l1, DEBUG_RANGES_SECTION_LABEL,
11222                                2 + generation * 4);
11223   ASM_GENERATE_INTERNAL_LABEL (l2, DEBUG_RANGES_SECTION_LABEL,
11224                                3 + generation * 4);
11225   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
11226     dw2_asm_output_data (4, 0xffffffff,
11227                          "Initial length escape value indicating "
11228                          "64-bit DWARF extension");
11229   dw2_asm_output_delta (DWARF_OFFSET_SIZE, l2, l1,
11230                         "Length of Range Lists");
11231   ASM_OUTPUT_LABEL (asm_out_file, l1);
11232   dw2_asm_output_data (2, dwarf_version, "DWARF Version");
11233   dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Address Size");
11234   dw2_asm_output_data (1, 0, "Segment Size");
11235   /* Emit the offset table only for -gsplit-dwarf.  If we don't care
11236      about relocation sizes and primarily care about the size of .debug*
11237      sections in linked shared libraries and executables, then
11238      the offset table plus corresponding DW_FORM_rnglistx uleb128 indexes
11239      into it are usually larger than just DW_FORM_sec_offset offsets
11240      into the .debug_rnglists section.  */
11241   dw2_asm_output_data (4, dwarf_split_debug_info ? rnglist_idx : 0,
11242                        "Offset Entry Count");
11243   if (dwarf_split_debug_info)
11244     {
11245       ASM_OUTPUT_LABEL (asm_out_file, ranges_base_label);
11246       FOR_EACH_VEC_SAFE_ELT (ranges_table, i, r)
11247         if (r->label)
11248           dw2_asm_output_delta (DWARF_OFFSET_SIZE, r->label,
11249                                 ranges_base_label, NULL);
11250     }
11251
11252   const char *lab = "";
11253   unsigned int len = vec_safe_length (ranges_table);
11254   const char *base = NULL;
11255   FOR_EACH_VEC_SAFE_ELT (ranges_table, i, r)
11256     {
11257       int block_num = r->num;
11258
11259       if (r->label)
11260         {
11261           ASM_OUTPUT_LABEL (asm_out_file, r->label);
11262           lab = r->label;
11263         }
11264       if (HAVE_AS_LEB128 && (r->label || r->maybe_new_sec))
11265         base = NULL;
11266       if (block_num > 0)
11267         {
11268           char blabel[MAX_ARTIFICIAL_LABEL_BYTES];
11269           char elabel[MAX_ARTIFICIAL_LABEL_BYTES];
11270
11271           ASM_GENERATE_INTERNAL_LABEL (blabel, BLOCK_BEGIN_LABEL, block_num);
11272           ASM_GENERATE_INTERNAL_LABEL (elabel, BLOCK_END_LABEL, block_num);
11273
11274           if (HAVE_AS_LEB128)
11275             {
11276               /* If all code is in the text section, then the compilation
11277                  unit base address defaults to DW_AT_low_pc, which is the
11278                  base of the text section.  */
11279               if (!have_multiple_function_sections)
11280                 {
11281                   dw2_asm_output_data (1, DW_RLE_offset_pair,
11282                                        "DW_RLE_offset_pair (%s)", lab);
11283                   dw2_asm_output_delta_uleb128 (blabel, text_section_label,
11284                                                 "Range begin address (%s)", lab);
11285                   dw2_asm_output_delta_uleb128 (elabel, text_section_label,
11286                                                 "Range end address (%s)", lab);
11287                   continue;
11288                 }
11289               if (base == NULL)
11290                 {
11291                   dw_ranges *r2 = NULL;
11292                   if (i < len - 1)
11293                     r2 = &(*ranges_table)[i + 1];
11294                   if (r2
11295                       && r2->num != 0
11296                       && r2->label == NULL
11297                       && !r2->maybe_new_sec)
11298                     {
11299                       dw2_asm_output_data (1, DW_RLE_base_address,
11300                                            "DW_RLE_base_address (%s)", lab);
11301                       dw2_asm_output_addr (DWARF2_ADDR_SIZE, blabel,
11302                                            "Base address (%s)", lab);
11303                       strcpy (basebuf, blabel);
11304                       base = basebuf;
11305                     }
11306                 }
11307               if (base)
11308                 {
11309                   dw2_asm_output_data (1, DW_RLE_offset_pair,
11310                                        "DW_RLE_offset_pair (%s)", lab);
11311                   dw2_asm_output_delta_uleb128 (blabel, base,
11312                                                 "Range begin address (%s)", lab);
11313                   dw2_asm_output_delta_uleb128 (elabel, base,
11314                                                 "Range end address (%s)", lab);
11315                   continue;
11316                 }
11317               dw2_asm_output_data (1, DW_RLE_start_length,
11318                                    "DW_RLE_start_length (%s)", lab);
11319               dw2_asm_output_addr (DWARF2_ADDR_SIZE, blabel,
11320                                    "Range begin address (%s)", lab);
11321               dw2_asm_output_delta_uleb128 (elabel, blabel,
11322                                             "Range length (%s)", lab);
11323             }
11324           else
11325             {
11326               dw2_asm_output_data (1, DW_RLE_start_end,
11327                                    "DW_RLE_start_end (%s)", lab);
11328               dw2_asm_output_addr (DWARF2_ADDR_SIZE, blabel,
11329                                    "Range begin address (%s)", lab);
11330               dw2_asm_output_addr (DWARF2_ADDR_SIZE, elabel,
11331                                    "Range end address (%s)", lab);
11332             }
11333         }
11334
11335       /* Negative block_num stands for an index into ranges_by_label.  */
11336       else if (block_num < 0)
11337         {
11338           int lab_idx = - block_num - 1;
11339           const char *blabel = (*ranges_by_label)[lab_idx].begin;
11340           const char *elabel = (*ranges_by_label)[lab_idx].end;
11341
11342           if (!have_multiple_function_sections)
11343             gcc_unreachable ();
11344           if (HAVE_AS_LEB128)
11345             {
11346               dw2_asm_output_data (1, DW_RLE_start_length,
11347                                    "DW_RLE_start_length (%s)", lab);
11348               dw2_asm_output_addr (DWARF2_ADDR_SIZE, blabel,
11349                                    "Range begin address (%s)", lab);
11350               dw2_asm_output_delta_uleb128 (elabel, blabel,
11351                                             "Range length (%s)", lab);
11352             }
11353           else
11354             {
11355               dw2_asm_output_data (1, DW_RLE_start_end,
11356                                    "DW_RLE_start_end (%s)", lab);
11357               dw2_asm_output_addr (DWARF2_ADDR_SIZE, blabel,
11358                                    "Range begin address (%s)", lab);
11359               dw2_asm_output_addr (DWARF2_ADDR_SIZE, elabel,
11360                                    "Range end address (%s)", lab);
11361             }
11362         }
11363       else
11364         dw2_asm_output_data (1, DW_RLE_end_of_list,
11365                              "DW_RLE_end_of_list (%s)", lab);
11366     }
11367   ASM_OUTPUT_LABEL (asm_out_file, l2);
11368 }
11369
11370 /* Data structure containing information about input files.  */
11371 struct file_info
11372 {
11373   const char *path;     /* Complete file name.  */
11374   const char *fname;    /* File name part.  */
11375   int length;           /* Length of entire string.  */
11376   struct dwarf_file_data * file_idx;    /* Index in input file table.  */
11377   int dir_idx;          /* Index in directory table.  */
11378 };
11379
11380 /* Data structure containing information about directories with source
11381    files.  */
11382 struct dir_info
11383 {
11384   const char *path;     /* Path including directory name.  */
11385   int length;           /* Path length.  */
11386   int prefix;           /* Index of directory entry which is a prefix.  */
11387   int count;            /* Number of files in this directory.  */
11388   int dir_idx;          /* Index of directory used as base.  */
11389 };
11390
11391 /* Callback function for file_info comparison.  We sort by looking at
11392    the directories in the path.  */
11393
11394 static int
11395 file_info_cmp (const void *p1, const void *p2)
11396 {
11397   const struct file_info *const s1 = (const struct file_info *) p1;
11398   const struct file_info *const s2 = (const struct file_info *) p2;
11399   const unsigned char *cp1;
11400   const unsigned char *cp2;
11401
11402   /* Take care of file names without directories.  We need to make sure that
11403      we return consistent values to qsort since some will get confused if
11404      we return the same value when identical operands are passed in opposite
11405      orders.  So if neither has a directory, return 0 and otherwise return
11406      1 or -1 depending on which one has the directory.  */
11407   if ((s1->path == s1->fname || s2->path == s2->fname))
11408     return (s2->path == s2->fname) - (s1->path == s1->fname);
11409
11410   cp1 = (const unsigned char *) s1->path;
11411   cp2 = (const unsigned char *) s2->path;
11412
11413   while (1)
11414     {
11415       ++cp1;
11416       ++cp2;
11417       /* Reached the end of the first path?  If so, handle like above.  */
11418       if ((cp1 == (const unsigned char *) s1->fname)
11419           || (cp2 == (const unsigned char *) s2->fname))
11420         return ((cp2 == (const unsigned char *) s2->fname)
11421                 - (cp1 == (const unsigned char *) s1->fname));
11422
11423       /* Character of current path component the same?  */
11424       else if (*cp1 != *cp2)
11425         return *cp1 - *cp2;
11426     }
11427 }
11428
11429 struct file_name_acquire_data
11430 {
11431   struct file_info *files;
11432   int used_files;
11433   int max_files;
11434 };
11435
11436 /* Traversal function for the hash table.  */
11437
11438 int
11439 file_name_acquire (dwarf_file_data **slot, file_name_acquire_data *fnad)
11440 {
11441   struct dwarf_file_data *d = *slot;
11442   struct file_info *fi;
11443   const char *f;
11444
11445   gcc_assert (fnad->max_files >= d->emitted_number);
11446
11447   if (! d->emitted_number)
11448     return 1;
11449
11450   gcc_assert (fnad->max_files != fnad->used_files);
11451
11452   fi = fnad->files + fnad->used_files++;
11453
11454   /* Skip all leading "./".  */
11455   f = d->filename;
11456   while (f[0] == '.' && IS_DIR_SEPARATOR (f[1]))
11457     f += 2;
11458
11459   /* Create a new array entry.  */
11460   fi->path = f;
11461   fi->length = strlen (f);
11462   fi->file_idx = d;
11463
11464   /* Search for the file name part.  */
11465   f = strrchr (f, DIR_SEPARATOR);
11466 #if defined (DIR_SEPARATOR_2)
11467   {
11468     char *g = strrchr (fi->path, DIR_SEPARATOR_2);
11469
11470     if (g != NULL)
11471       {
11472         if (f == NULL || f < g)
11473           f = g;
11474       }
11475   }
11476 #endif
11477
11478   fi->fname = f == NULL ? fi->path : f + 1;
11479   return 1;
11480 }
11481
11482 /* Helper function for output_file_names.  Emit a FORM encoded
11483    string STR, with assembly comment start ENTRY_KIND and
11484    index IDX */
11485
11486 static void
11487 output_line_string (enum dwarf_form form, const char *str,
11488                     const char *entry_kind, unsigned int idx)
11489 {
11490   switch (form)
11491     {
11492     case DW_FORM_string:
11493       dw2_asm_output_nstring (str, -1, "%s: %#x", entry_kind, idx);
11494       break;
11495     case DW_FORM_line_strp:
11496       if (!debug_line_str_hash)
11497         debug_line_str_hash
11498           = hash_table<indirect_string_hasher>::create_ggc (10);
11499
11500       struct indirect_string_node *node;
11501       node = find_AT_string_in_table (str, debug_line_str_hash);
11502       set_indirect_string (node);
11503       node->form = form;
11504       dw2_asm_output_offset (DWARF_OFFSET_SIZE, node->label,
11505                              debug_line_str_section, "%s: %#x: \"%s\"",
11506                              entry_kind, 0, node->str);
11507       break;
11508     default:
11509       gcc_unreachable ();
11510     }
11511 }
11512
11513 /* Output the directory table and the file name table.  We try to minimize
11514    the total amount of memory needed.  A heuristic is used to avoid large
11515    slowdowns with many input files.  */
11516
11517 static void
11518 output_file_names (void)
11519 {
11520   struct file_name_acquire_data fnad;
11521   int numfiles;
11522   struct file_info *files;
11523   struct dir_info *dirs;
11524   int *saved;
11525   int *savehere;
11526   int *backmap;
11527   int ndirs;
11528   int idx_offset;
11529   int i;
11530
11531   if (!last_emitted_file)
11532     {
11533       if (dwarf_version >= 5)
11534         {
11535           dw2_asm_output_data (1, 0, "Directory entry format count");
11536           dw2_asm_output_data_uleb128 (0, "Directories count");
11537           dw2_asm_output_data (1, 0, "File name entry format count");
11538           dw2_asm_output_data_uleb128 (0, "File names count");
11539         }
11540       else
11541         {
11542           dw2_asm_output_data (1, 0, "End directory table");
11543           dw2_asm_output_data (1, 0, "End file name table");
11544         }
11545       return;
11546     }
11547
11548   numfiles = last_emitted_file->emitted_number;
11549
11550   /* Allocate the various arrays we need.  */
11551   files = XALLOCAVEC (struct file_info, numfiles);
11552   dirs = XALLOCAVEC (struct dir_info, numfiles);
11553
11554   fnad.files = files;
11555   fnad.used_files = 0;
11556   fnad.max_files = numfiles;
11557   file_table->traverse<file_name_acquire_data *, file_name_acquire> (&fnad);
11558   gcc_assert (fnad.used_files == fnad.max_files);
11559
11560   qsort (files, numfiles, sizeof (files[0]), file_info_cmp);
11561
11562   /* Find all the different directories used.  */
11563   dirs[0].path = files[0].path;
11564   dirs[0].length = files[0].fname - files[0].path;
11565   dirs[0].prefix = -1;
11566   dirs[0].count = 1;
11567   dirs[0].dir_idx = 0;
11568   files[0].dir_idx = 0;
11569   ndirs = 1;
11570
11571   for (i = 1; i < numfiles; i++)
11572     if (files[i].fname - files[i].path == dirs[ndirs - 1].length
11573         && memcmp (dirs[ndirs - 1].path, files[i].path,
11574                    dirs[ndirs - 1].length) == 0)
11575       {
11576         /* Same directory as last entry.  */
11577         files[i].dir_idx = ndirs - 1;
11578         ++dirs[ndirs - 1].count;
11579       }
11580     else
11581       {
11582         int j;
11583
11584         /* This is a new directory.  */
11585         dirs[ndirs].path = files[i].path;
11586         dirs[ndirs].length = files[i].fname - files[i].path;
11587         dirs[ndirs].count = 1;
11588         dirs[ndirs].dir_idx = ndirs;
11589         files[i].dir_idx = ndirs;
11590
11591         /* Search for a prefix.  */
11592         dirs[ndirs].prefix = -1;
11593         for (j = 0; j < ndirs; j++)
11594           if (dirs[j].length < dirs[ndirs].length
11595               && dirs[j].length > 1
11596               && (dirs[ndirs].prefix == -1
11597                   || dirs[j].length > dirs[dirs[ndirs].prefix].length)
11598               && memcmp (dirs[j].path, dirs[ndirs].path, dirs[j].length) == 0)
11599             dirs[ndirs].prefix = j;
11600
11601         ++ndirs;
11602       }
11603
11604   /* Now to the actual work.  We have to find a subset of the directories which
11605      allow expressing the file name using references to the directory table
11606      with the least amount of characters.  We do not do an exhaustive search
11607      where we would have to check out every combination of every single
11608      possible prefix.  Instead we use a heuristic which provides nearly optimal
11609      results in most cases and never is much off.  */
11610   saved = XALLOCAVEC (int, ndirs);
11611   savehere = XALLOCAVEC (int, ndirs);
11612
11613   memset (saved, '\0', ndirs * sizeof (saved[0]));
11614   for (i = 0; i < ndirs; i++)
11615     {
11616       int j;
11617       int total;
11618
11619       /* We can always save some space for the current directory.  But this
11620          does not mean it will be enough to justify adding the directory.  */
11621       savehere[i] = dirs[i].length;
11622       total = (savehere[i] - saved[i]) * dirs[i].count;
11623
11624       for (j = i + 1; j < ndirs; j++)
11625         {
11626           savehere[j] = 0;
11627           if (saved[j] < dirs[i].length)
11628             {
11629               /* Determine whether the dirs[i] path is a prefix of the
11630                  dirs[j] path.  */
11631               int k;
11632
11633               k = dirs[j].prefix;
11634               while (k != -1 && k != (int) i)
11635                 k = dirs[k].prefix;
11636
11637               if (k == (int) i)
11638                 {
11639                   /* Yes it is.  We can possibly save some memory by
11640                      writing the filenames in dirs[j] relative to
11641                      dirs[i].  */
11642                   savehere[j] = dirs[i].length;
11643                   total += (savehere[j] - saved[j]) * dirs[j].count;
11644                 }
11645             }
11646         }
11647
11648       /* Check whether we can save enough to justify adding the dirs[i]
11649          directory.  */
11650       if (total > dirs[i].length + 1)
11651         {
11652           /* It's worthwhile adding.  */
11653           for (j = i; j < ndirs; j++)
11654             if (savehere[j] > 0)
11655               {
11656                 /* Remember how much we saved for this directory so far.  */
11657                 saved[j] = savehere[j];
11658
11659                 /* Remember the prefix directory.  */
11660                 dirs[j].dir_idx = i;
11661               }
11662         }
11663     }
11664
11665   /* Emit the directory name table.  */
11666   idx_offset = dirs[0].length > 0 ? 1 : 0;
11667   enum dwarf_form str_form = DW_FORM_string;
11668   enum dwarf_form idx_form = DW_FORM_udata;
11669   if (dwarf_version >= 5)
11670     {
11671       const char *comp_dir = comp_dir_string ();
11672       if (comp_dir == NULL)
11673         comp_dir = "";
11674       dw2_asm_output_data (1, 1, "Directory entry format count");
11675       if (DWARF5_USE_DEBUG_LINE_STR)
11676         str_form = DW_FORM_line_strp;
11677       dw2_asm_output_data_uleb128 (DW_LNCT_path, "DW_LNCT_path");
11678       dw2_asm_output_data_uleb128 (str_form, "%s",
11679                                    get_DW_FORM_name (str_form));
11680       dw2_asm_output_data_uleb128 (ndirs + idx_offset, "Directories count");
11681       if (str_form == DW_FORM_string)
11682         {
11683           dw2_asm_output_nstring (comp_dir, -1, "Directory Entry: %#x", 0);
11684           for (i = 1 - idx_offset; i < ndirs; i++)
11685             dw2_asm_output_nstring (dirs[i].path,
11686                                     dirs[i].length
11687                                     - !DWARF2_DIR_SHOULD_END_WITH_SEPARATOR,
11688                                     "Directory Entry: %#x", i + idx_offset);
11689         }
11690       else
11691         {
11692           output_line_string (str_form, comp_dir, "Directory Entry", 0);
11693           for (i = 1 - idx_offset; i < ndirs; i++)
11694             {
11695               const char *str
11696                 = ggc_alloc_string (dirs[i].path,
11697                                     dirs[i].length
11698                                     - !DWARF2_DIR_SHOULD_END_WITH_SEPARATOR);
11699               output_line_string (str_form, str, "Directory Entry",
11700                                   (unsigned) i + idx_offset);
11701             }
11702         }
11703     }
11704   else
11705     {
11706       for (i = 1 - idx_offset; i < ndirs; i++)
11707         dw2_asm_output_nstring (dirs[i].path,
11708                                 dirs[i].length
11709                                 - !DWARF2_DIR_SHOULD_END_WITH_SEPARATOR,
11710                                 "Directory Entry: %#x", i + idx_offset);
11711
11712       dw2_asm_output_data (1, 0, "End directory table");
11713     }
11714
11715   /* We have to emit them in the order of emitted_number since that's
11716      used in the debug info generation.  To do this efficiently we
11717      generate a back-mapping of the indices first.  */
11718   backmap = XALLOCAVEC (int, numfiles);
11719   for (i = 0; i < numfiles; i++)
11720     backmap[files[i].file_idx->emitted_number - 1] = i;
11721
11722   if (dwarf_version >= 5)
11723     {
11724       const char *filename0 = get_AT_string (comp_unit_die (), DW_AT_name);
11725       if (filename0 == NULL)
11726         filename0 = "";
11727       /* DW_LNCT_directory_index can use DW_FORM_udata, DW_FORM_data1 and
11728          DW_FORM_data2.  Choose one based on the number of directories
11729          and how much space would they occupy in each encoding.
11730          If we have at most 256 directories, all indexes fit into
11731          a single byte, so DW_FORM_data1 is most compact (if there
11732          are at most 128 directories, DW_FORM_udata would be as
11733          compact as that, but not shorter and slower to decode).  */
11734       if (ndirs + idx_offset <= 256)
11735         idx_form = DW_FORM_data1;
11736       /* If there are more than 65536 directories, we have to use
11737          DW_FORM_udata, DW_FORM_data2 can't refer to them.
11738          Otherwise, compute what space would occupy if all the indexes
11739          used DW_FORM_udata - sum - and compare that to how large would
11740          be DW_FORM_data2 encoding, and pick the more efficient one.  */
11741       else if (ndirs + idx_offset <= 65536)
11742         {
11743           unsigned HOST_WIDE_INT sum = 1;
11744           for (i = 0; i < numfiles; i++)
11745             {
11746               int file_idx = backmap[i];
11747               int dir_idx = dirs[files[file_idx].dir_idx].dir_idx;
11748               sum += size_of_uleb128 (dir_idx);
11749             }
11750           if (sum >= HOST_WIDE_INT_UC (2) * (numfiles + 1))
11751             idx_form = DW_FORM_data2;
11752         }
11753 #ifdef VMS_DEBUGGING_INFO
11754       dw2_asm_output_data (1, 4, "File name entry format count");
11755 #else
11756       dw2_asm_output_data (1, 2, "File name entry format count");
11757 #endif
11758       dw2_asm_output_data_uleb128 (DW_LNCT_path, "DW_LNCT_path");
11759       dw2_asm_output_data_uleb128 (str_form, "%s",
11760                                    get_DW_FORM_name (str_form));
11761       dw2_asm_output_data_uleb128 (DW_LNCT_directory_index,
11762                                    "DW_LNCT_directory_index");
11763       dw2_asm_output_data_uleb128 (idx_form, "%s",
11764                                    get_DW_FORM_name (idx_form));
11765 #ifdef VMS_DEBUGGING_INFO
11766       dw2_asm_output_data_uleb128 (DW_LNCT_timestamp, "DW_LNCT_timestamp");
11767       dw2_asm_output_data_uleb128 (DW_FORM_udata, "DW_FORM_udata");
11768       dw2_asm_output_data_uleb128 (DW_LNCT_size, "DW_LNCT_size");
11769       dw2_asm_output_data_uleb128 (DW_FORM_udata, "DW_FORM_udata");
11770 #endif
11771       dw2_asm_output_data_uleb128 (numfiles + 1, "File names count");
11772
11773       output_line_string (str_form, filename0, "File Entry", 0);
11774
11775       /* Include directory index.  */
11776       if (idx_form != DW_FORM_udata)
11777         dw2_asm_output_data (idx_form == DW_FORM_data1 ? 1 : 2,
11778                              0, NULL);
11779       else
11780         dw2_asm_output_data_uleb128 (0, NULL);
11781
11782 #ifdef VMS_DEBUGGING_INFO
11783       dw2_asm_output_data_uleb128 (0, NULL);
11784       dw2_asm_output_data_uleb128 (0, NULL);
11785 #endif
11786     }
11787
11788   /* Now write all the file names.  */
11789   for (i = 0; i < numfiles; i++)
11790     {
11791       int file_idx = backmap[i];
11792       int dir_idx = dirs[files[file_idx].dir_idx].dir_idx;
11793
11794 #ifdef VMS_DEBUGGING_INFO
11795 #define MAX_VMS_VERSION_LEN 6 /* ";32768" */
11796
11797       /* Setting these fields can lead to debugger miscomparisons,
11798          but VMS Debug requires them to be set correctly.  */
11799
11800       int ver;
11801       long long cdt;
11802       long siz;
11803       int maxfilelen = (strlen (files[file_idx].path)
11804                         + dirs[dir_idx].length
11805                         + MAX_VMS_VERSION_LEN + 1);
11806       char *filebuf = XALLOCAVEC (char, maxfilelen);
11807
11808       vms_file_stats_name (files[file_idx].path, 0, 0, 0, &ver);
11809       snprintf (filebuf, maxfilelen, "%s;%d",
11810                 files[file_idx].path + dirs[dir_idx].length, ver);
11811
11812       output_line_string (str_form, filebuf, "File Entry", (unsigned) i + 1);
11813
11814       /* Include directory index.  */
11815       if (dwarf_version >= 5 && idx_form != DW_FORM_udata)
11816         dw2_asm_output_data (idx_form == DW_FORM_data1 ? 1 : 2,
11817                              dir_idx + idx_offset, NULL);
11818       else
11819         dw2_asm_output_data_uleb128 (dir_idx + idx_offset, NULL);
11820
11821       /* Modification time.  */
11822       dw2_asm_output_data_uleb128 ((vms_file_stats_name (files[file_idx].path,
11823                                                          &cdt, 0, 0, 0) == 0)
11824                                    ? cdt : 0, NULL);
11825
11826       /* File length in bytes.  */
11827       dw2_asm_output_data_uleb128 ((vms_file_stats_name (files[file_idx].path,
11828                                                          0, &siz, 0, 0) == 0)
11829                                    ? siz : 0, NULL);
11830 #else
11831       output_line_string (str_form,
11832                           files[file_idx].path + dirs[dir_idx].length,
11833                           "File Entry", (unsigned) i + 1);
11834
11835       /* Include directory index.  */
11836       if (dwarf_version >= 5 && idx_form != DW_FORM_udata)
11837         dw2_asm_output_data (idx_form == DW_FORM_data1 ? 1 : 2,
11838                              dir_idx + idx_offset, NULL);
11839       else
11840         dw2_asm_output_data_uleb128 (dir_idx + idx_offset, NULL);
11841
11842       if (dwarf_version >= 5)
11843         continue;
11844
11845       /* Modification time.  */
11846       dw2_asm_output_data_uleb128 (0, NULL);
11847
11848       /* File length in bytes.  */
11849       dw2_asm_output_data_uleb128 (0, NULL);
11850 #endif /* VMS_DEBUGGING_INFO */
11851     }
11852
11853   if (dwarf_version < 5)
11854     dw2_asm_output_data (1, 0, "End file name table");
11855 }
11856
11857
11858 /* Output one line number table into the .debug_line section.  */
11859
11860 static void
11861 output_one_line_info_table (dw_line_info_table *table)
11862 {
11863   char line_label[MAX_ARTIFICIAL_LABEL_BYTES];
11864   unsigned int current_line = 1;
11865   bool current_is_stmt = DWARF_LINE_DEFAULT_IS_STMT_START;
11866   dw_line_info_entry *ent;
11867   size_t i;
11868
11869   FOR_EACH_VEC_SAFE_ELT (table->entries, i, ent)
11870     {
11871       switch (ent->opcode)
11872         {
11873         case LI_set_address:
11874           /* ??? Unfortunately, we have little choice here currently, and
11875              must always use the most general form.  GCC does not know the
11876              address delta itself, so we can't use DW_LNS_advance_pc.  Many
11877              ports do have length attributes which will give an upper bound
11878              on the address range.  We could perhaps use length attributes
11879              to determine when it is safe to use DW_LNS_fixed_advance_pc.  */
11880           ASM_GENERATE_INTERNAL_LABEL (line_label, LINE_CODE_LABEL, ent->val);
11881
11882           /* This can handle any delta.  This takes
11883              4+DWARF2_ADDR_SIZE bytes.  */
11884           dw2_asm_output_data (1, 0, "set address %s", line_label);
11885           dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
11886           dw2_asm_output_data (1, DW_LNE_set_address, NULL);
11887           dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
11888           break;
11889
11890         case LI_set_line:
11891           if (ent->val == current_line)
11892             {
11893               /* We still need to start a new row, so output a copy insn.  */
11894               dw2_asm_output_data (1, DW_LNS_copy,
11895                                    "copy line %u", current_line);
11896             }
11897           else
11898             {
11899               int line_offset = ent->val - current_line;
11900               int line_delta = line_offset - DWARF_LINE_BASE;
11901
11902               current_line = ent->val;
11903               if (line_delta >= 0 && line_delta < (DWARF_LINE_RANGE - 1))
11904                 {
11905                   /* This can handle deltas from -10 to 234, using the current
11906                      definitions of DWARF_LINE_BASE and DWARF_LINE_RANGE.
11907                      This takes 1 byte.  */
11908                   dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE + line_delta,
11909                                        "line %u", current_line);
11910                 }
11911               else
11912                 {
11913                   /* This can handle any delta.  This takes at least 4 bytes,
11914                      depending on the value being encoded.  */
11915                   dw2_asm_output_data (1, DW_LNS_advance_line,
11916                                        "advance to line %u", current_line);
11917                   dw2_asm_output_data_sleb128 (line_offset, NULL);
11918                   dw2_asm_output_data (1, DW_LNS_copy, NULL);
11919                 }
11920             }
11921           break;
11922
11923         case LI_set_file:
11924           dw2_asm_output_data (1, DW_LNS_set_file, "set file %u", ent->val);
11925           dw2_asm_output_data_uleb128 (ent->val, "%u", ent->val);
11926           break;
11927
11928         case LI_set_column:
11929           dw2_asm_output_data (1, DW_LNS_set_column, "column %u", ent->val);
11930           dw2_asm_output_data_uleb128 (ent->val, "%u", ent->val);
11931           break;
11932
11933         case LI_negate_stmt:
11934           current_is_stmt = !current_is_stmt;
11935           dw2_asm_output_data (1, DW_LNS_negate_stmt,
11936                                "is_stmt %d", current_is_stmt);
11937           break;
11938
11939         case LI_set_prologue_end:
11940           dw2_asm_output_data (1, DW_LNS_set_prologue_end,
11941                                "set prologue end");
11942           break;
11943           
11944         case LI_set_epilogue_begin:
11945           dw2_asm_output_data (1, DW_LNS_set_epilogue_begin,
11946                                "set epilogue begin");
11947           break;
11948
11949         case LI_set_discriminator:
11950           dw2_asm_output_data (1, 0, "discriminator %u", ent->val);
11951           dw2_asm_output_data_uleb128 (1 + size_of_uleb128 (ent->val), NULL);
11952           dw2_asm_output_data (1, DW_LNE_set_discriminator, NULL);
11953           dw2_asm_output_data_uleb128 (ent->val, NULL);
11954           break;
11955         }
11956     }
11957
11958   /* Emit debug info for the address of the end of the table.  */
11959   dw2_asm_output_data (1, 0, "set address %s", table->end_label);
11960   dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
11961   dw2_asm_output_data (1, DW_LNE_set_address, NULL);
11962   dw2_asm_output_addr (DWARF2_ADDR_SIZE, table->end_label, NULL);
11963
11964   dw2_asm_output_data (1, 0, "end sequence");
11965   dw2_asm_output_data_uleb128 (1, NULL);
11966   dw2_asm_output_data (1, DW_LNE_end_sequence, NULL);
11967 }
11968
11969 /* Output the source line number correspondence information.  This
11970    information goes into the .debug_line section.  */
11971
11972 static void
11973 output_line_info (bool prologue_only)
11974 {
11975   static unsigned int generation;
11976   char l1[MAX_ARTIFICIAL_LABEL_BYTES], l2[MAX_ARTIFICIAL_LABEL_BYTES];
11977   char p1[MAX_ARTIFICIAL_LABEL_BYTES], p2[MAX_ARTIFICIAL_LABEL_BYTES];
11978   bool saw_one = false;
11979   int opc;
11980
11981   ASM_GENERATE_INTERNAL_LABEL (l1, LINE_NUMBER_BEGIN_LABEL, generation);
11982   ASM_GENERATE_INTERNAL_LABEL (l2, LINE_NUMBER_END_LABEL, generation);
11983   ASM_GENERATE_INTERNAL_LABEL (p1, LN_PROLOG_AS_LABEL, generation);
11984   ASM_GENERATE_INTERNAL_LABEL (p2, LN_PROLOG_END_LABEL, generation++);
11985
11986   if (!XCOFF_DEBUGGING_INFO)
11987     {
11988       if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
11989         dw2_asm_output_data (4, 0xffffffff,
11990           "Initial length escape value indicating 64-bit DWARF extension");
11991       dw2_asm_output_delta (DWARF_OFFSET_SIZE, l2, l1,
11992                             "Length of Source Line Info");
11993     }
11994
11995   ASM_OUTPUT_LABEL (asm_out_file, l1);
11996
11997   dw2_asm_output_data (2, dwarf_version, "DWARF Version");
11998   if (dwarf_version >= 5)
11999     {
12000       dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Address Size");
12001       dw2_asm_output_data (1, 0, "Segment Size");
12002     }
12003   dw2_asm_output_delta (DWARF_OFFSET_SIZE, p2, p1, "Prolog Length");
12004   ASM_OUTPUT_LABEL (asm_out_file, p1);
12005
12006   /* Define the architecture-dependent minimum instruction length (in bytes).
12007      In this implementation of DWARF, this field is used for information
12008      purposes only.  Since GCC generates assembly language, we have no
12009      a priori knowledge of how many instruction bytes are generated for each
12010      source line, and therefore can use only the DW_LNE_set_address and
12011      DW_LNS_fixed_advance_pc line information commands.  Accordingly, we fix
12012      this as '1', which is "correct enough" for all architectures,
12013      and don't let the target override.  */
12014   dw2_asm_output_data (1, 1, "Minimum Instruction Length");
12015
12016   if (dwarf_version >= 4)
12017     dw2_asm_output_data (1, DWARF_LINE_DEFAULT_MAX_OPS_PER_INSN,
12018                          "Maximum Operations Per Instruction");
12019   dw2_asm_output_data (1, DWARF_LINE_DEFAULT_IS_STMT_START,
12020                        "Default is_stmt_start flag");
12021   dw2_asm_output_data (1, DWARF_LINE_BASE,
12022                        "Line Base Value (Special Opcodes)");
12023   dw2_asm_output_data (1, DWARF_LINE_RANGE,
12024                        "Line Range Value (Special Opcodes)");
12025   dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE,
12026                        "Special Opcode Base");
12027
12028   for (opc = 1; opc < DWARF_LINE_OPCODE_BASE; opc++)
12029     {
12030       int n_op_args;
12031       switch (opc)
12032         {
12033         case DW_LNS_advance_pc:
12034         case DW_LNS_advance_line:
12035         case DW_LNS_set_file:
12036         case DW_LNS_set_column:
12037         case DW_LNS_fixed_advance_pc:
12038         case DW_LNS_set_isa:
12039           n_op_args = 1;
12040           break;
12041         default:
12042           n_op_args = 0;
12043           break;
12044         }
12045
12046       dw2_asm_output_data (1, n_op_args, "opcode: %#x has %d args",
12047                            opc, n_op_args);
12048     }
12049
12050   /* Write out the information about the files we use.  */
12051   output_file_names ();
12052   ASM_OUTPUT_LABEL (asm_out_file, p2);
12053   if (prologue_only)
12054     {
12055       /* Output the marker for the end of the line number info.  */
12056       ASM_OUTPUT_LABEL (asm_out_file, l2);
12057       return;
12058     }
12059
12060   if (separate_line_info)
12061     {
12062       dw_line_info_table *table;
12063       size_t i;
12064
12065       FOR_EACH_VEC_ELT (*separate_line_info, i, table)
12066         if (table->in_use)
12067           {
12068             output_one_line_info_table (table);
12069             saw_one = true;
12070           }
12071     }
12072   if (cold_text_section_line_info && cold_text_section_line_info->in_use)
12073     {
12074       output_one_line_info_table (cold_text_section_line_info);
12075       saw_one = true;
12076     }
12077
12078   /* ??? Some Darwin linkers crash on a .debug_line section with no
12079      sequences.  Further, merely a DW_LNE_end_sequence entry is not
12080      sufficient -- the address column must also be initialized.
12081      Make sure to output at least one set_address/end_sequence pair,
12082      choosing .text since that section is always present.  */
12083   if (text_section_line_info->in_use || !saw_one)
12084     output_one_line_info_table (text_section_line_info);
12085
12086   /* Output the marker for the end of the line number info.  */
12087   ASM_OUTPUT_LABEL (asm_out_file, l2);
12088 }
12089 \f
12090 /* Return true if DW_AT_endianity should be emitted according to REVERSE.  */
12091
12092 static inline bool
12093 need_endianity_attribute_p (bool reverse)
12094 {
12095   return reverse && (dwarf_version >= 3 || !dwarf_strict);
12096 }
12097
12098 /* Given a pointer to a tree node for some base type, return a pointer to
12099    a DIE that describes the given type.  REVERSE is true if the type is
12100    to be interpreted in the reverse storage order wrt the target order.
12101
12102    This routine must only be called for GCC type nodes that correspond to
12103    Dwarf base (fundamental) types.  */
12104
12105 static dw_die_ref
12106 base_type_die (tree type, bool reverse)
12107 {
12108   dw_die_ref base_type_result;
12109   enum dwarf_type encoding;
12110   bool fpt_used = false;
12111   struct fixed_point_type_info fpt_info;
12112   tree type_bias = NULL_TREE;
12113
12114   /* If this is a subtype that should not be emitted as a subrange type,
12115      use the base type.  See subrange_type_for_debug_p.  */
12116   if (TREE_CODE (type) == INTEGER_TYPE && TREE_TYPE (type) != NULL_TREE)
12117     type = TREE_TYPE (type);
12118
12119   switch (TREE_CODE (type))
12120     {
12121     case INTEGER_TYPE:
12122       if ((dwarf_version >= 4 || !dwarf_strict)
12123           && TYPE_NAME (type)
12124           && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
12125           && DECL_IS_BUILTIN (TYPE_NAME (type))
12126           && DECL_NAME (TYPE_NAME (type)))
12127         {
12128           const char *name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type)));
12129           if (strcmp (name, "char16_t") == 0
12130               || strcmp (name, "char32_t") == 0)
12131             {
12132               encoding = DW_ATE_UTF;
12133               break;
12134             }
12135         }
12136       if ((dwarf_version >= 3 || !dwarf_strict)
12137           && lang_hooks.types.get_fixed_point_type_info)
12138         {
12139           memset (&fpt_info, 0, sizeof (fpt_info));
12140           if (lang_hooks.types.get_fixed_point_type_info (type, &fpt_info))
12141             {
12142               fpt_used = true;
12143               encoding = ((TYPE_UNSIGNED (type))
12144                           ? DW_ATE_unsigned_fixed
12145                           : DW_ATE_signed_fixed);
12146               break;
12147             }
12148         }
12149       if (TYPE_STRING_FLAG (type))
12150         {
12151           if (TYPE_UNSIGNED (type))
12152             encoding = DW_ATE_unsigned_char;
12153           else
12154             encoding = DW_ATE_signed_char;
12155         }
12156       else if (TYPE_UNSIGNED (type))
12157         encoding = DW_ATE_unsigned;
12158       else
12159         encoding = DW_ATE_signed;
12160
12161       if (!dwarf_strict
12162           && lang_hooks.types.get_type_bias)
12163         type_bias = lang_hooks.types.get_type_bias (type);
12164       break;
12165
12166     case REAL_TYPE:
12167       if (DECIMAL_FLOAT_MODE_P (TYPE_MODE (type)))
12168         {
12169           if (dwarf_version >= 3 || !dwarf_strict)
12170             encoding = DW_ATE_decimal_float;
12171           else
12172             encoding = DW_ATE_lo_user;
12173         }
12174       else
12175         encoding = DW_ATE_float;
12176       break;
12177
12178     case FIXED_POINT_TYPE:
12179       if (!(dwarf_version >= 3 || !dwarf_strict))
12180         encoding = DW_ATE_lo_user;
12181       else if (TYPE_UNSIGNED (type))
12182         encoding = DW_ATE_unsigned_fixed;
12183       else
12184         encoding = DW_ATE_signed_fixed;
12185       break;
12186
12187       /* Dwarf2 doesn't know anything about complex ints, so use
12188          a user defined type for it.  */
12189     case COMPLEX_TYPE:
12190       if (TREE_CODE (TREE_TYPE (type)) == REAL_TYPE)
12191         encoding = DW_ATE_complex_float;
12192       else
12193         encoding = DW_ATE_lo_user;
12194       break;
12195
12196     case BOOLEAN_TYPE:
12197       /* GNU FORTRAN/Ada/C++ BOOLEAN type.  */
12198       encoding = DW_ATE_boolean;
12199       break;
12200
12201     default:
12202       /* No other TREE_CODEs are Dwarf fundamental types.  */
12203       gcc_unreachable ();
12204     }
12205
12206   base_type_result = new_die_raw (DW_TAG_base_type);
12207
12208   add_AT_unsigned (base_type_result, DW_AT_byte_size,
12209                    int_size_in_bytes (type));
12210   add_AT_unsigned (base_type_result, DW_AT_encoding, encoding);
12211
12212   if (need_endianity_attribute_p (reverse))
12213     add_AT_unsigned (base_type_result, DW_AT_endianity,
12214                      BYTES_BIG_ENDIAN ? DW_END_little : DW_END_big);
12215
12216   add_alignment_attribute (base_type_result, type);
12217
12218   if (fpt_used)
12219     {
12220       switch (fpt_info.scale_factor_kind)
12221         {
12222         case fixed_point_scale_factor_binary:
12223           add_AT_int (base_type_result, DW_AT_binary_scale,
12224                       fpt_info.scale_factor.binary);
12225           break;
12226
12227         case fixed_point_scale_factor_decimal:
12228           add_AT_int (base_type_result, DW_AT_decimal_scale,
12229                       fpt_info.scale_factor.decimal);
12230           break;
12231
12232         case fixed_point_scale_factor_arbitrary:
12233           /* Arbitrary scale factors cannot be described in standard DWARF,
12234              yet.  */
12235           if (!dwarf_strict)
12236             {
12237               /* Describe the scale factor as a rational constant.  */
12238               const dw_die_ref scale_factor
12239                 = new_die (DW_TAG_constant, comp_unit_die (), type);
12240
12241               add_AT_unsigned (scale_factor, DW_AT_GNU_numerator,
12242                                fpt_info.scale_factor.arbitrary.numerator);
12243               add_AT_int (scale_factor, DW_AT_GNU_denominator,
12244                           fpt_info.scale_factor.arbitrary.denominator);
12245
12246               add_AT_die_ref (base_type_result, DW_AT_small, scale_factor);
12247             }
12248           break;
12249
12250         default:
12251           gcc_unreachable ();
12252         }
12253     }
12254
12255   if (type_bias)
12256     add_scalar_info (base_type_result, DW_AT_GNU_bias, type_bias,
12257                      dw_scalar_form_constant
12258                      | dw_scalar_form_exprloc
12259                      | dw_scalar_form_reference,
12260                      NULL);
12261
12262   return base_type_result;
12263 }
12264
12265 /* A C++ function with deduced return type can have a TEMPLATE_TYPE_PARM
12266    named 'auto' in its type: return true for it, false otherwise.  */
12267
12268 static inline bool
12269 is_cxx_auto (tree type)
12270 {
12271   if (is_cxx ())
12272     {
12273       tree name = TYPE_IDENTIFIER (type);
12274       if (name == get_identifier ("auto")
12275           || name == get_identifier ("decltype(auto)"))
12276         return true;
12277     }
12278   return false;
12279 }
12280
12281 /* Given a pointer to an arbitrary ..._TYPE tree node, return nonzero if the
12282    given input type is a Dwarf "fundamental" type.  Otherwise return null.  */
12283
12284 static inline int
12285 is_base_type (tree type)
12286 {
12287   switch (TREE_CODE (type))
12288     {
12289     case INTEGER_TYPE:
12290     case REAL_TYPE:
12291     case FIXED_POINT_TYPE:
12292     case COMPLEX_TYPE:
12293     case BOOLEAN_TYPE:
12294     case POINTER_BOUNDS_TYPE:
12295       return 1;
12296
12297     case VOID_TYPE:
12298     case ARRAY_TYPE:
12299     case RECORD_TYPE:
12300     case UNION_TYPE:
12301     case QUAL_UNION_TYPE:
12302     case ENUMERAL_TYPE:
12303     case FUNCTION_TYPE:
12304     case METHOD_TYPE:
12305     case POINTER_TYPE:
12306     case REFERENCE_TYPE:
12307     case NULLPTR_TYPE:
12308     case OFFSET_TYPE:
12309     case LANG_TYPE:
12310     case VECTOR_TYPE:
12311       return 0;
12312
12313     default:
12314       if (is_cxx_auto (type))
12315         return 0;
12316       gcc_unreachable ();
12317     }
12318
12319   return 0;
12320 }
12321
12322 /* Given a pointer to a tree node, assumed to be some kind of a ..._TYPE
12323    node, return the size in bits for the type if it is a constant, or else
12324    return the alignment for the type if the type's size is not constant, or
12325    else return BITS_PER_WORD if the type actually turns out to be an
12326    ERROR_MARK node.  */
12327
12328 static inline unsigned HOST_WIDE_INT
12329 simple_type_size_in_bits (const_tree type)
12330 {
12331   if (TREE_CODE (type) == ERROR_MARK)
12332     return BITS_PER_WORD;
12333   else if (TYPE_SIZE (type) == NULL_TREE)
12334     return 0;
12335   else if (tree_fits_uhwi_p (TYPE_SIZE (type)))
12336     return tree_to_uhwi (TYPE_SIZE (type));
12337   else
12338     return TYPE_ALIGN (type);
12339 }
12340
12341 /* Similarly, but return an offset_int instead of UHWI.  */
12342
12343 static inline offset_int
12344 offset_int_type_size_in_bits (const_tree type)
12345 {
12346   if (TREE_CODE (type) == ERROR_MARK)
12347     return BITS_PER_WORD;
12348   else if (TYPE_SIZE (type) == NULL_TREE)
12349     return 0;
12350   else if (TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST)
12351     return wi::to_offset (TYPE_SIZE (type));
12352   else
12353     return TYPE_ALIGN (type);
12354 }
12355
12356 /*  Given a pointer to a tree node for a subrange type, return a pointer
12357     to a DIE that describes the given type.  */
12358
12359 static dw_die_ref
12360 subrange_type_die (tree type, tree low, tree high, tree bias,
12361                    dw_die_ref context_die)
12362 {
12363   dw_die_ref subrange_die;
12364   const HOST_WIDE_INT size_in_bytes = int_size_in_bytes (type);
12365
12366   if (context_die == NULL)
12367     context_die = comp_unit_die ();
12368
12369   subrange_die = new_die (DW_TAG_subrange_type, context_die, type);
12370
12371   if (int_size_in_bytes (TREE_TYPE (type)) != size_in_bytes)
12372     {
12373       /* The size of the subrange type and its base type do not match,
12374          so we need to generate a size attribute for the subrange type.  */
12375       add_AT_unsigned (subrange_die, DW_AT_byte_size, size_in_bytes);
12376     }
12377
12378   add_alignment_attribute (subrange_die, type);
12379
12380   if (low)
12381     add_bound_info (subrange_die, DW_AT_lower_bound, low, NULL);
12382   if (high)
12383     add_bound_info (subrange_die, DW_AT_upper_bound, high, NULL);
12384   if (bias && !dwarf_strict)
12385     add_scalar_info (subrange_die, DW_AT_GNU_bias, bias,
12386                      dw_scalar_form_constant
12387                      | dw_scalar_form_exprloc
12388                      | dw_scalar_form_reference,
12389                      NULL);
12390
12391   return subrange_die;
12392 }
12393
12394 /* Returns the (const and/or volatile) cv_qualifiers associated with
12395    the decl node.  This will normally be augmented with the
12396    cv_qualifiers of the underlying type in add_type_attribute.  */
12397
12398 static int
12399 decl_quals (const_tree decl)
12400 {
12401   return ((TREE_READONLY (decl)
12402            /* The C++ front-end correctly marks reference-typed
12403               variables as readonly, but from a language (and debug
12404               info) standpoint they are not const-qualified.  */
12405            && TREE_CODE (TREE_TYPE (decl)) != REFERENCE_TYPE
12406            ? TYPE_QUAL_CONST : TYPE_UNQUALIFIED)
12407           | (TREE_THIS_VOLATILE (decl)
12408              ? TYPE_QUAL_VOLATILE : TYPE_UNQUALIFIED));
12409 }
12410
12411 /* Determine the TYPE whose qualifiers match the largest strict subset
12412    of the given TYPE_QUALS, and return its qualifiers.  Ignore all
12413    qualifiers outside QUAL_MASK.  */
12414
12415 static int
12416 get_nearest_type_subqualifiers (tree type, int type_quals, int qual_mask)
12417 {
12418   tree t;
12419   int best_rank = 0, best_qual = 0, max_rank;
12420
12421   type_quals &= qual_mask;
12422   max_rank = popcount_hwi (type_quals) - 1;
12423
12424   for (t = TYPE_MAIN_VARIANT (type); t && best_rank < max_rank;
12425        t = TYPE_NEXT_VARIANT (t))
12426     {
12427       int q = TYPE_QUALS (t) & qual_mask;
12428
12429       if ((q & type_quals) == q && q != type_quals
12430           && check_base_type (t, type))
12431         {
12432           int rank = popcount_hwi (q);
12433
12434           if (rank > best_rank)
12435             {
12436               best_rank = rank;
12437               best_qual = q;
12438             }
12439         }
12440     }
12441
12442   return best_qual;
12443 }
12444
12445 struct dwarf_qual_info_t { int q; enum dwarf_tag t; };
12446 static const dwarf_qual_info_t dwarf_qual_info[] =
12447 {
12448   { TYPE_QUAL_CONST, DW_TAG_const_type },
12449   { TYPE_QUAL_VOLATILE, DW_TAG_volatile_type },
12450   { TYPE_QUAL_RESTRICT, DW_TAG_restrict_type },
12451   { TYPE_QUAL_ATOMIC, DW_TAG_atomic_type }
12452 };
12453 static const unsigned int dwarf_qual_info_size
12454   = sizeof (dwarf_qual_info) / sizeof (dwarf_qual_info[0]);
12455
12456 /* If DIE is a qualified DIE of some base DIE with the same parent,
12457    return the base DIE, otherwise return NULL.  Set MASK to the
12458    qualifiers added compared to the returned DIE.  */
12459
12460 static dw_die_ref
12461 qualified_die_p (dw_die_ref die, int *mask, unsigned int depth)
12462 {
12463   unsigned int i;
12464   for (i = 0; i < dwarf_qual_info_size; i++)
12465     if (die->die_tag == dwarf_qual_info[i].t)
12466       break;
12467   if (i == dwarf_qual_info_size)
12468     return NULL;
12469   if (vec_safe_length (die->die_attr) != 1)
12470     return NULL;
12471   dw_die_ref type = get_AT_ref (die, DW_AT_type);
12472   if (type == NULL || type->die_parent != die->die_parent)
12473     return NULL;
12474   *mask |= dwarf_qual_info[i].q;
12475   if (depth)
12476     {
12477       dw_die_ref ret = qualified_die_p (type, mask, depth - 1);
12478       if (ret)
12479         return ret;
12480     }
12481   return type;
12482 }
12483
12484 /* Given a pointer to an arbitrary ..._TYPE tree node, return a debugging
12485    entry that chains the modifiers specified by CV_QUALS in front of the
12486    given type.  REVERSE is true if the type is to be interpreted in the
12487    reverse storage order wrt the target order.  */
12488
12489 static dw_die_ref
12490 modified_type_die (tree type, int cv_quals, bool reverse,
12491                    dw_die_ref context_die)
12492 {
12493   enum tree_code code = TREE_CODE (type);
12494   dw_die_ref mod_type_die;
12495   dw_die_ref sub_die = NULL;
12496   tree item_type = NULL;
12497   tree qualified_type;
12498   tree name, low, high;
12499   dw_die_ref mod_scope;
12500   /* Only these cv-qualifiers are currently handled.  */
12501   const int cv_qual_mask = (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE
12502                             | TYPE_QUAL_RESTRICT | TYPE_QUAL_ATOMIC | 
12503                             ENCODE_QUAL_ADDR_SPACE(~0U));
12504   const bool reverse_base_type
12505     = need_endianity_attribute_p (reverse) && is_base_type (type);
12506
12507   if (code == ERROR_MARK)
12508     return NULL;
12509
12510   if (lang_hooks.types.get_debug_type)
12511     {
12512       tree debug_type = lang_hooks.types.get_debug_type (type);
12513
12514       if (debug_type != NULL_TREE && debug_type != type)
12515         return modified_type_die (debug_type, cv_quals, reverse, context_die);
12516     }
12517
12518   cv_quals &= cv_qual_mask;
12519
12520   /* Don't emit DW_TAG_restrict_type for DWARFv2, since it is a type
12521      tag modifier (and not an attribute) old consumers won't be able
12522      to handle it.  */
12523   if (dwarf_version < 3)
12524     cv_quals &= ~TYPE_QUAL_RESTRICT;
12525
12526   /* Likewise for DW_TAG_atomic_type for DWARFv5.  */
12527   if (dwarf_version < 5)
12528     cv_quals &= ~TYPE_QUAL_ATOMIC;
12529
12530   /* See if we already have the appropriately qualified variant of
12531      this type.  */
12532   qualified_type = get_qualified_type (type, cv_quals);
12533
12534   if (qualified_type == sizetype)
12535     {
12536       /* Try not to expose the internal sizetype type's name.  */
12537       if (TYPE_NAME (qualified_type)
12538           && TREE_CODE (TYPE_NAME (qualified_type)) == TYPE_DECL)
12539         {
12540           tree t = TREE_TYPE (TYPE_NAME (qualified_type));
12541
12542           gcc_checking_assert (TREE_CODE (t) == INTEGER_TYPE
12543                                && (TYPE_PRECISION (t)
12544                                    == TYPE_PRECISION (qualified_type))
12545                                && (TYPE_UNSIGNED (t)
12546                                    == TYPE_UNSIGNED (qualified_type)));
12547           qualified_type = t;
12548         }
12549       else if (qualified_type == sizetype
12550                && TREE_CODE (sizetype) == TREE_CODE (size_type_node)
12551                && TYPE_PRECISION (sizetype) == TYPE_PRECISION (size_type_node)
12552                && TYPE_UNSIGNED (sizetype) == TYPE_UNSIGNED (size_type_node))
12553         qualified_type = size_type_node;
12554     }
12555
12556   /* If we do, then we can just use its DIE, if it exists.  */
12557   if (qualified_type)
12558     {
12559       mod_type_die = lookup_type_die (qualified_type);
12560
12561       /* DW_AT_endianity doesn't come from a qualifier on the type, so it is
12562          dealt with specially: the DIE with the attribute, if it exists, is
12563          placed immediately after the regular DIE for the same base type.  */
12564       if (mod_type_die
12565           && (!reverse_base_type
12566               || ((mod_type_die = mod_type_die->die_sib) != NULL
12567                   && get_AT_unsigned (mod_type_die, DW_AT_endianity))))
12568         return mod_type_die;
12569     }
12570
12571   name = qualified_type ? TYPE_NAME (qualified_type) : NULL;
12572
12573   /* Handle C typedef types.  */
12574   if (name
12575       && TREE_CODE (name) == TYPE_DECL
12576       && DECL_ORIGINAL_TYPE (name)
12577       && !DECL_ARTIFICIAL (name))
12578     {
12579       tree dtype = TREE_TYPE (name);
12580
12581       /* Skip the typedef for base types with DW_AT_endianity, no big deal.  */
12582       if (qualified_type == dtype && !reverse_base_type)
12583         {
12584           tree origin = decl_ultimate_origin (name);
12585
12586           /* Typedef variants that have an abstract origin don't get their own
12587              type DIE (see gen_typedef_die), so fall back on the ultimate
12588              abstract origin instead.  */
12589           if (origin != NULL && origin != name)
12590             return modified_type_die (TREE_TYPE (origin), cv_quals, reverse,
12591                                       context_die);
12592
12593           /* For a named type, use the typedef.  */
12594           gen_type_die (qualified_type, context_die);
12595           return lookup_type_die (qualified_type);
12596         }
12597       else
12598         {
12599           int dquals = TYPE_QUALS_NO_ADDR_SPACE (dtype);
12600           dquals &= cv_qual_mask;
12601           if ((dquals & ~cv_quals) != TYPE_UNQUALIFIED
12602               || (cv_quals == dquals && DECL_ORIGINAL_TYPE (name) != type))
12603             /* cv-unqualified version of named type.  Just use
12604                the unnamed type to which it refers.  */
12605             return modified_type_die (DECL_ORIGINAL_TYPE (name), cv_quals,
12606                                       reverse, context_die);
12607           /* Else cv-qualified version of named type; fall through.  */
12608         }
12609     }
12610
12611   mod_scope = scope_die_for (type, context_die);
12612
12613   if (cv_quals)
12614     {
12615       int sub_quals = 0, first_quals = 0;
12616       unsigned i;
12617       dw_die_ref first = NULL, last = NULL;
12618
12619       /* Determine a lesser qualified type that most closely matches
12620          this one.  Then generate DW_TAG_* entries for the remaining
12621          qualifiers.  */
12622       sub_quals = get_nearest_type_subqualifiers (type, cv_quals,
12623                                                   cv_qual_mask);
12624       if (sub_quals && use_debug_types)
12625         {
12626           bool needed = false;
12627           /* If emitting type units, make sure the order of qualifiers
12628              is canonical.  Thus, start from unqualified type if
12629              an earlier qualifier is missing in sub_quals, but some later
12630              one is present there.  */
12631           for (i = 0; i < dwarf_qual_info_size; i++)
12632             if (dwarf_qual_info[i].q & cv_quals & ~sub_quals)
12633               needed = true;
12634             else if (needed && (dwarf_qual_info[i].q & cv_quals))
12635               {
12636                 sub_quals = 0;
12637                 break;
12638               }
12639         }
12640       mod_type_die = modified_type_die (type, sub_quals, reverse, context_die);
12641       if (mod_scope && mod_type_die && mod_type_die->die_parent == mod_scope)
12642         {
12643           /* As not all intermediate qualified DIEs have corresponding
12644              tree types, ensure that qualified DIEs in the same scope
12645              as their DW_AT_type are emitted after their DW_AT_type,
12646              only with other qualified DIEs for the same type possibly
12647              in between them.  Determine the range of such qualified
12648              DIEs now (first being the base type, last being corresponding
12649              last qualified DIE for it).  */
12650           unsigned int count = 0;
12651           first = qualified_die_p (mod_type_die, &first_quals,
12652                                    dwarf_qual_info_size);
12653           if (first == NULL)
12654             first = mod_type_die;
12655           gcc_assert ((first_quals & ~sub_quals) == 0);
12656           for (count = 0, last = first;
12657                count < (1U << dwarf_qual_info_size);
12658                count++, last = last->die_sib)
12659             {
12660               int quals = 0;
12661               if (last == mod_scope->die_child)
12662                 break;
12663               if (qualified_die_p (last->die_sib, &quals, dwarf_qual_info_size)
12664                   != first)
12665                 break;
12666             }
12667         }
12668
12669       for (i = 0; i < dwarf_qual_info_size; i++)
12670         if (dwarf_qual_info[i].q & cv_quals & ~sub_quals)
12671           {
12672             dw_die_ref d;
12673             if (first && first != last)
12674               {
12675                 for (d = first->die_sib; ; d = d->die_sib)
12676                   {
12677                     int quals = 0;
12678                     qualified_die_p (d, &quals, dwarf_qual_info_size);
12679                     if (quals == (first_quals | dwarf_qual_info[i].q))
12680                       break;
12681                     if (d == last)
12682                       {
12683                         d = NULL;
12684                         break;
12685                       }
12686                   }
12687                 if (d)
12688                   {
12689                     mod_type_die = d;
12690                     continue;
12691                   }
12692               }
12693             if (first)
12694               {
12695                 d = new_die_raw (dwarf_qual_info[i].t);
12696                 add_child_die_after (mod_scope, d, last);
12697                 last = d;
12698               }
12699             else
12700               d = new_die (dwarf_qual_info[i].t, mod_scope, type);
12701             if (mod_type_die)
12702               add_AT_die_ref (d, DW_AT_type, mod_type_die);
12703             mod_type_die = d;
12704             first_quals |= dwarf_qual_info[i].q;
12705           }
12706     }
12707   else if (code == POINTER_TYPE || code == REFERENCE_TYPE)
12708     {
12709       dwarf_tag tag = DW_TAG_pointer_type;
12710       if (code == REFERENCE_TYPE)
12711         {
12712           if (TYPE_REF_IS_RVALUE (type) && dwarf_version >= 4)
12713             tag = DW_TAG_rvalue_reference_type;
12714           else
12715             tag = DW_TAG_reference_type;
12716         }
12717       mod_type_die = new_die (tag, mod_scope, type);
12718
12719       add_AT_unsigned (mod_type_die, DW_AT_byte_size,
12720                        simple_type_size_in_bits (type) / BITS_PER_UNIT);
12721       add_alignment_attribute (mod_type_die, type);
12722       item_type = TREE_TYPE (type);
12723
12724       addr_space_t as = TYPE_ADDR_SPACE (item_type);
12725       if (!ADDR_SPACE_GENERIC_P (as))
12726         {
12727           int action = targetm.addr_space.debug (as);
12728           if (action >= 0)
12729             {
12730               /* Positive values indicate an address_class.  */
12731               add_AT_unsigned (mod_type_die, DW_AT_address_class, action);
12732             }
12733           else
12734             {
12735               /* Negative values indicate an (inverted) segment base reg.  */
12736               dw_loc_descr_ref d
12737                 = one_reg_loc_descriptor (~action, VAR_INIT_STATUS_INITIALIZED);
12738               add_AT_loc (mod_type_die, DW_AT_segment, d);
12739             }
12740         }
12741     }
12742   else if (code == INTEGER_TYPE
12743            && TREE_TYPE (type) != NULL_TREE
12744            && subrange_type_for_debug_p (type, &low, &high))
12745     {
12746       tree bias = NULL_TREE;
12747       if (lang_hooks.types.get_type_bias)
12748         bias = lang_hooks.types.get_type_bias (type);
12749       mod_type_die = subrange_type_die (type, low, high, bias, context_die);
12750       item_type = TREE_TYPE (type);
12751     }
12752   else if (is_base_type (type))
12753     {
12754       mod_type_die = base_type_die (type, reverse);
12755
12756       /* The DIE with DW_AT_endianity is placed right after the naked DIE.  */
12757       if (reverse_base_type)
12758         {
12759           dw_die_ref after_die
12760             = modified_type_die (type, cv_quals, false, context_die);
12761           add_child_die_after (comp_unit_die (), mod_type_die, after_die);
12762         }
12763       else
12764         add_child_die (comp_unit_die (), mod_type_die);
12765
12766       add_pubtype (type, mod_type_die);
12767     }
12768   else
12769     {
12770       gen_type_die (type, context_die);
12771
12772       /* We have to get the type_main_variant here (and pass that to the
12773          `lookup_type_die' routine) because the ..._TYPE node we have
12774          might simply be a *copy* of some original type node (where the
12775          copy was created to help us keep track of typedef names) and
12776          that copy might have a different TYPE_UID from the original
12777          ..._TYPE node.  */
12778       if (TREE_CODE (type) == FUNCTION_TYPE
12779           || TREE_CODE (type) == METHOD_TYPE)
12780         {
12781           /* For function/method types, can't just use type_main_variant here,
12782              because that can have different ref-qualifiers for C++,
12783              but try to canonicalize.  */
12784           tree main = TYPE_MAIN_VARIANT (type);
12785           for (tree t = main; t; t = TYPE_NEXT_VARIANT (t))
12786             if (TYPE_QUALS_NO_ADDR_SPACE (t) == 0
12787                 && check_base_type (t, main)
12788                 && check_lang_type (t, type))
12789               return lookup_type_die (t);
12790           return lookup_type_die (type);
12791         }
12792       else if (TREE_CODE (type) != VECTOR_TYPE
12793                && TREE_CODE (type) != ARRAY_TYPE)
12794         return lookup_type_die (type_main_variant (type));
12795       else
12796         /* Vectors have the debugging information in the type,
12797            not the main variant.  */
12798         return lookup_type_die (type);
12799     }
12800
12801   /* Builtin types don't have a DECL_ORIGINAL_TYPE.  For those,
12802      don't output a DW_TAG_typedef, since there isn't one in the
12803      user's program; just attach a DW_AT_name to the type.
12804      Don't attach a DW_AT_name to DW_TAG_const_type or DW_TAG_volatile_type
12805      if the base type already has the same name.  */
12806   if (name
12807       && ((TREE_CODE (name) != TYPE_DECL
12808            && (qualified_type == TYPE_MAIN_VARIANT (type)
12809                || (cv_quals == TYPE_UNQUALIFIED)))
12810           || (TREE_CODE (name) == TYPE_DECL
12811               && TREE_TYPE (name) == qualified_type
12812               && DECL_NAME (name))))
12813     {
12814       if (TREE_CODE (name) == TYPE_DECL)
12815         /* Could just call add_name_and_src_coords_attributes here,
12816            but since this is a builtin type it doesn't have any
12817            useful source coordinates anyway.  */
12818         name = DECL_NAME (name);
12819       add_name_attribute (mod_type_die, IDENTIFIER_POINTER (name));
12820     }
12821   /* This probably indicates a bug.  */
12822   else if (mod_type_die && mod_type_die->die_tag == DW_TAG_base_type)
12823     {
12824       name = TYPE_IDENTIFIER (type);
12825       add_name_attribute (mod_type_die,
12826                           name ? IDENTIFIER_POINTER (name) : "__unknown__");
12827     }
12828
12829   if (qualified_type && !reverse_base_type)
12830     equate_type_number_to_die (qualified_type, mod_type_die);
12831
12832   if (item_type)
12833     /* We must do this after the equate_type_number_to_die call, in case
12834        this is a recursive type.  This ensures that the modified_type_die
12835        recursion will terminate even if the type is recursive.  Recursive
12836        types are possible in Ada.  */
12837     sub_die = modified_type_die (item_type,
12838                                  TYPE_QUALS_NO_ADDR_SPACE (item_type),
12839                                  reverse,
12840                                  context_die);
12841
12842   if (sub_die != NULL)
12843     add_AT_die_ref (mod_type_die, DW_AT_type, sub_die);
12844
12845   add_gnat_descriptive_type_attribute (mod_type_die, type, context_die);
12846   if (TYPE_ARTIFICIAL (type))
12847     add_AT_flag (mod_type_die, DW_AT_artificial, 1);
12848
12849   return mod_type_die;
12850 }
12851
12852 /* Generate DIEs for the generic parameters of T.
12853    T must be either a generic type or a generic function.
12854    See http://gcc.gnu.org/wiki/TemplateParmsDwarf for more.  */
12855
12856 static void
12857 gen_generic_params_dies (tree t)
12858 {
12859   tree parms, args;
12860   int parms_num, i;
12861   dw_die_ref die = NULL;
12862   int non_default;
12863
12864   if (!t || (TYPE_P (t) && !COMPLETE_TYPE_P (t)))
12865     return;
12866
12867   if (TYPE_P (t))
12868     die = lookup_type_die (t);
12869   else if (DECL_P (t))
12870     die = lookup_decl_die (t);
12871
12872   gcc_assert (die);
12873
12874   parms = lang_hooks.get_innermost_generic_parms (t);
12875   if (!parms)
12876     /* T has no generic parameter. It means T is neither a generic type
12877        or function. End of story.  */
12878     return;
12879
12880   parms_num = TREE_VEC_LENGTH (parms);
12881   args = lang_hooks.get_innermost_generic_args (t);
12882   if (TREE_CHAIN (args) && TREE_CODE (TREE_CHAIN (args)) == INTEGER_CST)
12883     non_default = int_cst_value (TREE_CHAIN (args));
12884   else
12885     non_default = TREE_VEC_LENGTH (args);
12886   for (i = 0; i < parms_num; i++)
12887     {
12888       tree parm, arg, arg_pack_elems;
12889       dw_die_ref parm_die;
12890
12891       parm = TREE_VEC_ELT (parms, i);
12892       arg = TREE_VEC_ELT (args, i);
12893       arg_pack_elems = lang_hooks.types.get_argument_pack_elems (arg);
12894       gcc_assert (parm && TREE_VALUE (parm) && arg);
12895
12896       if (parm && TREE_VALUE (parm) && arg)
12897         {
12898           /* If PARM represents a template parameter pack,
12899              emit a DW_TAG_GNU_template_parameter_pack DIE, followed
12900              by DW_TAG_template_*_parameter DIEs for the argument
12901              pack elements of ARG. Note that ARG would then be
12902              an argument pack.  */
12903           if (arg_pack_elems)
12904             parm_die = template_parameter_pack_die (TREE_VALUE (parm),
12905                                                     arg_pack_elems,
12906                                                     die);
12907           else
12908             parm_die = generic_parameter_die (TREE_VALUE (parm), arg,
12909                                               true /* emit name */, die);
12910           if (i >= non_default)
12911             add_AT_flag (parm_die, DW_AT_default_value, 1);
12912         }
12913     }
12914 }
12915
12916 /* Create and return a DIE for PARM which should be
12917    the representation of a generic type parameter.
12918    For instance, in the C++ front end, PARM would be a template parameter.
12919    ARG is the argument to PARM.
12920    EMIT_NAME_P if tree, the DIE will have DW_AT_name attribute set to the
12921    name of the PARM.
12922    PARENT_DIE is the parent DIE which the new created DIE should be added to,
12923    as a child node.  */
12924
12925 static dw_die_ref
12926 generic_parameter_die (tree parm, tree arg,
12927                        bool emit_name_p,
12928                        dw_die_ref parent_die)
12929 {
12930   dw_die_ref tmpl_die = NULL;
12931   const char *name = NULL;
12932
12933   if (!parm || !DECL_NAME (parm) || !arg)
12934     return NULL;
12935
12936   /* We support non-type generic parameters and arguments,
12937      type generic parameters and arguments, as well as
12938      generic generic parameters (a.k.a. template template parameters in C++)
12939      and arguments.  */
12940   if (TREE_CODE (parm) == PARM_DECL)
12941     /* PARM is a nontype generic parameter  */
12942     tmpl_die = new_die (DW_TAG_template_value_param, parent_die, parm);
12943   else if (TREE_CODE (parm) == TYPE_DECL)
12944     /* PARM is a type generic parameter.  */
12945     tmpl_die = new_die (DW_TAG_template_type_param, parent_die, parm);
12946   else if (lang_hooks.decls.generic_generic_parameter_decl_p (parm))
12947     /* PARM is a generic generic parameter.
12948        Its DIE is a GNU extension. It shall have a
12949        DW_AT_name attribute to represent the name of the template template
12950        parameter, and a DW_AT_GNU_template_name attribute to represent the
12951        name of the template template argument.  */
12952     tmpl_die = new_die (DW_TAG_GNU_template_template_param,
12953                         parent_die, parm);
12954   else
12955     gcc_unreachable ();
12956
12957   if (tmpl_die)
12958     {
12959       tree tmpl_type;
12960
12961       /* If PARM is a generic parameter pack, it means we are
12962          emitting debug info for a template argument pack element.
12963          In other terms, ARG is a template argument pack element.
12964          In that case, we don't emit any DW_AT_name attribute for
12965          the die.  */
12966       if (emit_name_p)
12967         {
12968           name = IDENTIFIER_POINTER (DECL_NAME (parm));
12969           gcc_assert (name);
12970           add_AT_string (tmpl_die, DW_AT_name, name);
12971         }
12972
12973       if (!lang_hooks.decls.generic_generic_parameter_decl_p (parm))
12974         {
12975           /* DWARF3, 5.6.8 says if PARM is a non-type generic parameter
12976              TMPL_DIE should have a child DW_AT_type attribute that is set
12977              to the type of the argument to PARM, which is ARG.
12978              If PARM is a type generic parameter, TMPL_DIE should have a
12979              child DW_AT_type that is set to ARG.  */
12980           tmpl_type = TYPE_P (arg) ? arg : TREE_TYPE (arg);
12981           add_type_attribute (tmpl_die, tmpl_type,
12982                               (TREE_THIS_VOLATILE (tmpl_type)
12983                                ? TYPE_QUAL_VOLATILE : TYPE_UNQUALIFIED),
12984                               false, parent_die);
12985         }
12986       else
12987         {
12988           /* So TMPL_DIE is a DIE representing a
12989              a generic generic template parameter, a.k.a template template
12990              parameter in C++ and arg is a template.  */
12991
12992           /* The DW_AT_GNU_template_name attribute of the DIE must be set
12993              to the name of the argument.  */
12994           name = dwarf2_name (TYPE_P (arg) ? TYPE_NAME (arg) : arg, 1);
12995           if (name)
12996             add_AT_string (tmpl_die, DW_AT_GNU_template_name, name);
12997         }
12998
12999       if (TREE_CODE (parm) == PARM_DECL)
13000         /* So PARM is a non-type generic parameter.
13001            DWARF3 5.6.8 says we must set a DW_AT_const_value child
13002            attribute of TMPL_DIE which value represents the value
13003            of ARG.
13004            We must be careful here:
13005            The value of ARG might reference some function decls.
13006            We might currently be emitting debug info for a generic
13007            type and types are emitted before function decls, we don't
13008            know if the function decls referenced by ARG will actually be
13009            emitted after cgraph computations.
13010            So must defer the generation of the DW_AT_const_value to
13011            after cgraph is ready.  */
13012         append_entry_to_tmpl_value_parm_die_table (tmpl_die, arg);
13013     }
13014
13015   return tmpl_die;
13016 }
13017
13018 /* Generate and return a  DW_TAG_GNU_template_parameter_pack DIE representing.
13019    PARM_PACK must be a template parameter pack. The returned DIE
13020    will be child DIE of PARENT_DIE.  */
13021
13022 static dw_die_ref
13023 template_parameter_pack_die (tree parm_pack,
13024                              tree parm_pack_args,
13025                              dw_die_ref parent_die)
13026 {
13027   dw_die_ref die;
13028   int j;
13029
13030   gcc_assert (parent_die && parm_pack);
13031
13032   die = new_die (DW_TAG_GNU_template_parameter_pack, parent_die, parm_pack);
13033   add_name_and_src_coords_attributes (die, parm_pack);
13034   for (j = 0; j < TREE_VEC_LENGTH (parm_pack_args); j++)
13035     generic_parameter_die (parm_pack,
13036                            TREE_VEC_ELT (parm_pack_args, j),
13037                            false /* Don't emit DW_AT_name */,
13038                            die);
13039   return die;
13040 }
13041
13042 /* Given a pointer to an arbitrary ..._TYPE tree node, return true if it is
13043    an enumerated type.  */
13044
13045 static inline int
13046 type_is_enum (const_tree type)
13047 {
13048   return TREE_CODE (type) == ENUMERAL_TYPE;
13049 }
13050
13051 /* Return the DBX register number described by a given RTL node.  */
13052
13053 static unsigned int
13054 dbx_reg_number (const_rtx rtl)
13055 {
13056   unsigned regno = REGNO (rtl);
13057
13058   gcc_assert (regno < FIRST_PSEUDO_REGISTER);
13059
13060 #ifdef LEAF_REG_REMAP
13061   if (crtl->uses_only_leaf_regs)
13062     {
13063       int leaf_reg = LEAF_REG_REMAP (regno);
13064       if (leaf_reg != -1)
13065         regno = (unsigned) leaf_reg;
13066     }
13067 #endif
13068
13069   regno = DBX_REGISTER_NUMBER (regno);
13070   gcc_assert (regno != INVALID_REGNUM);
13071   return regno;
13072 }
13073
13074 /* Optionally add a DW_OP_piece term to a location description expression.
13075    DW_OP_piece is only added if the location description expression already
13076    doesn't end with DW_OP_piece.  */
13077
13078 static void
13079 add_loc_descr_op_piece (dw_loc_descr_ref *list_head, int size)
13080 {
13081   dw_loc_descr_ref loc;
13082
13083   if (*list_head != NULL)
13084     {
13085       /* Find the end of the chain.  */
13086       for (loc = *list_head; loc->dw_loc_next != NULL; loc = loc->dw_loc_next)
13087         ;
13088
13089       if (loc->dw_loc_opc != DW_OP_piece)
13090         loc->dw_loc_next = new_loc_descr (DW_OP_piece, size, 0);
13091     }
13092 }
13093
13094 /* Return a location descriptor that designates a machine register or
13095    zero if there is none.  */
13096
13097 static dw_loc_descr_ref
13098 reg_loc_descriptor (rtx rtl, enum var_init_status initialized)
13099 {
13100   rtx regs;
13101
13102   if (REGNO (rtl) >= FIRST_PSEUDO_REGISTER)
13103     return 0;
13104
13105   /* We only use "frame base" when we're sure we're talking about the
13106      post-prologue local stack frame.  We do this by *not* running
13107      register elimination until this point, and recognizing the special
13108      argument pointer and soft frame pointer rtx's.
13109      Use DW_OP_fbreg offset DW_OP_stack_value in this case.  */
13110   if ((rtl == arg_pointer_rtx || rtl == frame_pointer_rtx)
13111       && eliminate_regs (rtl, VOIDmode, NULL_RTX) != rtl)
13112     {
13113       dw_loc_descr_ref result = NULL;
13114
13115       if (dwarf_version >= 4 || !dwarf_strict)
13116         {
13117           result = mem_loc_descriptor (rtl, GET_MODE (rtl), VOIDmode,
13118                                        initialized);
13119           if (result)
13120             add_loc_descr (&result,
13121                            new_loc_descr (DW_OP_stack_value, 0, 0));
13122         }
13123       return result;
13124     }
13125
13126   regs = targetm.dwarf_register_span (rtl);
13127
13128   if (REG_NREGS (rtl) > 1 || regs)
13129     return multiple_reg_loc_descriptor (rtl, regs, initialized);
13130   else
13131     {
13132       unsigned int dbx_regnum = dbx_reg_number (rtl);
13133       if (dbx_regnum == IGNORED_DWARF_REGNUM)
13134         return 0;
13135       return one_reg_loc_descriptor (dbx_regnum, initialized);
13136     }
13137 }
13138
13139 /* Return a location descriptor that designates a machine register for
13140    a given hard register number.  */
13141
13142 static dw_loc_descr_ref
13143 one_reg_loc_descriptor (unsigned int regno, enum var_init_status initialized)
13144 {
13145   dw_loc_descr_ref reg_loc_descr;
13146
13147   if (regno <= 31)
13148     reg_loc_descr
13149       = new_loc_descr ((enum dwarf_location_atom) (DW_OP_reg0 + regno), 0, 0);
13150   else
13151     reg_loc_descr = new_loc_descr (DW_OP_regx, regno, 0);
13152
13153   if (initialized == VAR_INIT_STATUS_UNINITIALIZED)
13154     add_loc_descr (&reg_loc_descr, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
13155
13156   return reg_loc_descr;
13157 }
13158
13159 /* Given an RTL of a register, return a location descriptor that
13160    designates a value that spans more than one register.  */
13161
13162 static dw_loc_descr_ref
13163 multiple_reg_loc_descriptor (rtx rtl, rtx regs,
13164                              enum var_init_status initialized)
13165 {
13166   int size, i;
13167   dw_loc_descr_ref loc_result = NULL;
13168
13169   /* Simple, contiguous registers.  */
13170   if (regs == NULL_RTX)
13171     {
13172       unsigned reg = REGNO (rtl);
13173       int nregs;
13174
13175 #ifdef LEAF_REG_REMAP
13176       if (crtl->uses_only_leaf_regs)
13177         {
13178           int leaf_reg = LEAF_REG_REMAP (reg);
13179           if (leaf_reg != -1)
13180             reg = (unsigned) leaf_reg;
13181         }
13182 #endif
13183
13184       gcc_assert ((unsigned) DBX_REGISTER_NUMBER (reg) == dbx_reg_number (rtl));
13185       nregs = REG_NREGS (rtl);
13186
13187       size = GET_MODE_SIZE (GET_MODE (rtl)) / nregs;
13188
13189       loc_result = NULL;
13190       while (nregs--)
13191         {
13192           dw_loc_descr_ref t;
13193
13194           t = one_reg_loc_descriptor (DBX_REGISTER_NUMBER (reg),
13195                                       VAR_INIT_STATUS_INITIALIZED);
13196           add_loc_descr (&loc_result, t);
13197           add_loc_descr_op_piece (&loc_result, size);
13198           ++reg;
13199         }
13200       return loc_result;
13201     }
13202
13203   /* Now onto stupid register sets in non contiguous locations.  */
13204
13205   gcc_assert (GET_CODE (regs) == PARALLEL);
13206
13207   size = GET_MODE_SIZE (GET_MODE (XVECEXP (regs, 0, 0)));
13208   loc_result = NULL;
13209
13210   for (i = 0; i < XVECLEN (regs, 0); ++i)
13211     {
13212       dw_loc_descr_ref t;
13213
13214       t = one_reg_loc_descriptor (dbx_reg_number (XVECEXP (regs, 0, i)),
13215                                   VAR_INIT_STATUS_INITIALIZED);
13216       add_loc_descr (&loc_result, t);
13217       add_loc_descr_op_piece (&loc_result, size);
13218     }
13219
13220   if (loc_result && initialized == VAR_INIT_STATUS_UNINITIALIZED)
13221     add_loc_descr (&loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
13222   return loc_result;
13223 }
13224
13225 static unsigned long size_of_int_loc_descriptor (HOST_WIDE_INT);
13226
13227 /* Return a location descriptor that designates a constant i,
13228    as a compound operation from constant (i >> shift), constant shift
13229    and DW_OP_shl.  */
13230
13231 static dw_loc_descr_ref
13232 int_shift_loc_descriptor (HOST_WIDE_INT i, int shift)
13233 {
13234   dw_loc_descr_ref ret = int_loc_descriptor (i >> shift);
13235   add_loc_descr (&ret, int_loc_descriptor (shift));
13236   add_loc_descr (&ret, new_loc_descr (DW_OP_shl, 0, 0));
13237   return ret;
13238 }
13239
13240 /* Return a location descriptor that designates constant POLY_I.  */
13241
13242 static dw_loc_descr_ref
13243 int_loc_descriptor (poly_int64 poly_i)
13244 {
13245   enum dwarf_location_atom op;
13246
13247   HOST_WIDE_INT i;
13248   if (!poly_i.is_constant (&i))
13249     {
13250       /* Create location descriptions for the non-constant part and
13251          add any constant offset at the end.  */
13252       dw_loc_descr_ref ret = NULL;
13253       HOST_WIDE_INT constant = poly_i.coeffs[0];
13254       for (unsigned int j = 1; j < NUM_POLY_INT_COEFFS; ++j)
13255         {
13256           HOST_WIDE_INT coeff = poly_i.coeffs[j];
13257           if (coeff != 0)
13258             {
13259               dw_loc_descr_ref start = ret;
13260               unsigned int factor;
13261               int bias;
13262               unsigned int regno = targetm.dwarf_poly_indeterminate_value
13263                 (j, &factor, &bias);
13264
13265               /* Add COEFF * ((REGNO / FACTOR) - BIAS) to the value:
13266                  add COEFF * (REGNO / FACTOR) now and subtract
13267                  COEFF * BIAS from the final constant part.  */
13268               constant -= coeff * bias;
13269               add_loc_descr (&ret, new_reg_loc_descr (regno, 0));
13270               if (coeff % factor == 0)
13271                 coeff /= factor;
13272               else
13273                 {
13274                   int amount = exact_log2 (factor);
13275                   gcc_assert (amount >= 0);
13276                   add_loc_descr (&ret, int_loc_descriptor (amount));
13277                   add_loc_descr (&ret, new_loc_descr (DW_OP_shr, 0, 0));
13278                 }
13279               if (coeff != 1)
13280                 {
13281                   add_loc_descr (&ret, int_loc_descriptor (coeff));
13282                   add_loc_descr (&ret, new_loc_descr (DW_OP_mul, 0, 0));
13283                 }
13284               if (start)
13285                 add_loc_descr (&ret, new_loc_descr (DW_OP_plus, 0, 0));
13286             }
13287         }
13288       loc_descr_plus_const (&ret, constant);
13289       return ret;
13290     }
13291
13292   /* Pick the smallest representation of a constant, rather than just
13293      defaulting to the LEB encoding.  */
13294   if (i >= 0)
13295     {
13296       int clz = clz_hwi (i);
13297       int ctz = ctz_hwi (i);
13298       if (i <= 31)
13299         op = (enum dwarf_location_atom) (DW_OP_lit0 + i);
13300       else if (i <= 0xff)
13301         op = DW_OP_const1u;
13302       else if (i <= 0xffff)
13303         op = DW_OP_const2u;
13304       else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 5
13305                && clz + 5 + 255 >= HOST_BITS_PER_WIDE_INT)
13306         /* DW_OP_litX DW_OP_litY DW_OP_shl takes just 3 bytes and
13307            DW_OP_litX DW_OP_const1u Y DW_OP_shl takes just 4 bytes,
13308            while DW_OP_const4u is 5 bytes.  */
13309         return int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT - clz - 5);
13310       else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 8
13311                && clz + 8 + 31 >= HOST_BITS_PER_WIDE_INT)
13312         /* DW_OP_const1u X DW_OP_litY DW_OP_shl takes just 4 bytes,
13313            while DW_OP_const4u is 5 bytes.  */
13314         return int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT - clz - 8);
13315
13316       else if (DWARF2_ADDR_SIZE == 4 && i > 0x7fffffff
13317                && size_of_int_loc_descriptor ((HOST_WIDE_INT) (int32_t) i)
13318                   <= 4)
13319         {
13320           /* As i >= 2**31, the double cast above will yield a negative number.
13321              Since wrapping is defined in DWARF expressions we can output big
13322              positive integers as small negative ones, regardless of the size
13323              of host wide ints.
13324
13325              Here, since the evaluator will handle 32-bit values and since i >=
13326              2**31, we know it's going to be interpreted as a negative literal:
13327              store it this way if we can do better than 5 bytes this way.  */
13328           return int_loc_descriptor ((HOST_WIDE_INT) (int32_t) i);
13329         }
13330       else if (HOST_BITS_PER_WIDE_INT == 32 || i <= 0xffffffff)
13331         op = DW_OP_const4u;
13332
13333       /* Past this point, i >= 0x100000000 and thus DW_OP_constu will take at
13334          least 6 bytes: see if we can do better before falling back to it.  */
13335       else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 8
13336                && clz + 8 + 255 >= HOST_BITS_PER_WIDE_INT)
13337         /* DW_OP_const1u X DW_OP_const1u Y DW_OP_shl takes just 5 bytes.  */
13338         return int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT - clz - 8);
13339       else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 16
13340                && clz + 16 + (size_of_uleb128 (i) > 5 ? 255 : 31)
13341                   >= HOST_BITS_PER_WIDE_INT)
13342         /* DW_OP_const2u X DW_OP_litY DW_OP_shl takes just 5 bytes,
13343            DW_OP_const2u X DW_OP_const1u Y DW_OP_shl takes 6 bytes.  */
13344         return int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT - clz - 16);
13345       else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 32
13346                && clz + 32 + 31 >= HOST_BITS_PER_WIDE_INT
13347                && size_of_uleb128 (i) > 6)
13348         /* DW_OP_const4u X DW_OP_litY DW_OP_shl takes just 7 bytes.  */
13349         return int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT - clz - 32);
13350       else
13351         op = DW_OP_constu;
13352     }
13353   else
13354     {
13355       if (i >= -0x80)
13356         op = DW_OP_const1s;
13357       else if (i >= -0x8000)
13358         op = DW_OP_const2s;
13359       else if (HOST_BITS_PER_WIDE_INT == 32 || i >= -0x80000000)
13360         {
13361           if (size_of_int_loc_descriptor (i) < 5)
13362             {
13363               dw_loc_descr_ref ret = int_loc_descriptor (-i);
13364               add_loc_descr (&ret, new_loc_descr (DW_OP_neg, 0, 0));
13365               return ret;
13366             }
13367           op = DW_OP_const4s;
13368         }
13369       else
13370         {
13371           if (size_of_int_loc_descriptor (i)
13372               < (unsigned long) 1 + size_of_sleb128 (i))
13373             {
13374               dw_loc_descr_ref ret = int_loc_descriptor (-i);
13375               add_loc_descr (&ret, new_loc_descr (DW_OP_neg, 0, 0));
13376               return ret;
13377             }
13378           op = DW_OP_consts;
13379         }
13380     }
13381
13382   return new_loc_descr (op, i, 0);
13383 }
13384
13385 /* Likewise, for unsigned constants.  */
13386
13387 static dw_loc_descr_ref
13388 uint_loc_descriptor (unsigned HOST_WIDE_INT i)
13389 {
13390   const unsigned HOST_WIDE_INT max_int = INTTYPE_MAXIMUM (HOST_WIDE_INT);
13391   const unsigned HOST_WIDE_INT max_uint
13392     = INTTYPE_MAXIMUM (unsigned HOST_WIDE_INT);
13393
13394   /* If possible, use the clever signed constants handling.  */
13395   if (i <= max_int)
13396     return int_loc_descriptor ((HOST_WIDE_INT) i);
13397
13398   /* Here, we are left with positive numbers that cannot be represented as
13399      HOST_WIDE_INT, i.e.:
13400          max (HOST_WIDE_INT) < i <= max (unsigned HOST_WIDE_INT)
13401
13402      Using DW_OP_const4/8/./u operation to encode them consumes a lot of bytes
13403      whereas may be better to output a negative integer: thanks to integer
13404      wrapping, we know that:
13405          x = x - 2 ** DWARF2_ADDR_SIZE
13406            = x - 2 * (max (HOST_WIDE_INT) + 1)
13407      So numbers close to max (unsigned HOST_WIDE_INT) could be represented as
13408      small negative integers.  Let's try that in cases it will clearly improve
13409      the encoding: there is no gain turning DW_OP_const4u into
13410      DW_OP_const4s.  */
13411   if (DWARF2_ADDR_SIZE * 8 == HOST_BITS_PER_WIDE_INT
13412       && ((DWARF2_ADDR_SIZE == 4 && i > max_uint - 0x8000)
13413           || (DWARF2_ADDR_SIZE == 8 && i > max_uint - 0x80000000)))
13414     {
13415       const unsigned HOST_WIDE_INT first_shift = i - max_int - 1;
13416
13417       /* Now, -1 <  first_shift <= max (HOST_WIDE_INT)
13418          i.e.  0 <= first_shift <= max (HOST_WIDE_INT).  */
13419       const HOST_WIDE_INT second_shift
13420         = (HOST_WIDE_INT) first_shift - (HOST_WIDE_INT) max_int - 1;
13421
13422       /* So we finally have:
13423               -max (HOST_WIDE_INT) - 1 <= second_shift <= -1.
13424          i.e.  min (HOST_WIDE_INT)     <= second_shift <  0.  */
13425       return int_loc_descriptor (second_shift);
13426     }
13427
13428   /* Last chance: fallback to a simple constant operation.  */
13429   return new_loc_descr
13430      ((HOST_BITS_PER_WIDE_INT == 32 || i <= 0xffffffff)
13431       ? DW_OP_const4u
13432       : DW_OP_const8u,
13433       i, 0);
13434 }
13435
13436 /* Generate and return a location description that computes the unsigned
13437    comparison of the two stack top entries (a OP b where b is the top-most
13438    entry and a is the second one).  The KIND of comparison can be LT_EXPR,
13439    LE_EXPR, GT_EXPR or GE_EXPR.  */
13440
13441 static dw_loc_descr_ref
13442 uint_comparison_loc_list (enum tree_code kind)
13443 {
13444   enum dwarf_location_atom op, flip_op;
13445   dw_loc_descr_ref ret, bra_node, jmp_node, tmp;
13446
13447   switch (kind)
13448     {
13449     case LT_EXPR:
13450       op = DW_OP_lt;
13451       break;
13452     case LE_EXPR:
13453       op = DW_OP_le;
13454       break;
13455     case GT_EXPR:
13456       op = DW_OP_gt;
13457       break;
13458     case GE_EXPR:
13459       op = DW_OP_ge;
13460       break;
13461     default:
13462       gcc_unreachable ();
13463     }
13464
13465   bra_node = new_loc_descr (DW_OP_bra, 0, 0);
13466   jmp_node = new_loc_descr (DW_OP_skip, 0, 0);
13467
13468   /* Until DWARFv4, operations all work on signed integers.  It is nevertheless
13469      possible to perform unsigned comparisons: we just have to distinguish
13470      three cases:
13471
13472        1. when a and b have the same sign (as signed integers); then we should
13473           return: a OP(signed) b;
13474
13475        2. when a is a negative signed integer while b is a positive one, then a
13476           is a greater unsigned integer than b; likewise when a and b's roles
13477           are flipped.
13478
13479      So first, compare the sign of the two operands.  */
13480   ret = new_loc_descr (DW_OP_over, 0, 0);
13481   add_loc_descr (&ret, new_loc_descr (DW_OP_over, 0, 0));
13482   add_loc_descr (&ret, new_loc_descr (DW_OP_xor, 0, 0));
13483   /* If they have different signs (i.e. they have different sign bits), then
13484      the stack top value has now the sign bit set and thus it's smaller than
13485      zero.  */
13486   add_loc_descr (&ret, new_loc_descr (DW_OP_lit0, 0, 0));
13487   add_loc_descr (&ret, new_loc_descr (DW_OP_lt, 0, 0));
13488   add_loc_descr (&ret, bra_node);
13489
13490   /* We are in case 1.  At this point, we know both operands have the same
13491      sign, to it's safe to use the built-in signed comparison.  */
13492   add_loc_descr (&ret, new_loc_descr (op, 0, 0));
13493   add_loc_descr (&ret, jmp_node);
13494
13495   /* We are in case 2.  Here, we know both operands do not have the same sign,
13496      so we have to flip the signed comparison.  */
13497   flip_op = (kind == LT_EXPR || kind == LE_EXPR) ? DW_OP_gt : DW_OP_lt;
13498   tmp = new_loc_descr (flip_op, 0, 0);
13499   bra_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
13500   bra_node->dw_loc_oprnd1.v.val_loc = tmp;
13501   add_loc_descr (&ret, tmp);
13502
13503   /* This dummy operation is necessary to make the two branches join.  */
13504   tmp = new_loc_descr (DW_OP_nop, 0, 0);
13505   jmp_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
13506   jmp_node->dw_loc_oprnd1.v.val_loc = tmp;
13507   add_loc_descr (&ret, tmp);
13508
13509   return ret;
13510 }
13511
13512 /* Likewise, but takes the location description lists (might be destructive on
13513    them).  Return NULL if either is NULL or if concatenation fails.  */
13514
13515 static dw_loc_list_ref
13516 loc_list_from_uint_comparison (dw_loc_list_ref left, dw_loc_list_ref right,
13517                                enum tree_code kind)
13518 {
13519   if (left == NULL || right == NULL)
13520     return NULL;
13521
13522   add_loc_list (&left, right);
13523   if (left == NULL)
13524     return NULL;
13525
13526   add_loc_descr_to_each (left, uint_comparison_loc_list (kind));
13527   return left;
13528 }
13529
13530 /* Return size_of_locs (int_shift_loc_descriptor (i, shift))
13531    without actually allocating it.  */
13532
13533 static unsigned long
13534 size_of_int_shift_loc_descriptor (HOST_WIDE_INT i, int shift)
13535 {
13536   return size_of_int_loc_descriptor (i >> shift)
13537          + size_of_int_loc_descriptor (shift)
13538          + 1;
13539 }
13540
13541 /* Return size_of_locs (int_loc_descriptor (i)) without
13542    actually allocating it.  */
13543
13544 static unsigned long
13545 size_of_int_loc_descriptor (HOST_WIDE_INT i)
13546 {
13547   unsigned long s;
13548
13549   if (i >= 0)
13550     {
13551       int clz, ctz;
13552       if (i <= 31)
13553         return 1;
13554       else if (i <= 0xff)
13555         return 2;
13556       else if (i <= 0xffff)
13557         return 3;
13558       clz = clz_hwi (i);
13559       ctz = ctz_hwi (i);
13560       if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 5
13561           && clz + 5 + 255 >= HOST_BITS_PER_WIDE_INT)
13562         return size_of_int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT
13563                                                     - clz - 5);
13564       else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 8
13565                && clz + 8 + 31 >= HOST_BITS_PER_WIDE_INT)
13566         return size_of_int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT
13567                                                     - clz - 8);
13568       else if (DWARF2_ADDR_SIZE == 4 && i > 0x7fffffff
13569                && size_of_int_loc_descriptor ((HOST_WIDE_INT) (int32_t) i)
13570                   <= 4)
13571         return size_of_int_loc_descriptor ((HOST_WIDE_INT) (int32_t) i);
13572       else if (HOST_BITS_PER_WIDE_INT == 32 || i <= 0xffffffff)
13573         return 5;
13574       s = size_of_uleb128 ((unsigned HOST_WIDE_INT) i);
13575       if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 8
13576           && clz + 8 + 255 >= HOST_BITS_PER_WIDE_INT)
13577         return size_of_int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT
13578                                                     - clz - 8);
13579       else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 16
13580                && clz + 16 + (s > 5 ? 255 : 31) >= HOST_BITS_PER_WIDE_INT)
13581         return size_of_int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT
13582                                                     - clz - 16);
13583       else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 32
13584                && clz + 32 + 31 >= HOST_BITS_PER_WIDE_INT
13585                && s > 6)
13586         return size_of_int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT
13587                                                     - clz - 32);
13588       else
13589         return 1 + s;
13590     }
13591   else
13592     {
13593       if (i >= -0x80)
13594         return 2;
13595       else if (i >= -0x8000)
13596         return 3;
13597       else if (HOST_BITS_PER_WIDE_INT == 32 || i >= -0x80000000)
13598         {
13599           if (-(unsigned HOST_WIDE_INT) i != (unsigned HOST_WIDE_INT) i)
13600             {
13601               s = size_of_int_loc_descriptor (-i) + 1;
13602               if (s < 5)
13603                 return s;
13604             }
13605           return 5;
13606         }
13607       else
13608         {
13609           unsigned long r = 1 + size_of_sleb128 (i);
13610           if (-(unsigned HOST_WIDE_INT) i != (unsigned HOST_WIDE_INT) i)
13611             {
13612               s = size_of_int_loc_descriptor (-i) + 1;
13613               if (s < r)
13614                 return s;
13615             }
13616           return r;
13617         }
13618     }
13619 }
13620
13621 /* Return loc description representing "address" of integer value.
13622    This can appear only as toplevel expression.  */
13623
13624 static dw_loc_descr_ref
13625 address_of_int_loc_descriptor (int size, HOST_WIDE_INT i)
13626 {
13627   int litsize;
13628   dw_loc_descr_ref loc_result = NULL;
13629
13630   if (!(dwarf_version >= 4 || !dwarf_strict))
13631     return NULL;
13632
13633   litsize = size_of_int_loc_descriptor (i);
13634   /* Determine if DW_OP_stack_value or DW_OP_implicit_value
13635      is more compact.  For DW_OP_stack_value we need:
13636      litsize + 1 (DW_OP_stack_value)
13637      and for DW_OP_implicit_value:
13638      1 (DW_OP_implicit_value) + 1 (length) + size.  */
13639   if ((int) DWARF2_ADDR_SIZE >= size && litsize + 1 <= 1 + 1 + size)
13640     {
13641       loc_result = int_loc_descriptor (i);
13642       add_loc_descr (&loc_result,
13643                      new_loc_descr (DW_OP_stack_value, 0, 0));
13644       return loc_result;
13645     }
13646
13647   loc_result = new_loc_descr (DW_OP_implicit_value,
13648                               size, 0);
13649   loc_result->dw_loc_oprnd2.val_class = dw_val_class_const;
13650   loc_result->dw_loc_oprnd2.v.val_int = i;
13651   return loc_result;
13652 }
13653
13654 /* Return a location descriptor that designates a base+offset location.  */
13655
13656 static dw_loc_descr_ref
13657 based_loc_descr (rtx reg, poly_int64 offset,
13658                  enum var_init_status initialized)
13659 {
13660   unsigned int regno;
13661   dw_loc_descr_ref result;
13662   dw_fde_ref fde = cfun->fde;
13663
13664   /* We only use "frame base" when we're sure we're talking about the
13665      post-prologue local stack frame.  We do this by *not* running
13666      register elimination until this point, and recognizing the special
13667      argument pointer and soft frame pointer rtx's.  */
13668   if (reg == arg_pointer_rtx || reg == frame_pointer_rtx)
13669     {
13670       rtx elim = (ira_use_lra_p
13671                   ? lra_eliminate_regs (reg, VOIDmode, NULL_RTX)
13672                   : eliminate_regs (reg, VOIDmode, NULL_RTX));
13673
13674       if (elim != reg)
13675         {
13676           elim = strip_offset_and_add (elim, &offset);
13677           gcc_assert ((SUPPORTS_STACK_ALIGNMENT
13678                        && (elim == hard_frame_pointer_rtx
13679                            || elim == stack_pointer_rtx))
13680                       || elim == (frame_pointer_needed
13681                                   ? hard_frame_pointer_rtx
13682                                   : stack_pointer_rtx));
13683
13684           /* If drap register is used to align stack, use frame
13685              pointer + offset to access stack variables.  If stack
13686              is aligned without drap, use stack pointer + offset to
13687              access stack variables.  */
13688           if (crtl->stack_realign_tried
13689               && reg == frame_pointer_rtx)
13690             {
13691               int base_reg
13692                 = DWARF_FRAME_REGNUM ((fde && fde->drap_reg != INVALID_REGNUM)
13693                                       ? HARD_FRAME_POINTER_REGNUM
13694                                       : REGNO (elim));
13695               return new_reg_loc_descr (base_reg, offset);
13696             }
13697
13698           gcc_assert (frame_pointer_fb_offset_valid);
13699           offset += frame_pointer_fb_offset;
13700           HOST_WIDE_INT const_offset;
13701           if (offset.is_constant (&const_offset))
13702             return new_loc_descr (DW_OP_fbreg, const_offset, 0);
13703           else
13704             {
13705               dw_loc_descr_ref ret = new_loc_descr (DW_OP_fbreg, 0, 0);
13706               loc_descr_plus_const (&ret, offset);
13707               return ret;
13708             }
13709         }
13710     }
13711
13712   regno = REGNO (reg);
13713 #ifdef LEAF_REG_REMAP
13714   if (crtl->uses_only_leaf_regs)
13715     {
13716       int leaf_reg = LEAF_REG_REMAP (regno);
13717       if (leaf_reg != -1)
13718         regno = (unsigned) leaf_reg;
13719     }
13720 #endif
13721   regno = DWARF_FRAME_REGNUM (regno);
13722
13723   HOST_WIDE_INT const_offset;
13724   if (!optimize && fde
13725       && (fde->drap_reg == regno || fde->vdrap_reg == regno)
13726       && offset.is_constant (&const_offset))
13727     {
13728       /* Use cfa+offset to represent the location of arguments passed
13729          on the stack when drap is used to align stack.
13730          Only do this when not optimizing, for optimized code var-tracking
13731          is supposed to track where the arguments live and the register
13732          used as vdrap or drap in some spot might be used for something
13733          else in other part of the routine.  */
13734       return new_loc_descr (DW_OP_fbreg, const_offset, 0);
13735     }
13736
13737   result = new_reg_loc_descr (regno, offset);
13738
13739   if (initialized == VAR_INIT_STATUS_UNINITIALIZED)
13740     add_loc_descr (&result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
13741
13742   return result;
13743 }
13744
13745 /* Return true if this RTL expression describes a base+offset calculation.  */
13746
13747 static inline int
13748 is_based_loc (const_rtx rtl)
13749 {
13750   return (GET_CODE (rtl) == PLUS
13751           && ((REG_P (XEXP (rtl, 0))
13752                && REGNO (XEXP (rtl, 0)) < FIRST_PSEUDO_REGISTER
13753                && CONST_INT_P (XEXP (rtl, 1)))));
13754 }
13755
13756 /* Try to handle TLS MEMs, for which mem_loc_descriptor on XEXP (mem, 0)
13757    failed.  */
13758
13759 static dw_loc_descr_ref
13760 tls_mem_loc_descriptor (rtx mem)
13761 {
13762   tree base;
13763   dw_loc_descr_ref loc_result;
13764
13765   if (MEM_EXPR (mem) == NULL_TREE || !MEM_OFFSET_KNOWN_P (mem))
13766     return NULL;
13767
13768   base = get_base_address (MEM_EXPR (mem));
13769   if (base == NULL
13770       || !VAR_P (base)
13771       || !DECL_THREAD_LOCAL_P (base))
13772     return NULL;
13773
13774   loc_result = loc_descriptor_from_tree (MEM_EXPR (mem), 1, NULL);
13775   if (loc_result == NULL)
13776     return NULL;
13777
13778   if (maybe_ne (MEM_OFFSET (mem), 0))
13779     loc_descr_plus_const (&loc_result, MEM_OFFSET (mem));
13780
13781   return loc_result;
13782 }
13783
13784 /* Output debug info about reason why we failed to expand expression as dwarf
13785    expression.  */
13786
13787 static void
13788 expansion_failed (tree expr, rtx rtl, char const *reason)
13789 {
13790   if (dump_file && (dump_flags & TDF_DETAILS))
13791     {
13792       fprintf (dump_file, "Failed to expand as dwarf: ");
13793       if (expr)
13794         print_generic_expr (dump_file, expr, dump_flags);
13795       if (rtl)
13796         {
13797           fprintf (dump_file, "\n");
13798           print_rtl (dump_file, rtl);
13799         }
13800       fprintf (dump_file, "\nReason: %s\n", reason);
13801     }
13802 }
13803
13804 /* Helper function for const_ok_for_output.  */
13805
13806 static bool
13807 const_ok_for_output_1 (rtx rtl)
13808 {
13809   if (targetm.const_not_ok_for_debug_p (rtl))
13810     {
13811       if (GET_CODE (rtl) != UNSPEC)
13812         {
13813           expansion_failed (NULL_TREE, rtl,
13814                             "Expression rejected for debug by the backend.\n");
13815           return false;
13816         }
13817
13818       /* If delegitimize_address couldn't do anything with the UNSPEC, and
13819          the target hook doesn't explicitly allow it in debug info, assume
13820          we can't express it in the debug info.  */
13821       /* Don't complain about TLS UNSPECs, those are just too hard to
13822          delegitimize.  Note this could be a non-decl SYMBOL_REF such as
13823          one in a constant pool entry, so testing SYMBOL_REF_TLS_MODEL
13824          rather than DECL_THREAD_LOCAL_P is not just an optimization.  */
13825       if (flag_checking
13826           && (XVECLEN (rtl, 0) == 0
13827               || GET_CODE (XVECEXP (rtl, 0, 0)) != SYMBOL_REF
13828               || SYMBOL_REF_TLS_MODEL (XVECEXP (rtl, 0, 0)) == TLS_MODEL_NONE))
13829         inform (current_function_decl
13830                 ? DECL_SOURCE_LOCATION (current_function_decl)
13831                 : UNKNOWN_LOCATION,
13832 #if NUM_UNSPEC_VALUES > 0
13833                 "non-delegitimized UNSPEC %s (%d) found in variable location",
13834                 ((XINT (rtl, 1) >= 0 && XINT (rtl, 1) < NUM_UNSPEC_VALUES)
13835                  ? unspec_strings[XINT (rtl, 1)] : "unknown"),
13836                 XINT (rtl, 1));
13837 #else
13838                 "non-delegitimized UNSPEC %d found in variable location",
13839                 XINT (rtl, 1));
13840 #endif
13841       expansion_failed (NULL_TREE, rtl,
13842                         "UNSPEC hasn't been delegitimized.\n");
13843       return false;
13844     }
13845
13846   if (CONST_POLY_INT_P (rtl))
13847     return false;
13848
13849   if (targetm.const_not_ok_for_debug_p (rtl))
13850     {
13851       expansion_failed (NULL_TREE, rtl,
13852                         "Expression rejected for debug by the backend.\n");
13853       return false;
13854     }
13855
13856   /* FIXME: Refer to PR60655. It is possible for simplification
13857      of rtl expressions in var tracking to produce such expressions.
13858      We should really identify / validate expressions
13859      enclosed in CONST that can be handled by assemblers on various
13860      targets and only handle legitimate cases here.  */
13861   switch (GET_CODE (rtl))
13862     {
13863     case SYMBOL_REF:
13864       break;
13865     case NOT:
13866     case NEG:
13867       return false;
13868     default:
13869       return true;
13870     }
13871
13872   if (CONSTANT_POOL_ADDRESS_P (rtl))
13873     {
13874       bool marked;
13875       get_pool_constant_mark (rtl, &marked);
13876       /* If all references to this pool constant were optimized away,
13877          it was not output and thus we can't represent it.  */
13878       if (!marked)
13879         {
13880           expansion_failed (NULL_TREE, rtl,
13881                             "Constant was removed from constant pool.\n");
13882           return false;
13883         }
13884     }
13885
13886   if (SYMBOL_REF_TLS_MODEL (rtl) != TLS_MODEL_NONE)
13887     return false;
13888
13889   /* Avoid references to external symbols in debug info, on several targets
13890      the linker might even refuse to link when linking a shared library,
13891      and in many other cases the relocations for .debug_info/.debug_loc are
13892      dropped, so the address becomes zero anyway.  Hidden symbols, guaranteed
13893      to be defined within the same shared library or executable are fine.  */
13894   if (SYMBOL_REF_EXTERNAL_P (rtl))
13895     {
13896       tree decl = SYMBOL_REF_DECL (rtl);
13897
13898       if (decl == NULL || !targetm.binds_local_p (decl))
13899         {
13900           expansion_failed (NULL_TREE, rtl,
13901                             "Symbol not defined in current TU.\n");
13902           return false;
13903         }
13904     }
13905
13906   return true;
13907 }
13908
13909 /* Return true if constant RTL can be emitted in DW_OP_addr or
13910    DW_AT_const_value.  TLS SYMBOL_REFs, external SYMBOL_REFs or
13911    non-marked constant pool SYMBOL_REFs can't be referenced in it.  */
13912
13913 static bool
13914 const_ok_for_output (rtx rtl)
13915 {
13916   if (GET_CODE (rtl) == SYMBOL_REF)
13917     return const_ok_for_output_1 (rtl);
13918
13919   if (GET_CODE (rtl) == CONST)
13920     {
13921       subrtx_var_iterator::array_type array;
13922       FOR_EACH_SUBRTX_VAR (iter, array, XEXP (rtl, 0), ALL)
13923         if (!const_ok_for_output_1 (*iter))
13924           return false;
13925       return true;
13926     }
13927
13928   return true;
13929 }
13930
13931 /* Return a reference to DW_TAG_base_type corresponding to MODE and UNSIGNEDP
13932    if possible, NULL otherwise.  */
13933
13934 static dw_die_ref
13935 base_type_for_mode (machine_mode mode, bool unsignedp)
13936 {
13937   dw_die_ref type_die;
13938   tree type = lang_hooks.types.type_for_mode (mode, unsignedp);
13939
13940   if (type == NULL)
13941     return NULL;
13942   switch (TREE_CODE (type))
13943     {
13944     case INTEGER_TYPE:
13945     case REAL_TYPE:
13946       break;
13947     default:
13948       return NULL;
13949     }
13950   type_die = lookup_type_die (type);
13951   if (!type_die)
13952     type_die = modified_type_die (type, TYPE_UNQUALIFIED, false,
13953                                   comp_unit_die ());
13954   if (type_die == NULL || type_die->die_tag != DW_TAG_base_type)
13955     return NULL;
13956   return type_die;
13957 }
13958
13959 /* For OP descriptor assumed to be in unsigned MODE, convert it to a unsigned
13960    type matching MODE, or, if MODE is narrower than or as wide as
13961    DWARF2_ADDR_SIZE, untyped.  Return NULL if the conversion is not
13962    possible.  */
13963
13964 static dw_loc_descr_ref
13965 convert_descriptor_to_mode (scalar_int_mode mode, dw_loc_descr_ref op)
13966 {
13967   machine_mode outer_mode = mode;
13968   dw_die_ref type_die;
13969   dw_loc_descr_ref cvt;
13970
13971   if (GET_MODE_SIZE (mode) <= DWARF2_ADDR_SIZE)
13972     {
13973       add_loc_descr (&op, new_loc_descr (dwarf_OP (DW_OP_convert), 0, 0));
13974       return op;
13975     }
13976   type_die = base_type_for_mode (outer_mode, 1);
13977   if (type_die == NULL)
13978     return NULL;
13979   cvt = new_loc_descr (dwarf_OP (DW_OP_convert), 0, 0);
13980   cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
13981   cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
13982   cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
13983   add_loc_descr (&op, cvt);
13984   return op;
13985 }
13986
13987 /* Return location descriptor for comparison OP with operands OP0 and OP1.  */
13988
13989 static dw_loc_descr_ref
13990 compare_loc_descriptor (enum dwarf_location_atom op, dw_loc_descr_ref op0,
13991                         dw_loc_descr_ref op1)
13992 {
13993   dw_loc_descr_ref ret = op0;
13994   add_loc_descr (&ret, op1);
13995   add_loc_descr (&ret, new_loc_descr (op, 0, 0));
13996   if (STORE_FLAG_VALUE != 1)
13997     {
13998       add_loc_descr (&ret, int_loc_descriptor (STORE_FLAG_VALUE));
13999       add_loc_descr (&ret, new_loc_descr (DW_OP_mul, 0, 0));
14000     }
14001   return ret;
14002 }
14003
14004 /* Subroutine of scompare_loc_descriptor for the case in which we're
14005    comparing two scalar integer operands OP0 and OP1 that have mode OP_MODE,
14006    and in which OP_MODE is bigger than DWARF2_ADDR_SIZE.  */
14007
14008 static dw_loc_descr_ref
14009 scompare_loc_descriptor_wide (enum dwarf_location_atom op,
14010                               scalar_int_mode op_mode,
14011                               dw_loc_descr_ref op0, dw_loc_descr_ref op1)
14012 {
14013   dw_die_ref type_die = base_type_for_mode (op_mode, 0);
14014   dw_loc_descr_ref cvt;
14015
14016   if (type_die == NULL)
14017     return NULL;
14018   cvt = new_loc_descr (dwarf_OP (DW_OP_convert), 0, 0);
14019   cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
14020   cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
14021   cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
14022   add_loc_descr (&op0, cvt);
14023   cvt = new_loc_descr (dwarf_OP (DW_OP_convert), 0, 0);
14024   cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
14025   cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
14026   cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
14027   add_loc_descr (&op1, cvt);
14028   return compare_loc_descriptor (op, op0, op1);
14029 }
14030
14031 /* Subroutine of scompare_loc_descriptor for the case in which we're
14032    comparing two scalar integer operands OP0 and OP1 that have mode OP_MODE,
14033    and in which OP_MODE is smaller than DWARF2_ADDR_SIZE.  */
14034
14035 static dw_loc_descr_ref
14036 scompare_loc_descriptor_narrow (enum dwarf_location_atom op, rtx rtl,
14037                                 scalar_int_mode op_mode,
14038                                 dw_loc_descr_ref op0, dw_loc_descr_ref op1)
14039 {
14040   int shift = (DWARF2_ADDR_SIZE - GET_MODE_SIZE (op_mode)) * BITS_PER_UNIT;
14041   /* For eq/ne, if the operands are known to be zero-extended,
14042      there is no need to do the fancy shifting up.  */
14043   if (op == DW_OP_eq || op == DW_OP_ne)
14044     {
14045       dw_loc_descr_ref last0, last1;
14046       for (last0 = op0; last0->dw_loc_next != NULL; last0 = last0->dw_loc_next)
14047         ;
14048       for (last1 = op1; last1->dw_loc_next != NULL; last1 = last1->dw_loc_next)
14049         ;
14050       /* deref_size zero extends, and for constants we can check
14051          whether they are zero extended or not.  */
14052       if (((last0->dw_loc_opc == DW_OP_deref_size
14053             && last0->dw_loc_oprnd1.v.val_int <= GET_MODE_SIZE (op_mode))
14054            || (CONST_INT_P (XEXP (rtl, 0))
14055                && (unsigned HOST_WIDE_INT) INTVAL (XEXP (rtl, 0))
14056                   == (INTVAL (XEXP (rtl, 0)) & GET_MODE_MASK (op_mode))))
14057           && ((last1->dw_loc_opc == DW_OP_deref_size
14058                && last1->dw_loc_oprnd1.v.val_int <= GET_MODE_SIZE (op_mode))
14059               || (CONST_INT_P (XEXP (rtl, 1))
14060                   && (unsigned HOST_WIDE_INT) INTVAL (XEXP (rtl, 1))
14061                      == (INTVAL (XEXP (rtl, 1)) & GET_MODE_MASK (op_mode)))))
14062         return compare_loc_descriptor (op, op0, op1);
14063
14064       /* EQ/NE comparison against constant in narrower type than
14065          DWARF2_ADDR_SIZE can be performed either as
14066          DW_OP_const1u <shift> DW_OP_shl DW_OP_const* <cst << shift>
14067          DW_OP_{eq,ne}
14068          or
14069          DW_OP_const*u <mode_mask> DW_OP_and DW_OP_const* <cst & mode_mask>
14070          DW_OP_{eq,ne}.  Pick whatever is shorter.  */
14071       if (CONST_INT_P (XEXP (rtl, 1))
14072           && GET_MODE_BITSIZE (op_mode) < HOST_BITS_PER_WIDE_INT
14073           && (size_of_int_loc_descriptor (shift) + 1
14074               + size_of_int_loc_descriptor (UINTVAL (XEXP (rtl, 1)) << shift)
14075               >= size_of_int_loc_descriptor (GET_MODE_MASK (op_mode)) + 1
14076                  + size_of_int_loc_descriptor (INTVAL (XEXP (rtl, 1))
14077                                                & GET_MODE_MASK (op_mode))))
14078         {
14079           add_loc_descr (&op0, int_loc_descriptor (GET_MODE_MASK (op_mode)));
14080           add_loc_descr (&op0, new_loc_descr (DW_OP_and, 0, 0));
14081           op1 = int_loc_descriptor (INTVAL (XEXP (rtl, 1))
14082                                     & GET_MODE_MASK (op_mode));
14083           return compare_loc_descriptor (op, op0, op1);
14084         }
14085     }
14086   add_loc_descr (&op0, int_loc_descriptor (shift));
14087   add_loc_descr (&op0, new_loc_descr (DW_OP_shl, 0, 0));
14088   if (CONST_INT_P (XEXP (rtl, 1)))
14089     op1 = int_loc_descriptor (UINTVAL (XEXP (rtl, 1)) << shift);
14090   else
14091     {
14092       add_loc_descr (&op1, int_loc_descriptor (shift));
14093       add_loc_descr (&op1, new_loc_descr (DW_OP_shl, 0, 0));
14094     }
14095   return compare_loc_descriptor (op, op0, op1);
14096 }
14097
14098 /* Return location descriptor for unsigned comparison OP RTL.  */
14099
14100 static dw_loc_descr_ref
14101 scompare_loc_descriptor (enum dwarf_location_atom op, rtx rtl,
14102                          machine_mode mem_mode)
14103 {
14104   machine_mode op_mode = GET_MODE (XEXP (rtl, 0));
14105   dw_loc_descr_ref op0, op1;
14106
14107   if (op_mode == VOIDmode)
14108     op_mode = GET_MODE (XEXP (rtl, 1));
14109   if (op_mode == VOIDmode)
14110     return NULL;
14111
14112   scalar_int_mode int_op_mode;
14113   if (dwarf_strict
14114       && dwarf_version < 5
14115       && (!is_a <scalar_int_mode> (op_mode, &int_op_mode)
14116           || GET_MODE_SIZE (int_op_mode) > DWARF2_ADDR_SIZE))
14117     return NULL;
14118
14119   op0 = mem_loc_descriptor (XEXP (rtl, 0), op_mode, mem_mode,
14120                             VAR_INIT_STATUS_INITIALIZED);
14121   op1 = mem_loc_descriptor (XEXP (rtl, 1), op_mode, mem_mode,
14122                             VAR_INIT_STATUS_INITIALIZED);
14123
14124   if (op0 == NULL || op1 == NULL)
14125     return NULL;
14126
14127   if (is_a <scalar_int_mode> (op_mode, &int_op_mode))
14128     {
14129       if (GET_MODE_SIZE (int_op_mode) < DWARF2_ADDR_SIZE)
14130         return scompare_loc_descriptor_narrow (op, rtl, int_op_mode, op0, op1);
14131
14132       if (GET_MODE_SIZE (int_op_mode) > DWARF2_ADDR_SIZE)
14133         return scompare_loc_descriptor_wide (op, int_op_mode, op0, op1);
14134     }
14135   return compare_loc_descriptor (op, op0, op1);
14136 }
14137
14138 /* Return location descriptor for unsigned comparison OP RTL.  */
14139
14140 static dw_loc_descr_ref
14141 ucompare_loc_descriptor (enum dwarf_location_atom op, rtx rtl,
14142                          machine_mode mem_mode)
14143 {
14144   dw_loc_descr_ref op0, op1;
14145
14146   machine_mode test_op_mode = GET_MODE (XEXP (rtl, 0));
14147   if (test_op_mode == VOIDmode)
14148     test_op_mode = GET_MODE (XEXP (rtl, 1));
14149
14150   scalar_int_mode op_mode;
14151   if (!is_a <scalar_int_mode> (test_op_mode, &op_mode))
14152     return NULL;
14153
14154   if (dwarf_strict
14155       && dwarf_version < 5
14156       && GET_MODE_SIZE (op_mode) > DWARF2_ADDR_SIZE)
14157     return NULL;
14158
14159   op0 = mem_loc_descriptor (XEXP (rtl, 0), op_mode, mem_mode,
14160                             VAR_INIT_STATUS_INITIALIZED);
14161   op1 = mem_loc_descriptor (XEXP (rtl, 1), op_mode, mem_mode,
14162                             VAR_INIT_STATUS_INITIALIZED);
14163
14164   if (op0 == NULL || op1 == NULL)
14165     return NULL;
14166
14167   if (GET_MODE_SIZE (op_mode) < DWARF2_ADDR_SIZE)
14168     {
14169       HOST_WIDE_INT mask = GET_MODE_MASK (op_mode);
14170       dw_loc_descr_ref last0, last1;
14171       for (last0 = op0; last0->dw_loc_next != NULL; last0 = last0->dw_loc_next)
14172         ;
14173       for (last1 = op1; last1->dw_loc_next != NULL; last1 = last1->dw_loc_next)
14174         ;
14175       if (CONST_INT_P (XEXP (rtl, 0)))
14176         op0 = int_loc_descriptor (INTVAL (XEXP (rtl, 0)) & mask);
14177       /* deref_size zero extends, so no need to mask it again.  */
14178       else if (last0->dw_loc_opc != DW_OP_deref_size
14179                || last0->dw_loc_oprnd1.v.val_int > GET_MODE_SIZE (op_mode))
14180         {
14181           add_loc_descr (&op0, int_loc_descriptor (mask));
14182           add_loc_descr (&op0, new_loc_descr (DW_OP_and, 0, 0));
14183         }
14184       if (CONST_INT_P (XEXP (rtl, 1)))
14185         op1 = int_loc_descriptor (INTVAL (XEXP (rtl, 1)) & mask);
14186       /* deref_size zero extends, so no need to mask it again.  */
14187       else if (last1->dw_loc_opc != DW_OP_deref_size
14188                || last1->dw_loc_oprnd1.v.val_int > GET_MODE_SIZE (op_mode))
14189         {
14190           add_loc_descr (&op1, int_loc_descriptor (mask));
14191           add_loc_descr (&op1, new_loc_descr (DW_OP_and, 0, 0));
14192         }
14193     }
14194   else if (GET_MODE_SIZE (op_mode) == DWARF2_ADDR_SIZE)
14195     {
14196       HOST_WIDE_INT bias = 1;
14197       bias <<= (DWARF2_ADDR_SIZE * BITS_PER_UNIT - 1);
14198       add_loc_descr (&op0, new_loc_descr (DW_OP_plus_uconst, bias, 0));
14199       if (CONST_INT_P (XEXP (rtl, 1)))
14200         op1 = int_loc_descriptor ((unsigned HOST_WIDE_INT) bias
14201                                   + INTVAL (XEXP (rtl, 1)));
14202       else
14203         add_loc_descr (&op1, new_loc_descr (DW_OP_plus_uconst,
14204                                             bias, 0));
14205     }
14206   return compare_loc_descriptor (op, op0, op1);
14207 }
14208
14209 /* Return location descriptor for {U,S}{MIN,MAX}.  */
14210
14211 static dw_loc_descr_ref
14212 minmax_loc_descriptor (rtx rtl, machine_mode mode,
14213                        machine_mode mem_mode)
14214 {
14215   enum dwarf_location_atom op;
14216   dw_loc_descr_ref op0, op1, ret;
14217   dw_loc_descr_ref bra_node, drop_node;
14218
14219   scalar_int_mode int_mode;
14220   if (dwarf_strict
14221       && dwarf_version < 5
14222       && (!is_a <scalar_int_mode> (mode, &int_mode)
14223           || GET_MODE_SIZE (int_mode) > DWARF2_ADDR_SIZE))
14224     return NULL;
14225
14226   op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
14227                             VAR_INIT_STATUS_INITIALIZED);
14228   op1 = mem_loc_descriptor (XEXP (rtl, 1), mode, mem_mode,
14229                             VAR_INIT_STATUS_INITIALIZED);
14230
14231   if (op0 == NULL || op1 == NULL)
14232     return NULL;
14233
14234   add_loc_descr (&op0, new_loc_descr (DW_OP_dup, 0, 0));
14235   add_loc_descr (&op1, new_loc_descr (DW_OP_swap, 0, 0));
14236   add_loc_descr (&op1, new_loc_descr (DW_OP_over, 0, 0));
14237   if (GET_CODE (rtl) == UMIN || GET_CODE (rtl) == UMAX)
14238     {
14239       /* Checked by the caller.  */
14240       int_mode = as_a <scalar_int_mode> (mode);
14241       if (GET_MODE_SIZE (int_mode) < DWARF2_ADDR_SIZE)
14242         {
14243           HOST_WIDE_INT mask = GET_MODE_MASK (int_mode);
14244           add_loc_descr (&op0, int_loc_descriptor (mask));
14245           add_loc_descr (&op0, new_loc_descr (DW_OP_and, 0, 0));
14246           add_loc_descr (&op1, int_loc_descriptor (mask));
14247           add_loc_descr (&op1, new_loc_descr (DW_OP_and, 0, 0));
14248         }
14249       else if (GET_MODE_SIZE (int_mode) == DWARF2_ADDR_SIZE)
14250         {
14251           HOST_WIDE_INT bias = 1;
14252           bias <<= (DWARF2_ADDR_SIZE * BITS_PER_UNIT - 1);
14253           add_loc_descr (&op0, new_loc_descr (DW_OP_plus_uconst, bias, 0));
14254           add_loc_descr (&op1, new_loc_descr (DW_OP_plus_uconst, bias, 0));
14255         }
14256     }
14257   else if (is_a <scalar_int_mode> (mode, &int_mode)
14258            && GET_MODE_SIZE (int_mode) < DWARF2_ADDR_SIZE)
14259     {
14260       int shift = (DWARF2_ADDR_SIZE - GET_MODE_SIZE (int_mode)) * BITS_PER_UNIT;
14261       add_loc_descr (&op0, int_loc_descriptor (shift));
14262       add_loc_descr (&op0, new_loc_descr (DW_OP_shl, 0, 0));
14263       add_loc_descr (&op1, int_loc_descriptor (shift));
14264       add_loc_descr (&op1, new_loc_descr (DW_OP_shl, 0, 0));
14265     }
14266   else if (is_a <scalar_int_mode> (mode, &int_mode)
14267            && GET_MODE_SIZE (int_mode) > DWARF2_ADDR_SIZE)
14268     {
14269       dw_die_ref type_die = base_type_for_mode (int_mode, 0);
14270       dw_loc_descr_ref cvt;
14271       if (type_die == NULL)
14272         return NULL;
14273       cvt = new_loc_descr (dwarf_OP (DW_OP_convert), 0, 0);
14274       cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
14275       cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
14276       cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
14277       add_loc_descr (&op0, cvt);
14278       cvt = new_loc_descr (dwarf_OP (DW_OP_convert), 0, 0);
14279       cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
14280       cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
14281       cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
14282       add_loc_descr (&op1, cvt);
14283     }
14284
14285   if (GET_CODE (rtl) == SMIN || GET_CODE (rtl) == UMIN)
14286     op = DW_OP_lt;
14287   else
14288     op = DW_OP_gt;
14289   ret = op0;
14290   add_loc_descr (&ret, op1);
14291   add_loc_descr (&ret, new_loc_descr (op, 0, 0));
14292   bra_node = new_loc_descr (DW_OP_bra, 0, 0);
14293   add_loc_descr (&ret, bra_node);
14294   add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
14295   drop_node = new_loc_descr (DW_OP_drop, 0, 0);
14296   add_loc_descr (&ret, drop_node);
14297   bra_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
14298   bra_node->dw_loc_oprnd1.v.val_loc = drop_node;
14299   if ((GET_CODE (rtl) == SMIN || GET_CODE (rtl) == SMAX)
14300       && is_a <scalar_int_mode> (mode, &int_mode)
14301       && GET_MODE_SIZE (int_mode) > DWARF2_ADDR_SIZE)
14302     ret = convert_descriptor_to_mode (int_mode, ret);
14303   return ret;
14304 }
14305
14306 /* Helper function for mem_loc_descriptor.  Perform OP binary op,
14307    but after converting arguments to type_die, afterwards
14308    convert back to unsigned.  */
14309
14310 static dw_loc_descr_ref
14311 typed_binop (enum dwarf_location_atom op, rtx rtl, dw_die_ref type_die,
14312              scalar_int_mode mode, machine_mode mem_mode)
14313 {
14314   dw_loc_descr_ref cvt, op0, op1;
14315
14316   if (type_die == NULL)
14317     return NULL;
14318   op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
14319                             VAR_INIT_STATUS_INITIALIZED);
14320   op1 = mem_loc_descriptor (XEXP (rtl, 1), mode, mem_mode,
14321                             VAR_INIT_STATUS_INITIALIZED);
14322   if (op0 == NULL || op1 == NULL)
14323     return NULL;
14324   cvt = new_loc_descr (dwarf_OP (DW_OP_convert), 0, 0);
14325   cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
14326   cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
14327   cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
14328   add_loc_descr (&op0, cvt);
14329   cvt = new_loc_descr (dwarf_OP (DW_OP_convert), 0, 0);
14330   cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
14331   cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
14332   cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
14333   add_loc_descr (&op1, cvt);
14334   add_loc_descr (&op0, op1);
14335   add_loc_descr (&op0, new_loc_descr (op, 0, 0));
14336   return convert_descriptor_to_mode (mode, op0);
14337 }
14338
14339 /* CLZ (where constV is CLZ_DEFINED_VALUE_AT_ZERO computed value,
14340    const0 is DW_OP_lit0 or corresponding typed constant,
14341    const1 is DW_OP_lit1 or corresponding typed constant
14342    and constMSB is constant with just the MSB bit set
14343    for the mode):
14344        DW_OP_dup DW_OP_bra <L1> DW_OP_drop constV DW_OP_skip <L4>
14345    L1: const0 DW_OP_swap
14346    L2: DW_OP_dup constMSB DW_OP_and DW_OP_bra <L3> const1 DW_OP_shl
14347        DW_OP_swap DW_OP_plus_uconst <1> DW_OP_swap DW_OP_skip <L2>
14348    L3: DW_OP_drop
14349    L4: DW_OP_nop
14350
14351    CTZ is similar:
14352        DW_OP_dup DW_OP_bra <L1> DW_OP_drop constV DW_OP_skip <L4>
14353    L1: const0 DW_OP_swap
14354    L2: DW_OP_dup const1 DW_OP_and DW_OP_bra <L3> const1 DW_OP_shr
14355        DW_OP_swap DW_OP_plus_uconst <1> DW_OP_swap DW_OP_skip <L2>
14356    L3: DW_OP_drop
14357    L4: DW_OP_nop
14358
14359    FFS is similar:
14360        DW_OP_dup DW_OP_bra <L1> DW_OP_drop const0 DW_OP_skip <L4>
14361    L1: const1 DW_OP_swap
14362    L2: DW_OP_dup const1 DW_OP_and DW_OP_bra <L3> const1 DW_OP_shr
14363        DW_OP_swap DW_OP_plus_uconst <1> DW_OP_swap DW_OP_skip <L2>
14364    L3: DW_OP_drop
14365    L4: DW_OP_nop  */
14366
14367 static dw_loc_descr_ref
14368 clz_loc_descriptor (rtx rtl, scalar_int_mode mode,
14369                     machine_mode mem_mode)
14370 {
14371   dw_loc_descr_ref op0, ret, tmp;
14372   HOST_WIDE_INT valv;
14373   dw_loc_descr_ref l1jump, l1label;
14374   dw_loc_descr_ref l2jump, l2label;
14375   dw_loc_descr_ref l3jump, l3label;
14376   dw_loc_descr_ref l4jump, l4label;
14377   rtx msb;
14378
14379   if (GET_MODE (XEXP (rtl, 0)) != mode)
14380     return NULL;
14381
14382   op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
14383                             VAR_INIT_STATUS_INITIALIZED);
14384   if (op0 == NULL)
14385     return NULL;
14386   ret = op0;
14387   if (GET_CODE (rtl) == CLZ)
14388     {
14389       if (!CLZ_DEFINED_VALUE_AT_ZERO (mode, valv))
14390         valv = GET_MODE_BITSIZE (mode);
14391     }
14392   else if (GET_CODE (rtl) == FFS)
14393     valv = 0;
14394   else if (!CTZ_DEFINED_VALUE_AT_ZERO (mode, valv))
14395     valv = GET_MODE_BITSIZE (mode);
14396   add_loc_descr (&ret, new_loc_descr (DW_OP_dup, 0, 0));
14397   l1jump = new_loc_descr (DW_OP_bra, 0, 0);
14398   add_loc_descr (&ret, l1jump);
14399   add_loc_descr (&ret, new_loc_descr (DW_OP_drop, 0, 0));
14400   tmp = mem_loc_descriptor (GEN_INT (valv), mode, mem_mode,
14401                             VAR_INIT_STATUS_INITIALIZED);
14402   if (tmp == NULL)
14403     return NULL;
14404   add_loc_descr (&ret, tmp);
14405   l4jump = new_loc_descr (DW_OP_skip, 0, 0);
14406   add_loc_descr (&ret, l4jump);
14407   l1label = mem_loc_descriptor (GET_CODE (rtl) == FFS
14408                                 ? const1_rtx : const0_rtx,
14409                                 mode, mem_mode,
14410                                 VAR_INIT_STATUS_INITIALIZED);
14411   if (l1label == NULL)
14412     return NULL;
14413   add_loc_descr (&ret, l1label);
14414   add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
14415   l2label = new_loc_descr (DW_OP_dup, 0, 0);
14416   add_loc_descr (&ret, l2label);
14417   if (GET_CODE (rtl) != CLZ)
14418     msb = const1_rtx;
14419   else if (GET_MODE_BITSIZE (mode) <= HOST_BITS_PER_WIDE_INT)
14420     msb = GEN_INT (HOST_WIDE_INT_1U
14421                    << (GET_MODE_BITSIZE (mode) - 1));
14422   else
14423     msb = immed_wide_int_const
14424       (wi::set_bit_in_zero (GET_MODE_PRECISION (mode) - 1,
14425                             GET_MODE_PRECISION (mode)), mode);
14426   if (GET_CODE (msb) == CONST_INT && INTVAL (msb) < 0)
14427     tmp = new_loc_descr (HOST_BITS_PER_WIDE_INT == 32
14428                          ? DW_OP_const4u : HOST_BITS_PER_WIDE_INT == 64
14429                          ? DW_OP_const8u : DW_OP_constu, INTVAL (msb), 0);
14430   else
14431     tmp = mem_loc_descriptor (msb, mode, mem_mode,
14432                               VAR_INIT_STATUS_INITIALIZED);
14433   if (tmp == NULL)
14434     return NULL;
14435   add_loc_descr (&ret, tmp);
14436   add_loc_descr (&ret, new_loc_descr (DW_OP_and, 0, 0));
14437   l3jump = new_loc_descr (DW_OP_bra, 0, 0);
14438   add_loc_descr (&ret, l3jump);
14439   tmp = mem_loc_descriptor (const1_rtx, mode, mem_mode,
14440                             VAR_INIT_STATUS_INITIALIZED);
14441   if (tmp == NULL)
14442     return NULL;
14443   add_loc_descr (&ret, tmp);
14444   add_loc_descr (&ret, new_loc_descr (GET_CODE (rtl) == CLZ
14445                                       ? DW_OP_shl : DW_OP_shr, 0, 0));
14446   add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
14447   add_loc_descr (&ret, new_loc_descr (DW_OP_plus_uconst, 1, 0));
14448   add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
14449   l2jump = new_loc_descr (DW_OP_skip, 0, 0);
14450   add_loc_descr (&ret, l2jump);
14451   l3label = new_loc_descr (DW_OP_drop, 0, 0);
14452   add_loc_descr (&ret, l3label);
14453   l4label = new_loc_descr (DW_OP_nop, 0, 0);
14454   add_loc_descr (&ret, l4label);
14455   l1jump->dw_loc_oprnd1.val_class = dw_val_class_loc;
14456   l1jump->dw_loc_oprnd1.v.val_loc = l1label;
14457   l2jump->dw_loc_oprnd1.val_class = dw_val_class_loc;
14458   l2jump->dw_loc_oprnd1.v.val_loc = l2label;
14459   l3jump->dw_loc_oprnd1.val_class = dw_val_class_loc;
14460   l3jump->dw_loc_oprnd1.v.val_loc = l3label;
14461   l4jump->dw_loc_oprnd1.val_class = dw_val_class_loc;
14462   l4jump->dw_loc_oprnd1.v.val_loc = l4label;
14463   return ret;
14464 }
14465
14466 /* POPCOUNT (const0 is DW_OP_lit0 or corresponding typed constant,
14467    const1 is DW_OP_lit1 or corresponding typed constant):
14468        const0 DW_OP_swap
14469    L1: DW_OP_dup DW_OP_bra <L2> DW_OP_dup DW_OP_rot const1 DW_OP_and
14470        DW_OP_plus DW_OP_swap const1 DW_OP_shr DW_OP_skip <L1>
14471    L2: DW_OP_drop
14472
14473    PARITY is similar:
14474    L1: DW_OP_dup DW_OP_bra <L2> DW_OP_dup DW_OP_rot const1 DW_OP_and
14475        DW_OP_xor DW_OP_swap const1 DW_OP_shr DW_OP_skip <L1>
14476    L2: DW_OP_drop  */
14477
14478 static dw_loc_descr_ref
14479 popcount_loc_descriptor (rtx rtl, scalar_int_mode mode,
14480                          machine_mode mem_mode)
14481 {
14482   dw_loc_descr_ref op0, ret, tmp;
14483   dw_loc_descr_ref l1jump, l1label;
14484   dw_loc_descr_ref l2jump, l2label;
14485
14486   if (GET_MODE (XEXP (rtl, 0)) != mode)
14487     return NULL;
14488
14489   op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
14490                             VAR_INIT_STATUS_INITIALIZED);
14491   if (op0 == NULL)
14492     return NULL;
14493   ret = op0;
14494   tmp = mem_loc_descriptor (const0_rtx, mode, mem_mode,
14495                             VAR_INIT_STATUS_INITIALIZED);
14496   if (tmp == NULL)
14497     return NULL;
14498   add_loc_descr (&ret, tmp);
14499   add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
14500   l1label = new_loc_descr (DW_OP_dup, 0, 0);
14501   add_loc_descr (&ret, l1label);
14502   l2jump = new_loc_descr (DW_OP_bra, 0, 0);
14503   add_loc_descr (&ret, l2jump);
14504   add_loc_descr (&ret, new_loc_descr (DW_OP_dup, 0, 0));
14505   add_loc_descr (&ret, new_loc_descr (DW_OP_rot, 0, 0));
14506   tmp = mem_loc_descriptor (const1_rtx, mode, mem_mode,
14507                             VAR_INIT_STATUS_INITIALIZED);
14508   if (tmp == NULL)
14509     return NULL;
14510   add_loc_descr (&ret, tmp);
14511   add_loc_descr (&ret, new_loc_descr (DW_OP_and, 0, 0));
14512   add_loc_descr (&ret, new_loc_descr (GET_CODE (rtl) == POPCOUNT
14513                                       ? DW_OP_plus : DW_OP_xor, 0, 0));
14514   add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
14515   tmp = mem_loc_descriptor (const1_rtx, mode, mem_mode,
14516                             VAR_INIT_STATUS_INITIALIZED);
14517   add_loc_descr (&ret, tmp);
14518   add_loc_descr (&ret, new_loc_descr (DW_OP_shr, 0, 0));
14519   l1jump = new_loc_descr (DW_OP_skip, 0, 0);
14520   add_loc_descr (&ret, l1jump);
14521   l2label = new_loc_descr (DW_OP_drop, 0, 0);
14522   add_loc_descr (&ret, l2label);
14523   l1jump->dw_loc_oprnd1.val_class = dw_val_class_loc;
14524   l1jump->dw_loc_oprnd1.v.val_loc = l1label;
14525   l2jump->dw_loc_oprnd1.val_class = dw_val_class_loc;
14526   l2jump->dw_loc_oprnd1.v.val_loc = l2label;
14527   return ret;
14528 }
14529
14530 /* BSWAP (constS is initial shift count, either 56 or 24):
14531        constS const0
14532    L1: DW_OP_pick <2> constS DW_OP_pick <3> DW_OP_minus DW_OP_shr
14533        const255 DW_OP_and DW_OP_pick <2> DW_OP_shl DW_OP_or
14534        DW_OP_swap DW_OP_dup const0 DW_OP_eq DW_OP_bra <L2> const8
14535        DW_OP_minus DW_OP_swap DW_OP_skip <L1>
14536    L2: DW_OP_drop DW_OP_swap DW_OP_drop  */
14537
14538 static dw_loc_descr_ref
14539 bswap_loc_descriptor (rtx rtl, scalar_int_mode mode,
14540                       machine_mode mem_mode)
14541 {
14542   dw_loc_descr_ref op0, ret, tmp;
14543   dw_loc_descr_ref l1jump, l1label;
14544   dw_loc_descr_ref l2jump, l2label;
14545
14546   if (BITS_PER_UNIT != 8
14547       || (GET_MODE_BITSIZE (mode) != 32
14548           && GET_MODE_BITSIZE (mode) != 64))
14549     return NULL;
14550
14551   op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
14552                             VAR_INIT_STATUS_INITIALIZED);
14553   if (op0 == NULL)
14554     return NULL;
14555
14556   ret = op0;
14557   tmp = mem_loc_descriptor (GEN_INT (GET_MODE_BITSIZE (mode) - 8),
14558                             mode, mem_mode,
14559                             VAR_INIT_STATUS_INITIALIZED);
14560   if (tmp == NULL)
14561     return NULL;
14562   add_loc_descr (&ret, tmp);
14563   tmp = mem_loc_descriptor (const0_rtx, mode, mem_mode,
14564                             VAR_INIT_STATUS_INITIALIZED);
14565   if (tmp == NULL)
14566     return NULL;
14567   add_loc_descr (&ret, tmp);
14568   l1label = new_loc_descr (DW_OP_pick, 2, 0);
14569   add_loc_descr (&ret, l1label);
14570   tmp = mem_loc_descriptor (GEN_INT (GET_MODE_BITSIZE (mode) - 8),
14571                             mode, mem_mode,
14572                             VAR_INIT_STATUS_INITIALIZED);
14573   add_loc_descr (&ret, tmp);
14574   add_loc_descr (&ret, new_loc_descr (DW_OP_pick, 3, 0));
14575   add_loc_descr (&ret, new_loc_descr (DW_OP_minus, 0, 0));
14576   add_loc_descr (&ret, new_loc_descr (DW_OP_shr, 0, 0));
14577   tmp = mem_loc_descriptor (GEN_INT (255), mode, mem_mode,
14578                             VAR_INIT_STATUS_INITIALIZED);
14579   if (tmp == NULL)
14580     return NULL;
14581   add_loc_descr (&ret, tmp);
14582   add_loc_descr (&ret, new_loc_descr (DW_OP_and, 0, 0));
14583   add_loc_descr (&ret, new_loc_descr (DW_OP_pick, 2, 0));
14584   add_loc_descr (&ret, new_loc_descr (DW_OP_shl, 0, 0));
14585   add_loc_descr (&ret, new_loc_descr (DW_OP_or, 0, 0));
14586   add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
14587   add_loc_descr (&ret, new_loc_descr (DW_OP_dup, 0, 0));
14588   tmp = mem_loc_descriptor (const0_rtx, mode, mem_mode,
14589                             VAR_INIT_STATUS_INITIALIZED);
14590   add_loc_descr (&ret, tmp);
14591   add_loc_descr (&ret, new_loc_descr (DW_OP_eq, 0, 0));
14592   l2jump = new_loc_descr (DW_OP_bra, 0, 0);
14593   add_loc_descr (&ret, l2jump);
14594   tmp = mem_loc_descriptor (GEN_INT (8), mode, mem_mode,
14595                             VAR_INIT_STATUS_INITIALIZED);
14596   add_loc_descr (&ret, tmp);
14597   add_loc_descr (&ret, new_loc_descr (DW_OP_minus, 0, 0));
14598   add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
14599   l1jump = new_loc_descr (DW_OP_skip, 0, 0);
14600   add_loc_descr (&ret, l1jump);
14601   l2label = new_loc_descr (DW_OP_drop, 0, 0);
14602   add_loc_descr (&ret, l2label);
14603   add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
14604   add_loc_descr (&ret, new_loc_descr (DW_OP_drop, 0, 0));
14605   l1jump->dw_loc_oprnd1.val_class = dw_val_class_loc;
14606   l1jump->dw_loc_oprnd1.v.val_loc = l1label;
14607   l2jump->dw_loc_oprnd1.val_class = dw_val_class_loc;
14608   l2jump->dw_loc_oprnd1.v.val_loc = l2label;
14609   return ret;
14610 }
14611
14612 /* ROTATE (constMASK is mode mask, BITSIZE is bitsize of mode):
14613    DW_OP_over DW_OP_over DW_OP_shl [ constMASK DW_OP_and ] DW_OP_rot
14614    [ DW_OP_swap constMASK DW_OP_and DW_OP_swap ] DW_OP_neg
14615    DW_OP_plus_uconst <BITSIZE> DW_OP_shr DW_OP_or
14616
14617    ROTATERT is similar:
14618    DW_OP_over DW_OP_over DW_OP_neg DW_OP_plus_uconst <BITSIZE>
14619    DW_OP_shl [ constMASK DW_OP_and ] DW_OP_rot
14620    [ DW_OP_swap constMASK DW_OP_and DW_OP_swap ] DW_OP_shr DW_OP_or  */
14621
14622 static dw_loc_descr_ref
14623 rotate_loc_descriptor (rtx rtl, scalar_int_mode mode,
14624                        machine_mode mem_mode)
14625 {
14626   rtx rtlop1 = XEXP (rtl, 1);
14627   dw_loc_descr_ref op0, op1, ret, mask[2] = { NULL, NULL };
14628   int i;
14629
14630   if (is_narrower_int_mode (GET_MODE (rtlop1), mode))
14631     rtlop1 = gen_rtx_ZERO_EXTEND (mode, rtlop1);
14632   op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
14633                             VAR_INIT_STATUS_INITIALIZED);
14634   op1 = mem_loc_descriptor (rtlop1, mode, mem_mode,
14635                             VAR_INIT_STATUS_INITIALIZED);
14636   if (op0 == NULL || op1 == NULL)
14637     return NULL;
14638   if (GET_MODE_SIZE (mode) < DWARF2_ADDR_SIZE)
14639     for (i = 0; i < 2; i++)
14640       {
14641         if (GET_MODE_BITSIZE (mode) < HOST_BITS_PER_WIDE_INT)
14642           mask[i] = mem_loc_descriptor (GEN_INT (GET_MODE_MASK (mode)),
14643                                         mode, mem_mode,
14644                                         VAR_INIT_STATUS_INITIALIZED);
14645         else if (GET_MODE_BITSIZE (mode) == HOST_BITS_PER_WIDE_INT)
14646           mask[i] = new_loc_descr (HOST_BITS_PER_WIDE_INT == 32
14647                                    ? DW_OP_const4u
14648                                    : HOST_BITS_PER_WIDE_INT == 64
14649                                    ? DW_OP_const8u : DW_OP_constu,
14650                                    GET_MODE_MASK (mode), 0);
14651         else
14652           mask[i] = NULL;
14653         if (mask[i] == NULL)
14654           return NULL;
14655         add_loc_descr (&mask[i], new_loc_descr (DW_OP_and, 0, 0));
14656       }
14657   ret = op0;
14658   add_loc_descr (&ret, op1);
14659   add_loc_descr (&ret, new_loc_descr (DW_OP_over, 0, 0));
14660   add_loc_descr (&ret, new_loc_descr (DW_OP_over, 0, 0));
14661   if (GET_CODE (rtl) == ROTATERT)
14662     {
14663       add_loc_descr (&ret, new_loc_descr (DW_OP_neg, 0, 0));
14664       add_loc_descr (&ret, new_loc_descr (DW_OP_plus_uconst,
14665                                           GET_MODE_BITSIZE (mode), 0));
14666     }
14667   add_loc_descr (&ret, new_loc_descr (DW_OP_shl, 0, 0));
14668   if (mask[0] != NULL)
14669     add_loc_descr (&ret, mask[0]);
14670   add_loc_descr (&ret, new_loc_descr (DW_OP_rot, 0, 0));
14671   if (mask[1] != NULL)
14672     {
14673       add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
14674       add_loc_descr (&ret, mask[1]);
14675       add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
14676     }
14677   if (GET_CODE (rtl) == ROTATE)
14678     {
14679       add_loc_descr (&ret, new_loc_descr (DW_OP_neg, 0, 0));
14680       add_loc_descr (&ret, new_loc_descr (DW_OP_plus_uconst,
14681                                           GET_MODE_BITSIZE (mode), 0));
14682     }
14683   add_loc_descr (&ret, new_loc_descr (DW_OP_shr, 0, 0));
14684   add_loc_descr (&ret, new_loc_descr (DW_OP_or, 0, 0));
14685   return ret;
14686 }
14687
14688 /* Helper function for mem_loc_descriptor.  Return DW_OP_GNU_parameter_ref
14689    for DEBUG_PARAMETER_REF RTL.  */
14690
14691 static dw_loc_descr_ref
14692 parameter_ref_descriptor (rtx rtl)
14693 {
14694   dw_loc_descr_ref ret;
14695   dw_die_ref ref;
14696
14697   if (dwarf_strict)
14698     return NULL;
14699   gcc_assert (TREE_CODE (DEBUG_PARAMETER_REF_DECL (rtl)) == PARM_DECL);
14700   /* With LTO during LTRANS we get the late DIE that refers to the early
14701      DIE, thus we add another indirection here.  This seems to confuse
14702      gdb enough to make gcc.dg/guality/pr68860-1.c FAIL with LTO.  */
14703   ref = lookup_decl_die (DEBUG_PARAMETER_REF_DECL (rtl));
14704   ret = new_loc_descr (DW_OP_GNU_parameter_ref, 0, 0);
14705   if (ref)
14706     {
14707       ret->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
14708       ret->dw_loc_oprnd1.v.val_die_ref.die = ref;
14709       ret->dw_loc_oprnd1.v.val_die_ref.external = 0;
14710     }
14711   else
14712     {
14713       ret->dw_loc_oprnd1.val_class = dw_val_class_decl_ref;
14714       ret->dw_loc_oprnd1.v.val_decl_ref = DEBUG_PARAMETER_REF_DECL (rtl);
14715     }
14716   return ret;
14717 }
14718
14719 /* The following routine converts the RTL for a variable or parameter
14720    (resident in memory) into an equivalent Dwarf representation of a
14721    mechanism for getting the address of that same variable onto the top of a
14722    hypothetical "address evaluation" stack.
14723
14724    When creating memory location descriptors, we are effectively transforming
14725    the RTL for a memory-resident object into its Dwarf postfix expression
14726    equivalent.  This routine recursively descends an RTL tree, turning
14727    it into Dwarf postfix code as it goes.
14728
14729    MODE is the mode that should be assumed for the rtl if it is VOIDmode.
14730
14731    MEM_MODE is the mode of the memory reference, needed to handle some
14732    autoincrement addressing modes.
14733
14734    Return 0 if we can't represent the location.  */
14735
14736 dw_loc_descr_ref
14737 mem_loc_descriptor (rtx rtl, machine_mode mode,
14738                     machine_mode mem_mode,
14739                     enum var_init_status initialized)
14740 {
14741   dw_loc_descr_ref mem_loc_result = NULL;
14742   enum dwarf_location_atom op;
14743   dw_loc_descr_ref op0, op1;
14744   rtx inner = NULL_RTX;
14745   poly_int64 offset;
14746
14747   if (mode == VOIDmode)
14748     mode = GET_MODE (rtl);
14749
14750   /* Note that for a dynamically sized array, the location we will generate a
14751      description of here will be the lowest numbered location which is
14752      actually within the array.  That's *not* necessarily the same as the
14753      zeroth element of the array.  */
14754
14755   rtl = targetm.delegitimize_address (rtl);
14756
14757   if (mode != GET_MODE (rtl) && GET_MODE (rtl) != VOIDmode)
14758     return NULL;
14759
14760   scalar_int_mode int_mode, inner_mode, op1_mode;
14761   switch (GET_CODE (rtl))
14762     {
14763     case POST_INC:
14764     case POST_DEC:
14765     case POST_MODIFY:
14766       return mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode, initialized);
14767
14768     case SUBREG:
14769       /* The case of a subreg may arise when we have a local (register)
14770          variable or a formal (register) parameter which doesn't quite fill
14771          up an entire register.  For now, just assume that it is
14772          legitimate to make the Dwarf info refer to the whole register which
14773          contains the given subreg.  */
14774       if (!subreg_lowpart_p (rtl))
14775         break;
14776       inner = SUBREG_REG (rtl);
14777       /* FALLTHRU */
14778     case TRUNCATE:
14779       if (inner == NULL_RTX)
14780         inner = XEXP (rtl, 0);
14781       if (is_a <scalar_int_mode> (mode, &int_mode)
14782           && is_a <scalar_int_mode> (GET_MODE (inner), &inner_mode)
14783           && (GET_MODE_SIZE (int_mode) <= DWARF2_ADDR_SIZE
14784 #ifdef POINTERS_EXTEND_UNSIGNED
14785               || (int_mode == Pmode && mem_mode != VOIDmode)
14786 #endif
14787              )
14788           && GET_MODE_SIZE (inner_mode) <= DWARF2_ADDR_SIZE)
14789         {
14790           mem_loc_result = mem_loc_descriptor (inner,
14791                                                inner_mode,
14792                                                mem_mode, initialized);
14793           break;
14794         }
14795       if (dwarf_strict && dwarf_version < 5)
14796         break;
14797       if (is_a <scalar_int_mode> (mode, &int_mode)
14798           && is_a <scalar_int_mode> (GET_MODE (inner), &inner_mode)
14799           ? GET_MODE_SIZE (int_mode) <= GET_MODE_SIZE (inner_mode)
14800           : GET_MODE_SIZE (mode) == GET_MODE_SIZE (GET_MODE (inner)))
14801         {
14802           dw_die_ref type_die;
14803           dw_loc_descr_ref cvt;
14804
14805           mem_loc_result = mem_loc_descriptor (inner,
14806                                                GET_MODE (inner),
14807                                                mem_mode, initialized);
14808           if (mem_loc_result == NULL)
14809             break;
14810           type_die = base_type_for_mode (mode, SCALAR_INT_MODE_P (mode));
14811           if (type_die == NULL)
14812             {
14813               mem_loc_result = NULL;
14814               break;
14815             }
14816           if (GET_MODE_SIZE (mode)
14817               != GET_MODE_SIZE (GET_MODE (inner)))
14818             cvt = new_loc_descr (dwarf_OP (DW_OP_convert), 0, 0);
14819           else
14820             cvt = new_loc_descr (dwarf_OP (DW_OP_reinterpret), 0, 0);
14821           cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
14822           cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
14823           cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
14824           add_loc_descr (&mem_loc_result, cvt);
14825           if (is_a <scalar_int_mode> (mode, &int_mode)
14826               && GET_MODE_SIZE (int_mode) <= DWARF2_ADDR_SIZE)
14827             {
14828               /* Convert it to untyped afterwards.  */
14829               cvt = new_loc_descr (dwarf_OP (DW_OP_convert), 0, 0);
14830               add_loc_descr (&mem_loc_result, cvt);
14831             }
14832         }
14833       break;
14834
14835     case REG:
14836       if (!is_a <scalar_int_mode> (mode, &int_mode)
14837           || (GET_MODE_SIZE (int_mode) > DWARF2_ADDR_SIZE
14838               && rtl != arg_pointer_rtx
14839               && rtl != frame_pointer_rtx
14840 #ifdef POINTERS_EXTEND_UNSIGNED
14841               && (int_mode != Pmode || mem_mode == VOIDmode)
14842 #endif
14843               ))
14844         {
14845           dw_die_ref type_die;
14846           unsigned int dbx_regnum;
14847
14848           if (dwarf_strict && dwarf_version < 5)
14849             break;
14850           if (REGNO (rtl) > FIRST_PSEUDO_REGISTER)
14851             break;
14852           type_die = base_type_for_mode (mode, SCALAR_INT_MODE_P (mode));
14853           if (type_die == NULL)
14854             break;
14855
14856           dbx_regnum = dbx_reg_number (rtl);
14857           if (dbx_regnum == IGNORED_DWARF_REGNUM)
14858             break;
14859           mem_loc_result = new_loc_descr (dwarf_OP (DW_OP_regval_type),
14860                                           dbx_regnum, 0);
14861           mem_loc_result->dw_loc_oprnd2.val_class = dw_val_class_die_ref;
14862           mem_loc_result->dw_loc_oprnd2.v.val_die_ref.die = type_die;
14863           mem_loc_result->dw_loc_oprnd2.v.val_die_ref.external = 0;
14864           break;
14865         }
14866       /* Whenever a register number forms a part of the description of the
14867          method for calculating the (dynamic) address of a memory resident
14868          object, DWARF rules require the register number be referred to as
14869          a "base register".  This distinction is not based in any way upon
14870          what category of register the hardware believes the given register
14871          belongs to.  This is strictly DWARF terminology we're dealing with
14872          here. Note that in cases where the location of a memory-resident
14873          data object could be expressed as: OP_ADD (OP_BASEREG (basereg),
14874          OP_CONST (0)) the actual DWARF location descriptor that we generate
14875          may just be OP_BASEREG (basereg).  This may look deceptively like
14876          the object in question was allocated to a register (rather than in
14877          memory) so DWARF consumers need to be aware of the subtle
14878          distinction between OP_REG and OP_BASEREG.  */
14879       if (REGNO (rtl) < FIRST_PSEUDO_REGISTER)
14880         mem_loc_result = based_loc_descr (rtl, 0, VAR_INIT_STATUS_INITIALIZED);
14881       else if (stack_realign_drap
14882                && crtl->drap_reg
14883                && crtl->args.internal_arg_pointer == rtl
14884                && REGNO (crtl->drap_reg) < FIRST_PSEUDO_REGISTER)
14885         {
14886           /* If RTL is internal_arg_pointer, which has been optimized
14887              out, use DRAP instead.  */
14888           mem_loc_result = based_loc_descr (crtl->drap_reg, 0,
14889                                             VAR_INIT_STATUS_INITIALIZED);
14890         }
14891       break;
14892
14893     case SIGN_EXTEND:
14894     case ZERO_EXTEND:
14895       if (!is_a <scalar_int_mode> (mode, &int_mode)
14896           || !is_a <scalar_int_mode> (GET_MODE (XEXP (rtl, 0)), &inner_mode))
14897         break;
14898       op0 = mem_loc_descriptor (XEXP (rtl, 0), inner_mode,
14899                                 mem_mode, VAR_INIT_STATUS_INITIALIZED);
14900       if (op0 == 0)
14901         break;
14902       else if (GET_CODE (rtl) == ZERO_EXTEND
14903                && GET_MODE_SIZE (int_mode) <= DWARF2_ADDR_SIZE
14904                && GET_MODE_BITSIZE (inner_mode) < HOST_BITS_PER_WIDE_INT
14905                /* If DW_OP_const{1,2,4}u won't be used, it is shorter
14906                   to expand zero extend as two shifts instead of
14907                   masking.  */
14908                && GET_MODE_SIZE (inner_mode) <= 4)
14909         {
14910           mem_loc_result = op0;
14911           add_loc_descr (&mem_loc_result,
14912                          int_loc_descriptor (GET_MODE_MASK (inner_mode)));
14913           add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_and, 0, 0));
14914         }
14915       else if (GET_MODE_SIZE (int_mode) <= DWARF2_ADDR_SIZE)
14916         {
14917           int shift = DWARF2_ADDR_SIZE - GET_MODE_SIZE (inner_mode);
14918           shift *= BITS_PER_UNIT;
14919           if (GET_CODE (rtl) == SIGN_EXTEND)
14920             op = DW_OP_shra;
14921           else
14922             op = DW_OP_shr;
14923           mem_loc_result = op0;
14924           add_loc_descr (&mem_loc_result, int_loc_descriptor (shift));
14925           add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_shl, 0, 0));
14926           add_loc_descr (&mem_loc_result, int_loc_descriptor (shift));
14927           add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
14928         }
14929       else if (!dwarf_strict || dwarf_version >= 5)
14930         {
14931           dw_die_ref type_die1, type_die2;
14932           dw_loc_descr_ref cvt;
14933
14934           type_die1 = base_type_for_mode (inner_mode,
14935                                           GET_CODE (rtl) == ZERO_EXTEND);
14936           if (type_die1 == NULL)
14937             break;
14938           type_die2 = base_type_for_mode (int_mode, 1);
14939           if (type_die2 == NULL)
14940             break;
14941           mem_loc_result = op0;
14942           cvt = new_loc_descr (dwarf_OP (DW_OP_convert), 0, 0);
14943           cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
14944           cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die1;
14945           cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
14946           add_loc_descr (&mem_loc_result, cvt);
14947           cvt = new_loc_descr (dwarf_OP (DW_OP_convert), 0, 0);
14948           cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
14949           cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die2;
14950           cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
14951           add_loc_descr (&mem_loc_result, cvt);
14952         }
14953       break;
14954
14955     case MEM:
14956       {
14957         rtx new_rtl = avoid_constant_pool_reference (rtl);
14958         if (new_rtl != rtl)
14959           {
14960             mem_loc_result = mem_loc_descriptor (new_rtl, mode, mem_mode,
14961                                                  initialized);
14962             if (mem_loc_result != NULL)
14963               return mem_loc_result;
14964           }
14965       }
14966       mem_loc_result = mem_loc_descriptor (XEXP (rtl, 0),
14967                                            get_address_mode (rtl), mode,
14968                                            VAR_INIT_STATUS_INITIALIZED);
14969       if (mem_loc_result == NULL)
14970         mem_loc_result = tls_mem_loc_descriptor (rtl);
14971       if (mem_loc_result != NULL)
14972         {
14973           if (!is_a <scalar_int_mode> (mode, &int_mode)
14974               || GET_MODE_SIZE (int_mode) > DWARF2_ADDR_SIZE)
14975             {
14976               dw_die_ref type_die;
14977               dw_loc_descr_ref deref;
14978
14979               if (dwarf_strict && dwarf_version < 5)
14980                 return NULL;
14981               type_die
14982                 = base_type_for_mode (mode, SCALAR_INT_MODE_P (mode));
14983               if (type_die == NULL)
14984                 return NULL;
14985               deref = new_loc_descr (dwarf_OP (DW_OP_deref_type),
14986                                      GET_MODE_SIZE (mode), 0);
14987               deref->dw_loc_oprnd2.val_class = dw_val_class_die_ref;
14988               deref->dw_loc_oprnd2.v.val_die_ref.die = type_die;
14989               deref->dw_loc_oprnd2.v.val_die_ref.external = 0;
14990               add_loc_descr (&mem_loc_result, deref);
14991             }
14992           else if (GET_MODE_SIZE (int_mode) == DWARF2_ADDR_SIZE)
14993             add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_deref, 0, 0));
14994           else
14995             add_loc_descr (&mem_loc_result,
14996                            new_loc_descr (DW_OP_deref_size,
14997                                           GET_MODE_SIZE (int_mode), 0));
14998         }
14999       break;
15000
15001     case LO_SUM:
15002       return mem_loc_descriptor (XEXP (rtl, 1), mode, mem_mode, initialized);
15003
15004     case LABEL_REF:
15005       /* Some ports can transform a symbol ref into a label ref, because
15006          the symbol ref is too far away and has to be dumped into a constant
15007          pool.  */
15008     case CONST:
15009     case SYMBOL_REF:
15010       if (!is_a <scalar_int_mode> (mode, &int_mode)
15011           || (GET_MODE_SIZE (int_mode) > DWARF2_ADDR_SIZE
15012 #ifdef POINTERS_EXTEND_UNSIGNED
15013               && (int_mode != Pmode || mem_mode == VOIDmode)
15014 #endif
15015               ))
15016         break;
15017       if (GET_CODE (rtl) == SYMBOL_REF
15018           && SYMBOL_REF_TLS_MODEL (rtl) != TLS_MODEL_NONE)
15019         {
15020           dw_loc_descr_ref temp;
15021
15022           /* If this is not defined, we have no way to emit the data.  */
15023           if (!targetm.have_tls || !targetm.asm_out.output_dwarf_dtprel)
15024             break;
15025
15026           temp = new_addr_loc_descr (rtl, dtprel_true);
15027
15028           /* We check for DWARF 5 here because gdb did not implement
15029              DW_OP_form_tls_address until after 7.12.  */
15030           mem_loc_result = new_loc_descr ((dwarf_version >= 5
15031                                            ? DW_OP_form_tls_address
15032                                            : DW_OP_GNU_push_tls_address),
15033                                           0, 0);
15034           add_loc_descr (&mem_loc_result, temp);
15035
15036           break;
15037         }
15038
15039       if (!const_ok_for_output (rtl))
15040         {
15041           if (GET_CODE (rtl) == CONST)
15042             switch (GET_CODE (XEXP (rtl, 0)))
15043               {
15044               case NOT:
15045                 op = DW_OP_not;
15046                 goto try_const_unop;
15047               case NEG:
15048                 op = DW_OP_neg;
15049                 goto try_const_unop;
15050               try_const_unop:
15051                 rtx arg;
15052                 arg = XEXP (XEXP (rtl, 0), 0);
15053                 if (!CONSTANT_P (arg))
15054                   arg = gen_rtx_CONST (int_mode, arg);
15055                 op0 = mem_loc_descriptor (arg, int_mode, mem_mode,
15056                                           initialized);
15057                 if (op0)
15058                   {
15059                     mem_loc_result = op0;
15060                     add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
15061                   }
15062                 break;
15063               default:
15064                 mem_loc_result = mem_loc_descriptor (XEXP (rtl, 0), int_mode,
15065                                                      mem_mode, initialized);
15066                 break;
15067               }
15068           break;
15069         }
15070
15071     symref:
15072       mem_loc_result = new_addr_loc_descr (rtl, dtprel_false);
15073       vec_safe_push (used_rtx_array, rtl);
15074       break;
15075
15076     case CONCAT:
15077     case CONCATN:
15078     case VAR_LOCATION:
15079     case DEBUG_IMPLICIT_PTR:
15080       expansion_failed (NULL_TREE, rtl,
15081                         "CONCAT/CONCATN/VAR_LOCATION is handled only by loc_descriptor");
15082       return 0;
15083
15084     case ENTRY_VALUE:
15085       if (dwarf_strict && dwarf_version < 5)
15086         return NULL;
15087       if (REG_P (ENTRY_VALUE_EXP (rtl)))
15088         {
15089           if (!is_a <scalar_int_mode> (mode, &int_mode)
15090               || GET_MODE_SIZE (int_mode) > DWARF2_ADDR_SIZE)
15091             op0 = mem_loc_descriptor (ENTRY_VALUE_EXP (rtl), mode,
15092                                       VOIDmode, VAR_INIT_STATUS_INITIALIZED);
15093           else
15094             {
15095               unsigned int dbx_regnum = dbx_reg_number (ENTRY_VALUE_EXP (rtl));
15096               if (dbx_regnum == IGNORED_DWARF_REGNUM)
15097                 return NULL;
15098               op0 = one_reg_loc_descriptor (dbx_regnum,
15099                                             VAR_INIT_STATUS_INITIALIZED);
15100             }
15101         }
15102       else if (MEM_P (ENTRY_VALUE_EXP (rtl))
15103                && REG_P (XEXP (ENTRY_VALUE_EXP (rtl), 0)))
15104         {
15105           op0 = mem_loc_descriptor (ENTRY_VALUE_EXP (rtl), mode,
15106                                     VOIDmode, VAR_INIT_STATUS_INITIALIZED);
15107           if (op0 && op0->dw_loc_opc == DW_OP_fbreg)
15108             return NULL;
15109         }
15110       else
15111         gcc_unreachable ();
15112       if (op0 == NULL)
15113         return NULL;
15114       mem_loc_result = new_loc_descr (dwarf_OP (DW_OP_entry_value), 0, 0);
15115       mem_loc_result->dw_loc_oprnd1.val_class = dw_val_class_loc;
15116       mem_loc_result->dw_loc_oprnd1.v.val_loc = op0;
15117       break;
15118
15119     case DEBUG_PARAMETER_REF:
15120       mem_loc_result = parameter_ref_descriptor (rtl);
15121       break;
15122
15123     case PRE_MODIFY:
15124       /* Extract the PLUS expression nested inside and fall into
15125          PLUS code below.  */
15126       rtl = XEXP (rtl, 1);
15127       goto plus;
15128
15129     case PRE_INC:
15130     case PRE_DEC:
15131       /* Turn these into a PLUS expression and fall into the PLUS code
15132          below.  */
15133       rtl = gen_rtx_PLUS (mode, XEXP (rtl, 0),
15134                           gen_int_mode (GET_CODE (rtl) == PRE_INC
15135                                         ? GET_MODE_UNIT_SIZE (mem_mode)
15136                                         : -GET_MODE_UNIT_SIZE (mem_mode),
15137                                         mode));
15138
15139       /* fall through */
15140
15141     case PLUS:
15142     plus:
15143       if (is_based_loc (rtl)
15144           && is_a <scalar_int_mode> (mode, &int_mode)
15145           && (GET_MODE_SIZE (int_mode) <= DWARF2_ADDR_SIZE
15146               || XEXP (rtl, 0) == arg_pointer_rtx
15147               || XEXP (rtl, 0) == frame_pointer_rtx))
15148         mem_loc_result = based_loc_descr (XEXP (rtl, 0),
15149                                           INTVAL (XEXP (rtl, 1)),
15150                                           VAR_INIT_STATUS_INITIALIZED);
15151       else
15152         {
15153           mem_loc_result = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
15154                                                VAR_INIT_STATUS_INITIALIZED);
15155           if (mem_loc_result == 0)
15156             break;
15157
15158           if (CONST_INT_P (XEXP (rtl, 1))
15159               && (GET_MODE_SIZE (as_a <scalar_int_mode> (mode))
15160                   <= DWARF2_ADDR_SIZE))
15161             loc_descr_plus_const (&mem_loc_result, INTVAL (XEXP (rtl, 1)));
15162           else
15163             {
15164               op1 = mem_loc_descriptor (XEXP (rtl, 1), mode, mem_mode,
15165                                         VAR_INIT_STATUS_INITIALIZED);
15166               if (op1 == 0)
15167                 return NULL;
15168               add_loc_descr (&mem_loc_result, op1);
15169               add_loc_descr (&mem_loc_result,
15170                              new_loc_descr (DW_OP_plus, 0, 0));
15171             }
15172         }
15173       break;
15174
15175     /* If a pseudo-reg is optimized away, it is possible for it to
15176        be replaced with a MEM containing a multiply or shift.  */
15177     case MINUS:
15178       op = DW_OP_minus;
15179       goto do_binop;
15180
15181     case MULT:
15182       op = DW_OP_mul;
15183       goto do_binop;
15184
15185     case DIV:
15186       if ((!dwarf_strict || dwarf_version >= 5)
15187           && is_a <scalar_int_mode> (mode, &int_mode)
15188           && GET_MODE_SIZE (int_mode) > DWARF2_ADDR_SIZE)
15189         {
15190           mem_loc_result = typed_binop (DW_OP_div, rtl,
15191                                         base_type_for_mode (mode, 0),
15192                                         int_mode, mem_mode);
15193           break;
15194         }
15195       op = DW_OP_div;
15196       goto do_binop;
15197
15198     case UMOD:
15199       op = DW_OP_mod;
15200       goto do_binop;
15201
15202     case ASHIFT:
15203       op = DW_OP_shl;
15204       goto do_shift;
15205
15206     case ASHIFTRT:
15207       op = DW_OP_shra;
15208       goto do_shift;
15209
15210     case LSHIFTRT:
15211       op = DW_OP_shr;
15212       goto do_shift;
15213
15214     do_shift:
15215       if (!is_a <scalar_int_mode> (mode, &int_mode))
15216         break;
15217       op0 = mem_loc_descriptor (XEXP (rtl, 0), int_mode, mem_mode,
15218                                 VAR_INIT_STATUS_INITIALIZED);
15219       {
15220         rtx rtlop1 = XEXP (rtl, 1);
15221         if (is_a <scalar_int_mode> (GET_MODE (rtlop1), &op1_mode)
15222             && GET_MODE_BITSIZE (op1_mode) < GET_MODE_BITSIZE (int_mode))
15223           rtlop1 = gen_rtx_ZERO_EXTEND (int_mode, rtlop1);
15224         op1 = mem_loc_descriptor (rtlop1, int_mode, mem_mode,
15225                                   VAR_INIT_STATUS_INITIALIZED);
15226       }
15227
15228       if (op0 == 0 || op1 == 0)
15229         break;
15230
15231       mem_loc_result = op0;
15232       add_loc_descr (&mem_loc_result, op1);
15233       add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
15234       break;
15235
15236     case AND:
15237       op = DW_OP_and;
15238       goto do_binop;
15239
15240     case IOR:
15241       op = DW_OP_or;
15242       goto do_binop;
15243
15244     case XOR:
15245       op = DW_OP_xor;
15246       goto do_binop;
15247
15248     do_binop:
15249       op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
15250                                 VAR_INIT_STATUS_INITIALIZED);
15251       op1 = mem_loc_descriptor (XEXP (rtl, 1), mode, mem_mode,
15252                                 VAR_INIT_STATUS_INITIALIZED);
15253
15254       if (op0 == 0 || op1 == 0)
15255         break;
15256
15257       mem_loc_result = op0;
15258       add_loc_descr (&mem_loc_result, op1);
15259       add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
15260       break;
15261
15262     case MOD:
15263       if ((!dwarf_strict || dwarf_version >= 5)
15264           && is_a <scalar_int_mode> (mode, &int_mode)
15265           && GET_MODE_SIZE (int_mode) > DWARF2_ADDR_SIZE)
15266         {
15267           mem_loc_result = typed_binop (DW_OP_mod, rtl,
15268                                         base_type_for_mode (mode, 0),
15269                                         int_mode, mem_mode);
15270           break;
15271         }
15272
15273       op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
15274                                 VAR_INIT_STATUS_INITIALIZED);
15275       op1 = mem_loc_descriptor (XEXP (rtl, 1), mode, mem_mode,
15276                                 VAR_INIT_STATUS_INITIALIZED);
15277
15278       if (op0 == 0 || op1 == 0)
15279         break;
15280
15281       mem_loc_result = op0;
15282       add_loc_descr (&mem_loc_result, op1);
15283       add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_over, 0, 0));
15284       add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_over, 0, 0));
15285       add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_div, 0, 0));
15286       add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_mul, 0, 0));
15287       add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_minus, 0, 0));
15288       break;
15289
15290     case UDIV:
15291       if ((!dwarf_strict || dwarf_version >= 5)
15292           && is_a <scalar_int_mode> (mode, &int_mode))
15293         {
15294           if (GET_MODE_SIZE (int_mode) > DWARF2_ADDR_SIZE)
15295             {
15296               op = DW_OP_div;
15297               goto do_binop;
15298             }
15299           mem_loc_result = typed_binop (DW_OP_div, rtl,
15300                                         base_type_for_mode (int_mode, 1),
15301                                         int_mode, mem_mode);
15302         }
15303       break;
15304
15305     case NOT:
15306       op = DW_OP_not;
15307       goto do_unop;
15308
15309     case ABS:
15310       op = DW_OP_abs;
15311       goto do_unop;
15312
15313     case NEG:
15314       op = DW_OP_neg;
15315       goto do_unop;
15316
15317     do_unop:
15318       op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
15319                                 VAR_INIT_STATUS_INITIALIZED);
15320
15321       if (op0 == 0)
15322         break;
15323
15324       mem_loc_result = op0;
15325       add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
15326       break;
15327
15328     case CONST_INT:
15329       if (!is_a <scalar_int_mode> (mode, &int_mode)
15330           || GET_MODE_SIZE (int_mode) <= DWARF2_ADDR_SIZE
15331 #ifdef POINTERS_EXTEND_UNSIGNED
15332           || (int_mode == Pmode
15333               && mem_mode != VOIDmode
15334               && trunc_int_for_mode (INTVAL (rtl), ptr_mode) == INTVAL (rtl))
15335 #endif
15336           )
15337         {
15338           mem_loc_result = int_loc_descriptor (INTVAL (rtl));
15339           break;
15340         }
15341       if ((!dwarf_strict || dwarf_version >= 5)
15342           && (GET_MODE_BITSIZE (int_mode) == HOST_BITS_PER_WIDE_INT
15343               || GET_MODE_BITSIZE (int_mode) == HOST_BITS_PER_DOUBLE_INT))
15344         {
15345           dw_die_ref type_die = base_type_for_mode (int_mode, 1);
15346           scalar_int_mode amode;
15347           if (type_die == NULL)
15348             return NULL;
15349           if (INTVAL (rtl) >= 0
15350               && (int_mode_for_size (DWARF2_ADDR_SIZE * BITS_PER_UNIT, 0)
15351                   .exists (&amode))
15352               && trunc_int_for_mode (INTVAL (rtl), amode) == INTVAL (rtl)
15353               /* const DW_OP_convert <XXX> vs.
15354                  DW_OP_const_type <XXX, 1, const>.  */
15355               && size_of_int_loc_descriptor (INTVAL (rtl)) + 1 + 1
15356                  < (unsigned long) 1 + 1 + 1 + GET_MODE_SIZE (int_mode))
15357             {
15358               mem_loc_result = int_loc_descriptor (INTVAL (rtl));
15359               op0 = new_loc_descr (dwarf_OP (DW_OP_convert), 0, 0);
15360               op0->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
15361               op0->dw_loc_oprnd1.v.val_die_ref.die = type_die;
15362               op0->dw_loc_oprnd1.v.val_die_ref.external = 0;
15363               add_loc_descr (&mem_loc_result, op0);
15364               return mem_loc_result;
15365             }
15366           mem_loc_result = new_loc_descr (dwarf_OP (DW_OP_const_type), 0,
15367                                           INTVAL (rtl));
15368           mem_loc_result->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
15369           mem_loc_result->dw_loc_oprnd1.v.val_die_ref.die = type_die;
15370           mem_loc_result->dw_loc_oprnd1.v.val_die_ref.external = 0;
15371           if (GET_MODE_BITSIZE (int_mode) == HOST_BITS_PER_WIDE_INT)
15372             mem_loc_result->dw_loc_oprnd2.val_class = dw_val_class_const;
15373           else
15374             {
15375               mem_loc_result->dw_loc_oprnd2.val_class
15376                 = dw_val_class_const_double;
15377               mem_loc_result->dw_loc_oprnd2.v.val_double
15378                 = double_int::from_shwi (INTVAL (rtl));
15379             }
15380         }
15381       break;
15382
15383     case CONST_DOUBLE:
15384       if (!dwarf_strict || dwarf_version >= 5)
15385         {
15386           dw_die_ref type_die;
15387
15388           /* Note that if TARGET_SUPPORTS_WIDE_INT == 0, a
15389              CONST_DOUBLE rtx could represent either a large integer
15390              or a floating-point constant.  If TARGET_SUPPORTS_WIDE_INT != 0,
15391              the value is always a floating point constant.
15392
15393              When it is an integer, a CONST_DOUBLE is used whenever
15394              the constant requires 2 HWIs to be adequately represented.
15395              We output CONST_DOUBLEs as blocks.  */
15396           if (mode == VOIDmode
15397               || (GET_MODE (rtl) == VOIDmode
15398                   && GET_MODE_BITSIZE (mode) != HOST_BITS_PER_DOUBLE_INT))
15399             break;
15400           type_die = base_type_for_mode (mode, SCALAR_INT_MODE_P (mode));
15401           if (type_die == NULL)
15402             return NULL;
15403           mem_loc_result = new_loc_descr (dwarf_OP (DW_OP_const_type), 0, 0);
15404           mem_loc_result->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
15405           mem_loc_result->dw_loc_oprnd1.v.val_die_ref.die = type_die;
15406           mem_loc_result->dw_loc_oprnd1.v.val_die_ref.external = 0;
15407 #if TARGET_SUPPORTS_WIDE_INT == 0
15408           if (!SCALAR_FLOAT_MODE_P (mode))
15409             {
15410               mem_loc_result->dw_loc_oprnd2.val_class
15411                 = dw_val_class_const_double;
15412               mem_loc_result->dw_loc_oprnd2.v.val_double
15413                 = rtx_to_double_int (rtl);
15414             }
15415           else
15416 #endif
15417             {
15418               scalar_float_mode float_mode = as_a <scalar_float_mode> (mode);
15419               unsigned int length = GET_MODE_SIZE (float_mode);
15420               unsigned char *array = ggc_vec_alloc<unsigned char> (length);
15421
15422               insert_float (rtl, array);
15423               mem_loc_result->dw_loc_oprnd2.val_class = dw_val_class_vec;
15424               mem_loc_result->dw_loc_oprnd2.v.val_vec.length = length / 4;
15425               mem_loc_result->dw_loc_oprnd2.v.val_vec.elt_size = 4;
15426               mem_loc_result->dw_loc_oprnd2.v.val_vec.array = array;
15427             }
15428         }
15429       break;
15430
15431     case CONST_WIDE_INT:
15432       if (!dwarf_strict || dwarf_version >= 5)
15433         {
15434           dw_die_ref type_die;
15435
15436           type_die = base_type_for_mode (mode, SCALAR_INT_MODE_P (mode));
15437           if (type_die == NULL)
15438             return NULL;
15439           mem_loc_result = new_loc_descr (dwarf_OP (DW_OP_const_type), 0, 0);
15440           mem_loc_result->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
15441           mem_loc_result->dw_loc_oprnd1.v.val_die_ref.die = type_die;
15442           mem_loc_result->dw_loc_oprnd1.v.val_die_ref.external = 0;
15443           mem_loc_result->dw_loc_oprnd2.val_class
15444             = dw_val_class_wide_int;
15445           mem_loc_result->dw_loc_oprnd2.v.val_wide = ggc_alloc<wide_int> ();
15446           *mem_loc_result->dw_loc_oprnd2.v.val_wide = rtx_mode_t (rtl, mode);
15447         }
15448       break;
15449
15450     case CONST_POLY_INT:
15451       mem_loc_result = int_loc_descriptor (rtx_to_poly_int64 (rtl));
15452       break;
15453
15454     case EQ:
15455       mem_loc_result = scompare_loc_descriptor (DW_OP_eq, rtl, mem_mode);
15456       break;
15457
15458     case GE:
15459       mem_loc_result = scompare_loc_descriptor (DW_OP_ge, rtl, mem_mode);
15460       break;
15461
15462     case GT:
15463       mem_loc_result = scompare_loc_descriptor (DW_OP_gt, rtl, mem_mode);
15464       break;
15465
15466     case LE:
15467       mem_loc_result = scompare_loc_descriptor (DW_OP_le, rtl, mem_mode);
15468       break;
15469
15470     case LT:
15471       mem_loc_result = scompare_loc_descriptor (DW_OP_lt, rtl, mem_mode);
15472       break;
15473
15474     case NE:
15475       mem_loc_result = scompare_loc_descriptor (DW_OP_ne, rtl, mem_mode);
15476       break;
15477
15478     case GEU:
15479       mem_loc_result = ucompare_loc_descriptor (DW_OP_ge, rtl, mem_mode);
15480       break;
15481
15482     case GTU:
15483       mem_loc_result = ucompare_loc_descriptor (DW_OP_gt, rtl, mem_mode);
15484       break;
15485
15486     case LEU:
15487       mem_loc_result = ucompare_loc_descriptor (DW_OP_le, rtl, mem_mode);
15488       break;
15489
15490     case LTU:
15491       mem_loc_result = ucompare_loc_descriptor (DW_OP_lt, rtl, mem_mode);
15492       break;
15493
15494     case UMIN:
15495     case UMAX:
15496       if (!SCALAR_INT_MODE_P (mode))
15497         break;
15498       /* FALLTHRU */
15499     case SMIN:
15500     case SMAX:
15501       mem_loc_result = minmax_loc_descriptor (rtl, mode, mem_mode);
15502       break;
15503
15504     case ZERO_EXTRACT:
15505     case SIGN_EXTRACT:
15506       if (CONST_INT_P (XEXP (rtl, 1))
15507           && CONST_INT_P (XEXP (rtl, 2))
15508           && is_a <scalar_int_mode> (mode, &int_mode)
15509           && is_a <scalar_int_mode> (GET_MODE (XEXP (rtl, 0)), &inner_mode)
15510           && GET_MODE_SIZE (int_mode) <= DWARF2_ADDR_SIZE
15511           && GET_MODE_SIZE (inner_mode) <= DWARF2_ADDR_SIZE
15512           && ((unsigned) INTVAL (XEXP (rtl, 1))
15513               + (unsigned) INTVAL (XEXP (rtl, 2))
15514               <= GET_MODE_BITSIZE (int_mode)))
15515         {
15516           int shift, size;
15517           op0 = mem_loc_descriptor (XEXP (rtl, 0), inner_mode,
15518                                     mem_mode, VAR_INIT_STATUS_INITIALIZED);
15519           if (op0 == 0)
15520             break;
15521           if (GET_CODE (rtl) == SIGN_EXTRACT)
15522             op = DW_OP_shra;
15523           else
15524             op = DW_OP_shr;
15525           mem_loc_result = op0;
15526           size = INTVAL (XEXP (rtl, 1));
15527           shift = INTVAL (XEXP (rtl, 2));
15528           if (BITS_BIG_ENDIAN)
15529             shift = GET_MODE_BITSIZE (inner_mode) - shift - size;
15530           if (shift + size != (int) DWARF2_ADDR_SIZE)
15531             {
15532               add_loc_descr (&mem_loc_result,
15533                              int_loc_descriptor (DWARF2_ADDR_SIZE
15534                                                  - shift - size));
15535               add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_shl, 0, 0));
15536             }
15537           if (size != (int) DWARF2_ADDR_SIZE)
15538             {
15539               add_loc_descr (&mem_loc_result,
15540                              int_loc_descriptor (DWARF2_ADDR_SIZE - size));
15541               add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
15542             }
15543         }
15544       break;
15545
15546     case IF_THEN_ELSE:
15547       {
15548         dw_loc_descr_ref op2, bra_node, drop_node;
15549         op0 = mem_loc_descriptor (XEXP (rtl, 0),
15550                                   GET_MODE (XEXP (rtl, 0)) == VOIDmode
15551                                   ? word_mode : GET_MODE (XEXP (rtl, 0)),
15552                                   mem_mode, VAR_INIT_STATUS_INITIALIZED);
15553         op1 = mem_loc_descriptor (XEXP (rtl, 1), mode, mem_mode,
15554                                   VAR_INIT_STATUS_INITIALIZED);
15555         op2 = mem_loc_descriptor (XEXP (rtl, 2), mode, mem_mode,
15556                                   VAR_INIT_STATUS_INITIALIZED);
15557         if (op0 == NULL || op1 == NULL || op2 == NULL)
15558           break;
15559
15560         mem_loc_result = op1;
15561         add_loc_descr (&mem_loc_result, op2);
15562         add_loc_descr (&mem_loc_result, op0);
15563         bra_node = new_loc_descr (DW_OP_bra, 0, 0);
15564         add_loc_descr (&mem_loc_result, bra_node);
15565         add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_swap, 0, 0));
15566         drop_node = new_loc_descr (DW_OP_drop, 0, 0);
15567         add_loc_descr (&mem_loc_result, drop_node);
15568         bra_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
15569         bra_node->dw_loc_oprnd1.v.val_loc = drop_node;
15570       }
15571       break;
15572
15573     case FLOAT_EXTEND:
15574     case FLOAT_TRUNCATE:
15575     case FLOAT:
15576     case UNSIGNED_FLOAT:
15577     case FIX:
15578     case UNSIGNED_FIX:
15579       if (!dwarf_strict || dwarf_version >= 5)
15580         {
15581           dw_die_ref type_die;
15582           dw_loc_descr_ref cvt;
15583
15584           op0 = mem_loc_descriptor (XEXP (rtl, 0), GET_MODE (XEXP (rtl, 0)),
15585                                     mem_mode, VAR_INIT_STATUS_INITIALIZED);
15586           if (op0 == NULL)
15587             break;
15588           if (is_a <scalar_int_mode> (GET_MODE (XEXP (rtl, 0)), &int_mode)
15589               && (GET_CODE (rtl) == FLOAT
15590                   || GET_MODE_SIZE (int_mode) <= DWARF2_ADDR_SIZE))
15591             {
15592               type_die = base_type_for_mode (int_mode,
15593                                              GET_CODE (rtl) == UNSIGNED_FLOAT);
15594               if (type_die == NULL)
15595                 break;
15596               cvt = new_loc_descr (dwarf_OP (DW_OP_convert), 0, 0);
15597               cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
15598               cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
15599               cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
15600               add_loc_descr (&op0, cvt);
15601             }
15602           type_die = base_type_for_mode (mode, GET_CODE (rtl) == UNSIGNED_FIX);
15603           if (type_die == NULL)
15604             break;
15605           cvt = new_loc_descr (dwarf_OP (DW_OP_convert), 0, 0);
15606           cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
15607           cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
15608           cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
15609           add_loc_descr (&op0, cvt);
15610           if (is_a <scalar_int_mode> (mode, &int_mode)
15611               && (GET_CODE (rtl) == FIX
15612                   || GET_MODE_SIZE (int_mode) < DWARF2_ADDR_SIZE))
15613             {
15614               op0 = convert_descriptor_to_mode (int_mode, op0);
15615               if (op0 == NULL)
15616                 break;
15617             }
15618           mem_loc_result = op0;
15619         }
15620       break;
15621
15622     case CLZ:
15623     case CTZ:
15624     case FFS:
15625       if (is_a <scalar_int_mode> (mode, &int_mode))
15626         mem_loc_result = clz_loc_descriptor (rtl, int_mode, mem_mode);
15627       break;
15628
15629     case POPCOUNT:
15630     case PARITY:
15631       if (is_a <scalar_int_mode> (mode, &int_mode))
15632         mem_loc_result = popcount_loc_descriptor (rtl, int_mode, mem_mode);
15633       break;
15634
15635     case BSWAP:
15636       if (is_a <scalar_int_mode> (mode, &int_mode))
15637         mem_loc_result = bswap_loc_descriptor (rtl, int_mode, mem_mode);
15638       break;
15639
15640     case ROTATE:
15641     case ROTATERT:
15642       if (is_a <scalar_int_mode> (mode, &int_mode))
15643         mem_loc_result = rotate_loc_descriptor (rtl, int_mode, mem_mode);
15644       break;
15645
15646     case COMPARE:
15647       /* In theory, we could implement the above.  */
15648       /* DWARF cannot represent the unsigned compare operations
15649          natively.  */
15650     case SS_MULT:
15651     case US_MULT:
15652     case SS_DIV:
15653     case US_DIV:
15654     case SS_PLUS:
15655     case US_PLUS:
15656     case SS_MINUS:
15657     case US_MINUS:
15658     case SS_NEG:
15659     case US_NEG:
15660     case SS_ABS:
15661     case SS_ASHIFT:
15662     case US_ASHIFT:
15663     case SS_TRUNCATE:
15664     case US_TRUNCATE:
15665     case UNORDERED:
15666     case ORDERED:
15667     case UNEQ:
15668     case UNGE:
15669     case UNGT:
15670     case UNLE:
15671     case UNLT:
15672     case LTGT:
15673     case FRACT_CONVERT:
15674     case UNSIGNED_FRACT_CONVERT:
15675     case SAT_FRACT:
15676     case UNSIGNED_SAT_FRACT:
15677     case SQRT:
15678     case ASM_OPERANDS:
15679     case VEC_MERGE:
15680     case VEC_SELECT:
15681     case VEC_CONCAT:
15682     case VEC_DUPLICATE:
15683     case VEC_SERIES:
15684     case UNSPEC:
15685     case HIGH:
15686     case FMA:
15687     case STRICT_LOW_PART:
15688     case CONST_VECTOR:
15689     case CONST_FIXED:
15690     case CLRSB:
15691     case CLOBBER:
15692       /* If delegitimize_address couldn't do anything with the UNSPEC, we
15693          can't express it in the debug info.  This can happen e.g. with some
15694          TLS UNSPECs.  */
15695       break;
15696
15697     case CONST_STRING:
15698       resolve_one_addr (&rtl);
15699       goto symref;
15700
15701     /* RTL sequences inside PARALLEL record a series of DWARF operations for
15702        the expression.  An UNSPEC rtx represents a raw DWARF operation,
15703        new_loc_descr is called for it to build the operation directly.
15704        Otherwise mem_loc_descriptor is called recursively.  */
15705     case PARALLEL:
15706       {
15707         int index = 0;
15708         dw_loc_descr_ref exp_result = NULL;
15709
15710         for (; index < XVECLEN (rtl, 0); index++)
15711           {
15712             rtx elem = XVECEXP (rtl, 0, index);
15713             if (GET_CODE (elem) == UNSPEC)
15714               {
15715                 /* Each DWARF operation UNSPEC contain two operands, if
15716                    one operand is not used for the operation, const0_rtx is
15717                    passed.  */
15718                 gcc_assert (XVECLEN (elem, 0) == 2);
15719
15720                 HOST_WIDE_INT dw_op = XINT (elem, 1);
15721                 HOST_WIDE_INT oprnd1 = INTVAL (XVECEXP (elem, 0, 0));
15722                 HOST_WIDE_INT oprnd2 = INTVAL (XVECEXP (elem, 0, 1));
15723                 exp_result
15724                   = new_loc_descr ((enum dwarf_location_atom) dw_op, oprnd1,
15725                                    oprnd2);
15726               }
15727             else
15728               exp_result
15729                 = mem_loc_descriptor (elem, mode, mem_mode,
15730                                       VAR_INIT_STATUS_INITIALIZED);
15731
15732             if (!mem_loc_result)
15733               mem_loc_result = exp_result;
15734             else
15735               add_loc_descr (&mem_loc_result, exp_result);
15736           }
15737
15738         break;
15739       }
15740
15741     default:
15742       if (flag_checking)
15743         {
15744           print_rtl (stderr, rtl);
15745           gcc_unreachable ();
15746         }
15747       break;
15748     }
15749
15750   if (mem_loc_result && initialized == VAR_INIT_STATUS_UNINITIALIZED)
15751     add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
15752
15753   return mem_loc_result;
15754 }
15755
15756 /* Return a descriptor that describes the concatenation of two locations.
15757    This is typically a complex variable.  */
15758
15759 static dw_loc_descr_ref
15760 concat_loc_descriptor (rtx x0, rtx x1, enum var_init_status initialized)
15761 {
15762   dw_loc_descr_ref cc_loc_result = NULL;
15763   dw_loc_descr_ref x0_ref
15764     = loc_descriptor (x0, VOIDmode, VAR_INIT_STATUS_INITIALIZED);
15765   dw_loc_descr_ref x1_ref
15766     = loc_descriptor (x1, VOIDmode, VAR_INIT_STATUS_INITIALIZED);
15767
15768   if (x0_ref == 0 || x1_ref == 0)
15769     return 0;
15770
15771   cc_loc_result = x0_ref;
15772   add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x0)));
15773
15774   add_loc_descr (&cc_loc_result, x1_ref);
15775   add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x1)));
15776
15777   if (initialized == VAR_INIT_STATUS_UNINITIALIZED)
15778     add_loc_descr (&cc_loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
15779
15780   return cc_loc_result;
15781 }
15782
15783 /* Return a descriptor that describes the concatenation of N
15784    locations.  */
15785
15786 static dw_loc_descr_ref
15787 concatn_loc_descriptor (rtx concatn, enum var_init_status initialized)
15788 {
15789   unsigned int i;
15790   dw_loc_descr_ref cc_loc_result = NULL;
15791   unsigned int n = XVECLEN (concatn, 0);
15792
15793   for (i = 0; i < n; ++i)
15794     {
15795       dw_loc_descr_ref ref;
15796       rtx x = XVECEXP (concatn, 0, i);
15797
15798       ref = loc_descriptor (x, VOIDmode, VAR_INIT_STATUS_INITIALIZED);
15799       if (ref == NULL)
15800         return NULL;
15801
15802       add_loc_descr (&cc_loc_result, ref);
15803       add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x)));
15804     }
15805
15806   if (cc_loc_result && initialized == VAR_INIT_STATUS_UNINITIALIZED)
15807     add_loc_descr (&cc_loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
15808
15809   return cc_loc_result;
15810 }
15811
15812 /* Helper function for loc_descriptor.  Return DW_OP_implicit_pointer
15813    for DEBUG_IMPLICIT_PTR RTL.  */
15814
15815 static dw_loc_descr_ref
15816 implicit_ptr_descriptor (rtx rtl, HOST_WIDE_INT offset)
15817 {
15818   dw_loc_descr_ref ret;
15819   dw_die_ref ref;
15820
15821   if (dwarf_strict && dwarf_version < 5)
15822     return NULL;
15823   gcc_assert (TREE_CODE (DEBUG_IMPLICIT_PTR_DECL (rtl)) == VAR_DECL
15824               || TREE_CODE (DEBUG_IMPLICIT_PTR_DECL (rtl)) == PARM_DECL
15825               || TREE_CODE (DEBUG_IMPLICIT_PTR_DECL (rtl)) == RESULT_DECL);
15826   ref = lookup_decl_die (DEBUG_IMPLICIT_PTR_DECL (rtl));
15827   ret = new_loc_descr (dwarf_OP (DW_OP_implicit_pointer), 0, offset);
15828   ret->dw_loc_oprnd2.val_class = dw_val_class_const;
15829   if (ref)
15830     {
15831       ret->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
15832       ret->dw_loc_oprnd1.v.val_die_ref.die = ref;
15833       ret->dw_loc_oprnd1.v.val_die_ref.external = 0;
15834     }
15835   else
15836     {
15837       ret->dw_loc_oprnd1.val_class = dw_val_class_decl_ref;
15838       ret->dw_loc_oprnd1.v.val_decl_ref = DEBUG_IMPLICIT_PTR_DECL (rtl);
15839     }
15840   return ret;
15841 }
15842
15843 /* Output a proper Dwarf location descriptor for a variable or parameter
15844    which is either allocated in a register or in a memory location.  For a
15845    register, we just generate an OP_REG and the register number.  For a
15846    memory location we provide a Dwarf postfix expression describing how to
15847    generate the (dynamic) address of the object onto the address stack.
15848
15849    MODE is mode of the decl if this loc_descriptor is going to be used in
15850    .debug_loc section where DW_OP_stack_value and DW_OP_implicit_value are
15851    allowed, VOIDmode otherwise.
15852
15853    If we don't know how to describe it, return 0.  */
15854
15855 static dw_loc_descr_ref
15856 loc_descriptor (rtx rtl, machine_mode mode,
15857                 enum var_init_status initialized)
15858 {
15859   dw_loc_descr_ref loc_result = NULL;
15860   scalar_int_mode int_mode;
15861
15862   switch (GET_CODE (rtl))
15863     {
15864     case SUBREG:
15865       /* The case of a subreg may arise when we have a local (register)
15866          variable or a formal (register) parameter which doesn't quite fill
15867          up an entire register.  For now, just assume that it is
15868          legitimate to make the Dwarf info refer to the whole register which
15869          contains the given subreg.  */
15870       if (REG_P (SUBREG_REG (rtl)) && subreg_lowpart_p (rtl))
15871         loc_result = loc_descriptor (SUBREG_REG (rtl),
15872                                      GET_MODE (SUBREG_REG (rtl)), initialized);
15873       else
15874         goto do_default;
15875       break;
15876
15877     case REG:
15878       loc_result = reg_loc_descriptor (rtl, initialized);
15879       break;
15880
15881     case MEM:
15882       loc_result = mem_loc_descriptor (XEXP (rtl, 0), get_address_mode (rtl),
15883                                        GET_MODE (rtl), initialized);
15884       if (loc_result == NULL)
15885         loc_result = tls_mem_loc_descriptor (rtl);
15886       if (loc_result == NULL)
15887         {
15888           rtx new_rtl = avoid_constant_pool_reference (rtl);
15889           if (new_rtl != rtl)
15890             loc_result = loc_descriptor (new_rtl, mode, initialized);
15891         }
15892       break;
15893
15894     case CONCAT:
15895       loc_result = concat_loc_descriptor (XEXP (rtl, 0), XEXP (rtl, 1),
15896                                           initialized);
15897       break;
15898
15899     case CONCATN:
15900       loc_result = concatn_loc_descriptor (rtl, initialized);
15901       break;
15902
15903     case VAR_LOCATION:
15904       /* Single part.  */
15905       if (GET_CODE (PAT_VAR_LOCATION_LOC (rtl)) != PARALLEL)
15906         {
15907           rtx loc = PAT_VAR_LOCATION_LOC (rtl);
15908           if (GET_CODE (loc) == EXPR_LIST)
15909             loc = XEXP (loc, 0);
15910           loc_result = loc_descriptor (loc, mode, initialized);
15911           break;
15912         }
15913
15914       rtl = XEXP (rtl, 1);
15915       /* FALLTHRU */
15916
15917     case PARALLEL:
15918       {
15919         rtvec par_elems = XVEC (rtl, 0);
15920         int num_elem = GET_NUM_ELEM (par_elems);
15921         machine_mode mode;
15922         int i;
15923
15924         /* Create the first one, so we have something to add to.  */
15925         loc_result = loc_descriptor (XEXP (RTVEC_ELT (par_elems, 0), 0),
15926                                      VOIDmode, initialized);
15927         if (loc_result == NULL)
15928           return NULL;
15929         mode = GET_MODE (XEXP (RTVEC_ELT (par_elems, 0), 0));
15930         add_loc_descr_op_piece (&loc_result, GET_MODE_SIZE (mode));
15931         for (i = 1; i < num_elem; i++)
15932           {
15933             dw_loc_descr_ref temp;
15934
15935             temp = loc_descriptor (XEXP (RTVEC_ELT (par_elems, i), 0),
15936                                    VOIDmode, initialized);
15937             if (temp == NULL)
15938               return NULL;
15939             add_loc_descr (&loc_result, temp);
15940             mode = GET_MODE (XEXP (RTVEC_ELT (par_elems, i), 0));
15941             add_loc_descr_op_piece (&loc_result, GET_MODE_SIZE (mode));
15942           }
15943       }
15944       break;
15945
15946     case CONST_INT:
15947       if (mode != VOIDmode && mode != BLKmode)
15948         {
15949           int_mode = as_a <scalar_int_mode> (mode);
15950           loc_result = address_of_int_loc_descriptor (GET_MODE_SIZE (int_mode),
15951                                                       INTVAL (rtl));
15952         }
15953       break;
15954
15955     case CONST_DOUBLE:
15956       if (mode == VOIDmode)
15957         mode = GET_MODE (rtl);
15958
15959       if (mode != VOIDmode && (dwarf_version >= 4 || !dwarf_strict))
15960         {
15961           gcc_assert (mode == GET_MODE (rtl) || VOIDmode == GET_MODE (rtl));
15962
15963           /* Note that a CONST_DOUBLE rtx could represent either an integer
15964              or a floating-point constant.  A CONST_DOUBLE is used whenever
15965              the constant requires more than one word in order to be
15966              adequately represented.  We output CONST_DOUBLEs as blocks.  */
15967           scalar_mode smode = as_a <scalar_mode> (mode);
15968           loc_result = new_loc_descr (DW_OP_implicit_value,
15969                                       GET_MODE_SIZE (smode), 0);
15970 #if TARGET_SUPPORTS_WIDE_INT == 0
15971           if (!SCALAR_FLOAT_MODE_P (smode))
15972             {
15973               loc_result->dw_loc_oprnd2.val_class = dw_val_class_const_double;
15974               loc_result->dw_loc_oprnd2.v.val_double
15975                 = rtx_to_double_int (rtl);
15976             }
15977           else
15978 #endif
15979             {
15980               unsigned int length = GET_MODE_SIZE (smode);
15981               unsigned char *array = ggc_vec_alloc<unsigned char> (length);
15982
15983               insert_float (rtl, array);
15984               loc_result->dw_loc_oprnd2.val_class = dw_val_class_vec;
15985               loc_result->dw_loc_oprnd2.v.val_vec.length = length / 4;
15986               loc_result->dw_loc_oprnd2.v.val_vec.elt_size = 4;
15987               loc_result->dw_loc_oprnd2.v.val_vec.array = array;
15988             }
15989         }
15990       break;
15991
15992     case CONST_WIDE_INT:
15993       if (mode == VOIDmode)
15994         mode = GET_MODE (rtl);
15995
15996       if (mode != VOIDmode && (dwarf_version >= 4 || !dwarf_strict))
15997         {
15998           int_mode = as_a <scalar_int_mode> (mode);
15999           loc_result = new_loc_descr (DW_OP_implicit_value,
16000                                       GET_MODE_SIZE (int_mode), 0);
16001           loc_result->dw_loc_oprnd2.val_class = dw_val_class_wide_int;
16002           loc_result->dw_loc_oprnd2.v.val_wide = ggc_alloc<wide_int> ();
16003           *loc_result->dw_loc_oprnd2.v.val_wide = rtx_mode_t (rtl, int_mode);
16004         }
16005       break;
16006
16007     case CONST_VECTOR:
16008       if (mode == VOIDmode)
16009         mode = GET_MODE (rtl);
16010
16011       if (mode != VOIDmode && (dwarf_version >= 4 || !dwarf_strict))
16012         {
16013           unsigned int length;
16014           if (!CONST_VECTOR_NUNITS (rtl).is_constant (&length))
16015             return NULL;
16016
16017           unsigned int elt_size = GET_MODE_UNIT_SIZE (GET_MODE (rtl));
16018           unsigned char *array
16019             = ggc_vec_alloc<unsigned char> (length * elt_size);
16020           unsigned int i;
16021           unsigned char *p;
16022           machine_mode imode = GET_MODE_INNER (mode);
16023
16024           gcc_assert (mode == GET_MODE (rtl) || VOIDmode == GET_MODE (rtl));
16025           switch (GET_MODE_CLASS (mode))
16026             {
16027             case MODE_VECTOR_INT:
16028               for (i = 0, p = array; i < length; i++, p += elt_size)
16029                 {
16030                   rtx elt = CONST_VECTOR_ELT (rtl, i);
16031                   insert_wide_int (rtx_mode_t (elt, imode), p, elt_size);
16032                 }
16033               break;
16034
16035             case MODE_VECTOR_FLOAT:
16036               for (i = 0, p = array; i < length; i++, p += elt_size)
16037                 {
16038                   rtx elt = CONST_VECTOR_ELT (rtl, i);
16039                   insert_float (elt, p);
16040                 }
16041               break;
16042
16043             default:
16044               gcc_unreachable ();
16045             }
16046
16047           loc_result = new_loc_descr (DW_OP_implicit_value,
16048                                       length * elt_size, 0);
16049           loc_result->dw_loc_oprnd2.val_class = dw_val_class_vec;
16050           loc_result->dw_loc_oprnd2.v.val_vec.length = length;
16051           loc_result->dw_loc_oprnd2.v.val_vec.elt_size = elt_size;
16052           loc_result->dw_loc_oprnd2.v.val_vec.array = array;
16053         }
16054       break;
16055
16056     case CONST:
16057       if (mode == VOIDmode
16058           || CONST_SCALAR_INT_P (XEXP (rtl, 0))
16059           || CONST_DOUBLE_AS_FLOAT_P (XEXP (rtl, 0))
16060           || GET_CODE (XEXP (rtl, 0)) == CONST_VECTOR)
16061         {
16062           loc_result = loc_descriptor (XEXP (rtl, 0), mode, initialized);
16063           break;
16064         }
16065       /* FALLTHROUGH */
16066     case SYMBOL_REF:
16067       if (!const_ok_for_output (rtl))
16068         break;
16069       /* FALLTHROUGH */
16070     case LABEL_REF:
16071       if (is_a <scalar_int_mode> (mode, &int_mode)
16072           && GET_MODE_SIZE (int_mode) == DWARF2_ADDR_SIZE
16073           && (dwarf_version >= 4 || !dwarf_strict))
16074         {
16075          loc_result = new_addr_loc_descr (rtl, dtprel_false);
16076           add_loc_descr (&loc_result, new_loc_descr (DW_OP_stack_value, 0, 0));
16077           vec_safe_push (used_rtx_array, rtl);
16078         }
16079       break;
16080
16081     case DEBUG_IMPLICIT_PTR:
16082       loc_result = implicit_ptr_descriptor (rtl, 0);
16083       break;
16084
16085     case PLUS:
16086       if (GET_CODE (XEXP (rtl, 0)) == DEBUG_IMPLICIT_PTR
16087           && CONST_INT_P (XEXP (rtl, 1)))
16088         {
16089           loc_result
16090             = implicit_ptr_descriptor (XEXP (rtl, 0), INTVAL (XEXP (rtl, 1)));
16091           break;
16092         }
16093       /* FALLTHRU */
16094     do_default:
16095     default:
16096       if ((is_a <scalar_int_mode> (mode, &int_mode)
16097            && GET_MODE (rtl) == int_mode
16098            && GET_MODE_SIZE (int_mode) <= DWARF2_ADDR_SIZE
16099            && dwarf_version >= 4)
16100           || (!dwarf_strict && mode != VOIDmode && mode != BLKmode))
16101         {
16102           /* Value expression.  */
16103           loc_result = mem_loc_descriptor (rtl, mode, VOIDmode, initialized);
16104           if (loc_result)
16105             add_loc_descr (&loc_result,
16106                            new_loc_descr (DW_OP_stack_value, 0, 0));
16107         }
16108       break;
16109     }
16110
16111   return loc_result;
16112 }
16113
16114 /* We need to figure out what section we should use as the base for the
16115    address ranges where a given location is valid.
16116    1. If this particular DECL has a section associated with it, use that.
16117    2. If this function has a section associated with it, use that.
16118    3. Otherwise, use the text section.
16119    XXX: If you split a variable across multiple sections, we won't notice.  */
16120
16121 static const char *
16122 secname_for_decl (const_tree decl)
16123 {
16124   const char *secname;
16125
16126   if (VAR_OR_FUNCTION_DECL_P (decl)
16127       && (DECL_EXTERNAL (decl) || TREE_PUBLIC (decl) || TREE_STATIC (decl))
16128       && DECL_SECTION_NAME (decl))
16129     secname = DECL_SECTION_NAME (decl);
16130   else if (current_function_decl && DECL_SECTION_NAME (current_function_decl))
16131     secname = DECL_SECTION_NAME (current_function_decl);
16132   else if (cfun && in_cold_section_p)
16133     secname = crtl->subsections.cold_section_label;
16134   else
16135     secname = text_section_label;
16136
16137   return secname;
16138 }
16139
16140 /* Return true when DECL_BY_REFERENCE is defined and set for DECL.  */
16141
16142 static bool
16143 decl_by_reference_p (tree decl)
16144 {
16145   return ((TREE_CODE (decl) == PARM_DECL || TREE_CODE (decl) == RESULT_DECL
16146            || VAR_P (decl))
16147           && DECL_BY_REFERENCE (decl));
16148 }
16149
16150 /* Helper function for dw_loc_list.  Compute proper Dwarf location descriptor
16151    for VARLOC.  */
16152
16153 static dw_loc_descr_ref
16154 dw_loc_list_1 (tree loc, rtx varloc, int want_address,
16155                enum var_init_status initialized)
16156 {
16157   int have_address = 0;
16158   dw_loc_descr_ref descr;
16159   machine_mode mode;
16160
16161   if (want_address != 2)
16162     {
16163       gcc_assert (GET_CODE (varloc) == VAR_LOCATION);
16164       /* Single part.  */
16165       if (GET_CODE (PAT_VAR_LOCATION_LOC (varloc)) != PARALLEL)
16166         {
16167           varloc = PAT_VAR_LOCATION_LOC (varloc);
16168           if (GET_CODE (varloc) == EXPR_LIST)
16169             varloc = XEXP (varloc, 0);
16170           mode = GET_MODE (varloc);
16171           if (MEM_P (varloc))
16172             {
16173               rtx addr = XEXP (varloc, 0);
16174               descr = mem_loc_descriptor (addr, get_address_mode (varloc),
16175                                           mode, initialized);
16176               if (descr)
16177                 have_address = 1;
16178               else
16179                 {
16180                   rtx x = avoid_constant_pool_reference (varloc);
16181                   if (x != varloc)
16182                     descr = mem_loc_descriptor (x, mode, VOIDmode,
16183                                                 initialized);
16184                 }
16185             }
16186           else
16187             descr = mem_loc_descriptor (varloc, mode, VOIDmode, initialized);
16188         }
16189       else
16190         return 0;
16191     }
16192   else
16193     {
16194       if (GET_CODE (varloc) == VAR_LOCATION)
16195         mode = DECL_MODE (PAT_VAR_LOCATION_DECL (varloc));
16196       else
16197         mode = DECL_MODE (loc);
16198       descr = loc_descriptor (varloc, mode, initialized);
16199       have_address = 1;
16200     }
16201
16202   if (!descr)
16203     return 0;
16204
16205   if (want_address == 2 && !have_address
16206       && (dwarf_version >= 4 || !dwarf_strict))
16207     {
16208       if (int_size_in_bytes (TREE_TYPE (loc)) > DWARF2_ADDR_SIZE)
16209         {
16210           expansion_failed (loc, NULL_RTX,
16211                             "DWARF address size mismatch");
16212           return 0;
16213         }
16214       add_loc_descr (&descr, new_loc_descr (DW_OP_stack_value, 0, 0));
16215       have_address = 1;
16216     }
16217   /* Show if we can't fill the request for an address.  */
16218   if (want_address && !have_address)
16219     {
16220       expansion_failed (loc, NULL_RTX,
16221                         "Want address and only have value");
16222       return 0;
16223     }
16224
16225   /* If we've got an address and don't want one, dereference.  */
16226   if (!want_address && have_address)
16227     {
16228       HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (loc));
16229       enum dwarf_location_atom op;
16230
16231       if (size > DWARF2_ADDR_SIZE || size == -1)
16232         {
16233           expansion_failed (loc, NULL_RTX,
16234                             "DWARF address size mismatch");
16235           return 0;
16236         }
16237       else if (size == DWARF2_ADDR_SIZE)
16238         op = DW_OP_deref;
16239       else
16240         op = DW_OP_deref_size;
16241
16242       add_loc_descr (&descr, new_loc_descr (op, size, 0));
16243     }
16244
16245   return descr;
16246 }
16247
16248 /* Create a DW_OP_piece or DW_OP_bit_piece for bitsize, or return NULL
16249    if it is not possible.  */
16250
16251 static dw_loc_descr_ref
16252 new_loc_descr_op_bit_piece (HOST_WIDE_INT bitsize, HOST_WIDE_INT offset)
16253 {
16254   if ((bitsize % BITS_PER_UNIT) == 0 && offset == 0)
16255     return new_loc_descr (DW_OP_piece, bitsize / BITS_PER_UNIT, 0);
16256   else if (dwarf_version >= 3 || !dwarf_strict)
16257     return new_loc_descr (DW_OP_bit_piece, bitsize, offset);
16258   else
16259     return NULL;
16260 }
16261
16262 /* Helper function for dw_loc_list.  Compute proper Dwarf location descriptor
16263    for VAR_LOC_NOTE for variable DECL that has been optimized by SRA.  */
16264
16265 static dw_loc_descr_ref
16266 dw_sra_loc_expr (tree decl, rtx loc)
16267 {
16268   rtx p;
16269   unsigned HOST_WIDE_INT padsize = 0;
16270   dw_loc_descr_ref descr, *descr_tail;
16271   unsigned HOST_WIDE_INT decl_size;
16272   rtx varloc;
16273   enum var_init_status initialized;
16274
16275   if (DECL_SIZE (decl) == NULL
16276       || !tree_fits_uhwi_p (DECL_SIZE (decl)))
16277     return NULL;
16278
16279   decl_size = tree_to_uhwi (DECL_SIZE (decl));
16280   descr = NULL;
16281   descr_tail = &descr;
16282
16283   for (p = loc; p; p = XEXP (p, 1))
16284     {
16285       unsigned HOST_WIDE_INT bitsize = decl_piece_bitsize (p);
16286       rtx loc_note = *decl_piece_varloc_ptr (p);
16287       dw_loc_descr_ref cur_descr;
16288       dw_loc_descr_ref *tail, last = NULL;
16289       unsigned HOST_WIDE_INT opsize = 0;
16290
16291       if (loc_note == NULL_RTX
16292           || NOTE_VAR_LOCATION_LOC (loc_note) == NULL_RTX)
16293         {
16294           padsize += bitsize;
16295           continue;
16296         }
16297       initialized = NOTE_VAR_LOCATION_STATUS (loc_note);
16298       varloc = NOTE_VAR_LOCATION (loc_note);
16299       cur_descr = dw_loc_list_1 (decl, varloc, 2, initialized);
16300       if (cur_descr == NULL)
16301         {
16302           padsize += bitsize;
16303           continue;
16304         }
16305
16306       /* Check that cur_descr either doesn't use
16307          DW_OP_*piece operations, or their sum is equal
16308          to bitsize.  Otherwise we can't embed it.  */
16309       for (tail = &cur_descr; *tail != NULL;
16310            tail = &(*tail)->dw_loc_next)
16311         if ((*tail)->dw_loc_opc == DW_OP_piece)
16312           {
16313             opsize += (*tail)->dw_loc_oprnd1.v.val_unsigned
16314                       * BITS_PER_UNIT;
16315             last = *tail;
16316           }
16317         else if ((*tail)->dw_loc_opc == DW_OP_bit_piece)
16318           {
16319             opsize += (*tail)->dw_loc_oprnd1.v.val_unsigned;
16320             last = *tail;
16321           }
16322
16323       if (last != NULL && opsize != bitsize)
16324         {
16325           padsize += bitsize;
16326           /* Discard the current piece of the descriptor and release any
16327              addr_table entries it uses.  */
16328           remove_loc_list_addr_table_entries (cur_descr);
16329           continue;
16330         }
16331
16332       /* If there is a hole, add DW_OP_*piece after empty DWARF
16333          expression, which means that those bits are optimized out.  */
16334       if (padsize)
16335         {
16336           if (padsize > decl_size)
16337             {
16338               remove_loc_list_addr_table_entries (cur_descr);
16339               goto discard_descr;
16340             }
16341           decl_size -= padsize;
16342           *descr_tail = new_loc_descr_op_bit_piece (padsize, 0);
16343           if (*descr_tail == NULL)
16344             {
16345               remove_loc_list_addr_table_entries (cur_descr);
16346               goto discard_descr;
16347             }
16348           descr_tail = &(*descr_tail)->dw_loc_next;
16349           padsize = 0;
16350         }
16351       *descr_tail = cur_descr;
16352       descr_tail = tail;
16353       if (bitsize > decl_size)
16354         goto discard_descr;
16355       decl_size -= bitsize;
16356       if (last == NULL)
16357         {
16358           HOST_WIDE_INT offset = 0;
16359           if (GET_CODE (varloc) == VAR_LOCATION
16360               && GET_CODE (PAT_VAR_LOCATION_LOC (varloc)) != PARALLEL)
16361             {
16362               varloc = PAT_VAR_LOCATION_LOC (varloc);
16363               if (GET_CODE (varloc) == EXPR_LIST)
16364                 varloc = XEXP (varloc, 0);
16365             }
16366           do 
16367             {
16368               if (GET_CODE (varloc) == CONST
16369                   || GET_CODE (varloc) == SIGN_EXTEND
16370                   || GET_CODE (varloc) == ZERO_EXTEND)
16371                 varloc = XEXP (varloc, 0);
16372               else if (GET_CODE (varloc) == SUBREG)
16373                 varloc = SUBREG_REG (varloc);
16374               else
16375                 break;
16376             }
16377           while (1);
16378           /* DW_OP_bit_size offset should be zero for register
16379              or implicit location descriptions and empty location
16380              descriptions, but for memory addresses needs big endian
16381              adjustment.  */
16382           if (MEM_P (varloc))
16383             {
16384               unsigned HOST_WIDE_INT memsize;
16385               if (!poly_uint64 (MEM_SIZE (varloc)).is_constant (&memsize))
16386                 goto discard_descr;
16387               memsize *= BITS_PER_UNIT;
16388               if (memsize != bitsize)
16389                 {
16390                   if (BYTES_BIG_ENDIAN != WORDS_BIG_ENDIAN
16391                       && (memsize > BITS_PER_WORD || bitsize > BITS_PER_WORD))
16392                     goto discard_descr;
16393                   if (memsize < bitsize)
16394                     goto discard_descr;
16395                   if (BITS_BIG_ENDIAN)
16396                     offset = memsize - bitsize;
16397                 }
16398             }
16399
16400           *descr_tail = new_loc_descr_op_bit_piece (bitsize, offset);
16401           if (*descr_tail == NULL)
16402             goto discard_descr;
16403           descr_tail = &(*descr_tail)->dw_loc_next;
16404         }
16405     }
16406
16407   /* If there were any non-empty expressions, add padding till the end of
16408      the decl.  */
16409   if (descr != NULL && decl_size != 0)
16410     {
16411       *descr_tail = new_loc_descr_op_bit_piece (decl_size, 0);
16412       if (*descr_tail == NULL)
16413         goto discard_descr;
16414     }
16415   return descr;
16416
16417 discard_descr:
16418   /* Discard the descriptor and release any addr_table entries it uses.  */
16419   remove_loc_list_addr_table_entries (descr);
16420   return NULL;
16421 }
16422
16423 /* Return the dwarf representation of the location list LOC_LIST of
16424    DECL.  WANT_ADDRESS has the same meaning as in loc_list_from_tree
16425    function.  */
16426
16427 static dw_loc_list_ref
16428 dw_loc_list (var_loc_list *loc_list, tree decl, int want_address)
16429 {
16430   const char *endname, *secname;
16431   rtx varloc;
16432   enum var_init_status initialized;
16433   struct var_loc_node *node;
16434   dw_loc_descr_ref descr;
16435   char label_id[MAX_ARTIFICIAL_LABEL_BYTES];
16436   dw_loc_list_ref list = NULL;
16437   dw_loc_list_ref *listp = &list;
16438
16439   /* Now that we know what section we are using for a base,
16440      actually construct the list of locations.
16441      The first location information is what is passed to the
16442      function that creates the location list, and the remaining
16443      locations just get added on to that list.
16444      Note that we only know the start address for a location
16445      (IE location changes), so to build the range, we use
16446      the range [current location start, next location start].
16447      This means we have to special case the last node, and generate
16448      a range of [last location start, end of function label].  */
16449
16450   if (cfun && crtl->has_bb_partition)
16451     {
16452       bool save_in_cold_section_p = in_cold_section_p;
16453       in_cold_section_p = first_function_block_is_cold;
16454       if (loc_list->last_before_switch == NULL)
16455         in_cold_section_p = !in_cold_section_p;
16456       secname = secname_for_decl (decl);
16457       in_cold_section_p = save_in_cold_section_p;
16458     }
16459   else
16460     secname = secname_for_decl (decl);
16461
16462   for (node = loc_list->first; node; node = node->next)
16463     {
16464       bool range_across_switch = false;
16465       if (GET_CODE (node->loc) == EXPR_LIST
16466           || NOTE_VAR_LOCATION_LOC (node->loc) != NULL_RTX)
16467         {
16468           if (GET_CODE (node->loc) == EXPR_LIST)
16469             {
16470               descr = NULL;
16471               /* This requires DW_OP_{,bit_}piece, which is not usable
16472                  inside DWARF expressions.  */
16473               if (want_address == 2)
16474                 descr = dw_sra_loc_expr (decl, node->loc);
16475             }
16476           else
16477             {
16478               initialized = NOTE_VAR_LOCATION_STATUS (node->loc);
16479               varloc = NOTE_VAR_LOCATION (node->loc);
16480               descr = dw_loc_list_1 (decl, varloc, want_address, initialized);
16481             }
16482           if (descr)
16483             {
16484               /* If section switch happens in between node->label
16485                  and node->next->label (or end of function) and
16486                  we can't emit it as a single entry list,
16487                  emit two ranges, first one ending at the end
16488                  of first partition and second one starting at the
16489                  beginning of second partition.  */
16490               if (node == loc_list->last_before_switch
16491                   && (node != loc_list->first || loc_list->first->next)
16492                   && current_function_decl)
16493                 {
16494                   endname = cfun->fde->dw_fde_end;
16495                   range_across_switch = true;
16496                 }
16497               /* The variable has a location between NODE->LABEL and
16498                  NODE->NEXT->LABEL.  */
16499               else if (node->next)
16500                 endname = node->next->label;
16501               /* If the variable has a location at the last label
16502                  it keeps its location until the end of function.  */
16503               else if (!current_function_decl)
16504                 endname = text_end_label;
16505               else
16506                 {
16507                   ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_END_LABEL,
16508                                                current_function_funcdef_no);
16509                   endname = ggc_strdup (label_id);
16510                 }
16511
16512               *listp = new_loc_list (descr, node->label, endname, secname);
16513               if (TREE_CODE (decl) == PARM_DECL
16514                   && node == loc_list->first
16515                   && NOTE_P (node->loc)
16516                   && strcmp (node->label, endname) == 0)
16517                 (*listp)->force = true;
16518               listp = &(*listp)->dw_loc_next;
16519             }
16520         }
16521
16522       if (cfun
16523           && crtl->has_bb_partition
16524           && node == loc_list->last_before_switch)
16525         {
16526           bool save_in_cold_section_p = in_cold_section_p;
16527           in_cold_section_p = !first_function_block_is_cold;
16528           secname = secname_for_decl (decl);
16529           in_cold_section_p = save_in_cold_section_p;
16530         }
16531
16532       if (range_across_switch)
16533         {
16534           if (GET_CODE (node->loc) == EXPR_LIST)
16535             descr = dw_sra_loc_expr (decl, node->loc);
16536           else
16537             {
16538               initialized = NOTE_VAR_LOCATION_STATUS (node->loc);
16539               varloc = NOTE_VAR_LOCATION (node->loc);
16540               descr = dw_loc_list_1 (decl, varloc, want_address,
16541                                      initialized);
16542             }
16543           gcc_assert (descr);
16544           /* The variable has a location between NODE->LABEL and
16545              NODE->NEXT->LABEL.  */
16546           if (node->next)
16547             endname = node->next->label;
16548           else
16549             endname = cfun->fde->dw_fde_second_end;
16550           *listp = new_loc_list (descr, cfun->fde->dw_fde_second_begin,
16551                                  endname, secname);
16552           listp = &(*listp)->dw_loc_next;
16553         }
16554     }
16555
16556   /* Try to avoid the overhead of a location list emitting a location
16557      expression instead, but only if we didn't have more than one
16558      location entry in the first place.  If some entries were not
16559      representable, we don't want to pretend a single entry that was
16560      applies to the entire scope in which the variable is
16561      available.  */
16562   if (list && loc_list->first->next)
16563     gen_llsym (list);
16564
16565   return list;
16566 }
16567
16568 /* Return if the loc_list has only single element and thus can be represented
16569    as location description.   */
16570
16571 static bool
16572 single_element_loc_list_p (dw_loc_list_ref list)
16573 {
16574   gcc_assert (!list->dw_loc_next || list->ll_symbol);
16575   return !list->ll_symbol;
16576 }
16577
16578 /* Duplicate a single element of location list.  */
16579
16580 static inline dw_loc_descr_ref
16581 copy_loc_descr (dw_loc_descr_ref ref)
16582 {
16583   dw_loc_descr_ref copy = ggc_alloc<dw_loc_descr_node> ();
16584   memcpy (copy, ref, sizeof (dw_loc_descr_node));
16585   return copy;
16586 }
16587
16588 /* To each location in list LIST append loc descr REF.  */
16589
16590 static void
16591 add_loc_descr_to_each (dw_loc_list_ref list, dw_loc_descr_ref ref)
16592 {
16593   dw_loc_descr_ref copy;
16594   add_loc_descr (&list->expr, ref);
16595   list = list->dw_loc_next;
16596   while (list)
16597     {
16598       copy = copy_loc_descr (ref);
16599       add_loc_descr (&list->expr, copy);
16600       while (copy->dw_loc_next)
16601         copy = copy->dw_loc_next = copy_loc_descr (copy->dw_loc_next);
16602       list = list->dw_loc_next;
16603     }
16604 }
16605
16606 /* To each location in list LIST prepend loc descr REF.  */
16607
16608 static void
16609 prepend_loc_descr_to_each (dw_loc_list_ref list, dw_loc_descr_ref ref)
16610 {
16611   dw_loc_descr_ref copy;
16612   dw_loc_descr_ref ref_end = list->expr;
16613   add_loc_descr (&ref, list->expr);
16614   list->expr = ref;
16615   list = list->dw_loc_next;
16616   while (list)
16617     {
16618       dw_loc_descr_ref end = list->expr;
16619       list->expr = copy = copy_loc_descr (ref);
16620       while (copy->dw_loc_next != ref_end)
16621         copy = copy->dw_loc_next = copy_loc_descr (copy->dw_loc_next);
16622       copy->dw_loc_next = end;
16623       list = list->dw_loc_next;
16624     }
16625 }
16626
16627 /* Given two lists RET and LIST
16628    produce location list that is result of adding expression in LIST
16629    to expression in RET on each position in program.
16630    Might be destructive on both RET and LIST.
16631
16632    TODO: We handle only simple cases of RET or LIST having at most one
16633    element.  General case would involve sorting the lists in program order
16634    and merging them that will need some additional work.
16635    Adding that will improve quality of debug info especially for SRA-ed
16636    structures.  */
16637
16638 static void
16639 add_loc_list (dw_loc_list_ref *ret, dw_loc_list_ref list)
16640 {
16641   if (!list)
16642     return;
16643   if (!*ret)
16644     {
16645       *ret = list;
16646       return;
16647     }
16648   if (!list->dw_loc_next)
16649     {
16650       add_loc_descr_to_each (*ret, list->expr);
16651       return;
16652     }
16653   if (!(*ret)->dw_loc_next)
16654     {
16655       prepend_loc_descr_to_each (list, (*ret)->expr);
16656       *ret = list;
16657       return;
16658     }
16659   expansion_failed (NULL_TREE, NULL_RTX,
16660                     "Don't know how to merge two non-trivial"
16661                     " location lists.\n");
16662   *ret = NULL;
16663   return;
16664 }
16665
16666 /* LOC is constant expression.  Try a luck, look it up in constant
16667    pool and return its loc_descr of its address.  */
16668
16669 static dw_loc_descr_ref
16670 cst_pool_loc_descr (tree loc)
16671 {
16672   /* Get an RTL for this, if something has been emitted.  */
16673   rtx rtl = lookup_constant_def (loc);
16674
16675   if (!rtl || !MEM_P (rtl))
16676     {
16677       gcc_assert (!rtl);
16678       return 0;
16679     }
16680   gcc_assert (GET_CODE (XEXP (rtl, 0)) == SYMBOL_REF);
16681
16682   /* TODO: We might get more coverage if we was actually delaying expansion
16683      of all expressions till end of compilation when constant pools are fully
16684      populated.  */
16685   if (!TREE_ASM_WRITTEN (SYMBOL_REF_DECL (XEXP (rtl, 0))))
16686     {
16687       expansion_failed (loc, NULL_RTX,
16688                         "CST value in contant pool but not marked.");
16689       return 0;
16690     }
16691   return mem_loc_descriptor (XEXP (rtl, 0), get_address_mode (rtl),
16692                              GET_MODE (rtl), VAR_INIT_STATUS_INITIALIZED);
16693 }
16694
16695 /* Return dw_loc_list representing address of addr_expr LOC
16696    by looking for inner INDIRECT_REF expression and turning
16697    it into simple arithmetics.
16698
16699    See loc_list_from_tree for the meaning of CONTEXT.  */
16700
16701 static dw_loc_list_ref
16702 loc_list_for_address_of_addr_expr_of_indirect_ref (tree loc, bool toplev,
16703                                                    loc_descr_context *context)
16704 {
16705   tree obj, offset;
16706   poly_int64 bitsize, bitpos, bytepos;
16707   machine_mode mode;
16708   int unsignedp, reversep, volatilep = 0;
16709   dw_loc_list_ref list_ret = NULL, list_ret1 = NULL;
16710
16711   obj = get_inner_reference (TREE_OPERAND (loc, 0),
16712                              &bitsize, &bitpos, &offset, &mode,
16713                              &unsignedp, &reversep, &volatilep);
16714   STRIP_NOPS (obj);
16715   if (!multiple_p (bitpos, BITS_PER_UNIT, &bytepos))
16716     {
16717       expansion_failed (loc, NULL_RTX, "bitfield access");
16718       return 0;
16719     }
16720   if (!INDIRECT_REF_P (obj))
16721     {
16722       expansion_failed (obj,
16723                         NULL_RTX, "no indirect ref in inner refrence");
16724       return 0;
16725     }
16726   if (!offset && known_eq (bitpos, 0))
16727     list_ret = loc_list_from_tree (TREE_OPERAND (obj, 0), toplev ? 2 : 1,
16728                                    context);
16729   else if (toplev
16730            && int_size_in_bytes (TREE_TYPE (loc)) <= DWARF2_ADDR_SIZE
16731            && (dwarf_version >= 4 || !dwarf_strict))
16732     {
16733       list_ret = loc_list_from_tree (TREE_OPERAND (obj, 0), 0, context);
16734       if (!list_ret)
16735         return 0;
16736       if (offset)
16737         {
16738           /* Variable offset.  */
16739           list_ret1 = loc_list_from_tree (offset, 0, context);
16740           if (list_ret1 == 0)
16741             return 0;
16742           add_loc_list (&list_ret, list_ret1);
16743           if (!list_ret)
16744             return 0;
16745           add_loc_descr_to_each (list_ret,
16746                                  new_loc_descr (DW_OP_plus, 0, 0));
16747         }
16748       HOST_WIDE_INT value;
16749       if (bytepos.is_constant (&value) && value > 0)
16750         add_loc_descr_to_each (list_ret,
16751                                new_loc_descr (DW_OP_plus_uconst, value, 0));
16752       else if (maybe_ne (bytepos, 0))
16753         loc_list_plus_const (list_ret, bytepos);
16754       add_loc_descr_to_each (list_ret,
16755                              new_loc_descr (DW_OP_stack_value, 0, 0));
16756     }
16757   return list_ret;
16758 }
16759
16760 /* Set LOC to the next operation that is not a DW_OP_nop operation. In the case
16761    all operations from LOC are nops, move to the last one.  Insert in NOPS all
16762    operations that are skipped.  */
16763
16764 static void
16765 loc_descr_to_next_no_nop (dw_loc_descr_ref &loc,
16766                           hash_set<dw_loc_descr_ref> &nops)
16767 {
16768   while (loc->dw_loc_next != NULL && loc->dw_loc_opc == DW_OP_nop)
16769     {
16770       nops.add (loc);
16771       loc = loc->dw_loc_next;
16772     }
16773 }
16774
16775 /* Helper for loc_descr_without_nops: free the location description operation
16776    P.  */
16777
16778 bool
16779 free_loc_descr (const dw_loc_descr_ref &loc, void *data ATTRIBUTE_UNUSED)
16780 {
16781   ggc_free (loc);
16782   return true;
16783 }
16784
16785 /* Remove all DW_OP_nop operations from LOC except, if it exists, the one that
16786    finishes LOC.  */
16787
16788 static void
16789 loc_descr_without_nops (dw_loc_descr_ref &loc)
16790 {
16791   if (loc->dw_loc_opc == DW_OP_nop && loc->dw_loc_next == NULL)
16792     return;
16793
16794   /* Set of all DW_OP_nop operations we remove.  */
16795   hash_set<dw_loc_descr_ref> nops;
16796
16797   /* First, strip all prefix NOP operations in order to keep the head of the
16798      operations list.  */
16799   loc_descr_to_next_no_nop (loc, nops);
16800
16801   for (dw_loc_descr_ref cur = loc; cur != NULL;)
16802     {
16803       /* For control flow operations: strip "prefix" nops in destination
16804          labels.  */
16805       if (cur->dw_loc_oprnd1.val_class == dw_val_class_loc)
16806         loc_descr_to_next_no_nop (cur->dw_loc_oprnd1.v.val_loc, nops);
16807       if (cur->dw_loc_oprnd2.val_class == dw_val_class_loc)
16808         loc_descr_to_next_no_nop (cur->dw_loc_oprnd2.v.val_loc, nops);
16809
16810       /* Do the same for the operations that follow, then move to the next
16811          iteration.  */
16812       if (cur->dw_loc_next != NULL)
16813         loc_descr_to_next_no_nop (cur->dw_loc_next, nops);
16814       cur = cur->dw_loc_next;
16815     }
16816
16817   nops.traverse<void *, free_loc_descr> (NULL);
16818 }
16819
16820
16821 struct dwarf_procedure_info;
16822
16823 /* Helper structure for location descriptions generation.  */
16824 struct loc_descr_context
16825 {
16826   /* The type that is implicitly referenced by DW_OP_push_object_address, or
16827      NULL_TREE if DW_OP_push_object_address in invalid for this location
16828      description.  This is used when processing PLACEHOLDER_EXPR nodes.  */
16829   tree context_type;
16830   /* The ..._DECL node that should be translated as a
16831      DW_OP_push_object_address operation.  */
16832   tree base_decl;
16833   /* Information about the DWARF procedure we are currently generating. NULL if
16834      we are not generating a DWARF procedure.  */
16835   struct dwarf_procedure_info *dpi;
16836   /* True if integral PLACEHOLDER_EXPR stands for the first argument passed
16837      by consumer.  Used for DW_TAG_generic_subrange attributes.  */
16838   bool placeholder_arg;
16839   /* True if PLACEHOLDER_EXPR has been seen.  */
16840   bool placeholder_seen;
16841 };
16842
16843 /* DWARF procedures generation
16844
16845    DWARF expressions (aka. location descriptions) are used to encode variable
16846    things such as sizes or offsets.  Such computations can have redundant parts
16847    that can be factorized in order to reduce the size of the output debug
16848    information.  This is the whole point of DWARF procedures.
16849
16850    Thanks to stor-layout.c, size and offset expressions in GENERIC trees are
16851    already factorized into functions ("size functions") in order to handle very
16852    big and complex types.  Such functions are quite simple: they have integral
16853    arguments, they return an integral result and their body contains only a
16854    return statement with arithmetic expressions.  This is the only kind of
16855    function we are interested in translating into DWARF procedures, here.
16856
16857    DWARF expressions and DWARF procedure are executed using a stack, so we have
16858    to define some calling convention for them to interact.  Let's say that:
16859
16860    - Before calling a DWARF procedure, DWARF expressions must push on the stack
16861      all arguments in reverse order (right-to-left) so that when the DWARF
16862      procedure execution starts, the first argument is the top of the stack.
16863
16864    - Then, when returning, the DWARF procedure must have consumed all arguments
16865      on the stack, must have pushed the result and touched nothing else.
16866
16867    - Each integral argument and the result are integral types can be hold in a
16868      single stack slot.
16869
16870    - We call "frame offset" the number of stack slots that are "under DWARF
16871      procedure control": it includes the arguments slots, the temporaries and
16872      the result slot. Thus, it is equal to the number of arguments when the
16873      procedure execution starts and must be equal to one (the result) when it
16874      returns.  */
16875
16876 /* Helper structure used when generating operations for a DWARF procedure.  */
16877 struct dwarf_procedure_info
16878 {
16879   /* The FUNCTION_DECL node corresponding to the DWARF procedure that is
16880      currently translated.  */
16881   tree fndecl;
16882   /* The number of arguments FNDECL takes.  */
16883   unsigned args_count;
16884 };
16885
16886 /* Return a pointer to a newly created DIE node for a DWARF procedure.  Add
16887    LOCATION as its DW_AT_location attribute.  If FNDECL is not NULL_TREE,
16888    equate it to this DIE.  */
16889
16890 static dw_die_ref
16891 new_dwarf_proc_die (dw_loc_descr_ref location, tree fndecl,
16892                     dw_die_ref parent_die)
16893 {
16894   dw_die_ref dwarf_proc_die;
16895
16896   if ((dwarf_version < 3 && dwarf_strict)
16897       || location == NULL)
16898     return NULL;
16899
16900   dwarf_proc_die = new_die (DW_TAG_dwarf_procedure, parent_die, fndecl);
16901   if (fndecl)
16902     equate_decl_number_to_die (fndecl, dwarf_proc_die);
16903   add_AT_loc (dwarf_proc_die, DW_AT_location, location);
16904   return dwarf_proc_die;
16905 }
16906
16907 /* Return whether TYPE is a supported type as a DWARF procedure argument
16908    type or return type (we handle only scalar types and pointer types that
16909    aren't wider than the DWARF expression evaluation stack.  */
16910
16911 static bool
16912 is_handled_procedure_type (tree type)
16913 {
16914   return ((INTEGRAL_TYPE_P (type)
16915            || TREE_CODE (type) == OFFSET_TYPE
16916            || TREE_CODE (type) == POINTER_TYPE)
16917           && int_size_in_bytes (type) <= DWARF2_ADDR_SIZE);
16918 }
16919
16920 /* Helper for resolve_args_picking: do the same but stop when coming across
16921    visited nodes.  For each node we visit, register in FRAME_OFFSETS the frame
16922    offset *before* evaluating the corresponding operation.  */
16923
16924 static bool
16925 resolve_args_picking_1 (dw_loc_descr_ref loc, unsigned initial_frame_offset,
16926                         struct dwarf_procedure_info *dpi,
16927                         hash_map<dw_loc_descr_ref, unsigned> &frame_offsets)
16928 {
16929   /* The "frame_offset" identifier is already used to name a macro... */
16930   unsigned frame_offset_ = initial_frame_offset;
16931   dw_loc_descr_ref l;
16932
16933   for (l = loc; l != NULL;)
16934     {
16935       bool existed;
16936       unsigned &l_frame_offset = frame_offsets.get_or_insert (l, &existed);
16937
16938       /* If we already met this node, there is nothing to compute anymore.  */
16939       if (existed)
16940         {
16941           /* Make sure that the stack size is consistent wherever the execution
16942              flow comes from.  */
16943           gcc_assert ((unsigned) l_frame_offset == frame_offset_);
16944           break;
16945         }
16946       l_frame_offset = frame_offset_;
16947
16948       /* If needed, relocate the picking offset with respect to the frame
16949          offset. */
16950       if (l->frame_offset_rel)
16951         {
16952           unsigned HOST_WIDE_INT off;
16953           switch (l->dw_loc_opc)
16954             {
16955             case DW_OP_pick:
16956               off = l->dw_loc_oprnd1.v.val_unsigned;
16957               break;
16958             case DW_OP_dup:
16959               off = 0;
16960               break;
16961             case DW_OP_over:
16962               off = 1;
16963               break;
16964             default:
16965               gcc_unreachable ();
16966             }
16967           /* frame_offset_ is the size of the current stack frame, including
16968              incoming arguments. Besides, the arguments are pushed
16969              right-to-left.  Thus, in order to access the Nth argument from
16970              this operation node, the picking has to skip temporaries *plus*
16971              one stack slot per argument (0 for the first one, 1 for the second
16972              one, etc.).
16973
16974              The targetted argument number (N) is already set as the operand,
16975              and the number of temporaries can be computed with:
16976                frame_offsets_ - dpi->args_count */
16977           off += frame_offset_ - dpi->args_count;
16978
16979           /* DW_OP_pick handles only offsets from 0 to 255 (inclusive)...  */
16980           if (off > 255)
16981             return false;
16982
16983           if (off == 0)
16984             {
16985               l->dw_loc_opc = DW_OP_dup;
16986               l->dw_loc_oprnd1.v.val_unsigned = 0;
16987             }
16988           else if (off == 1)
16989             {
16990               l->dw_loc_opc = DW_OP_over;
16991               l->dw_loc_oprnd1.v.val_unsigned = 0;
16992             }
16993           else
16994             {
16995               l->dw_loc_opc = DW_OP_pick;
16996               l->dw_loc_oprnd1.v.val_unsigned = off;
16997             }
16998         }
16999
17000       /* Update frame_offset according to the effect the current operation has
17001          on the stack.  */
17002       switch (l->dw_loc_opc)
17003         {
17004         case DW_OP_deref:
17005         case DW_OP_swap:
17006         case DW_OP_rot:
17007         case DW_OP_abs:
17008         case DW_OP_neg:
17009         case DW_OP_not:
17010         case DW_OP_plus_uconst:
17011         case DW_OP_skip:
17012         case DW_OP_reg0:
17013         case DW_OP_reg1:
17014         case DW_OP_reg2:
17015         case DW_OP_reg3:
17016         case DW_OP_reg4:
17017         case DW_OP_reg5:
17018         case DW_OP_reg6:
17019         case DW_OP_reg7:
17020         case DW_OP_reg8:
17021         case DW_OP_reg9:
17022         case DW_OP_reg10:
17023         case DW_OP_reg11:
17024         case DW_OP_reg12:
17025         case DW_OP_reg13:
17026         case DW_OP_reg14:
17027         case DW_OP_reg15:
17028         case DW_OP_reg16:
17029         case DW_OP_reg17:
17030         case DW_OP_reg18:
17031         case DW_OP_reg19:
17032         case DW_OP_reg20:
17033         case DW_OP_reg21:
17034         case DW_OP_reg22:
17035         case DW_OP_reg23:
17036         case DW_OP_reg24:
17037         case DW_OP_reg25:
17038         case DW_OP_reg26:
17039         case DW_OP_reg27:
17040         case DW_OP_reg28:
17041         case DW_OP_reg29:
17042         case DW_OP_reg30:
17043         case DW_OP_reg31:
17044         case DW_OP_bregx:
17045         case DW_OP_piece:
17046         case DW_OP_deref_size:
17047         case DW_OP_nop:
17048         case DW_OP_bit_piece:
17049         case DW_OP_implicit_value:
17050         case DW_OP_stack_value:
17051           break;
17052
17053         case DW_OP_addr:
17054         case DW_OP_const1u:
17055         case DW_OP_const1s:
17056         case DW_OP_const2u:
17057         case DW_OP_const2s:
17058         case DW_OP_const4u:
17059         case DW_OP_const4s:
17060         case DW_OP_const8u:
17061         case DW_OP_const8s:
17062         case DW_OP_constu:
17063         case DW_OP_consts:
17064         case DW_OP_dup:
17065         case DW_OP_over:
17066         case DW_OP_pick:
17067         case DW_OP_lit0:
17068         case DW_OP_lit1:
17069         case DW_OP_lit2:
17070         case DW_OP_lit3:
17071         case DW_OP_lit4:
17072         case DW_OP_lit5:
17073         case DW_OP_lit6:
17074         case DW_OP_lit7:
17075         case DW_OP_lit8:
17076         case DW_OP_lit9:
17077         case DW_OP_lit10:
17078         case DW_OP_lit11:
17079         case DW_OP_lit12:
17080         case DW_OP_lit13:
17081         case DW_OP_lit14:
17082         case DW_OP_lit15:
17083         case DW_OP_lit16:
17084         case DW_OP_lit17:
17085         case DW_OP_lit18:
17086         case DW_OP_lit19:
17087         case DW_OP_lit20:
17088         case DW_OP_lit21:
17089         case DW_OP_lit22:
17090         case DW_OP_lit23:
17091         case DW_OP_lit24:
17092         case DW_OP_lit25:
17093         case DW_OP_lit26:
17094         case DW_OP_lit27:
17095         case DW_OP_lit28:
17096         case DW_OP_lit29:
17097         case DW_OP_lit30:
17098         case DW_OP_lit31:
17099         case DW_OP_breg0:
17100         case DW_OP_breg1:
17101         case DW_OP_breg2:
17102         case DW_OP_breg3:
17103         case DW_OP_breg4:
17104         case DW_OP_breg5:
17105         case DW_OP_breg6:
17106         case DW_OP_breg7:
17107         case DW_OP_breg8:
17108         case DW_OP_breg9:
17109         case DW_OP_breg10:
17110         case DW_OP_breg11:
17111         case DW_OP_breg12:
17112         case DW_OP_breg13:
17113         case DW_OP_breg14:
17114         case DW_OP_breg15:
17115         case DW_OP_breg16:
17116         case DW_OP_breg17:
17117         case DW_OP_breg18:
17118         case DW_OP_breg19:
17119         case DW_OP_breg20:
17120         case DW_OP_breg21:
17121         case DW_OP_breg22:
17122         case DW_OP_breg23:
17123         case DW_OP_breg24:
17124         case DW_OP_breg25:
17125         case DW_OP_breg26:
17126         case DW_OP_breg27:
17127         case DW_OP_breg28:
17128         case DW_OP_breg29:
17129         case DW_OP_breg30:
17130         case DW_OP_breg31:
17131         case DW_OP_fbreg:
17132         case DW_OP_push_object_address:
17133         case DW_OP_call_frame_cfa:
17134         case DW_OP_GNU_variable_value:
17135           ++frame_offset_;
17136           break;
17137
17138         case DW_OP_drop:
17139         case DW_OP_xderef:
17140         case DW_OP_and:
17141         case DW_OP_div:
17142         case DW_OP_minus:
17143         case DW_OP_mod:
17144         case DW_OP_mul:
17145         case DW_OP_or:
17146         case DW_OP_plus:
17147         case DW_OP_shl:
17148         case DW_OP_shr:
17149         case DW_OP_shra:
17150         case DW_OP_xor:
17151         case DW_OP_bra:
17152         case DW_OP_eq:
17153         case DW_OP_ge:
17154         case DW_OP_gt:
17155         case DW_OP_le:
17156         case DW_OP_lt:
17157         case DW_OP_ne:
17158         case DW_OP_regx:
17159         case DW_OP_xderef_size:
17160           --frame_offset_;
17161           break;
17162
17163         case DW_OP_call2:
17164         case DW_OP_call4:
17165         case DW_OP_call_ref:
17166           {
17167             dw_die_ref dwarf_proc = l->dw_loc_oprnd1.v.val_die_ref.die;
17168             int *stack_usage = dwarf_proc_stack_usage_map->get (dwarf_proc);
17169
17170             if (stack_usage == NULL)
17171               return false;
17172             frame_offset_ += *stack_usage;
17173             break;
17174           }
17175
17176         case DW_OP_implicit_pointer:
17177         case DW_OP_entry_value:
17178         case DW_OP_const_type:
17179         case DW_OP_regval_type:
17180         case DW_OP_deref_type:
17181         case DW_OP_convert:
17182         case DW_OP_reinterpret:
17183         case DW_OP_form_tls_address:
17184         case DW_OP_GNU_push_tls_address:
17185         case DW_OP_GNU_uninit:
17186         case DW_OP_GNU_encoded_addr:
17187         case DW_OP_GNU_implicit_pointer:
17188         case DW_OP_GNU_entry_value:
17189         case DW_OP_GNU_const_type:
17190         case DW_OP_GNU_regval_type:
17191         case DW_OP_GNU_deref_type:
17192         case DW_OP_GNU_convert:
17193         case DW_OP_GNU_reinterpret:
17194         case DW_OP_GNU_parameter_ref:
17195           /* loc_list_from_tree will probably not output these operations for
17196              size functions, so assume they will not appear here.  */
17197           /* Fall through...  */
17198
17199         default:
17200           gcc_unreachable ();
17201         }
17202
17203       /* Now, follow the control flow (except subroutine calls).  */
17204       switch (l->dw_loc_opc)
17205         {
17206         case DW_OP_bra:
17207           if (!resolve_args_picking_1 (l->dw_loc_next, frame_offset_, dpi,
17208                                        frame_offsets))
17209             return false;
17210           /* Fall through. */
17211
17212         case DW_OP_skip:
17213           l = l->dw_loc_oprnd1.v.val_loc;
17214           break;
17215
17216         case DW_OP_stack_value:
17217           return true;
17218
17219         default:
17220           l = l->dw_loc_next;
17221           break;
17222         }
17223     }
17224
17225   return true;
17226 }
17227
17228 /* Make a DFS over operations reachable through LOC (i.e. follow branch
17229    operations) in order to resolve the operand of DW_OP_pick operations that
17230    target DWARF procedure arguments (DPI).  INITIAL_FRAME_OFFSET is the frame
17231    offset *before* LOC is executed.  Return if all relocations were
17232    successful.  */
17233
17234 static bool
17235 resolve_args_picking (dw_loc_descr_ref loc, unsigned initial_frame_offset,
17236                       struct dwarf_procedure_info *dpi)
17237 {
17238   /* Associate to all visited operations the frame offset *before* evaluating
17239      this operation.  */
17240   hash_map<dw_loc_descr_ref, unsigned> frame_offsets;
17241
17242   return resolve_args_picking_1 (loc, initial_frame_offset, dpi,
17243                                  frame_offsets);
17244 }
17245
17246 /* Try to generate a DWARF procedure that computes the same result as FNDECL.
17247    Return NULL if it is not possible.  */
17248
17249 static dw_die_ref
17250 function_to_dwarf_procedure (tree fndecl)
17251 {
17252   struct loc_descr_context ctx;
17253   struct dwarf_procedure_info dpi;
17254   dw_die_ref dwarf_proc_die;
17255   tree tree_body = DECL_SAVED_TREE (fndecl);
17256   dw_loc_descr_ref loc_body, epilogue;
17257
17258   tree cursor;
17259   unsigned i;
17260
17261   /* Do not generate multiple DWARF procedures for the same function
17262      declaration.  */
17263   dwarf_proc_die = lookup_decl_die (fndecl);
17264   if (dwarf_proc_die != NULL)
17265     return dwarf_proc_die;
17266
17267   /* DWARF procedures are available starting with the DWARFv3 standard.  */
17268   if (dwarf_version < 3 && dwarf_strict)
17269     return NULL;
17270
17271   /* We handle only functions for which we still have a body, that return a
17272      supported type and that takes arguments with supported types.  Note that
17273      there is no point translating functions that return nothing.  */
17274   if (tree_body == NULL_TREE
17275       || DECL_RESULT (fndecl) == NULL_TREE
17276       || !is_handled_procedure_type (TREE_TYPE (DECL_RESULT (fndecl))))
17277     return NULL;
17278
17279   for (cursor = DECL_ARGUMENTS (fndecl);
17280        cursor != NULL_TREE;
17281        cursor = TREE_CHAIN (cursor))
17282     if (!is_handled_procedure_type (TREE_TYPE (cursor)))
17283       return NULL;
17284
17285   /* Match only "expr" in: RETURN_EXPR (MODIFY_EXPR (RESULT_DECL, expr)).  */
17286   if (TREE_CODE (tree_body) != RETURN_EXPR)
17287     return NULL;
17288   tree_body = TREE_OPERAND (tree_body, 0);
17289   if (TREE_CODE (tree_body) != MODIFY_EXPR
17290       || TREE_OPERAND (tree_body, 0) != DECL_RESULT (fndecl))
17291     return NULL;
17292   tree_body = TREE_OPERAND (tree_body, 1);
17293
17294   /* Try to translate the body expression itself.  Note that this will probably
17295      cause an infinite recursion if its call graph has a cycle.  This is very
17296      unlikely for size functions, however, so don't bother with such things at
17297      the moment.  */
17298   ctx.context_type = NULL_TREE;
17299   ctx.base_decl = NULL_TREE;
17300   ctx.dpi = &dpi;
17301   ctx.placeholder_arg = false;
17302   ctx.placeholder_seen = false;
17303   dpi.fndecl = fndecl;
17304   dpi.args_count = list_length (DECL_ARGUMENTS (fndecl));
17305   loc_body = loc_descriptor_from_tree (tree_body, 0, &ctx);
17306   if (!loc_body)
17307     return NULL;
17308
17309   /* After evaluating all operands in "loc_body", we should still have on the
17310      stack all arguments plus the desired function result (top of the stack).
17311      Generate code in order to keep only the result in our stack frame.  */
17312   epilogue = NULL;
17313   for (i = 0; i < dpi.args_count; ++i)
17314     {
17315       dw_loc_descr_ref op_couple = new_loc_descr (DW_OP_swap, 0, 0);
17316       op_couple->dw_loc_next = new_loc_descr (DW_OP_drop, 0, 0);
17317       op_couple->dw_loc_next->dw_loc_next = epilogue;
17318       epilogue = op_couple;
17319     }
17320   add_loc_descr (&loc_body, epilogue);
17321   if (!resolve_args_picking (loc_body, dpi.args_count, &dpi))
17322     return NULL;
17323
17324   /* Trailing nops from loc_descriptor_from_tree (if any) cannot be removed
17325      because they are considered useful.  Now there is an epilogue, they are
17326      not anymore, so give it another try.   */
17327   loc_descr_without_nops (loc_body);
17328
17329   /* fndecl may be used both as a regular DW_TAG_subprogram DIE and as
17330      a DW_TAG_dwarf_procedure, so we may have a conflict, here.  It's unlikely,
17331      though, given that size functions do not come from source, so they should
17332      not have a dedicated DW_TAG_subprogram DIE.  */
17333   dwarf_proc_die
17334     = new_dwarf_proc_die (loc_body, fndecl,
17335                           get_context_die (DECL_CONTEXT (fndecl)));
17336
17337   /* The called DWARF procedure consumes one stack slot per argument and
17338      returns one stack slot.  */
17339   dwarf_proc_stack_usage_map->put (dwarf_proc_die, 1 - dpi.args_count);
17340
17341   return dwarf_proc_die;
17342 }
17343
17344
17345 /* Generate Dwarf location list representing LOC.
17346    If WANT_ADDRESS is false, expression computing LOC will be computed
17347    If WANT_ADDRESS is 1, expression computing address of LOC will be returned
17348    if WANT_ADDRESS is 2, expression computing address useable in location
17349      will be returned (i.e. DW_OP_reg can be used
17350      to refer to register values).
17351
17352    CONTEXT provides information to customize the location descriptions
17353    generation.  Its context_type field specifies what type is implicitly
17354    referenced by DW_OP_push_object_address.  If it is NULL_TREE, this operation
17355    will not be generated.
17356
17357    Its DPI field determines whether we are generating a DWARF expression for a
17358    DWARF procedure, so PARM_DECL references are processed specifically.
17359
17360    If CONTEXT is NULL, the behavior is the same as if context_type, base_decl
17361    and dpi fields were null.  */
17362
17363 static dw_loc_list_ref
17364 loc_list_from_tree_1 (tree loc, int want_address,
17365                       struct loc_descr_context *context)
17366 {
17367   dw_loc_descr_ref ret = NULL, ret1 = NULL;
17368   dw_loc_list_ref list_ret = NULL, list_ret1 = NULL;
17369   int have_address = 0;
17370   enum dwarf_location_atom op;
17371
17372   /* ??? Most of the time we do not take proper care for sign/zero
17373      extending the values properly.  Hopefully this won't be a real
17374      problem...  */
17375
17376   if (context != NULL
17377       && context->base_decl == loc
17378       && want_address == 0)
17379     {
17380       if (dwarf_version >= 3 || !dwarf_strict)
17381         return new_loc_list (new_loc_descr (DW_OP_push_object_address, 0, 0),
17382                              NULL, NULL, NULL);
17383       else
17384         return NULL;
17385     }
17386
17387   switch (TREE_CODE (loc))
17388     {
17389     case ERROR_MARK:
17390       expansion_failed (loc, NULL_RTX, "ERROR_MARK");
17391       return 0;
17392
17393     case PLACEHOLDER_EXPR:
17394       /* This case involves extracting fields from an object to determine the
17395          position of other fields. It is supposed to appear only as the first
17396          operand of COMPONENT_REF nodes and to reference precisely the type
17397          that the context allows.  */
17398       if (context != NULL
17399           && TREE_TYPE (loc) == context->context_type
17400           && want_address >= 1)
17401         {
17402           if (dwarf_version >= 3 || !dwarf_strict)
17403             {
17404               ret = new_loc_descr (DW_OP_push_object_address, 0, 0);
17405               have_address = 1;
17406               break;
17407             }
17408           else
17409             return NULL;
17410         }
17411       /* For DW_TAG_generic_subrange attributes, PLACEHOLDER_EXPR stands for
17412          the single argument passed by consumer.  */
17413       else if (context != NULL
17414                && context->placeholder_arg
17415                && INTEGRAL_TYPE_P (TREE_TYPE (loc))
17416                && want_address == 0)
17417         {
17418           ret = new_loc_descr (DW_OP_pick, 0, 0);
17419           ret->frame_offset_rel = 1;
17420           context->placeholder_seen = true;
17421           break;
17422         }
17423       else
17424         expansion_failed (loc, NULL_RTX,
17425                           "PLACEHOLDER_EXPR for an unexpected type");
17426       break;
17427
17428     case CALL_EXPR:
17429         {
17430           const int nargs = call_expr_nargs (loc);
17431           tree callee = get_callee_fndecl (loc);
17432           int i;
17433           dw_die_ref dwarf_proc;
17434
17435           if (callee == NULL_TREE)
17436             goto call_expansion_failed;
17437
17438           /* We handle only functions that return an integer.  */
17439           if (!is_handled_procedure_type (TREE_TYPE (TREE_TYPE (callee))))
17440             goto call_expansion_failed;
17441
17442           dwarf_proc = function_to_dwarf_procedure (callee);
17443           if (dwarf_proc == NULL)
17444             goto call_expansion_failed;
17445
17446           /* Evaluate arguments right-to-left so that the first argument will
17447              be the top-most one on the stack.  */
17448           for (i = nargs - 1; i >= 0; --i)
17449             {
17450               dw_loc_descr_ref loc_descr
17451                 = loc_descriptor_from_tree (CALL_EXPR_ARG (loc, i), 0,
17452                                             context);
17453
17454               if (loc_descr == NULL)
17455                 goto call_expansion_failed;
17456
17457               add_loc_descr (&ret, loc_descr);
17458             }
17459
17460           ret1 = new_loc_descr (DW_OP_call4, 0, 0);
17461           ret1->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
17462           ret1->dw_loc_oprnd1.v.val_die_ref.die = dwarf_proc;
17463           ret1->dw_loc_oprnd1.v.val_die_ref.external = 0;
17464           add_loc_descr (&ret, ret1);
17465           break;
17466
17467         call_expansion_failed:
17468           expansion_failed (loc, NULL_RTX, "CALL_EXPR");
17469           /* There are no opcodes for these operations.  */
17470           return 0;
17471         }
17472
17473     case PREINCREMENT_EXPR:
17474     case PREDECREMENT_EXPR:
17475     case POSTINCREMENT_EXPR:
17476     case POSTDECREMENT_EXPR:
17477       expansion_failed (loc, NULL_RTX, "PRE/POST INDCREMENT/DECREMENT");
17478       /* There are no opcodes for these operations.  */
17479       return 0;
17480
17481     case ADDR_EXPR:
17482       /* If we already want an address, see if there is INDIRECT_REF inside
17483          e.g. for &this->field.  */
17484       if (want_address)
17485         {
17486           list_ret = loc_list_for_address_of_addr_expr_of_indirect_ref
17487                        (loc, want_address == 2, context);
17488           if (list_ret)
17489             have_address = 1;
17490           else if (decl_address_ip_invariant_p (TREE_OPERAND (loc, 0))
17491                    && (ret = cst_pool_loc_descr (loc)))
17492             have_address = 1;
17493         }
17494         /* Otherwise, process the argument and look for the address.  */
17495       if (!list_ret && !ret)
17496         list_ret = loc_list_from_tree_1 (TREE_OPERAND (loc, 0), 1, context);
17497       else
17498         {
17499           if (want_address)
17500             expansion_failed (loc, NULL_RTX, "need address of ADDR_EXPR");
17501           return NULL;
17502         }
17503       break;
17504
17505     case VAR_DECL:
17506       if (DECL_THREAD_LOCAL_P (loc))
17507         {
17508           rtx rtl;
17509          enum dwarf_location_atom tls_op;
17510          enum dtprel_bool dtprel = dtprel_false;
17511
17512           if (targetm.have_tls)
17513             {
17514               /* If this is not defined, we have no way to emit the
17515                  data.  */
17516               if (!targetm.asm_out.output_dwarf_dtprel)
17517                 return 0;
17518
17519                /* The way DW_OP_GNU_push_tls_address is specified, we
17520                   can only look up addresses of objects in the current
17521                   module.  We used DW_OP_addr as first op, but that's
17522                   wrong, because DW_OP_addr is relocated by the debug
17523                   info consumer, while DW_OP_GNU_push_tls_address
17524                   operand shouldn't be.  */
17525               if (DECL_EXTERNAL (loc) && !targetm.binds_local_p (loc))
17526                 return 0;
17527               dtprel = dtprel_true;
17528               /* We check for DWARF 5 here because gdb did not implement
17529                  DW_OP_form_tls_address until after 7.12.  */
17530               tls_op = (dwarf_version >= 5 ? DW_OP_form_tls_address
17531                         : DW_OP_GNU_push_tls_address);
17532             }
17533           else
17534             {
17535               if (!targetm.emutls.debug_form_tls_address
17536                   || !(dwarf_version >= 3 || !dwarf_strict))
17537                 return 0;
17538               /* We stuffed the control variable into the DECL_VALUE_EXPR
17539                  to signal (via DECL_HAS_VALUE_EXPR_P) that the decl should
17540                  no longer appear in gimple code.  We used the control
17541                  variable in specific so that we could pick it up here.  */
17542               loc = DECL_VALUE_EXPR (loc);
17543               tls_op = DW_OP_form_tls_address;
17544             }
17545
17546           rtl = rtl_for_decl_location (loc);
17547           if (rtl == NULL_RTX)
17548             return 0;
17549
17550           if (!MEM_P (rtl))
17551             return 0;
17552           rtl = XEXP (rtl, 0);
17553           if (! CONSTANT_P (rtl))
17554             return 0;
17555
17556           ret = new_addr_loc_descr (rtl, dtprel);
17557           ret1 = new_loc_descr (tls_op, 0, 0);
17558           add_loc_descr (&ret, ret1);
17559
17560           have_address = 1;
17561           break;
17562         }
17563       /* FALLTHRU */
17564
17565     case PARM_DECL:
17566       if (context != NULL && context->dpi != NULL
17567           && DECL_CONTEXT (loc) == context->dpi->fndecl)
17568         {
17569           /* We are generating code for a DWARF procedure and we want to access
17570              one of its arguments: find the appropriate argument offset and let
17571              the resolve_args_picking pass compute the offset that complies
17572              with the stack frame size.  */
17573           unsigned i = 0;
17574           tree cursor;
17575
17576           for (cursor = DECL_ARGUMENTS (context->dpi->fndecl);
17577                cursor != NULL_TREE && cursor != loc;
17578                cursor = TREE_CHAIN (cursor), ++i)
17579             ;
17580           /* If we are translating a DWARF procedure, all referenced parameters
17581              must belong to the current function.  */
17582           gcc_assert (cursor != NULL_TREE);
17583
17584           ret = new_loc_descr (DW_OP_pick, i, 0);
17585           ret->frame_offset_rel = 1;
17586           break;
17587         }
17588       /* FALLTHRU */
17589
17590     case RESULT_DECL:
17591       if (DECL_HAS_VALUE_EXPR_P (loc))
17592         return loc_list_from_tree_1 (DECL_VALUE_EXPR (loc),
17593                                      want_address, context);
17594       /* FALLTHRU */
17595
17596     case FUNCTION_DECL:
17597       {
17598         rtx rtl;
17599         var_loc_list *loc_list = lookup_decl_loc (loc);
17600
17601         if (loc_list && loc_list->first)
17602           {
17603             list_ret = dw_loc_list (loc_list, loc, want_address);
17604             have_address = want_address != 0;
17605             break;
17606           }
17607         rtl = rtl_for_decl_location (loc);
17608         if (rtl == NULL_RTX)
17609           {
17610             if (TREE_CODE (loc) != FUNCTION_DECL
17611                 && early_dwarf
17612                 && current_function_decl
17613                 && want_address != 1
17614                 && ! DECL_IGNORED_P (loc)
17615                 && (INTEGRAL_TYPE_P (TREE_TYPE (loc))
17616                     || POINTER_TYPE_P (TREE_TYPE (loc)))
17617                 && DECL_CONTEXT (loc) == current_function_decl
17618                 && (GET_MODE_SIZE (SCALAR_INT_TYPE_MODE (TREE_TYPE (loc)))
17619                     <= DWARF2_ADDR_SIZE))
17620               {
17621                 dw_die_ref ref = lookup_decl_die (loc);
17622                 ret = new_loc_descr (DW_OP_GNU_variable_value, 0, 0);
17623                 if (ref)
17624                   {
17625                     ret->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
17626                     ret->dw_loc_oprnd1.v.val_die_ref.die = ref;
17627                     ret->dw_loc_oprnd1.v.val_die_ref.external = 0;
17628                   }
17629                 else
17630                   {
17631                     ret->dw_loc_oprnd1.val_class = dw_val_class_decl_ref;
17632                     ret->dw_loc_oprnd1.v.val_decl_ref = loc;
17633                   }
17634                 break;
17635               }
17636             expansion_failed (loc, NULL_RTX, "DECL has no RTL");
17637             return 0;
17638           }
17639         else if (CONST_INT_P (rtl))
17640           {
17641             HOST_WIDE_INT val = INTVAL (rtl);
17642             if (TYPE_UNSIGNED (TREE_TYPE (loc)))
17643               val &= GET_MODE_MASK (DECL_MODE (loc));
17644             ret = int_loc_descriptor (val);
17645           }
17646         else if (GET_CODE (rtl) == CONST_STRING)
17647           {
17648             expansion_failed (loc, NULL_RTX, "CONST_STRING");
17649             return 0;
17650           }
17651         else if (CONSTANT_P (rtl) && const_ok_for_output (rtl))
17652           ret = new_addr_loc_descr (rtl, dtprel_false);
17653         else
17654           {
17655             machine_mode mode, mem_mode;
17656
17657             /* Certain constructs can only be represented at top-level.  */
17658             if (want_address == 2)
17659               {
17660                 ret = loc_descriptor (rtl, VOIDmode,
17661                                       VAR_INIT_STATUS_INITIALIZED);
17662                 have_address = 1;
17663               }
17664             else
17665               {
17666                 mode = GET_MODE (rtl);
17667                 mem_mode = VOIDmode;
17668                 if (MEM_P (rtl))
17669                   {
17670                     mem_mode = mode;
17671                     mode = get_address_mode (rtl);
17672                     rtl = XEXP (rtl, 0);
17673                     have_address = 1;
17674                   }
17675                 ret = mem_loc_descriptor (rtl, mode, mem_mode,
17676                                           VAR_INIT_STATUS_INITIALIZED);
17677               }
17678             if (!ret)
17679               expansion_failed (loc, rtl,
17680                                 "failed to produce loc descriptor for rtl");
17681           }
17682       }
17683       break;
17684
17685     case MEM_REF:
17686       if (!integer_zerop (TREE_OPERAND (loc, 1)))
17687         {
17688           have_address = 1;
17689           goto do_plus;
17690         }
17691       /* Fallthru.  */
17692     case INDIRECT_REF:
17693       list_ret = loc_list_from_tree_1 (TREE_OPERAND (loc, 0), 0, context);
17694       have_address = 1;
17695       break;
17696
17697     case TARGET_MEM_REF:
17698     case SSA_NAME:
17699     case DEBUG_EXPR_DECL:
17700       return NULL;
17701
17702     case COMPOUND_EXPR:
17703       return loc_list_from_tree_1 (TREE_OPERAND (loc, 1), want_address,
17704                                    context);
17705
17706     CASE_CONVERT:
17707     case VIEW_CONVERT_EXPR:
17708     case SAVE_EXPR:
17709     case MODIFY_EXPR:
17710     case NON_LVALUE_EXPR:
17711       return loc_list_from_tree_1 (TREE_OPERAND (loc, 0), want_address,
17712                                    context);
17713
17714     case COMPONENT_REF:
17715     case BIT_FIELD_REF:
17716     case ARRAY_REF:
17717     case ARRAY_RANGE_REF:
17718     case REALPART_EXPR:
17719     case IMAGPART_EXPR:
17720       {
17721         tree obj, offset;
17722         poly_int64 bitsize, bitpos, bytepos;
17723         machine_mode mode;
17724         int unsignedp, reversep, volatilep = 0;
17725
17726         obj = get_inner_reference (loc, &bitsize, &bitpos, &offset, &mode,
17727                                    &unsignedp, &reversep, &volatilep);
17728
17729         gcc_assert (obj != loc);
17730
17731         list_ret = loc_list_from_tree_1 (obj,
17732                                          want_address == 2
17733                                          && known_eq (bitpos, 0)
17734                                          && !offset ? 2 : 1,
17735                                          context);
17736         /* TODO: We can extract value of the small expression via shifting even
17737            for nonzero bitpos.  */
17738         if (list_ret == 0)
17739           return 0;
17740         if (!multiple_p (bitpos, BITS_PER_UNIT, &bytepos)
17741             || !multiple_p (bitsize, BITS_PER_UNIT))
17742           {
17743             expansion_failed (loc, NULL_RTX,
17744                               "bitfield access");
17745             return 0;
17746           }
17747
17748         if (offset != NULL_TREE)
17749           {
17750             /* Variable offset.  */
17751             list_ret1 = loc_list_from_tree_1 (offset, 0, context);
17752             if (list_ret1 == 0)
17753               return 0;
17754             add_loc_list (&list_ret, list_ret1);
17755             if (!list_ret)
17756               return 0;
17757             add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_plus, 0, 0));
17758           }
17759
17760         HOST_WIDE_INT value;
17761         if (bytepos.is_constant (&value) && value > 0)
17762           add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_plus_uconst,
17763                                                           value, 0));
17764         else if (maybe_ne (bytepos, 0))
17765           loc_list_plus_const (list_ret, bytepos);
17766
17767         have_address = 1;
17768         break;
17769       }
17770
17771     case INTEGER_CST:
17772       if ((want_address || !tree_fits_shwi_p (loc))
17773           && (ret = cst_pool_loc_descr (loc)))
17774         have_address = 1;
17775       else if (want_address == 2
17776                && tree_fits_shwi_p (loc)
17777                && (ret = address_of_int_loc_descriptor
17778                            (int_size_in_bytes (TREE_TYPE (loc)),
17779                             tree_to_shwi (loc))))
17780         have_address = 1;
17781       else if (tree_fits_shwi_p (loc))
17782         ret = int_loc_descriptor (tree_to_shwi (loc));
17783       else if (tree_fits_uhwi_p (loc))
17784         ret = uint_loc_descriptor (tree_to_uhwi (loc));
17785       else
17786         {
17787           expansion_failed (loc, NULL_RTX,
17788                             "Integer operand is not host integer");
17789           return 0;
17790         }
17791       break;
17792
17793     case CONSTRUCTOR:
17794     case REAL_CST:
17795     case STRING_CST:
17796     case COMPLEX_CST:
17797       if ((ret = cst_pool_loc_descr (loc)))
17798         have_address = 1;
17799       else if (TREE_CODE (loc) == CONSTRUCTOR)
17800         {
17801           tree type = TREE_TYPE (loc);
17802           unsigned HOST_WIDE_INT size = int_size_in_bytes (type);
17803           unsigned HOST_WIDE_INT offset = 0;
17804           unsigned HOST_WIDE_INT cnt;
17805           constructor_elt *ce;
17806
17807           if (TREE_CODE (type) == RECORD_TYPE)
17808             {
17809               /* This is very limited, but it's enough to output
17810                  pointers to member functions, as long as the
17811                  referenced function is defined in the current
17812                  translation unit.  */
17813               FOR_EACH_VEC_SAFE_ELT (CONSTRUCTOR_ELTS (loc), cnt, ce)
17814                 {
17815                   tree val = ce->value;
17816
17817                   tree field = ce->index;
17818
17819                   if (val)
17820                     STRIP_NOPS (val);
17821
17822                   if (!field || DECL_BIT_FIELD (field))
17823                     {
17824                       expansion_failed (loc, NULL_RTX,
17825                                         "bitfield in record type constructor");
17826                       size = offset = (unsigned HOST_WIDE_INT)-1;
17827                       ret = NULL;
17828                       break;
17829                     }
17830
17831                   HOST_WIDE_INT fieldsize = tree_to_shwi (DECL_SIZE_UNIT (field));
17832                   unsigned HOST_WIDE_INT pos = int_byte_position (field);
17833                   gcc_assert (pos + fieldsize <= size);
17834                   if (pos < offset)
17835                     {
17836                       expansion_failed (loc, NULL_RTX,
17837                                         "out-of-order fields in record constructor");
17838                       size = offset = (unsigned HOST_WIDE_INT)-1;
17839                       ret = NULL;
17840                       break;
17841                     }
17842                   if (pos > offset)
17843                     {
17844                       ret1 = new_loc_descr (DW_OP_piece, pos - offset, 0);
17845                       add_loc_descr (&ret, ret1);
17846                       offset = pos;
17847                     }
17848                   if (val && fieldsize != 0)
17849                     {
17850                       ret1 = loc_descriptor_from_tree (val, want_address, context);
17851                       if (!ret1)
17852                         {
17853                           expansion_failed (loc, NULL_RTX,
17854                                             "unsupported expression in field");
17855                           size = offset = (unsigned HOST_WIDE_INT)-1;
17856                           ret = NULL;
17857                           break;
17858                         }
17859                       add_loc_descr (&ret, ret1);
17860                     }
17861                   if (fieldsize)
17862                     {
17863                       ret1 = new_loc_descr (DW_OP_piece, fieldsize, 0);
17864                       add_loc_descr (&ret, ret1);
17865                       offset = pos + fieldsize;
17866                     }
17867                 }
17868
17869               if (offset != size)
17870                 {
17871                   ret1 = new_loc_descr (DW_OP_piece, size - offset, 0);
17872                   add_loc_descr (&ret, ret1);
17873                   offset = size;
17874                 }
17875
17876               have_address = !!want_address;
17877             }
17878           else
17879             expansion_failed (loc, NULL_RTX,
17880                               "constructor of non-record type");
17881         }
17882       else
17883       /* We can construct small constants here using int_loc_descriptor.  */
17884         expansion_failed (loc, NULL_RTX,
17885                           "constructor or constant not in constant pool");
17886       break;
17887
17888     case TRUTH_AND_EXPR:
17889     case TRUTH_ANDIF_EXPR:
17890     case BIT_AND_EXPR:
17891       op = DW_OP_and;
17892       goto do_binop;
17893
17894     case TRUTH_XOR_EXPR:
17895     case BIT_XOR_EXPR:
17896       op = DW_OP_xor;
17897       goto do_binop;
17898
17899     case TRUTH_OR_EXPR:
17900     case TRUTH_ORIF_EXPR:
17901     case BIT_IOR_EXPR:
17902       op = DW_OP_or;
17903       goto do_binop;
17904
17905     case FLOOR_DIV_EXPR:
17906     case CEIL_DIV_EXPR:
17907     case ROUND_DIV_EXPR:
17908     case TRUNC_DIV_EXPR:
17909     case EXACT_DIV_EXPR:
17910       if (TYPE_UNSIGNED (TREE_TYPE (loc)))
17911         return 0;
17912       op = DW_OP_div;
17913       goto do_binop;
17914
17915     case MINUS_EXPR:
17916       op = DW_OP_minus;
17917       goto do_binop;
17918
17919     case FLOOR_MOD_EXPR:
17920     case CEIL_MOD_EXPR:
17921     case ROUND_MOD_EXPR:
17922     case TRUNC_MOD_EXPR:
17923       if (TYPE_UNSIGNED (TREE_TYPE (loc)))
17924         {
17925           op = DW_OP_mod;
17926           goto do_binop;
17927         }
17928       list_ret = loc_list_from_tree_1 (TREE_OPERAND (loc, 0), 0, context);
17929       list_ret1 = loc_list_from_tree_1 (TREE_OPERAND (loc, 1), 0, context);
17930       if (list_ret == 0 || list_ret1 == 0)
17931         return 0;
17932
17933       add_loc_list (&list_ret, list_ret1);
17934       if (list_ret == 0)
17935         return 0;
17936       add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_over, 0, 0));
17937       add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_over, 0, 0));
17938       add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_div, 0, 0));
17939       add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_mul, 0, 0));
17940       add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_minus, 0, 0));
17941       break;
17942
17943     case MULT_EXPR:
17944       op = DW_OP_mul;
17945       goto do_binop;
17946
17947     case LSHIFT_EXPR:
17948       op = DW_OP_shl;
17949       goto do_binop;
17950
17951     case RSHIFT_EXPR:
17952       op = (TYPE_UNSIGNED (TREE_TYPE (loc)) ? DW_OP_shr : DW_OP_shra);
17953       goto do_binop;
17954
17955     case POINTER_PLUS_EXPR:
17956     case PLUS_EXPR:
17957     do_plus:
17958       if (tree_fits_shwi_p (TREE_OPERAND (loc, 1)))
17959         {
17960           /* Big unsigned numbers can fit in HOST_WIDE_INT but it may be
17961              smarter to encode their opposite.  The DW_OP_plus_uconst operation
17962              takes 1 + X bytes, X being the size of the ULEB128 addend.  On the
17963              other hand, a "<push literal>; DW_OP_minus" pattern takes 1 + Y
17964              bytes, Y being the size of the operation that pushes the opposite
17965              of the addend.  So let's choose the smallest representation.  */
17966           const tree tree_addend = TREE_OPERAND (loc, 1);
17967           offset_int wi_addend;
17968           HOST_WIDE_INT shwi_addend;
17969           dw_loc_descr_ref loc_naddend;
17970
17971           list_ret = loc_list_from_tree_1 (TREE_OPERAND (loc, 0), 0, context);
17972           if (list_ret == 0)
17973             return 0;
17974
17975           /* Try to get the literal to push.  It is the opposite of the addend,
17976              so as we rely on wrapping during DWARF evaluation, first decode
17977              the literal as a "DWARF-sized" signed number.  */
17978           wi_addend = wi::to_offset (tree_addend);
17979           wi_addend = wi::sext (wi_addend, DWARF2_ADDR_SIZE * 8);
17980           shwi_addend = wi_addend.to_shwi ();
17981           loc_naddend = (shwi_addend != INTTYPE_MINIMUM (HOST_WIDE_INT))
17982                         ? int_loc_descriptor (-shwi_addend)
17983                         : NULL;
17984
17985           if (loc_naddend != NULL
17986               && ((unsigned) size_of_uleb128 (shwi_addend)
17987                   > size_of_loc_descr (loc_naddend)))
17988             {
17989               add_loc_descr_to_each (list_ret, loc_naddend);
17990               add_loc_descr_to_each (list_ret,
17991                                      new_loc_descr (DW_OP_minus, 0, 0));
17992             }
17993           else
17994             {
17995               for (dw_loc_descr_ref loc_cur = loc_naddend; loc_cur != NULL; )
17996                 {
17997                   loc_naddend = loc_cur;
17998                   loc_cur = loc_cur->dw_loc_next;
17999                   ggc_free (loc_naddend);
18000                 }
18001               loc_list_plus_const (list_ret, wi_addend.to_shwi ());
18002             }
18003           break;
18004         }
18005
18006       op = DW_OP_plus;
18007       goto do_binop;
18008
18009     case LE_EXPR:
18010       op = DW_OP_le;
18011       goto do_comp_binop;
18012
18013     case GE_EXPR:
18014       op = DW_OP_ge;
18015       goto do_comp_binop;
18016
18017     case LT_EXPR:
18018       op = DW_OP_lt;
18019       goto do_comp_binop;
18020
18021     case GT_EXPR:
18022       op = DW_OP_gt;
18023       goto do_comp_binop;
18024
18025     do_comp_binop:
18026       if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
18027         {
18028           list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0, context);
18029           list_ret1 = loc_list_from_tree (TREE_OPERAND (loc, 1), 0, context);
18030           list_ret = loc_list_from_uint_comparison (list_ret, list_ret1,
18031                                                     TREE_CODE (loc));
18032           break;
18033         }
18034       else
18035         goto do_binop;
18036
18037     case EQ_EXPR:
18038       op = DW_OP_eq;
18039       goto do_binop;
18040
18041     case NE_EXPR:
18042       op = DW_OP_ne;
18043       goto do_binop;
18044
18045     do_binop:
18046       list_ret = loc_list_from_tree_1 (TREE_OPERAND (loc, 0), 0, context);
18047       list_ret1 = loc_list_from_tree_1 (TREE_OPERAND (loc, 1), 0, context);
18048       if (list_ret == 0 || list_ret1 == 0)
18049         return 0;
18050
18051       add_loc_list (&list_ret, list_ret1);
18052       if (list_ret == 0)
18053         return 0;
18054       add_loc_descr_to_each (list_ret, new_loc_descr (op, 0, 0));
18055       break;
18056
18057     case TRUTH_NOT_EXPR:
18058     case BIT_NOT_EXPR:
18059       op = DW_OP_not;
18060       goto do_unop;
18061
18062     case ABS_EXPR:
18063       op = DW_OP_abs;
18064       goto do_unop;
18065
18066     case NEGATE_EXPR:
18067       op = DW_OP_neg;
18068       goto do_unop;
18069
18070     do_unop:
18071       list_ret = loc_list_from_tree_1 (TREE_OPERAND (loc, 0), 0, context);
18072       if (list_ret == 0)
18073         return 0;
18074
18075       add_loc_descr_to_each (list_ret, new_loc_descr (op, 0, 0));
18076       break;
18077
18078     case MIN_EXPR:
18079     case MAX_EXPR:
18080       {
18081         const enum tree_code code =
18082           TREE_CODE (loc) == MIN_EXPR ? GT_EXPR : LT_EXPR;
18083
18084         loc = build3 (COND_EXPR, TREE_TYPE (loc),
18085                       build2 (code, integer_type_node,
18086                               TREE_OPERAND (loc, 0), TREE_OPERAND (loc, 1)),
18087                       TREE_OPERAND (loc, 1), TREE_OPERAND (loc, 0));
18088       }
18089
18090       /* fall through */
18091
18092     case COND_EXPR:
18093       {
18094         dw_loc_descr_ref lhs
18095           = loc_descriptor_from_tree (TREE_OPERAND (loc, 1), 0, context);
18096         dw_loc_list_ref rhs
18097           = loc_list_from_tree_1 (TREE_OPERAND (loc, 2), 0, context);
18098         dw_loc_descr_ref bra_node, jump_node, tmp;
18099
18100         list_ret = loc_list_from_tree_1 (TREE_OPERAND (loc, 0), 0, context);
18101         if (list_ret == 0 || lhs == 0 || rhs == 0)
18102           return 0;
18103
18104         bra_node = new_loc_descr (DW_OP_bra, 0, 0);
18105         add_loc_descr_to_each (list_ret, bra_node);
18106
18107         add_loc_list (&list_ret, rhs);
18108         jump_node = new_loc_descr (DW_OP_skip, 0, 0);
18109         add_loc_descr_to_each (list_ret, jump_node);
18110
18111         add_loc_descr_to_each (list_ret, lhs);
18112         bra_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
18113         bra_node->dw_loc_oprnd1.v.val_loc = lhs;
18114
18115         /* ??? Need a node to point the skip at.  Use a nop.  */
18116         tmp = new_loc_descr (DW_OP_nop, 0, 0);
18117         add_loc_descr_to_each (list_ret, tmp);
18118         jump_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
18119         jump_node->dw_loc_oprnd1.v.val_loc = tmp;
18120       }
18121       break;
18122
18123     case FIX_TRUNC_EXPR:
18124       return 0;
18125
18126     default:
18127       /* Leave front-end specific codes as simply unknown.  This comes
18128          up, for instance, with the C STMT_EXPR.  */
18129       if ((unsigned int) TREE_CODE (loc)
18130           >= (unsigned int) LAST_AND_UNUSED_TREE_CODE)
18131         {
18132           expansion_failed (loc, NULL_RTX,
18133                             "language specific tree node");
18134           return 0;
18135         }
18136
18137       /* Otherwise this is a generic code; we should just lists all of
18138          these explicitly.  We forgot one.  */
18139       if (flag_checking)
18140         gcc_unreachable ();
18141
18142       /* In a release build, we want to degrade gracefully: better to
18143          generate incomplete debugging information than to crash.  */
18144       return NULL;
18145     }
18146
18147   if (!ret && !list_ret)
18148     return 0;
18149
18150   if (want_address == 2 && !have_address
18151       && (dwarf_version >= 4 || !dwarf_strict))
18152     {
18153       if (int_size_in_bytes (TREE_TYPE (loc)) > DWARF2_ADDR_SIZE)
18154         {
18155           expansion_failed (loc, NULL_RTX,
18156                             "DWARF address size mismatch");
18157           return 0;
18158         }
18159       if (ret)
18160         add_loc_descr (&ret, new_loc_descr (DW_OP_stack_value, 0, 0));
18161       else
18162         add_loc_descr_to_each (list_ret,
18163                                new_loc_descr (DW_OP_stack_value, 0, 0));
18164       have_address = 1;
18165     }
18166   /* Show if we can't fill the request for an address.  */
18167   if (want_address && !have_address)
18168     {
18169       expansion_failed (loc, NULL_RTX,
18170                         "Want address and only have value");
18171       return 0;
18172     }
18173
18174   gcc_assert (!ret || !list_ret);
18175
18176   /* If we've got an address and don't want one, dereference.  */
18177   if (!want_address && have_address)
18178     {
18179       HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (loc));
18180
18181       if (size > DWARF2_ADDR_SIZE || size == -1)
18182         {
18183           expansion_failed (loc, NULL_RTX,
18184                             "DWARF address size mismatch");
18185           return 0;
18186         }
18187       else if (size == DWARF2_ADDR_SIZE)
18188         op = DW_OP_deref;
18189       else
18190         op = DW_OP_deref_size;
18191
18192       if (ret)
18193         add_loc_descr (&ret, new_loc_descr (op, size, 0));
18194       else
18195         add_loc_descr_to_each (list_ret, new_loc_descr (op, size, 0));
18196     }
18197   if (ret)
18198     list_ret = new_loc_list (ret, NULL, NULL, NULL);
18199
18200   return list_ret;
18201 }
18202
18203 /* Likewise, but strip useless DW_OP_nop operations in the resulting
18204    expressions.  */
18205
18206 static dw_loc_list_ref
18207 loc_list_from_tree (tree loc, int want_address,
18208                     struct loc_descr_context *context)
18209 {
18210   dw_loc_list_ref result = loc_list_from_tree_1 (loc, want_address, context);
18211
18212   for (dw_loc_list_ref loc_cur = result;
18213        loc_cur != NULL; loc_cur = loc_cur->dw_loc_next)
18214     loc_descr_without_nops (loc_cur->expr);
18215   return result;
18216 }
18217
18218 /* Same as above but return only single location expression.  */
18219 static dw_loc_descr_ref
18220 loc_descriptor_from_tree (tree loc, int want_address,
18221                           struct loc_descr_context *context)
18222 {
18223   dw_loc_list_ref ret = loc_list_from_tree (loc, want_address, context);
18224   if (!ret)
18225     return NULL;
18226   if (ret->dw_loc_next)
18227     {
18228       expansion_failed (loc, NULL_RTX,
18229                         "Location list where only loc descriptor needed");
18230       return NULL;
18231     }
18232   return ret->expr;
18233 }
18234
18235 /* Given a value, round it up to the lowest multiple of `boundary'
18236    which is not less than the value itself.  */
18237
18238 static inline HOST_WIDE_INT
18239 ceiling (HOST_WIDE_INT value, unsigned int boundary)
18240 {
18241   return (((value + boundary - 1) / boundary) * boundary);
18242 }
18243
18244 /* Given a pointer to what is assumed to be a FIELD_DECL node, return a
18245    pointer to the declared type for the relevant field variable, or return
18246    `integer_type_node' if the given node turns out to be an
18247    ERROR_MARK node.  */
18248
18249 static inline tree
18250 field_type (const_tree decl)
18251 {
18252   tree type;
18253
18254   if (TREE_CODE (decl) == ERROR_MARK)
18255     return integer_type_node;
18256
18257   type = DECL_BIT_FIELD_TYPE (decl);
18258   if (type == NULL_TREE)
18259     type = TREE_TYPE (decl);
18260
18261   return type;
18262 }
18263
18264 /* Given a pointer to a tree node, return the alignment in bits for
18265    it, or else return BITS_PER_WORD if the node actually turns out to
18266    be an ERROR_MARK node.  */
18267
18268 static inline unsigned
18269 simple_type_align_in_bits (const_tree type)
18270 {
18271   return (TREE_CODE (type) != ERROR_MARK) ? TYPE_ALIGN (type) : BITS_PER_WORD;
18272 }
18273
18274 static inline unsigned
18275 simple_decl_align_in_bits (const_tree decl)
18276 {
18277   return (TREE_CODE (decl) != ERROR_MARK) ? DECL_ALIGN (decl) : BITS_PER_WORD;
18278 }
18279
18280 /* Return the result of rounding T up to ALIGN.  */
18281
18282 static inline offset_int
18283 round_up_to_align (const offset_int &t, unsigned int align)
18284 {
18285   return wi::udiv_trunc (t + align - 1, align) * align;
18286 }
18287
18288 /* Compute the size of TYPE in bytes.  If possible, return NULL and store the
18289    size as an integer constant in CST_SIZE.  Otherwise, if possible, return a
18290    DWARF expression that computes the size.  Return NULL and set CST_SIZE to -1
18291    if we fail to return the size in one of these two forms.  */
18292
18293 static dw_loc_descr_ref
18294 type_byte_size (const_tree type, HOST_WIDE_INT *cst_size)
18295 {
18296   tree tree_size;
18297   struct loc_descr_context ctx;
18298
18299   /* Return a constant integer in priority, if possible.  */
18300   *cst_size = int_size_in_bytes (type);
18301   if (*cst_size != -1)
18302     return NULL;
18303
18304   ctx.context_type = const_cast<tree> (type);
18305   ctx.base_decl = NULL_TREE;
18306   ctx.dpi = NULL;
18307   ctx.placeholder_arg = false;
18308   ctx.placeholder_seen = false;
18309
18310   type = TYPE_MAIN_VARIANT (type);
18311   tree_size = TYPE_SIZE_UNIT (type);
18312   return ((tree_size != NULL_TREE)
18313           ? loc_descriptor_from_tree (tree_size, 0, &ctx)
18314           : NULL);
18315 }
18316
18317 /* Helper structure for RECORD_TYPE processing.  */
18318 struct vlr_context
18319 {
18320   /* Root RECORD_TYPE.  It is needed to generate data member location
18321      descriptions in variable-length records (VLR), but also to cope with
18322      variants, which are composed of nested structures multiplexed with
18323      QUAL_UNION_TYPE nodes.  Each time such a structure is passed to a
18324      function processing a FIELD_DECL, it is required to be non null.  */
18325   tree struct_type;
18326   /* When generating a variant part in a RECORD_TYPE (i.e. a nested
18327      QUAL_UNION_TYPE), this holds an expression that computes the offset for
18328      this variant part as part of the root record (in storage units).  For
18329      regular records, it must be NULL_TREE.  */
18330   tree variant_part_offset;
18331 };
18332
18333 /* Given a pointer to a FIELD_DECL, compute the byte offset of the lowest
18334    addressed byte of the "containing object" for the given FIELD_DECL. If
18335    possible, return a native constant through CST_OFFSET (in which case NULL is
18336    returned); otherwise return a DWARF expression that computes the offset.
18337
18338    Set *CST_OFFSET to 0 and return NULL if we are unable to determine what
18339    that offset is, either because the argument turns out to be a pointer to an
18340    ERROR_MARK node, or because the offset expression is too complex for us.
18341
18342    CTX is required: see the comment for VLR_CONTEXT.  */
18343
18344 static dw_loc_descr_ref
18345 field_byte_offset (const_tree decl, struct vlr_context *ctx,
18346                    HOST_WIDE_INT *cst_offset)
18347 {
18348   tree tree_result;
18349   dw_loc_list_ref loc_result;
18350
18351   *cst_offset = 0;
18352
18353   if (TREE_CODE (decl) == ERROR_MARK)
18354     return NULL;
18355   else
18356     gcc_assert (TREE_CODE (decl) == FIELD_DECL);
18357
18358   /* We cannot handle variable bit offsets at the moment, so abort if it's the
18359      case.  */
18360   if (TREE_CODE (DECL_FIELD_BIT_OFFSET (decl)) != INTEGER_CST)
18361     return NULL;
18362
18363 #ifdef PCC_BITFIELD_TYPE_MATTERS
18364   /* We used to handle only constant offsets in all cases.  Now, we handle
18365      properly dynamic byte offsets only when PCC bitfield type doesn't
18366      matter.  */
18367   if (PCC_BITFIELD_TYPE_MATTERS
18368       && TREE_CODE (DECL_FIELD_OFFSET (decl)) == INTEGER_CST)
18369     {
18370       offset_int object_offset_in_bits;
18371       offset_int object_offset_in_bytes;
18372       offset_int bitpos_int;
18373       tree type;
18374       tree field_size_tree;
18375       offset_int deepest_bitpos;
18376       offset_int field_size_in_bits;
18377       unsigned int type_align_in_bits;
18378       unsigned int decl_align_in_bits;
18379       offset_int type_size_in_bits;
18380
18381       bitpos_int = wi::to_offset (bit_position (decl));
18382       type = field_type (decl);
18383       type_size_in_bits = offset_int_type_size_in_bits (type);
18384       type_align_in_bits = simple_type_align_in_bits (type);
18385
18386       field_size_tree = DECL_SIZE (decl);
18387
18388       /* The size could be unspecified if there was an error, or for
18389          a flexible array member.  */
18390       if (!field_size_tree)
18391         field_size_tree = bitsize_zero_node;
18392
18393       /* If the size of the field is not constant, use the type size.  */
18394       if (TREE_CODE (field_size_tree) == INTEGER_CST)
18395         field_size_in_bits = wi::to_offset (field_size_tree);
18396       else
18397         field_size_in_bits = type_size_in_bits;
18398
18399       decl_align_in_bits = simple_decl_align_in_bits (decl);
18400
18401       /* The GCC front-end doesn't make any attempt to keep track of the
18402          starting bit offset (relative to the start of the containing
18403          structure type) of the hypothetical "containing object" for a
18404          bit-field.  Thus, when computing the byte offset value for the
18405          start of the "containing object" of a bit-field, we must deduce
18406          this information on our own. This can be rather tricky to do in
18407          some cases.  For example, handling the following structure type
18408          definition when compiling for an i386/i486 target (which only
18409          aligns long long's to 32-bit boundaries) can be very tricky:
18410
18411          struct S { int field1; long long field2:31; };
18412
18413          Fortunately, there is a simple rule-of-thumb which can be used
18414          in such cases.  When compiling for an i386/i486, GCC will
18415          allocate 8 bytes for the structure shown above.  It decides to
18416          do this based upon one simple rule for bit-field allocation.
18417          GCC allocates each "containing object" for each bit-field at
18418          the first (i.e. lowest addressed) legitimate alignment boundary
18419          (based upon the required minimum alignment for the declared
18420          type of the field) which it can possibly use, subject to the
18421          condition that there is still enough available space remaining
18422          in the containing object (when allocated at the selected point)
18423          to fully accommodate all of the bits of the bit-field itself.
18424
18425          This simple rule makes it obvious why GCC allocates 8 bytes for
18426          each object of the structure type shown above.  When looking
18427          for a place to allocate the "containing object" for `field2',
18428          the compiler simply tries to allocate a 64-bit "containing
18429          object" at each successive 32-bit boundary (starting at zero)
18430          until it finds a place to allocate that 64- bit field such that
18431          at least 31 contiguous (and previously unallocated) bits remain
18432          within that selected 64 bit field.  (As it turns out, for the
18433          example above, the compiler finds it is OK to allocate the
18434          "containing object" 64-bit field at bit-offset zero within the
18435          structure type.)
18436
18437          Here we attempt to work backwards from the limited set of facts
18438          we're given, and we try to deduce from those facts, where GCC
18439          must have believed that the containing object started (within
18440          the structure type). The value we deduce is then used (by the
18441          callers of this routine) to generate DW_AT_location and
18442          DW_AT_bit_offset attributes for fields (both bit-fields and, in
18443          the case of DW_AT_location, regular fields as well).  */
18444
18445       /* Figure out the bit-distance from the start of the structure to
18446          the "deepest" bit of the bit-field.  */
18447       deepest_bitpos = bitpos_int + field_size_in_bits;
18448
18449       /* This is the tricky part.  Use some fancy footwork to deduce
18450          where the lowest addressed bit of the containing object must
18451          be.  */
18452       object_offset_in_bits = deepest_bitpos - type_size_in_bits;
18453
18454       /* Round up to type_align by default.  This works best for
18455          bitfields.  */
18456       object_offset_in_bits
18457         = round_up_to_align (object_offset_in_bits, type_align_in_bits);
18458
18459       if (wi::gtu_p (object_offset_in_bits, bitpos_int))
18460         {
18461           object_offset_in_bits = deepest_bitpos - type_size_in_bits;
18462
18463           /* Round up to decl_align instead.  */
18464           object_offset_in_bits
18465             = round_up_to_align (object_offset_in_bits, decl_align_in_bits);
18466         }
18467
18468       object_offset_in_bytes
18469         = wi::lrshift (object_offset_in_bits, LOG2_BITS_PER_UNIT);
18470       if (ctx->variant_part_offset == NULL_TREE)
18471         {
18472           *cst_offset = object_offset_in_bytes.to_shwi ();
18473           return NULL;
18474         }
18475       tree_result = wide_int_to_tree (sizetype, object_offset_in_bytes);
18476     }
18477   else
18478 #endif /* PCC_BITFIELD_TYPE_MATTERS */
18479     tree_result = byte_position (decl);
18480
18481   if (ctx->variant_part_offset != NULL_TREE)
18482     tree_result = fold_build2 (PLUS_EXPR, TREE_TYPE (tree_result),
18483                                ctx->variant_part_offset, tree_result);
18484
18485   /* If the byte offset is a constant, it's simplier to handle a native
18486      constant rather than a DWARF expression.  */
18487   if (TREE_CODE (tree_result) == INTEGER_CST)
18488     {
18489       *cst_offset = wi::to_offset (tree_result).to_shwi ();
18490       return NULL;
18491     }
18492   struct loc_descr_context loc_ctx = {
18493     ctx->struct_type, /* context_type */
18494     NULL_TREE,        /* base_decl */
18495     NULL,             /* dpi */
18496     false,            /* placeholder_arg */
18497     false             /* placeholder_seen */
18498   };
18499   loc_result = loc_list_from_tree (tree_result, 0, &loc_ctx);
18500
18501   /* We want a DWARF expression: abort if we only have a location list with
18502      multiple elements.  */
18503   if (!loc_result || !single_element_loc_list_p (loc_result))
18504     return NULL;
18505   else
18506     return loc_result->expr;
18507 }
18508 \f
18509 /* The following routines define various Dwarf attributes and any data
18510    associated with them.  */
18511
18512 /* Add a location description attribute value to a DIE.
18513
18514    This emits location attributes suitable for whole variables and
18515    whole parameters.  Note that the location attributes for struct fields are
18516    generated by the routine `data_member_location_attribute' below.  */
18517
18518 static inline void
18519 add_AT_location_description (dw_die_ref die, enum dwarf_attribute attr_kind,
18520                              dw_loc_list_ref descr)
18521 {
18522   if (descr == 0)
18523     return;
18524   if (single_element_loc_list_p (descr))
18525     add_AT_loc (die, attr_kind, descr->expr);
18526   else
18527     add_AT_loc_list (die, attr_kind, descr);
18528 }
18529
18530 /* Add DW_AT_accessibility attribute to DIE if needed.  */
18531
18532 static void
18533 add_accessibility_attribute (dw_die_ref die, tree decl)
18534 {
18535   /* In DWARF3+ the default is DW_ACCESS_private only in DW_TAG_class_type
18536      children, otherwise the default is DW_ACCESS_public.  In DWARF2
18537      the default has always been DW_ACCESS_public.  */
18538   if (TREE_PROTECTED (decl))
18539     add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_protected);
18540   else if (TREE_PRIVATE (decl))
18541     {
18542       if (dwarf_version == 2
18543           || die->die_parent == NULL
18544           || die->die_parent->die_tag != DW_TAG_class_type)
18545         add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_private);
18546     }
18547   else if (dwarf_version > 2
18548            && die->die_parent
18549            && die->die_parent->die_tag == DW_TAG_class_type)
18550     add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_public);
18551 }
18552
18553 /* Attach the specialized form of location attribute used for data members of
18554    struct and union types.  In the special case of a FIELD_DECL node which
18555    represents a bit-field, the "offset" part of this special location
18556    descriptor must indicate the distance in bytes from the lowest-addressed
18557    byte of the containing struct or union type to the lowest-addressed byte of
18558    the "containing object" for the bit-field.  (See the `field_byte_offset'
18559    function above).
18560
18561    For any given bit-field, the "containing object" is a hypothetical object
18562    (of some integral or enum type) within which the given bit-field lives.  The
18563    type of this hypothetical "containing object" is always the same as the
18564    declared type of the individual bit-field itself (for GCC anyway... the
18565    DWARF spec doesn't actually mandate this).  Note that it is the size (in
18566    bytes) of the hypothetical "containing object" which will be given in the
18567    DW_AT_byte_size attribute for this bit-field.  (See the
18568    `byte_size_attribute' function below.)  It is also used when calculating the
18569    value of the DW_AT_bit_offset attribute.  (See the `bit_offset_attribute'
18570    function below.)
18571
18572    CTX is required: see the comment for VLR_CONTEXT.  */
18573
18574 static void
18575 add_data_member_location_attribute (dw_die_ref die,
18576                                     tree decl,
18577                                     struct vlr_context *ctx)
18578 {
18579   HOST_WIDE_INT offset;
18580   dw_loc_descr_ref loc_descr = 0;
18581
18582   if (TREE_CODE (decl) == TREE_BINFO)
18583     {
18584       /* We're working on the TAG_inheritance for a base class.  */
18585       if (BINFO_VIRTUAL_P (decl) && is_cxx ())
18586         {
18587           /* For C++ virtual bases we can't just use BINFO_OFFSET, as they
18588              aren't at a fixed offset from all (sub)objects of the same
18589              type.  We need to extract the appropriate offset from our
18590              vtable.  The following dwarf expression means
18591
18592                BaseAddr = ObAddr + *((*ObAddr) - Offset)
18593
18594              This is specific to the V3 ABI, of course.  */
18595
18596           dw_loc_descr_ref tmp;
18597
18598           /* Make a copy of the object address.  */
18599           tmp = new_loc_descr (DW_OP_dup, 0, 0);
18600           add_loc_descr (&loc_descr, tmp);
18601
18602           /* Extract the vtable address.  */
18603           tmp = new_loc_descr (DW_OP_deref, 0, 0);
18604           add_loc_descr (&loc_descr, tmp);
18605
18606           /* Calculate the address of the offset.  */
18607           offset = tree_to_shwi (BINFO_VPTR_FIELD (decl));
18608           gcc_assert (offset < 0);
18609
18610           tmp = int_loc_descriptor (-offset);
18611           add_loc_descr (&loc_descr, tmp);
18612           tmp = new_loc_descr (DW_OP_minus, 0, 0);
18613           add_loc_descr (&loc_descr, tmp);
18614
18615           /* Extract the offset.  */
18616           tmp = new_loc_descr (DW_OP_deref, 0, 0);
18617           add_loc_descr (&loc_descr, tmp);
18618
18619           /* Add it to the object address.  */
18620           tmp = new_loc_descr (DW_OP_plus, 0, 0);
18621           add_loc_descr (&loc_descr, tmp);
18622         }
18623       else
18624         offset = tree_to_shwi (BINFO_OFFSET (decl));
18625     }
18626   else
18627     {
18628       loc_descr = field_byte_offset (decl, ctx, &offset);
18629
18630       /* If loc_descr is available then we know the field offset is dynamic.
18631          However, GDB does not handle dynamic field offsets very well at the
18632          moment.  */
18633       if (loc_descr != NULL && gnat_encodings != DWARF_GNAT_ENCODINGS_MINIMAL)
18634         {
18635           loc_descr = NULL;
18636           offset = 0;
18637         }
18638
18639       /* Data member location evalutation starts with the base address on the
18640          stack.  Compute the field offset and add it to this base address.  */
18641       else if (loc_descr != NULL)
18642         add_loc_descr (&loc_descr, new_loc_descr (DW_OP_plus, 0, 0));
18643     }
18644
18645   if (! loc_descr)
18646     {
18647       /* While DW_AT_data_bit_offset has been added already in DWARF4,
18648          e.g. GDB only added support to it in November 2016.  For DWARF5
18649          we need newer debug info consumers anyway.  We might change this
18650          to dwarf_version >= 4 once most consumers catched up.  */
18651       if (dwarf_version >= 5
18652           && TREE_CODE (decl) == FIELD_DECL
18653           && DECL_BIT_FIELD_TYPE (decl))
18654         {
18655           tree off = bit_position (decl);
18656           if (tree_fits_uhwi_p (off) && get_AT (die, DW_AT_bit_size))
18657             {
18658               remove_AT (die, DW_AT_byte_size);
18659               remove_AT (die, DW_AT_bit_offset);
18660               add_AT_unsigned (die, DW_AT_data_bit_offset, tree_to_uhwi (off));
18661               return;
18662             }
18663         }
18664       if (dwarf_version > 2)
18665         {
18666           /* Don't need to output a location expression, just the constant. */
18667           if (offset < 0)
18668             add_AT_int (die, DW_AT_data_member_location, offset);
18669           else
18670             add_AT_unsigned (die, DW_AT_data_member_location, offset);
18671           return;
18672         }
18673       else
18674         {
18675           enum dwarf_location_atom op;
18676
18677           /* The DWARF2 standard says that we should assume that the structure
18678              address is already on the stack, so we can specify a structure
18679              field address by using DW_OP_plus_uconst.  */
18680           op = DW_OP_plus_uconst;
18681           loc_descr = new_loc_descr (op, offset, 0);
18682         }
18683     }
18684
18685   add_AT_loc (die, DW_AT_data_member_location, loc_descr);
18686 }
18687
18688 /* Writes integer values to dw_vec_const array.  */
18689
18690 static void
18691 insert_int (HOST_WIDE_INT val, unsigned int size, unsigned char *dest)
18692 {
18693   while (size != 0)
18694     {
18695       *dest++ = val & 0xff;
18696       val >>= 8;
18697       --size;
18698     }
18699 }
18700
18701 /* Reads integers from dw_vec_const array.  Inverse of insert_int.  */
18702
18703 static HOST_WIDE_INT
18704 extract_int (const unsigned char *src, unsigned int size)
18705 {
18706   HOST_WIDE_INT val = 0;
18707
18708   src += size;
18709   while (size != 0)
18710     {
18711       val <<= 8;
18712       val |= *--src & 0xff;
18713       --size;
18714     }
18715   return val;
18716 }
18717
18718 /* Writes wide_int values to dw_vec_const array.  */
18719
18720 static void
18721 insert_wide_int (const wide_int &val, unsigned char *dest, int elt_size)
18722 {
18723   int i;
18724
18725   if (elt_size <= HOST_BITS_PER_WIDE_INT/BITS_PER_UNIT)
18726     {
18727       insert_int ((HOST_WIDE_INT) val.elt (0), elt_size, dest);
18728       return;
18729     }
18730
18731   /* We'd have to extend this code to support odd sizes.  */
18732   gcc_assert (elt_size % (HOST_BITS_PER_WIDE_INT / BITS_PER_UNIT) == 0);
18733
18734   int n = elt_size / (HOST_BITS_PER_WIDE_INT / BITS_PER_UNIT);
18735
18736   if (WORDS_BIG_ENDIAN)
18737     for (i = n - 1; i >= 0; i--)
18738       {
18739         insert_int ((HOST_WIDE_INT) val.elt (i), sizeof (HOST_WIDE_INT), dest);
18740         dest += sizeof (HOST_WIDE_INT);
18741       }
18742   else
18743     for (i = 0; i < n; i++)
18744       {
18745         insert_int ((HOST_WIDE_INT) val.elt (i), sizeof (HOST_WIDE_INT), dest);
18746         dest += sizeof (HOST_WIDE_INT);
18747       }
18748 }
18749
18750 /* Writes floating point values to dw_vec_const array.  */
18751
18752 static void
18753 insert_float (const_rtx rtl, unsigned char *array)
18754 {
18755   long val[4];
18756   int i;
18757   scalar_float_mode mode = as_a <scalar_float_mode> (GET_MODE (rtl));
18758
18759   real_to_target (val, CONST_DOUBLE_REAL_VALUE (rtl), mode);
18760
18761   /* real_to_target puts 32-bit pieces in each long.  Pack them.  */
18762   for (i = 0; i < GET_MODE_SIZE (mode) / 4; i++)
18763     {
18764       insert_int (val[i], 4, array);
18765       array += 4;
18766     }
18767 }
18768
18769 /* Attach a DW_AT_const_value attribute for a variable or a parameter which
18770    does not have a "location" either in memory or in a register.  These
18771    things can arise in GNU C when a constant is passed as an actual parameter
18772    to an inlined function.  They can also arise in C++ where declared
18773    constants do not necessarily get memory "homes".  */
18774
18775 static bool
18776 add_const_value_attribute (dw_die_ref die, rtx rtl)
18777 {
18778   switch (GET_CODE (rtl))
18779     {
18780     case CONST_INT:
18781       {
18782         HOST_WIDE_INT val = INTVAL (rtl);
18783
18784         if (val < 0)
18785           add_AT_int (die, DW_AT_const_value, val);
18786         else
18787           add_AT_unsigned (die, DW_AT_const_value, (unsigned HOST_WIDE_INT) val);
18788       }
18789       return true;
18790
18791     case CONST_WIDE_INT:
18792       {
18793         wide_int w1 = rtx_mode_t (rtl, MAX_MODE_INT);
18794         unsigned int prec = MIN (wi::min_precision (w1, UNSIGNED),
18795                                  (unsigned int)CONST_WIDE_INT_NUNITS (rtl) * HOST_BITS_PER_WIDE_INT);
18796         wide_int w = wi::zext (w1, prec);
18797         add_AT_wide (die, DW_AT_const_value, w);
18798       }
18799       return true;
18800
18801     case CONST_DOUBLE:
18802       /* Note that a CONST_DOUBLE rtx could represent either an integer or a
18803          floating-point constant.  A CONST_DOUBLE is used whenever the
18804          constant requires more than one word in order to be adequately
18805          represented.  */
18806       if (TARGET_SUPPORTS_WIDE_INT == 0
18807           && !SCALAR_FLOAT_MODE_P (GET_MODE (rtl)))
18808         add_AT_double (die, DW_AT_const_value,
18809                        CONST_DOUBLE_HIGH (rtl), CONST_DOUBLE_LOW (rtl));
18810       else
18811         {
18812           scalar_float_mode mode = as_a <scalar_float_mode> (GET_MODE (rtl));
18813           unsigned int length = GET_MODE_SIZE (mode);
18814           unsigned char *array = ggc_vec_alloc<unsigned char> (length);
18815
18816           insert_float (rtl, array);
18817           add_AT_vec (die, DW_AT_const_value, length / 4, 4, array);
18818         }
18819       return true;
18820
18821     case CONST_VECTOR:
18822       {
18823         unsigned int length;
18824         if (!CONST_VECTOR_NUNITS (rtl).is_constant (&length))
18825           return false;
18826
18827         machine_mode mode = GET_MODE (rtl);
18828         unsigned int elt_size = GET_MODE_UNIT_SIZE (mode);
18829         unsigned char *array
18830           = ggc_vec_alloc<unsigned char> (length * elt_size);
18831         unsigned int i;
18832         unsigned char *p;
18833         machine_mode imode = GET_MODE_INNER (mode);
18834
18835         switch (GET_MODE_CLASS (mode))
18836           {
18837           case MODE_VECTOR_INT:
18838             for (i = 0, p = array; i < length; i++, p += elt_size)
18839               {
18840                 rtx elt = CONST_VECTOR_ELT (rtl, i);
18841                 insert_wide_int (rtx_mode_t (elt, imode), p, elt_size);
18842               }
18843             break;
18844
18845           case MODE_VECTOR_FLOAT:
18846             for (i = 0, p = array; i < length; i++, p += elt_size)
18847               {
18848                 rtx elt = CONST_VECTOR_ELT (rtl, i);
18849                 insert_float (elt, p);
18850               }
18851             break;
18852
18853           default:
18854             gcc_unreachable ();
18855           }
18856
18857         add_AT_vec (die, DW_AT_const_value, length, elt_size, array);
18858       }
18859       return true;
18860
18861     case CONST_STRING:
18862       if (dwarf_version >= 4 || !dwarf_strict)
18863         {
18864           dw_loc_descr_ref loc_result;
18865           resolve_one_addr (&rtl);
18866         rtl_addr:
18867           loc_result = new_addr_loc_descr (rtl, dtprel_false);
18868           add_loc_descr (&loc_result, new_loc_descr (DW_OP_stack_value, 0, 0));
18869           add_AT_loc (die, DW_AT_location, loc_result);
18870           vec_safe_push (used_rtx_array, rtl);
18871           return true;
18872         }
18873       return false;
18874
18875     case CONST:
18876       if (CONSTANT_P (XEXP (rtl, 0)))
18877         return add_const_value_attribute (die, XEXP (rtl, 0));
18878       /* FALLTHROUGH */
18879     case SYMBOL_REF:
18880       if (!const_ok_for_output (rtl))
18881         return false;
18882       /* FALLTHROUGH */
18883     case LABEL_REF:
18884       if (dwarf_version >= 4 || !dwarf_strict)
18885         goto rtl_addr;
18886       return false;
18887
18888     case PLUS:
18889       /* In cases where an inlined instance of an inline function is passed
18890          the address of an `auto' variable (which is local to the caller) we
18891          can get a situation where the DECL_RTL of the artificial local
18892          variable (for the inlining) which acts as a stand-in for the
18893          corresponding formal parameter (of the inline function) will look
18894          like (plus:SI (reg:SI FRAME_PTR) (const_int ...)).  This is not
18895          exactly a compile-time constant expression, but it isn't the address
18896          of the (artificial) local variable either.  Rather, it represents the
18897          *value* which the artificial local variable always has during its
18898          lifetime.  We currently have no way to represent such quasi-constant
18899          values in Dwarf, so for now we just punt and generate nothing.  */
18900       return false;
18901
18902     case HIGH:
18903     case CONST_FIXED:
18904       return false;
18905
18906     case MEM:
18907       if (GET_CODE (XEXP (rtl, 0)) == CONST_STRING
18908           && MEM_READONLY_P (rtl)
18909           && GET_MODE (rtl) == BLKmode)
18910         {
18911           add_AT_string (die, DW_AT_const_value, XSTR (XEXP (rtl, 0), 0));
18912           return true;
18913         }
18914       return false;
18915
18916     default:
18917       /* No other kinds of rtx should be possible here.  */
18918       gcc_unreachable ();
18919     }
18920   return false;
18921 }
18922
18923 /* Determine whether the evaluation of EXPR references any variables
18924    or functions which aren't otherwise used (and therefore may not be
18925    output).  */
18926 static tree
18927 reference_to_unused (tree * tp, int * walk_subtrees,
18928                      void * data ATTRIBUTE_UNUSED)
18929 {
18930   if (! EXPR_P (*tp) && ! CONSTANT_CLASS_P (*tp))
18931     *walk_subtrees = 0;
18932
18933   if (DECL_P (*tp) && ! TREE_PUBLIC (*tp) && ! TREE_USED (*tp)
18934       && ! TREE_ASM_WRITTEN (*tp))
18935     return *tp;
18936   /* ???  The C++ FE emits debug information for using decls, so
18937      putting gcc_unreachable here falls over.  See PR31899.  For now
18938      be conservative.  */
18939   else if (!symtab->global_info_ready && VAR_OR_FUNCTION_DECL_P (*tp))
18940     return *tp;
18941   else if (VAR_P (*tp))
18942     {
18943       varpool_node *node = varpool_node::get (*tp);
18944       if (!node || !node->definition)
18945         return *tp;
18946     }
18947   else if (TREE_CODE (*tp) == FUNCTION_DECL
18948            && (!DECL_EXTERNAL (*tp) || DECL_DECLARED_INLINE_P (*tp)))
18949     {
18950       /* The call graph machinery must have finished analyzing,
18951          optimizing and gimplifying the CU by now.
18952          So if *TP has no call graph node associated
18953          to it, it means *TP will not be emitted.  */
18954       if (!cgraph_node::get (*tp))
18955         return *tp;
18956     }
18957   else if (TREE_CODE (*tp) == STRING_CST && !TREE_ASM_WRITTEN (*tp))
18958     return *tp;
18959
18960   return NULL_TREE;
18961 }
18962
18963 /* Generate an RTL constant from a decl initializer INIT with decl type TYPE,
18964    for use in a later add_const_value_attribute call.  */
18965
18966 static rtx
18967 rtl_for_decl_init (tree init, tree type)
18968 {
18969   rtx rtl = NULL_RTX;
18970
18971   STRIP_NOPS (init);
18972
18973   /* If a variable is initialized with a string constant without embedded
18974      zeros, build CONST_STRING.  */
18975   if (TREE_CODE (init) == STRING_CST && TREE_CODE (type) == ARRAY_TYPE)
18976     {
18977       tree enttype = TREE_TYPE (type);
18978       tree domain = TYPE_DOMAIN (type);
18979       scalar_int_mode mode;
18980
18981       if (is_int_mode (TYPE_MODE (enttype), &mode)
18982           && GET_MODE_SIZE (mode) == 1
18983           && domain
18984           && integer_zerop (TYPE_MIN_VALUE (domain))
18985           && compare_tree_int (TYPE_MAX_VALUE (domain),
18986                                TREE_STRING_LENGTH (init) - 1) == 0
18987           && ((size_t) TREE_STRING_LENGTH (init)
18988               == strlen (TREE_STRING_POINTER (init)) + 1))
18989         {
18990           rtl = gen_rtx_CONST_STRING (VOIDmode,
18991                                       ggc_strdup (TREE_STRING_POINTER (init)));
18992           rtl = gen_rtx_MEM (BLKmode, rtl);
18993           MEM_READONLY_P (rtl) = 1;
18994         }
18995     }
18996   /* Other aggregates, and complex values, could be represented using
18997      CONCAT: FIXME!  */
18998   else if (AGGREGATE_TYPE_P (type)
18999            || (TREE_CODE (init) == VIEW_CONVERT_EXPR
19000                && AGGREGATE_TYPE_P (TREE_TYPE (TREE_OPERAND (init, 0))))
19001            || TREE_CODE (type) == COMPLEX_TYPE)
19002     ;
19003   /* Vectors only work if their mode is supported by the target.
19004      FIXME: generic vectors ought to work too.  */
19005   else if (TREE_CODE (type) == VECTOR_TYPE
19006            && !VECTOR_MODE_P (TYPE_MODE (type)))
19007     ;
19008   /* If the initializer is something that we know will expand into an
19009      immediate RTL constant, expand it now.  We must be careful not to
19010      reference variables which won't be output.  */
19011   else if (initializer_constant_valid_p (init, type)
19012            && ! walk_tree (&init, reference_to_unused, NULL, NULL))
19013     {
19014       /* Convert vector CONSTRUCTOR initializers to VECTOR_CST if
19015          possible.  */
19016       if (TREE_CODE (type) == VECTOR_TYPE)
19017         switch (TREE_CODE (init))
19018           {
19019           case VECTOR_CST:
19020             break;
19021           case CONSTRUCTOR:
19022             if (TREE_CONSTANT (init))
19023               {
19024                 vec<constructor_elt, va_gc> *elts = CONSTRUCTOR_ELTS (init);
19025                 bool constant_p = true;
19026                 tree value;
19027                 unsigned HOST_WIDE_INT ix;
19028
19029                 /* Even when ctor is constant, it might contain non-*_CST
19030                    elements (e.g. { 1.0/0.0 - 1.0/0.0, 0.0 }) and those don't
19031                    belong into VECTOR_CST nodes.  */
19032                 FOR_EACH_CONSTRUCTOR_VALUE (elts, ix, value)
19033                   if (!CONSTANT_CLASS_P (value))
19034                     {
19035                       constant_p = false;
19036                       break;
19037                     }
19038
19039                 if (constant_p)
19040                   {
19041                     init = build_vector_from_ctor (type, elts);
19042                     break;
19043                   }
19044               }
19045             /* FALLTHRU */
19046
19047           default:
19048             return NULL;
19049           }
19050
19051       rtl = expand_expr (init, NULL_RTX, VOIDmode, EXPAND_INITIALIZER);
19052
19053       /* If expand_expr returns a MEM, it wasn't immediate.  */
19054       gcc_assert (!rtl || !MEM_P (rtl));
19055     }
19056
19057   return rtl;
19058 }
19059
19060 /* Generate RTL for the variable DECL to represent its location.  */
19061
19062 static rtx
19063 rtl_for_decl_location (tree decl)
19064 {
19065   rtx rtl;
19066
19067   /* Here we have to decide where we are going to say the parameter "lives"
19068      (as far as the debugger is concerned).  We only have a couple of
19069      choices.  GCC provides us with DECL_RTL and with DECL_INCOMING_RTL.
19070
19071      DECL_RTL normally indicates where the parameter lives during most of the
19072      activation of the function.  If optimization is enabled however, this
19073      could be either NULL or else a pseudo-reg.  Both of those cases indicate
19074      that the parameter doesn't really live anywhere (as far as the code
19075      generation parts of GCC are concerned) during most of the function's
19076      activation.  That will happen (for example) if the parameter is never
19077      referenced within the function.
19078
19079      We could just generate a location descriptor here for all non-NULL
19080      non-pseudo values of DECL_RTL and ignore all of the rest, but we can be
19081      a little nicer than that if we also consider DECL_INCOMING_RTL in cases
19082      where DECL_RTL is NULL or is a pseudo-reg.
19083
19084      Note however that we can only get away with using DECL_INCOMING_RTL as
19085      a backup substitute for DECL_RTL in certain limited cases.  In cases
19086      where DECL_ARG_TYPE (decl) indicates the same type as TREE_TYPE (decl),
19087      we can be sure that the parameter was passed using the same type as it is
19088      declared to have within the function, and that its DECL_INCOMING_RTL
19089      points us to a place where a value of that type is passed.
19090
19091      In cases where DECL_ARG_TYPE (decl) and TREE_TYPE (decl) are different,
19092      we cannot (in general) use DECL_INCOMING_RTL as a substitute for DECL_RTL
19093      because in these cases DECL_INCOMING_RTL points us to a value of some
19094      type which is *different* from the type of the parameter itself.  Thus,
19095      if we tried to use DECL_INCOMING_RTL to generate a location attribute in
19096      such cases, the debugger would end up (for example) trying to fetch a
19097      `float' from a place which actually contains the first part of a
19098      `double'.  That would lead to really incorrect and confusing
19099      output at debug-time.
19100
19101      So, in general, we *do not* use DECL_INCOMING_RTL as a backup for DECL_RTL
19102      in cases where DECL_ARG_TYPE (decl) != TREE_TYPE (decl).  There
19103      are a couple of exceptions however.  On little-endian machines we can
19104      get away with using DECL_INCOMING_RTL even when DECL_ARG_TYPE (decl) is
19105      not the same as TREE_TYPE (decl), but only when DECL_ARG_TYPE (decl) is
19106      an integral type that is smaller than TREE_TYPE (decl). These cases arise
19107      when (on a little-endian machine) a non-prototyped function has a
19108      parameter declared to be of type `short' or `char'.  In such cases,
19109      TREE_TYPE (decl) will be `short' or `char', DECL_ARG_TYPE (decl) will
19110      be `int', and DECL_INCOMING_RTL will point to the lowest-order byte of the
19111      passed `int' value.  If the debugger then uses that address to fetch
19112      a `short' or a `char' (on a little-endian machine) the result will be
19113      the correct data, so we allow for such exceptional cases below.
19114
19115      Note that our goal here is to describe the place where the given formal
19116      parameter lives during most of the function's activation (i.e. between the
19117      end of the prologue and the start of the epilogue).  We'll do that as best
19118      as we can. Note however that if the given formal parameter is modified
19119      sometime during the execution of the function, then a stack backtrace (at
19120      debug-time) will show the function as having been called with the *new*
19121      value rather than the value which was originally passed in.  This happens
19122      rarely enough that it is not a major problem, but it *is* a problem, and
19123      I'd like to fix it.
19124
19125      A future version of dwarf2out.c may generate two additional attributes for
19126      any given DW_TAG_formal_parameter DIE which will describe the "passed
19127      type" and the "passed location" for the given formal parameter in addition
19128      to the attributes we now generate to indicate the "declared type" and the
19129      "active location" for each parameter.  This additional set of attributes
19130      could be used by debuggers for stack backtraces. Separately, note that
19131      sometimes DECL_RTL can be NULL and DECL_INCOMING_RTL can be NULL also.
19132      This happens (for example) for inlined-instances of inline function formal
19133      parameters which are never referenced.  This really shouldn't be
19134      happening.  All PARM_DECL nodes should get valid non-NULL
19135      DECL_INCOMING_RTL values.  FIXME.  */
19136
19137   /* Use DECL_RTL as the "location" unless we find something better.  */
19138   rtl = DECL_RTL_IF_SET (decl);
19139
19140   /* When generating abstract instances, ignore everything except
19141      constants, symbols living in memory, and symbols living in
19142      fixed registers.  */
19143   if (! reload_completed)
19144     {
19145       if (rtl
19146           && (CONSTANT_P (rtl)
19147               || (MEM_P (rtl)
19148                   && CONSTANT_P (XEXP (rtl, 0)))
19149               || (REG_P (rtl)
19150                   && VAR_P (decl)
19151                   && TREE_STATIC (decl))))
19152         {
19153           rtl = targetm.delegitimize_address (rtl);
19154           return rtl;
19155         }
19156       rtl = NULL_RTX;
19157     }
19158   else if (TREE_CODE (decl) == PARM_DECL)
19159     {
19160       if (rtl == NULL_RTX
19161           || is_pseudo_reg (rtl)
19162           || (MEM_P (rtl)
19163               && is_pseudo_reg (XEXP (rtl, 0))
19164               && DECL_INCOMING_RTL (decl)
19165               && MEM_P (DECL_INCOMING_RTL (decl))
19166               && GET_MODE (rtl) == GET_MODE (DECL_INCOMING_RTL (decl))))
19167         {
19168           tree declared_type = TREE_TYPE (decl);
19169           tree passed_type = DECL_ARG_TYPE (decl);
19170           machine_mode dmode = TYPE_MODE (declared_type);
19171           machine_mode pmode = TYPE_MODE (passed_type);
19172
19173           /* This decl represents a formal parameter which was optimized out.
19174              Note that DECL_INCOMING_RTL may be NULL in here, but we handle
19175              all cases where (rtl == NULL_RTX) just below.  */
19176           if (dmode == pmode)
19177             rtl = DECL_INCOMING_RTL (decl);
19178           else if ((rtl == NULL_RTX || is_pseudo_reg (rtl))
19179                    && SCALAR_INT_MODE_P (dmode)
19180                    && GET_MODE_SIZE (dmode) <= GET_MODE_SIZE (pmode)
19181                    && DECL_INCOMING_RTL (decl))
19182             {
19183               rtx inc = DECL_INCOMING_RTL (decl);
19184               if (REG_P (inc))
19185                 rtl = inc;
19186               else if (MEM_P (inc))
19187                 {
19188                   if (BYTES_BIG_ENDIAN)
19189                     rtl = adjust_address_nv (inc, dmode,
19190                                              GET_MODE_SIZE (pmode)
19191                                              - GET_MODE_SIZE (dmode));
19192                   else
19193                     rtl = inc;
19194                 }
19195             }
19196         }
19197
19198       /* If the parm was passed in registers, but lives on the stack, then
19199          make a big endian correction if the mode of the type of the
19200          parameter is not the same as the mode of the rtl.  */
19201       /* ??? This is the same series of checks that are made in dbxout.c before
19202          we reach the big endian correction code there.  It isn't clear if all
19203          of these checks are necessary here, but keeping them all is the safe
19204          thing to do.  */
19205       else if (MEM_P (rtl)
19206                && XEXP (rtl, 0) != const0_rtx
19207                && ! CONSTANT_P (XEXP (rtl, 0))
19208                /* Not passed in memory.  */
19209                && !MEM_P (DECL_INCOMING_RTL (decl))
19210                /* Not passed by invisible reference.  */
19211                && (!REG_P (XEXP (rtl, 0))
19212                    || REGNO (XEXP (rtl, 0)) == HARD_FRAME_POINTER_REGNUM
19213                    || REGNO (XEXP (rtl, 0)) == STACK_POINTER_REGNUM
19214 #if !HARD_FRAME_POINTER_IS_ARG_POINTER
19215                    || REGNO (XEXP (rtl, 0)) == ARG_POINTER_REGNUM
19216 #endif
19217                      )
19218                /* Big endian correction check.  */
19219                && BYTES_BIG_ENDIAN
19220                && TYPE_MODE (TREE_TYPE (decl)) != GET_MODE (rtl)
19221                && (GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl)))
19222                    < UNITS_PER_WORD))
19223         {
19224           machine_mode addr_mode = get_address_mode (rtl);
19225           int offset = (UNITS_PER_WORD
19226                         - GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl))));
19227
19228           rtl = gen_rtx_MEM (TYPE_MODE (TREE_TYPE (decl)),
19229                              plus_constant (addr_mode, XEXP (rtl, 0), offset));
19230         }
19231     }
19232   else if (VAR_P (decl)
19233            && rtl
19234            && MEM_P (rtl)
19235            && GET_MODE (rtl) != TYPE_MODE (TREE_TYPE (decl)))
19236     {
19237       machine_mode addr_mode = get_address_mode (rtl);
19238       poly_int64 offset = byte_lowpart_offset (TYPE_MODE (TREE_TYPE (decl)),
19239                                                GET_MODE (rtl));
19240
19241       /* If a variable is declared "register" yet is smaller than
19242          a register, then if we store the variable to memory, it
19243          looks like we're storing a register-sized value, when in
19244          fact we are not.  We need to adjust the offset of the
19245          storage location to reflect the actual value's bytes,
19246          else gdb will not be able to display it.  */
19247       if (maybe_ne (offset, 0))
19248         rtl = gen_rtx_MEM (TYPE_MODE (TREE_TYPE (decl)),
19249                            plus_constant (addr_mode, XEXP (rtl, 0), offset));
19250     }
19251
19252   /* A variable with no DECL_RTL but a DECL_INITIAL is a compile-time constant,
19253      and will have been substituted directly into all expressions that use it.
19254      C does not have such a concept, but C++ and other languages do.  */
19255   if (!rtl && VAR_P (decl) && DECL_INITIAL (decl))
19256     rtl = rtl_for_decl_init (DECL_INITIAL (decl), TREE_TYPE (decl));
19257
19258   if (rtl)
19259     rtl = targetm.delegitimize_address (rtl);
19260
19261   /* If we don't look past the constant pool, we risk emitting a
19262      reference to a constant pool entry that isn't referenced from
19263      code, and thus is not emitted.  */
19264   if (rtl)
19265     rtl = avoid_constant_pool_reference (rtl);
19266
19267   /* Try harder to get a rtl.  If this symbol ends up not being emitted
19268      in the current CU, resolve_addr will remove the expression referencing
19269      it.  */
19270   if (rtl == NULL_RTX
19271       && VAR_P (decl)
19272       && !DECL_EXTERNAL (decl)
19273       && TREE_STATIC (decl)
19274       && DECL_NAME (decl)
19275       && !DECL_HARD_REGISTER (decl)
19276       && DECL_MODE (decl) != VOIDmode)
19277     {
19278       rtl = make_decl_rtl_for_debug (decl);
19279       if (!MEM_P (rtl)
19280           || GET_CODE (XEXP (rtl, 0)) != SYMBOL_REF
19281           || SYMBOL_REF_DECL (XEXP (rtl, 0)) != decl)
19282         rtl = NULL_RTX;
19283     }
19284
19285   return rtl;
19286 }
19287
19288 /* Check whether decl is a Fortran COMMON symbol.  If not, NULL_TREE is
19289    returned.  If so, the decl for the COMMON block is returned, and the
19290    value is the offset into the common block for the symbol.  */
19291
19292 static tree
19293 fortran_common (tree decl, HOST_WIDE_INT *value)
19294 {
19295   tree val_expr, cvar;
19296   machine_mode mode;
19297   poly_int64 bitsize, bitpos;
19298   tree offset;
19299   HOST_WIDE_INT cbitpos;
19300   int unsignedp, reversep, volatilep = 0;
19301
19302   /* If the decl isn't a VAR_DECL, or if it isn't static, or if
19303      it does not have a value (the offset into the common area), or if it
19304      is thread local (as opposed to global) then it isn't common, and shouldn't
19305      be handled as such.  */
19306   if (!VAR_P (decl)
19307       || !TREE_STATIC (decl)
19308       || !DECL_HAS_VALUE_EXPR_P (decl)
19309       || !is_fortran ())
19310     return NULL_TREE;
19311
19312   val_expr = DECL_VALUE_EXPR (decl);
19313   if (TREE_CODE (val_expr) != COMPONENT_REF)
19314     return NULL_TREE;
19315
19316   cvar = get_inner_reference (val_expr, &bitsize, &bitpos, &offset, &mode,
19317                               &unsignedp, &reversep, &volatilep);
19318
19319   if (cvar == NULL_TREE
19320       || !VAR_P (cvar)
19321       || DECL_ARTIFICIAL (cvar)
19322       || !TREE_PUBLIC (cvar)
19323       /* We don't expect to have to cope with variable offsets,
19324          since at present all static data must have a constant size.  */
19325       || !bitpos.is_constant (&cbitpos))
19326     return NULL_TREE;
19327
19328   *value = 0;
19329   if (offset != NULL)
19330     {
19331       if (!tree_fits_shwi_p (offset))
19332         return NULL_TREE;
19333       *value = tree_to_shwi (offset);
19334     }
19335   if (cbitpos != 0)
19336     *value += cbitpos / BITS_PER_UNIT;
19337
19338   return cvar;
19339 }
19340
19341 /* Generate *either* a DW_AT_location attribute or else a DW_AT_const_value
19342    data attribute for a variable or a parameter.  We generate the
19343    DW_AT_const_value attribute only in those cases where the given variable
19344    or parameter does not have a true "location" either in memory or in a
19345    register.  This can happen (for example) when a constant is passed as an
19346    actual argument in a call to an inline function.  (It's possible that
19347    these things can crop up in other ways also.)  Note that one type of
19348    constant value which can be passed into an inlined function is a constant
19349    pointer.  This can happen for example if an actual argument in an inlined
19350    function call evaluates to a compile-time constant address.
19351
19352    CACHE_P is true if it is worth caching the location list for DECL,
19353    so that future calls can reuse it rather than regenerate it from scratch.
19354    This is true for BLOCK_NONLOCALIZED_VARS in inlined subroutines,
19355    since we will need to refer to them each time the function is inlined.  */
19356
19357 static bool
19358 add_location_or_const_value_attribute (dw_die_ref die, tree decl, bool cache_p)
19359 {
19360   rtx rtl;
19361   dw_loc_list_ref list;
19362   var_loc_list *loc_list;
19363   cached_dw_loc_list *cache;
19364
19365   if (early_dwarf)
19366     return false;
19367
19368   if (TREE_CODE (decl) == ERROR_MARK)
19369     return false;
19370
19371   if (get_AT (die, DW_AT_location)
19372       || get_AT (die, DW_AT_const_value))
19373     return true;
19374
19375   gcc_assert (VAR_P (decl) || TREE_CODE (decl) == PARM_DECL
19376               || TREE_CODE (decl) == RESULT_DECL);
19377
19378   /* Try to get some constant RTL for this decl, and use that as the value of
19379      the location.  */
19380
19381   rtl = rtl_for_decl_location (decl);
19382   if (rtl && (CONSTANT_P (rtl) || GET_CODE (rtl) == CONST_STRING)
19383       && add_const_value_attribute (die, rtl))
19384     return true;
19385
19386   /* See if we have single element location list that is equivalent to
19387      a constant value.  That way we are better to use add_const_value_attribute
19388      rather than expanding constant value equivalent.  */
19389   loc_list = lookup_decl_loc (decl);
19390   if (loc_list
19391       && loc_list->first
19392       && loc_list->first->next == NULL
19393       && NOTE_P (loc_list->first->loc)
19394       && NOTE_VAR_LOCATION (loc_list->first->loc)
19395       && NOTE_VAR_LOCATION_LOC (loc_list->first->loc))
19396     {
19397       struct var_loc_node *node;
19398
19399       node = loc_list->first;
19400       rtl = NOTE_VAR_LOCATION_LOC (node->loc);
19401       if (GET_CODE (rtl) == EXPR_LIST)
19402         rtl = XEXP (rtl, 0);
19403       if ((CONSTANT_P (rtl) || GET_CODE (rtl) == CONST_STRING)
19404           && add_const_value_attribute (die, rtl))
19405          return true;
19406     }
19407   /* If this decl is from BLOCK_NONLOCALIZED_VARS, we might need its
19408      list several times.  See if we've already cached the contents.  */
19409   list = NULL;
19410   if (loc_list == NULL || cached_dw_loc_list_table == NULL)
19411     cache_p = false;
19412   if (cache_p)
19413     {
19414       cache = cached_dw_loc_list_table->find_with_hash (decl, DECL_UID (decl));
19415       if (cache)
19416         list = cache->loc_list;
19417     }
19418   if (list == NULL)
19419     {
19420       list = loc_list_from_tree (decl, decl_by_reference_p (decl) ? 0 : 2,
19421                                  NULL);
19422       /* It is usually worth caching this result if the decl is from
19423          BLOCK_NONLOCALIZED_VARS and if the list has at least two elements.  */
19424       if (cache_p && list && list->dw_loc_next)
19425         {
19426           cached_dw_loc_list **slot
19427             = cached_dw_loc_list_table->find_slot_with_hash (decl,
19428                                                              DECL_UID (decl),
19429                                                              INSERT);
19430           cache = ggc_cleared_alloc<cached_dw_loc_list> ();
19431           cache->decl_id = DECL_UID (decl);
19432           cache->loc_list = list;
19433           *slot = cache;
19434         }
19435     }
19436   if (list)
19437     {
19438       add_AT_location_description (die, DW_AT_location, list);
19439       return true;
19440     }
19441   /* None of that worked, so it must not really have a location;
19442      try adding a constant value attribute from the DECL_INITIAL.  */
19443   return tree_add_const_value_attribute_for_decl (die, decl);
19444 }
19445
19446 /* Helper function for tree_add_const_value_attribute.  Natively encode
19447    initializer INIT into an array.  Return true if successful.  */
19448
19449 static bool
19450 native_encode_initializer (tree init, unsigned char *array, int size)
19451 {
19452   tree type;
19453
19454   if (init == NULL_TREE)
19455     return false;
19456
19457   STRIP_NOPS (init);
19458   switch (TREE_CODE (init))
19459     {
19460     case STRING_CST:
19461       type = TREE_TYPE (init);
19462       if (TREE_CODE (type) == ARRAY_TYPE)
19463         {
19464           tree enttype = TREE_TYPE (type);
19465           scalar_int_mode mode;
19466
19467           if (!is_int_mode (TYPE_MODE (enttype), &mode)
19468               || GET_MODE_SIZE (mode) != 1)
19469             return false;
19470           if (int_size_in_bytes (type) != size)
19471             return false;
19472           if (size > TREE_STRING_LENGTH (init))
19473             {
19474               memcpy (array, TREE_STRING_POINTER (init),
19475                       TREE_STRING_LENGTH (init));
19476               memset (array + TREE_STRING_LENGTH (init),
19477                       '\0', size - TREE_STRING_LENGTH (init));
19478             }
19479           else
19480             memcpy (array, TREE_STRING_POINTER (init), size);
19481           return true;
19482         }
19483       return false;
19484     case CONSTRUCTOR:
19485       type = TREE_TYPE (init);
19486       if (int_size_in_bytes (type) != size)
19487         return false;
19488       if (TREE_CODE (type) == ARRAY_TYPE)
19489         {
19490           HOST_WIDE_INT min_index;
19491           unsigned HOST_WIDE_INT cnt;
19492           int curpos = 0, fieldsize;
19493           constructor_elt *ce;
19494
19495           if (TYPE_DOMAIN (type) == NULL_TREE
19496               || !tree_fits_shwi_p (TYPE_MIN_VALUE (TYPE_DOMAIN (type))))
19497             return false;
19498
19499           fieldsize = int_size_in_bytes (TREE_TYPE (type));
19500           if (fieldsize <= 0)
19501             return false;
19502
19503           min_index = tree_to_shwi (TYPE_MIN_VALUE (TYPE_DOMAIN (type)));
19504           memset (array, '\0', size);
19505           FOR_EACH_VEC_SAFE_ELT (CONSTRUCTOR_ELTS (init), cnt, ce)
19506             {
19507               tree val = ce->value;
19508               tree index = ce->index;
19509               int pos = curpos;
19510               if (index && TREE_CODE (index) == RANGE_EXPR)
19511                 pos = (tree_to_shwi (TREE_OPERAND (index, 0)) - min_index)
19512                       * fieldsize;
19513               else if (index)
19514                 pos = (tree_to_shwi (index) - min_index) * fieldsize;
19515
19516               if (val)
19517                 {
19518                   STRIP_NOPS (val);
19519                   if (!native_encode_initializer (val, array + pos, fieldsize))
19520                     return false;
19521                 }
19522               curpos = pos + fieldsize;
19523               if (index && TREE_CODE (index) == RANGE_EXPR)
19524                 {
19525                   int count = tree_to_shwi (TREE_OPERAND (index, 1))
19526                               - tree_to_shwi (TREE_OPERAND (index, 0));
19527                   while (count-- > 0)
19528                     {
19529                       if (val)
19530                         memcpy (array + curpos, array + pos, fieldsize);
19531                       curpos += fieldsize;
19532                     }
19533                 }
19534               gcc_assert (curpos <= size);
19535             }
19536           return true;
19537         }
19538       else if (TREE_CODE (type) == RECORD_TYPE
19539                || TREE_CODE (type) == UNION_TYPE)
19540         {
19541           tree field = NULL_TREE;
19542           unsigned HOST_WIDE_INT cnt;
19543           constructor_elt *ce;
19544
19545           if (int_size_in_bytes (type) != size)
19546             return false;
19547
19548           if (TREE_CODE (type) == RECORD_TYPE)
19549             field = TYPE_FIELDS (type);
19550
19551           FOR_EACH_VEC_SAFE_ELT (CONSTRUCTOR_ELTS (init), cnt, ce)
19552             {
19553               tree val = ce->value;
19554               int pos, fieldsize;
19555
19556               if (ce->index != 0)
19557                 field = ce->index;
19558
19559               if (val)
19560                 STRIP_NOPS (val);
19561
19562               if (field == NULL_TREE || DECL_BIT_FIELD (field))
19563                 return false;
19564
19565               if (TREE_CODE (TREE_TYPE (field)) == ARRAY_TYPE
19566                   && TYPE_DOMAIN (TREE_TYPE (field))
19567                   && ! TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (field))))
19568                 return false;
19569               else if (DECL_SIZE_UNIT (field) == NULL_TREE
19570                        || !tree_fits_shwi_p (DECL_SIZE_UNIT (field)))
19571                 return false;
19572               fieldsize = tree_to_shwi (DECL_SIZE_UNIT (field));
19573               pos = int_byte_position (field);
19574               gcc_assert (pos + fieldsize <= size);
19575               if (val && fieldsize != 0
19576                   && !native_encode_initializer (val, array + pos, fieldsize))
19577                 return false;
19578             }
19579           return true;
19580         }
19581       return false;
19582     case VIEW_CONVERT_EXPR:
19583     case NON_LVALUE_EXPR:
19584       return native_encode_initializer (TREE_OPERAND (init, 0), array, size);
19585     default:
19586       return native_encode_expr (init, array, size) == size;
19587     }
19588 }
19589
19590 /* Attach a DW_AT_const_value attribute to DIE. The value of the
19591    attribute is the const value T.  */
19592
19593 static bool
19594 tree_add_const_value_attribute (dw_die_ref die, tree t)
19595 {
19596   tree init;
19597   tree type = TREE_TYPE (t);
19598   rtx rtl;
19599
19600   if (!t || !TREE_TYPE (t) || TREE_TYPE (t) == error_mark_node)
19601     return false;
19602
19603   init = t;
19604   gcc_assert (!DECL_P (init));
19605
19606   if (TREE_CODE (init) == INTEGER_CST)
19607     {
19608       if (tree_fits_uhwi_p (init))
19609         {
19610           add_AT_unsigned (die, DW_AT_const_value, tree_to_uhwi (init));
19611           return true;
19612         }
19613       if (tree_fits_shwi_p (init))
19614         {
19615           add_AT_int (die, DW_AT_const_value, tree_to_shwi (init));
19616           return true;
19617         }
19618     }
19619   if (! early_dwarf)
19620     {
19621       rtl = rtl_for_decl_init (init, type);
19622       if (rtl)
19623         return add_const_value_attribute (die, rtl);
19624     }
19625   /* If the host and target are sane, try harder.  */
19626   if (CHAR_BIT == 8 && BITS_PER_UNIT == 8
19627       && initializer_constant_valid_p (init, type))
19628     {
19629       HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (init));
19630       if (size > 0 && (int) size == size)
19631         {
19632           unsigned char *array = ggc_cleared_vec_alloc<unsigned char> (size);
19633
19634           if (native_encode_initializer (init, array, size))
19635             {
19636               add_AT_vec (die, DW_AT_const_value, size, 1, array);
19637               return true;
19638             }
19639           ggc_free (array);
19640         }
19641     }
19642   return false;
19643 }
19644
19645 /* Attach a DW_AT_const_value attribute to VAR_DIE. The value of the
19646    attribute is the const value of T, where T is an integral constant
19647    variable with static storage duration
19648    (so it can't be a PARM_DECL or a RESULT_DECL).  */
19649
19650 static bool
19651 tree_add_const_value_attribute_for_decl (dw_die_ref var_die, tree decl)
19652 {
19653
19654   if (!decl
19655       || (!VAR_P (decl) && TREE_CODE (decl) != CONST_DECL)
19656       || (VAR_P (decl) && !TREE_STATIC (decl)))
19657     return false;
19658
19659   if (TREE_READONLY (decl)
19660       && ! TREE_THIS_VOLATILE (decl)
19661       && DECL_INITIAL (decl))
19662     /* OK */;
19663   else
19664     return false;
19665
19666   /* Don't add DW_AT_const_value if abstract origin already has one.  */
19667   if (get_AT (var_die, DW_AT_const_value))
19668     return false;
19669
19670   return tree_add_const_value_attribute (var_die, DECL_INITIAL (decl));
19671 }
19672
19673 /* Convert the CFI instructions for the current function into a
19674    location list.  This is used for DW_AT_frame_base when we targeting
19675    a dwarf2 consumer that does not support the dwarf3
19676    DW_OP_call_frame_cfa.  OFFSET is a constant to be added to all CFA
19677    expressions.  */
19678
19679 static dw_loc_list_ref
19680 convert_cfa_to_fb_loc_list (HOST_WIDE_INT offset)
19681 {
19682   int ix;
19683   dw_fde_ref fde;
19684   dw_loc_list_ref list, *list_tail;
19685   dw_cfi_ref cfi;
19686   dw_cfa_location last_cfa, next_cfa;
19687   const char *start_label, *last_label, *section;
19688   dw_cfa_location remember;
19689
19690   fde = cfun->fde;
19691   gcc_assert (fde != NULL);
19692
19693   section = secname_for_decl (current_function_decl);
19694   list_tail = &list;
19695   list = NULL;
19696
19697   memset (&next_cfa, 0, sizeof (next_cfa));
19698   next_cfa.reg = INVALID_REGNUM;
19699   remember = next_cfa;
19700
19701   start_label = fde->dw_fde_begin;
19702
19703   /* ??? Bald assumption that the CIE opcode list does not contain
19704      advance opcodes.  */
19705   FOR_EACH_VEC_ELT (*cie_cfi_vec, ix, cfi)
19706     lookup_cfa_1 (cfi, &next_cfa, &remember);
19707
19708   last_cfa = next_cfa;
19709   last_label = start_label;
19710
19711   if (fde->dw_fde_second_begin && fde->dw_fde_switch_cfi_index == 0)
19712     {
19713       /* If the first partition contained no CFI adjustments, the
19714          CIE opcodes apply to the whole first partition.  */
19715       *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset),
19716                                  fde->dw_fde_begin, fde->dw_fde_end, section);
19717       list_tail =&(*list_tail)->dw_loc_next;
19718       start_label = last_label = fde->dw_fde_second_begin;
19719     }
19720
19721   FOR_EACH_VEC_SAFE_ELT (fde->dw_fde_cfi, ix, cfi)
19722     {
19723       switch (cfi->dw_cfi_opc)
19724         {
19725         case DW_CFA_set_loc:
19726         case DW_CFA_advance_loc1:
19727         case DW_CFA_advance_loc2:
19728         case DW_CFA_advance_loc4:
19729           if (!cfa_equal_p (&last_cfa, &next_cfa))
19730             {
19731               *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset),
19732                                          start_label, last_label, section);
19733
19734               list_tail = &(*list_tail)->dw_loc_next;
19735               last_cfa = next_cfa;
19736               start_label = last_label;
19737             }
19738           last_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
19739           break;
19740
19741         case DW_CFA_advance_loc:
19742           /* The encoding is complex enough that we should never emit this.  */
19743           gcc_unreachable ();
19744
19745         default:
19746           lookup_cfa_1 (cfi, &next_cfa, &remember);
19747           break;
19748         }
19749       if (ix + 1 == fde->dw_fde_switch_cfi_index)
19750         {
19751           if (!cfa_equal_p (&last_cfa, &next_cfa))
19752             {
19753               *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset),
19754                                          start_label, last_label, section);
19755
19756               list_tail = &(*list_tail)->dw_loc_next;
19757               last_cfa = next_cfa;
19758               start_label = last_label;
19759             }
19760           *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset),
19761                                      start_label, fde->dw_fde_end, section);
19762           list_tail = &(*list_tail)->dw_loc_next;
19763           start_label = last_label = fde->dw_fde_second_begin;
19764         }
19765     }
19766
19767   if (!cfa_equal_p (&last_cfa, &next_cfa))
19768     {
19769       *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset),
19770                                  start_label, last_label, section);
19771       list_tail = &(*list_tail)->dw_loc_next;
19772       start_label = last_label;
19773     }
19774
19775   *list_tail = new_loc_list (build_cfa_loc (&next_cfa, offset),
19776                              start_label,
19777                              fde->dw_fde_second_begin
19778                              ? fde->dw_fde_second_end : fde->dw_fde_end,
19779                              section);
19780
19781   if (list && list->dw_loc_next)
19782     gen_llsym (list);
19783
19784   return list;
19785 }
19786
19787 /* Compute a displacement from the "steady-state frame pointer" to the
19788    frame base (often the same as the CFA), and store it in
19789    frame_pointer_fb_offset.  OFFSET is added to the displacement
19790    before the latter is negated.  */
19791
19792 static void
19793 compute_frame_pointer_to_fb_displacement (poly_int64 offset)
19794 {
19795   rtx reg, elim;
19796
19797 #ifdef FRAME_POINTER_CFA_OFFSET
19798   reg = frame_pointer_rtx;
19799   offset += FRAME_POINTER_CFA_OFFSET (current_function_decl);
19800 #else
19801   reg = arg_pointer_rtx;
19802   offset += ARG_POINTER_CFA_OFFSET (current_function_decl);
19803 #endif
19804
19805   elim = (ira_use_lra_p
19806           ? lra_eliminate_regs (reg, VOIDmode, NULL_RTX)
19807           : eliminate_regs (reg, VOIDmode, NULL_RTX));
19808   elim = strip_offset_and_add (elim, &offset);
19809
19810   frame_pointer_fb_offset = -offset;
19811
19812   /* ??? AVR doesn't set up valid eliminations when there is no stack frame
19813      in which to eliminate.  This is because it's stack pointer isn't 
19814      directly accessible as a register within the ISA.  To work around
19815      this, assume that while we cannot provide a proper value for
19816      frame_pointer_fb_offset, we won't need one either.  */
19817   frame_pointer_fb_offset_valid
19818     = ((SUPPORTS_STACK_ALIGNMENT
19819         && (elim == hard_frame_pointer_rtx
19820             || elim == stack_pointer_rtx))
19821        || elim == (frame_pointer_needed
19822                    ? hard_frame_pointer_rtx
19823                    : stack_pointer_rtx));
19824 }
19825
19826 /* Generate a DW_AT_name attribute given some string value to be included as
19827    the value of the attribute.  */
19828
19829 static void
19830 add_name_attribute (dw_die_ref die, const char *name_string)
19831 {
19832   if (name_string != NULL && *name_string != 0)
19833     {
19834       if (demangle_name_func)
19835         name_string = (*demangle_name_func) (name_string);
19836
19837       add_AT_string (die, DW_AT_name, name_string);
19838     }
19839 }
19840
19841 /* Retrieve the descriptive type of TYPE, if any, make sure it has a
19842    DIE and attach a DW_AT_GNAT_descriptive_type attribute to the DIE
19843    of TYPE accordingly.
19844
19845    ??? This is a temporary measure until after we're able to generate
19846    regular DWARF for the complex Ada type system.  */
19847
19848 static void 
19849 add_gnat_descriptive_type_attribute (dw_die_ref die, tree type,
19850                                      dw_die_ref context_die)
19851 {
19852   tree dtype;
19853   dw_die_ref dtype_die;
19854
19855   if (!lang_hooks.types.descriptive_type)
19856     return;
19857
19858   dtype = lang_hooks.types.descriptive_type (type);
19859   if (!dtype)
19860     return;
19861
19862   dtype_die = lookup_type_die (dtype);
19863   if (!dtype_die)
19864     {
19865       gen_type_die (dtype, context_die);
19866       dtype_die = lookup_type_die (dtype);
19867       gcc_assert (dtype_die);
19868     }
19869
19870   add_AT_die_ref (die, DW_AT_GNAT_descriptive_type, dtype_die);
19871 }
19872
19873 /* Retrieve the comp_dir string suitable for use with DW_AT_comp_dir.  */
19874
19875 static const char *
19876 comp_dir_string (void)
19877 {
19878   const char *wd;
19879   char *wd1;
19880   static const char *cached_wd = NULL;
19881
19882   if (cached_wd != NULL)
19883     return cached_wd;
19884
19885   wd = get_src_pwd ();
19886   if (wd == NULL)
19887     return NULL;
19888
19889   if (DWARF2_DIR_SHOULD_END_WITH_SEPARATOR)
19890     {
19891       int wdlen;
19892
19893       wdlen = strlen (wd);
19894       wd1 = ggc_vec_alloc<char> (wdlen + 2);
19895       strcpy (wd1, wd);
19896       wd1 [wdlen] = DIR_SEPARATOR;
19897       wd1 [wdlen + 1] = 0;
19898       wd = wd1;
19899     }
19900
19901   cached_wd = remap_debug_filename (wd);
19902   return cached_wd;
19903 }
19904
19905 /* Generate a DW_AT_comp_dir attribute for DIE.  */
19906
19907 static void
19908 add_comp_dir_attribute (dw_die_ref die)
19909 {
19910   const char * wd = comp_dir_string ();
19911   if (wd != NULL)
19912     add_AT_string (die, DW_AT_comp_dir, wd);
19913 }
19914
19915 /* Given a tree node VALUE describing a scalar attribute ATTR (i.e. a bound, a
19916    pointer computation, ...), output a representation for that bound according
19917    to the accepted FORMS (see enum dw_scalar_form) and add it to DIE.  See
19918    loc_list_from_tree for the meaning of CONTEXT.  */
19919
19920 static void
19921 add_scalar_info (dw_die_ref die, enum dwarf_attribute attr, tree value,
19922                  int forms, struct loc_descr_context *context)
19923 {
19924   dw_die_ref context_die, decl_die;
19925   dw_loc_list_ref list;
19926   bool strip_conversions = true;
19927   bool placeholder_seen = false;
19928
19929   while (strip_conversions)
19930     switch (TREE_CODE (value))
19931       {
19932       case ERROR_MARK:
19933       case SAVE_EXPR:
19934         return;
19935
19936       CASE_CONVERT:
19937       case VIEW_CONVERT_EXPR:
19938         value = TREE_OPERAND (value, 0);
19939         break;
19940
19941       default:
19942         strip_conversions = false;
19943         break;
19944       }
19945
19946   /* If possible and permitted, output the attribute as a constant.  */
19947   if ((forms & dw_scalar_form_constant) != 0
19948       && TREE_CODE (value) == INTEGER_CST)
19949     {
19950       unsigned int prec = simple_type_size_in_bits (TREE_TYPE (value));
19951
19952       /* If HOST_WIDE_INT is big enough then represent the bound as
19953          a constant value.  We need to choose a form based on
19954          whether the type is signed or unsigned.  We cannot just
19955          call add_AT_unsigned if the value itself is positive
19956          (add_AT_unsigned might add the unsigned value encoded as
19957          DW_FORM_data[1248]).  Some DWARF consumers will lookup the
19958          bounds type and then sign extend any unsigned values found
19959          for signed types.  This is needed only for
19960          DW_AT_{lower,upper}_bound, since for most other attributes,
19961          consumers will treat DW_FORM_data[1248] as unsigned values,
19962          regardless of the underlying type.  */
19963       if (prec <= HOST_BITS_PER_WIDE_INT
19964           || tree_fits_uhwi_p (value))
19965         {
19966           if (TYPE_UNSIGNED (TREE_TYPE (value)))
19967             add_AT_unsigned (die, attr, TREE_INT_CST_LOW (value));
19968           else
19969             add_AT_int (die, attr, TREE_INT_CST_LOW (value));
19970         }
19971       else
19972         /* Otherwise represent the bound as an unsigned value with
19973            the precision of its type.  The precision and signedness
19974            of the type will be necessary to re-interpret it
19975            unambiguously.  */
19976         add_AT_wide (die, attr, wi::to_wide (value));
19977       return;
19978     }
19979
19980   /* Otherwise, if it's possible and permitted too, output a reference to
19981      another DIE.  */
19982   if ((forms & dw_scalar_form_reference) != 0)
19983     {
19984       tree decl = NULL_TREE;
19985
19986       /* Some type attributes reference an outer type.  For instance, the upper
19987          bound of an array may reference an embedding record (this happens in
19988          Ada).  */
19989       if (TREE_CODE (value) == COMPONENT_REF
19990           && TREE_CODE (TREE_OPERAND (value, 0)) == PLACEHOLDER_EXPR
19991           && TREE_CODE (TREE_OPERAND (value, 1)) == FIELD_DECL)
19992         decl = TREE_OPERAND (value, 1);
19993
19994       else if (VAR_P (value)
19995                || TREE_CODE (value) == PARM_DECL
19996                || TREE_CODE (value) == RESULT_DECL)
19997         decl = value;
19998
19999       if (decl != NULL_TREE)
20000         {
20001           dw_die_ref decl_die = lookup_decl_die (decl);
20002
20003           /* ??? Can this happen, or should the variable have been bound
20004              first?  Probably it can, since I imagine that we try to create
20005              the types of parameters in the order in which they exist in
20006              the list, and won't have created a forward reference to a
20007              later parameter.  */
20008           if (decl_die != NULL)
20009             {
20010               add_AT_die_ref (die, attr, decl_die);
20011               return;
20012             }
20013         }
20014     }
20015
20016   /* Last chance: try to create a stack operation procedure to evaluate the
20017      value.  Do nothing if even that is not possible or permitted.  */
20018   if ((forms & dw_scalar_form_exprloc) == 0)
20019     return;
20020
20021   list = loc_list_from_tree (value, 2, context);
20022   if (context && context->placeholder_arg)
20023     {
20024       placeholder_seen = context->placeholder_seen;
20025       context->placeholder_seen = false;
20026     }
20027   if (list == NULL || single_element_loc_list_p (list))
20028     {
20029       /* If this attribute is not a reference nor constant, it is
20030          a DWARF expression rather than location description.  For that
20031          loc_list_from_tree (value, 0, &context) is needed.  */
20032       dw_loc_list_ref list2 = loc_list_from_tree (value, 0, context);
20033       if (list2 && single_element_loc_list_p (list2))
20034         {
20035           if (placeholder_seen)
20036             {
20037               struct dwarf_procedure_info dpi;
20038               dpi.fndecl = NULL_TREE;
20039               dpi.args_count = 1;
20040               if (!resolve_args_picking (list2->expr, 1, &dpi))
20041                 return;
20042             }
20043           add_AT_loc (die, attr, list2->expr);
20044           return;
20045         }
20046     }
20047
20048   /* If that failed to give a single element location list, fall back to
20049      outputting this as a reference... still if permitted.  */
20050   if (list == NULL
20051       || (forms & dw_scalar_form_reference) == 0
20052       || placeholder_seen)
20053     return;
20054
20055   if (current_function_decl == 0)
20056     context_die = comp_unit_die ();
20057   else
20058     context_die = lookup_decl_die (current_function_decl);
20059
20060   decl_die = new_die (DW_TAG_variable, context_die, value);
20061   add_AT_flag (decl_die, DW_AT_artificial, 1);
20062   add_type_attribute (decl_die, TREE_TYPE (value), TYPE_QUAL_CONST, false,
20063                       context_die);
20064   add_AT_location_description (decl_die, DW_AT_location, list);
20065   add_AT_die_ref (die, attr, decl_die);
20066 }
20067
20068 /* Return the default for DW_AT_lower_bound, or -1 if there is not any
20069    default.  */
20070
20071 static int
20072 lower_bound_default (void)
20073 {
20074   switch (get_AT_unsigned (comp_unit_die (), DW_AT_language))
20075     {
20076     case DW_LANG_C:
20077     case DW_LANG_C89:
20078     case DW_LANG_C99:
20079     case DW_LANG_C11:
20080     case DW_LANG_C_plus_plus:
20081     case DW_LANG_C_plus_plus_11:
20082     case DW_LANG_C_plus_plus_14:
20083     case DW_LANG_ObjC:
20084     case DW_LANG_ObjC_plus_plus:
20085       return 0;
20086     case DW_LANG_Fortran77:
20087     case DW_LANG_Fortran90:
20088     case DW_LANG_Fortran95:
20089     case DW_LANG_Fortran03:
20090     case DW_LANG_Fortran08:
20091       return 1;
20092     case DW_LANG_UPC:
20093     case DW_LANG_D:
20094     case DW_LANG_Python:
20095       return dwarf_version >= 4 ? 0 : -1;
20096     case DW_LANG_Ada95:
20097     case DW_LANG_Ada83:
20098     case DW_LANG_Cobol74:
20099     case DW_LANG_Cobol85:
20100     case DW_LANG_Modula2:
20101     case DW_LANG_PLI:
20102       return dwarf_version >= 4 ? 1 : -1;
20103     default:
20104       return -1;
20105     }
20106 }
20107
20108 /* Given a tree node describing an array bound (either lower or upper) output
20109    a representation for that bound.  */
20110
20111 static void
20112 add_bound_info (dw_die_ref subrange_die, enum dwarf_attribute bound_attr,
20113                 tree bound, struct loc_descr_context *context)
20114 {
20115   int dflt;
20116
20117   while (1)
20118     switch (TREE_CODE (bound))
20119       {
20120       /* Strip all conversions.  */
20121       CASE_CONVERT:
20122       case VIEW_CONVERT_EXPR:
20123         bound = TREE_OPERAND (bound, 0);
20124         break;
20125
20126       /* All fixed-bounds are represented by INTEGER_CST nodes.  Lower bounds
20127          are even omitted when they are the default.  */
20128       case INTEGER_CST:
20129         /* If the value for this bound is the default one, we can even omit the
20130            attribute.  */
20131         if (bound_attr == DW_AT_lower_bound
20132             && tree_fits_shwi_p (bound)
20133             && (dflt = lower_bound_default ()) != -1
20134             && tree_to_shwi (bound) == dflt)
20135           return;
20136
20137         /* FALLTHRU */
20138
20139       default:
20140         /* Because of the complex interaction there can be with other GNAT
20141            encodings, GDB isn't ready yet to handle proper DWARF description
20142            for self-referencial subrange bounds: let GNAT encodings do the
20143            magic in such a case.  */
20144         if (is_ada ()
20145             && gnat_encodings != DWARF_GNAT_ENCODINGS_MINIMAL
20146             && contains_placeholder_p (bound))
20147           return;
20148
20149         add_scalar_info (subrange_die, bound_attr, bound,
20150                          dw_scalar_form_constant
20151                          | dw_scalar_form_exprloc
20152                          | dw_scalar_form_reference,
20153                          context);
20154         return;
20155       }
20156 }
20157
20158 /* Add subscript info to TYPE_DIE, describing an array TYPE, collapsing
20159    possibly nested array subscripts in a flat sequence if COLLAPSE_P is true.
20160    Note that the block of subscript information for an array type also
20161    includes information about the element type of the given array type.
20162
20163    This function reuses previously set type and bound information if
20164    available.  */
20165
20166 static void
20167 add_subscript_info (dw_die_ref type_die, tree type, bool collapse_p)
20168 {
20169   unsigned dimension_number;
20170   tree lower, upper;
20171   dw_die_ref child = type_die->die_child;
20172
20173   for (dimension_number = 0;
20174        TREE_CODE (type) == ARRAY_TYPE && (dimension_number == 0 || collapse_p);
20175        type = TREE_TYPE (type), dimension_number++)
20176     {
20177       tree domain = TYPE_DOMAIN (type);
20178
20179       if (TYPE_STRING_FLAG (type) && is_fortran () && dimension_number > 0)
20180         break;
20181
20182       /* Arrays come in three flavors: Unspecified bounds, fixed bounds,
20183          and (in GNU C only) variable bounds.  Handle all three forms
20184          here.  */
20185
20186       /* Find and reuse a previously generated DW_TAG_subrange_type if
20187          available.
20188
20189          For multi-dimensional arrays, as we iterate through the
20190          various dimensions in the enclosing for loop above, we also
20191          iterate through the DIE children and pick at each
20192          DW_TAG_subrange_type previously generated (if available).
20193          Each child DW_TAG_subrange_type DIE describes the range of
20194          the current dimension.  At this point we should have as many
20195          DW_TAG_subrange_type's as we have dimensions in the
20196          array.  */
20197       dw_die_ref subrange_die = NULL;
20198       if (child)
20199         while (1)
20200           {
20201             child = child->die_sib;
20202             if (child->die_tag == DW_TAG_subrange_type)
20203               subrange_die = child;
20204             if (child == type_die->die_child)
20205               {
20206                 /* If we wrapped around, stop looking next time.  */
20207                 child = NULL;
20208                 break;
20209               }
20210             if (child->die_tag == DW_TAG_subrange_type)
20211               break;
20212           }
20213       if (!subrange_die)
20214         subrange_die = new_die (DW_TAG_subrange_type, type_die, NULL);
20215
20216       if (domain)
20217         {
20218           /* We have an array type with specified bounds.  */
20219           lower = TYPE_MIN_VALUE (domain);
20220           upper = TYPE_MAX_VALUE (domain);
20221
20222           /* Define the index type.  */
20223           if (TREE_TYPE (domain)
20224               && !get_AT (subrange_die, DW_AT_type))
20225             {
20226               /* ??? This is probably an Ada unnamed subrange type.  Ignore the
20227                  TREE_TYPE field.  We can't emit debug info for this
20228                  because it is an unnamed integral type.  */
20229               if (TREE_CODE (domain) == INTEGER_TYPE
20230                   && TYPE_NAME (domain) == NULL_TREE
20231                   && TREE_CODE (TREE_TYPE (domain)) == INTEGER_TYPE
20232                   && TYPE_NAME (TREE_TYPE (domain)) == NULL_TREE)
20233                 ;
20234               else
20235                 add_type_attribute (subrange_die, TREE_TYPE (domain),
20236                                     TYPE_UNQUALIFIED, false, type_die);
20237             }
20238
20239           /* ??? If upper is NULL, the array has unspecified length,
20240              but it does have a lower bound.  This happens with Fortran
20241                dimension arr(N:*)
20242              Since the debugger is definitely going to need to know N
20243              to produce useful results, go ahead and output the lower
20244              bound solo, and hope the debugger can cope.  */
20245
20246           if (!get_AT (subrange_die, DW_AT_lower_bound))
20247             add_bound_info (subrange_die, DW_AT_lower_bound, lower, NULL);
20248           if (upper && !get_AT (subrange_die, DW_AT_upper_bound))
20249             add_bound_info (subrange_die, DW_AT_upper_bound, upper, NULL);
20250         }
20251
20252       /* Otherwise we have an array type with an unspecified length.  The
20253          DWARF-2 spec does not say how to handle this; let's just leave out the
20254          bounds.  */
20255     }
20256 }
20257
20258 /* Add a DW_AT_byte_size attribute to DIE with TREE_NODE's size.  */
20259
20260 static void
20261 add_byte_size_attribute (dw_die_ref die, tree tree_node)
20262 {
20263   dw_die_ref decl_die;
20264   HOST_WIDE_INT size;
20265   dw_loc_descr_ref size_expr = NULL;
20266
20267   switch (TREE_CODE (tree_node))
20268     {
20269     case ERROR_MARK:
20270       size = 0;
20271       break;
20272     case ENUMERAL_TYPE:
20273     case RECORD_TYPE:
20274     case UNION_TYPE:
20275     case QUAL_UNION_TYPE:
20276       if (TREE_CODE (TYPE_SIZE_UNIT (tree_node)) == VAR_DECL
20277           && (decl_die = lookup_decl_die (TYPE_SIZE_UNIT (tree_node))))
20278         {
20279           add_AT_die_ref (die, DW_AT_byte_size, decl_die);
20280           return;
20281         }
20282       size_expr = type_byte_size (tree_node, &size);
20283       break;
20284     case FIELD_DECL:
20285       /* For a data member of a struct or union, the DW_AT_byte_size is
20286          generally given as the number of bytes normally allocated for an
20287          object of the *declared* type of the member itself.  This is true
20288          even for bit-fields.  */
20289       size = int_size_in_bytes (field_type (tree_node));
20290       break;
20291     default:
20292       gcc_unreachable ();
20293     }
20294
20295   /* Support for dynamically-sized objects was introduced by DWARFv3.
20296      At the moment, GDB does not handle variable byte sizes very well,
20297      though.  */
20298   if ((dwarf_version >= 3 || !dwarf_strict)
20299       && gnat_encodings == DWARF_GNAT_ENCODINGS_MINIMAL
20300       && size_expr != NULL)
20301     add_AT_loc (die, DW_AT_byte_size, size_expr);
20302
20303   /* Note that `size' might be -1 when we get to this point.  If it is, that
20304      indicates that the byte size of the entity in question is variable and
20305      that we could not generate a DWARF expression that computes it.  */
20306   if (size >= 0)
20307     add_AT_unsigned (die, DW_AT_byte_size, size);
20308 }
20309
20310 /* Add a DW_AT_alignment attribute to DIE with TREE_NODE's non-default
20311    alignment.  */
20312
20313 static void
20314 add_alignment_attribute (dw_die_ref die, tree tree_node)
20315 {
20316   if (dwarf_version < 5 && dwarf_strict)
20317     return;
20318
20319   unsigned align;
20320
20321   if (DECL_P (tree_node))
20322     {
20323       if (!DECL_USER_ALIGN (tree_node))
20324         return;
20325
20326       align = DECL_ALIGN_UNIT (tree_node);
20327     }
20328   else if (TYPE_P (tree_node))
20329     {
20330       if (!TYPE_USER_ALIGN (tree_node))
20331         return;
20332
20333       align = TYPE_ALIGN_UNIT (tree_node);
20334     }
20335   else
20336     gcc_unreachable ();
20337
20338   add_AT_unsigned (die, DW_AT_alignment, align);
20339 }
20340
20341 /* For a FIELD_DECL node which represents a bit-field, output an attribute
20342    which specifies the distance in bits from the highest order bit of the
20343    "containing object" for the bit-field to the highest order bit of the
20344    bit-field itself.
20345
20346    For any given bit-field, the "containing object" is a hypothetical object
20347    (of some integral or enum type) within which the given bit-field lives.  The
20348    type of this hypothetical "containing object" is always the same as the
20349    declared type of the individual bit-field itself.  The determination of the
20350    exact location of the "containing object" for a bit-field is rather
20351    complicated.  It's handled by the `field_byte_offset' function (above).
20352
20353    CTX is required: see the comment for VLR_CONTEXT.
20354
20355    Note that it is the size (in bytes) of the hypothetical "containing object"
20356    which will be given in the DW_AT_byte_size attribute for this bit-field.
20357    (See `byte_size_attribute' above).  */
20358
20359 static inline void
20360 add_bit_offset_attribute (dw_die_ref die, tree decl, struct vlr_context *ctx)
20361 {
20362   HOST_WIDE_INT object_offset_in_bytes;
20363   tree original_type = DECL_BIT_FIELD_TYPE (decl);
20364   HOST_WIDE_INT bitpos_int;
20365   HOST_WIDE_INT highest_order_object_bit_offset;
20366   HOST_WIDE_INT highest_order_field_bit_offset;
20367   HOST_WIDE_INT bit_offset;
20368
20369   field_byte_offset (decl, ctx, &object_offset_in_bytes);
20370
20371   /* Must be a field and a bit field.  */
20372   gcc_assert (original_type && TREE_CODE (decl) == FIELD_DECL);
20373
20374   /* We can't yet handle bit-fields whose offsets are variable, so if we
20375      encounter such things, just return without generating any attribute
20376      whatsoever.  Likewise for variable or too large size.  */
20377   if (! tree_fits_shwi_p (bit_position (decl))
20378       || ! tree_fits_uhwi_p (DECL_SIZE (decl)))
20379     return;
20380
20381   bitpos_int = int_bit_position (decl);
20382
20383   /* Note that the bit offset is always the distance (in bits) from the
20384      highest-order bit of the "containing object" to the highest-order bit of
20385      the bit-field itself.  Since the "high-order end" of any object or field
20386      is different on big-endian and little-endian machines, the computation
20387      below must take account of these differences.  */
20388   highest_order_object_bit_offset = object_offset_in_bytes * BITS_PER_UNIT;
20389   highest_order_field_bit_offset = bitpos_int;
20390
20391   if (! BYTES_BIG_ENDIAN)
20392     {
20393       highest_order_field_bit_offset += tree_to_shwi (DECL_SIZE (decl));
20394       highest_order_object_bit_offset +=
20395         simple_type_size_in_bits (original_type);
20396     }
20397
20398   bit_offset
20399     = (! BYTES_BIG_ENDIAN
20400        ? highest_order_object_bit_offset - highest_order_field_bit_offset
20401        : highest_order_field_bit_offset - highest_order_object_bit_offset);
20402
20403   if (bit_offset < 0)
20404     add_AT_int (die, DW_AT_bit_offset, bit_offset);
20405   else
20406     add_AT_unsigned (die, DW_AT_bit_offset, (unsigned HOST_WIDE_INT) bit_offset);
20407 }
20408
20409 /* For a FIELD_DECL node which represents a bit field, output an attribute
20410    which specifies the length in bits of the given field.  */
20411
20412 static inline void
20413 add_bit_size_attribute (dw_die_ref die, tree decl)
20414 {
20415   /* Must be a field and a bit field.  */
20416   gcc_assert (TREE_CODE (decl) == FIELD_DECL
20417               && DECL_BIT_FIELD_TYPE (decl));
20418
20419   if (tree_fits_uhwi_p (DECL_SIZE (decl)))
20420     add_AT_unsigned (die, DW_AT_bit_size, tree_to_uhwi (DECL_SIZE (decl)));
20421 }
20422
20423 /* If the compiled language is ANSI C, then add a 'prototyped'
20424    attribute, if arg types are given for the parameters of a function.  */
20425
20426 static inline void
20427 add_prototyped_attribute (dw_die_ref die, tree func_type)
20428 {
20429   switch (get_AT_unsigned (comp_unit_die (), DW_AT_language))
20430     {
20431     case DW_LANG_C:
20432     case DW_LANG_C89:
20433     case DW_LANG_C99:
20434     case DW_LANG_C11:
20435     case DW_LANG_ObjC:
20436       if (prototype_p (func_type))
20437         add_AT_flag (die, DW_AT_prototyped, 1);
20438       break;
20439     default:
20440       break;
20441     }
20442 }
20443
20444 /* Add an 'abstract_origin' attribute below a given DIE.  The DIE is found
20445    by looking in the type declaration, the object declaration equate table or
20446    the block mapping.  */
20447
20448 static inline dw_die_ref
20449 add_abstract_origin_attribute (dw_die_ref die, tree origin)
20450 {
20451   dw_die_ref origin_die = NULL;
20452
20453   if (DECL_P (origin))
20454     {
20455       dw_die_ref c;
20456       origin_die = lookup_decl_die (origin);
20457       /* "Unwrap" the decls DIE which we put in the imported unit context.
20458          We are looking for the abstract copy here.  */
20459       if (in_lto_p
20460           && origin_die
20461           && (c = get_AT_ref (origin_die, DW_AT_abstract_origin))
20462           /* ???  Identify this better.  */
20463           && c->with_offset)
20464         origin_die = c;
20465     }
20466   else if (TYPE_P (origin))
20467     origin_die = lookup_type_die (origin);
20468   else if (TREE_CODE (origin) == BLOCK)
20469     origin_die = BLOCK_DIE (origin);
20470
20471   /* XXX: Functions that are never lowered don't always have correct block
20472      trees (in the case of java, they simply have no block tree, in some other
20473      languages).  For these functions, there is nothing we can really do to
20474      output correct debug info for inlined functions in all cases.  Rather
20475      than die, we'll just produce deficient debug info now, in that we will
20476      have variables without a proper abstract origin.  In the future, when all
20477      functions are lowered, we should re-add a gcc_assert (origin_die)
20478      here.  */
20479
20480   if (origin_die)
20481     add_AT_die_ref (die, DW_AT_abstract_origin, origin_die);
20482   return origin_die;
20483 }
20484
20485 /* We do not currently support the pure_virtual attribute.  */
20486
20487 static inline void
20488 add_pure_or_virtual_attribute (dw_die_ref die, tree func_decl)
20489 {
20490   if (DECL_VINDEX (func_decl))
20491     {
20492       add_AT_unsigned (die, DW_AT_virtuality, DW_VIRTUALITY_virtual);
20493
20494       if (tree_fits_shwi_p (DECL_VINDEX (func_decl)))
20495         add_AT_loc (die, DW_AT_vtable_elem_location,
20496                     new_loc_descr (DW_OP_constu,
20497                                    tree_to_shwi (DECL_VINDEX (func_decl)),
20498                                    0));
20499
20500       /* GNU extension: Record what type this method came from originally.  */
20501       if (debug_info_level > DINFO_LEVEL_TERSE
20502           && DECL_CONTEXT (func_decl))
20503         add_AT_die_ref (die, DW_AT_containing_type,
20504                         lookup_type_die (DECL_CONTEXT (func_decl)));
20505     }
20506 }
20507 \f
20508 /* Add a DW_AT_linkage_name or DW_AT_MIPS_linkage_name attribute for the
20509    given decl.  This used to be a vendor extension until after DWARF 4
20510    standardized it.  */
20511
20512 static void
20513 add_linkage_attr (dw_die_ref die, tree decl)
20514 {
20515   const char *name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
20516
20517   /* Mimic what assemble_name_raw does with a leading '*'.  */
20518   if (name[0] == '*')
20519     name = &name[1];
20520
20521   if (dwarf_version >= 4)
20522     add_AT_string (die, DW_AT_linkage_name, name);
20523   else
20524     add_AT_string (die, DW_AT_MIPS_linkage_name, name);
20525 }
20526
20527 /* Add source coordinate attributes for the given decl.  */
20528
20529 static void
20530 add_src_coords_attributes (dw_die_ref die, tree decl)
20531 {
20532   expanded_location s;
20533
20534   if (LOCATION_LOCUS (DECL_SOURCE_LOCATION (decl)) == UNKNOWN_LOCATION)
20535     return;
20536   s = expand_location (DECL_SOURCE_LOCATION (decl));
20537   add_AT_file (die, DW_AT_decl_file, lookup_filename (s.file));
20538   add_AT_unsigned (die, DW_AT_decl_line, s.line);
20539   if (debug_column_info && s.column)
20540     add_AT_unsigned (die, DW_AT_decl_column, s.column);
20541 }
20542
20543 /* Add DW_AT_{,MIPS_}linkage_name attribute for the given decl.  */
20544
20545 static void
20546 add_linkage_name_raw (dw_die_ref die, tree decl)
20547 {
20548   /* Defer until we have an assembler name set.  */
20549   if (!DECL_ASSEMBLER_NAME_SET_P (decl))
20550     {
20551       limbo_die_node *asm_name;
20552
20553       asm_name = ggc_cleared_alloc<limbo_die_node> ();
20554       asm_name->die = die;
20555       asm_name->created_for = decl;
20556       asm_name->next = deferred_asm_name;
20557       deferred_asm_name = asm_name;
20558     }
20559   else if (DECL_ASSEMBLER_NAME (decl) != DECL_NAME (decl))
20560     add_linkage_attr (die, decl);
20561 }
20562
20563 /* Add DW_AT_{,MIPS_}linkage_name attribute for the given decl if desired.  */
20564
20565 static void
20566 add_linkage_name (dw_die_ref die, tree decl)
20567 {
20568   if (debug_info_level > DINFO_LEVEL_NONE
20569       && VAR_OR_FUNCTION_DECL_P (decl)
20570       && TREE_PUBLIC (decl)
20571       && !(VAR_P (decl) && DECL_REGISTER (decl))
20572       && die->die_tag != DW_TAG_member)
20573     add_linkage_name_raw (die, decl);
20574 }
20575
20576 /* Add a DW_AT_name attribute and source coordinate attribute for the
20577    given decl, but only if it actually has a name.  */
20578
20579 static void
20580 add_name_and_src_coords_attributes (dw_die_ref die, tree decl,
20581                                     bool no_linkage_name)
20582 {
20583   tree decl_name;
20584
20585   decl_name = DECL_NAME (decl);
20586   if (decl_name != NULL && IDENTIFIER_POINTER (decl_name) != NULL)
20587     {
20588       const char *name = dwarf2_name (decl, 0);
20589       if (name)
20590         add_name_attribute (die, name);
20591       if (! DECL_ARTIFICIAL (decl))
20592         add_src_coords_attributes (die, decl);
20593
20594       if (!no_linkage_name)
20595         add_linkage_name (die, decl);
20596     }
20597
20598 #ifdef VMS_DEBUGGING_INFO
20599   /* Get the function's name, as described by its RTL.  This may be different
20600      from the DECL_NAME name used in the source file.  */
20601   if (TREE_CODE (decl) == FUNCTION_DECL && TREE_ASM_WRITTEN (decl))
20602     {
20603       add_AT_addr (die, DW_AT_VMS_rtnbeg_pd_address,
20604                   XEXP (DECL_RTL (decl), 0), false);
20605       vec_safe_push (used_rtx_array, XEXP (DECL_RTL (decl), 0));
20606     }
20607 #endif /* VMS_DEBUGGING_INFO */
20608 }
20609
20610 /* Add VALUE as a DW_AT_discr_value attribute to DIE.  */
20611
20612 static void
20613 add_discr_value (dw_die_ref die, dw_discr_value *value)
20614 {
20615   dw_attr_node attr;
20616
20617   attr.dw_attr = DW_AT_discr_value;
20618   attr.dw_attr_val.val_class = dw_val_class_discr_value;
20619   attr.dw_attr_val.val_entry = NULL;
20620   attr.dw_attr_val.v.val_discr_value.pos = value->pos;
20621   if (value->pos)
20622     attr.dw_attr_val.v.val_discr_value.v.uval = value->v.uval;
20623   else
20624     attr.dw_attr_val.v.val_discr_value.v.sval = value->v.sval;
20625   add_dwarf_attr (die, &attr);
20626 }
20627
20628 /* Add DISCR_LIST as a DW_AT_discr_list to DIE.  */
20629
20630 static void
20631 add_discr_list (dw_die_ref die, dw_discr_list_ref discr_list)
20632 {
20633   dw_attr_node attr;
20634
20635   attr.dw_attr = DW_AT_discr_list;
20636   attr.dw_attr_val.val_class = dw_val_class_discr_list;
20637   attr.dw_attr_val.val_entry = NULL;
20638   attr.dw_attr_val.v.val_discr_list = discr_list;
20639   add_dwarf_attr (die, &attr);
20640 }
20641
20642 static inline dw_discr_list_ref
20643 AT_discr_list (dw_attr_node *attr)
20644 {
20645   return attr->dw_attr_val.v.val_discr_list;
20646 }
20647
20648 #ifdef VMS_DEBUGGING_INFO
20649 /* Output the debug main pointer die for VMS */
20650
20651 void
20652 dwarf2out_vms_debug_main_pointer (void)
20653 {
20654   char label[MAX_ARTIFICIAL_LABEL_BYTES];
20655   dw_die_ref die;
20656
20657   /* Allocate the VMS debug main subprogram die.  */
20658   die = new_die_raw (DW_TAG_subprogram);
20659   add_name_attribute (die, VMS_DEBUG_MAIN_POINTER);
20660   ASM_GENERATE_INTERNAL_LABEL (label, PROLOGUE_END_LABEL,
20661                                current_function_funcdef_no);
20662   add_AT_lbl_id (die, DW_AT_entry_pc, label);
20663
20664   /* Make it the first child of comp_unit_die ().  */
20665   die->die_parent = comp_unit_die ();
20666   if (comp_unit_die ()->die_child)
20667     {
20668       die->die_sib = comp_unit_die ()->die_child->die_sib;
20669       comp_unit_die ()->die_child->die_sib = die;
20670     }
20671   else
20672     {
20673       die->die_sib = die;
20674       comp_unit_die ()->die_child = die;
20675     }
20676 }
20677 #endif /* VMS_DEBUGGING_INFO */
20678
20679 /* Push a new declaration scope.  */
20680
20681 static void
20682 push_decl_scope (tree scope)
20683 {
20684   vec_safe_push (decl_scope_table, scope);
20685 }
20686
20687 /* Pop a declaration scope.  */
20688
20689 static inline void
20690 pop_decl_scope (void)
20691 {
20692   decl_scope_table->pop ();
20693 }
20694
20695 /* walk_tree helper function for uses_local_type, below.  */
20696
20697 static tree
20698 uses_local_type_r (tree *tp, int *walk_subtrees, void *data ATTRIBUTE_UNUSED)
20699 {
20700   if (!TYPE_P (*tp))
20701     *walk_subtrees = 0;
20702   else
20703     {
20704       tree name = TYPE_NAME (*tp);
20705       if (name && DECL_P (name) && decl_function_context (name))
20706         return *tp;
20707     }
20708   return NULL_TREE;
20709 }
20710
20711 /* If TYPE involves a function-local type (including a local typedef to a
20712    non-local type), returns that type; otherwise returns NULL_TREE.  */
20713
20714 static tree
20715 uses_local_type (tree type)
20716 {
20717   tree used = walk_tree_without_duplicates (&type, uses_local_type_r, NULL);
20718   return used;
20719 }
20720
20721 /* Return the DIE for the scope that immediately contains this type.
20722    Non-named types that do not involve a function-local type get global
20723    scope.  Named types nested in namespaces or other types get their
20724    containing scope.  All other types (i.e. function-local named types) get
20725    the current active scope.  */
20726
20727 static dw_die_ref
20728 scope_die_for (tree t, dw_die_ref context_die)
20729 {
20730   dw_die_ref scope_die = NULL;
20731   tree containing_scope;
20732
20733   /* Non-types always go in the current scope.  */
20734   gcc_assert (TYPE_P (t));
20735
20736   /* Use the scope of the typedef, rather than the scope of the type
20737      it refers to.  */
20738   if (TYPE_NAME (t) && DECL_P (TYPE_NAME (t)))
20739     containing_scope = DECL_CONTEXT (TYPE_NAME (t));
20740   else
20741     containing_scope = TYPE_CONTEXT (t);
20742
20743   /* Use the containing namespace if there is one.  */
20744   if (containing_scope && TREE_CODE (containing_scope) == NAMESPACE_DECL)
20745     {
20746       if (context_die == lookup_decl_die (containing_scope))
20747         /* OK */;
20748       else if (debug_info_level > DINFO_LEVEL_TERSE)
20749         context_die = get_context_die (containing_scope);
20750       else
20751         containing_scope = NULL_TREE;
20752     }
20753
20754   /* Ignore function type "scopes" from the C frontend.  They mean that
20755      a tagged type is local to a parmlist of a function declarator, but
20756      that isn't useful to DWARF.  */
20757   if (containing_scope && TREE_CODE (containing_scope) == FUNCTION_TYPE)
20758     containing_scope = NULL_TREE;
20759
20760   if (SCOPE_FILE_SCOPE_P (containing_scope))
20761     {
20762       /* If T uses a local type keep it local as well, to avoid references
20763          to function-local DIEs from outside the function.  */
20764       if (current_function_decl && uses_local_type (t))
20765         scope_die = context_die;
20766       else
20767         scope_die = comp_unit_die ();
20768     }
20769   else if (TYPE_P (containing_scope))
20770     {
20771       /* For types, we can just look up the appropriate DIE.  */
20772       if (debug_info_level > DINFO_LEVEL_TERSE)
20773         scope_die = get_context_die (containing_scope);
20774       else
20775         {
20776           scope_die = lookup_type_die_strip_naming_typedef (containing_scope);
20777           if (scope_die == NULL)
20778             scope_die = comp_unit_die ();
20779         }
20780     }
20781   else
20782     scope_die = context_die;
20783
20784   return scope_die;
20785 }
20786
20787 /* Returns nonzero if CONTEXT_DIE is internal to a function.  */
20788
20789 static inline int
20790 local_scope_p (dw_die_ref context_die)
20791 {
20792   for (; context_die; context_die = context_die->die_parent)
20793     if (context_die->die_tag == DW_TAG_inlined_subroutine
20794         || context_die->die_tag == DW_TAG_subprogram)
20795       return 1;
20796
20797   return 0;
20798 }
20799
20800 /* Returns nonzero if CONTEXT_DIE is a class.  */
20801
20802 static inline int
20803 class_scope_p (dw_die_ref context_die)
20804 {
20805   return (context_die
20806           && (context_die->die_tag == DW_TAG_structure_type
20807               || context_die->die_tag == DW_TAG_class_type
20808               || context_die->die_tag == DW_TAG_interface_type
20809               || context_die->die_tag == DW_TAG_union_type));
20810 }
20811
20812 /* Returns nonzero if CONTEXT_DIE is a class or namespace, for deciding
20813    whether or not to treat a DIE in this context as a declaration.  */
20814
20815 static inline int
20816 class_or_namespace_scope_p (dw_die_ref context_die)
20817 {
20818   return (class_scope_p (context_die)
20819           || (context_die && context_die->die_tag == DW_TAG_namespace));
20820 }
20821
20822 /* Many forms of DIEs require a "type description" attribute.  This
20823    routine locates the proper "type descriptor" die for the type given
20824    by 'type' plus any additional qualifiers given by 'cv_quals', and
20825    adds a DW_AT_type attribute below the given die.  */
20826
20827 static void
20828 add_type_attribute (dw_die_ref object_die, tree type, int cv_quals,
20829                     bool reverse, dw_die_ref context_die)
20830 {
20831   enum tree_code code  = TREE_CODE (type);
20832   dw_die_ref type_die  = NULL;
20833
20834   /* ??? If this type is an unnamed subrange type of an integral, floating-point
20835      or fixed-point type, use the inner type.  This is because we have no
20836      support for unnamed types in base_type_die.  This can happen if this is
20837      an Ada subrange type.  Correct solution is emit a subrange type die.  */
20838   if ((code == INTEGER_TYPE || code == REAL_TYPE || code == FIXED_POINT_TYPE)
20839       && TREE_TYPE (type) != 0 && TYPE_NAME (type) == 0)
20840     type = TREE_TYPE (type), code = TREE_CODE (type);
20841
20842   if (code == ERROR_MARK
20843       /* Handle a special case.  For functions whose return type is void, we
20844          generate *no* type attribute.  (Note that no object may have type
20845          `void', so this only applies to function return types).  */
20846       || code == VOID_TYPE)
20847     return;
20848
20849   type_die = modified_type_die (type,
20850                                 cv_quals | TYPE_QUALS (type),
20851                                 reverse,
20852                                 context_die);
20853
20854   if (type_die != NULL)
20855     add_AT_die_ref (object_die, DW_AT_type, type_die);
20856 }
20857
20858 /* Given an object die, add the calling convention attribute for the
20859    function call type.  */
20860 static void
20861 add_calling_convention_attribute (dw_die_ref subr_die, tree decl)
20862 {
20863   enum dwarf_calling_convention value = DW_CC_normal;
20864
20865   value = ((enum dwarf_calling_convention)
20866            targetm.dwarf_calling_convention (TREE_TYPE (decl)));
20867
20868   if (is_fortran ()
20869       && id_equal (DECL_ASSEMBLER_NAME (decl), "MAIN__"))
20870     {
20871       /* DWARF 2 doesn't provide a way to identify a program's source-level
20872         entry point.  DW_AT_calling_convention attributes are only meant
20873         to describe functions' calling conventions.  However, lacking a
20874         better way to signal the Fortran main program, we used this for 
20875         a long time, following existing custom.  Now, DWARF 4 has 
20876         DW_AT_main_subprogram, which we add below, but some tools still
20877         rely on the old way, which we thus keep.  */
20878       value = DW_CC_program;
20879
20880       if (dwarf_version >= 4 || !dwarf_strict)
20881         add_AT_flag (subr_die, DW_AT_main_subprogram, 1);
20882     }
20883
20884   /* Only add the attribute if the backend requests it, and
20885      is not DW_CC_normal.  */
20886   if (value && (value != DW_CC_normal))
20887     add_AT_unsigned (subr_die, DW_AT_calling_convention, value);
20888 }
20889
20890 /* Given a tree pointer to a struct, class, union, or enum type node, return
20891    a pointer to the (string) tag name for the given type, or zero if the type
20892    was declared without a tag.  */
20893
20894 static const char *
20895 type_tag (const_tree type)
20896 {
20897   const char *name = 0;
20898
20899   if (TYPE_NAME (type) != 0)
20900     {
20901       tree t = 0;
20902
20903       /* Find the IDENTIFIER_NODE for the type name.  */
20904       if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE
20905           && !TYPE_NAMELESS (type))
20906         t = TYPE_NAME (type);
20907
20908       /* The g++ front end makes the TYPE_NAME of *each* tagged type point to
20909          a TYPE_DECL node, regardless of whether or not a `typedef' was
20910          involved.  */
20911       else if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
20912                && ! DECL_IGNORED_P (TYPE_NAME (type)))
20913         {
20914           /* We want to be extra verbose.  Don't call dwarf_name if
20915              DECL_NAME isn't set.  The default hook for decl_printable_name
20916              doesn't like that, and in this context it's correct to return
20917              0, instead of "<anonymous>" or the like.  */
20918           if (DECL_NAME (TYPE_NAME (type))
20919               && !DECL_NAMELESS (TYPE_NAME (type)))
20920             name = lang_hooks.dwarf_name (TYPE_NAME (type), 2);
20921         }
20922
20923       /* Now get the name as a string, or invent one.  */
20924       if (!name && t != 0)
20925         name = IDENTIFIER_POINTER (t);
20926     }
20927
20928   return (name == 0 || *name == '\0') ? 0 : name;
20929 }
20930
20931 /* Return the type associated with a data member, make a special check
20932    for bit field types.  */
20933
20934 static inline tree
20935 member_declared_type (const_tree member)
20936 {
20937   return (DECL_BIT_FIELD_TYPE (member)
20938           ? DECL_BIT_FIELD_TYPE (member) : TREE_TYPE (member));
20939 }
20940
20941 /* Get the decl's label, as described by its RTL. This may be different
20942    from the DECL_NAME name used in the source file.  */
20943
20944 #if 0
20945 static const char *
20946 decl_start_label (tree decl)
20947 {
20948   rtx x;
20949   const char *fnname;
20950
20951   x = DECL_RTL (decl);
20952   gcc_assert (MEM_P (x));
20953
20954   x = XEXP (x, 0);
20955   gcc_assert (GET_CODE (x) == SYMBOL_REF);
20956
20957   fnname = XSTR (x, 0);
20958   return fnname;
20959 }
20960 #endif
20961 \f
20962 /* For variable-length arrays that have been previously generated, but
20963    may be incomplete due to missing subscript info, fill the subscript
20964    info.  Return TRUE if this is one of those cases.  */
20965 static bool
20966 fill_variable_array_bounds (tree type)
20967 {
20968   if (TREE_ASM_WRITTEN (type)
20969       && TREE_CODE (type) == ARRAY_TYPE
20970       && variably_modified_type_p (type, NULL))
20971     {
20972       dw_die_ref array_die = lookup_type_die (type);
20973       if (!array_die)
20974         return false;
20975       add_subscript_info (array_die, type, !is_ada ());
20976       return true;
20977     }
20978   return false;
20979 }
20980
20981 /* These routines generate the internal representation of the DIE's for
20982    the compilation unit.  Debugging information is collected by walking
20983    the declaration trees passed in from dwarf2out_decl().  */
20984
20985 static void
20986 gen_array_type_die (tree type, dw_die_ref context_die)
20987 {
20988   dw_die_ref array_die;
20989
20990   /* GNU compilers represent multidimensional array types as sequences of one
20991      dimensional array types whose element types are themselves array types.
20992      We sometimes squish that down to a single array_type DIE with multiple
20993      subscripts in the Dwarf debugging info.  The draft Dwarf specification
20994      say that we are allowed to do this kind of compression in C, because
20995      there is no difference between an array of arrays and a multidimensional
20996      array.  We don't do this for Ada to remain as close as possible to the
20997      actual representation, which is especially important against the language
20998      flexibilty wrt arrays of variable size.  */
20999
21000   bool collapse_nested_arrays = !is_ada ();
21001
21002   if (fill_variable_array_bounds (type))
21003     return;
21004
21005   dw_die_ref scope_die = scope_die_for (type, context_die);
21006   tree element_type;
21007
21008   /* Emit DW_TAG_string_type for Fortran character types (with kind 1 only, as
21009      DW_TAG_string_type doesn't have DW_AT_type attribute).  */
21010   if (TYPE_STRING_FLAG (type)
21011       && TREE_CODE (type) == ARRAY_TYPE
21012       && is_fortran ()
21013       && TYPE_MODE (TREE_TYPE (type)) == TYPE_MODE (char_type_node))
21014     {
21015       HOST_WIDE_INT size;
21016
21017       array_die = new_die (DW_TAG_string_type, scope_die, type);
21018       add_name_attribute (array_die, type_tag (type));
21019       equate_type_number_to_die (type, array_die);
21020       size = int_size_in_bytes (type);
21021       if (size >= 0)
21022         add_AT_unsigned (array_die, DW_AT_byte_size, size);
21023       /* ???  We can't annotate types late, but for LTO we may not
21024          generate a location early either (gfortran.dg/save_6.f90).  */
21025       else if (! (early_dwarf && (flag_generate_lto || flag_generate_offload))
21026                && TYPE_DOMAIN (type) != NULL_TREE
21027                && TYPE_MAX_VALUE (TYPE_DOMAIN (type)) != NULL_TREE)
21028         {
21029           tree szdecl = TYPE_MAX_VALUE (TYPE_DOMAIN (type));
21030           tree rszdecl = szdecl;
21031
21032           size = int_size_in_bytes (TREE_TYPE (szdecl));
21033           if (!DECL_P (szdecl))
21034             {
21035               if (TREE_CODE (szdecl) == INDIRECT_REF
21036                   && DECL_P (TREE_OPERAND (szdecl, 0)))
21037                 {
21038                   rszdecl = TREE_OPERAND (szdecl, 0);
21039                   if (int_size_in_bytes (TREE_TYPE (rszdecl))
21040                       != DWARF2_ADDR_SIZE)
21041                     size = 0;
21042                 }
21043               else
21044                 size = 0;
21045             }
21046           if (size > 0)
21047             {
21048               dw_loc_list_ref loc
21049                 = loc_list_from_tree (rszdecl, szdecl == rszdecl ? 2 : 0,
21050                                       NULL);
21051               if (loc)
21052                 {
21053                   add_AT_location_description (array_die, DW_AT_string_length,
21054                                                loc);
21055                   if (size != DWARF2_ADDR_SIZE)
21056                     add_AT_unsigned (array_die, dwarf_version >= 5
21057                                                 ? DW_AT_string_length_byte_size
21058                                                 : DW_AT_byte_size, size);
21059                 }
21060             }
21061         }
21062       return;
21063     }
21064
21065   array_die = new_die (DW_TAG_array_type, scope_die, type);
21066   add_name_attribute (array_die, type_tag (type));
21067   equate_type_number_to_die (type, array_die);
21068
21069   if (TREE_CODE (type) == VECTOR_TYPE)
21070     add_AT_flag (array_die, DW_AT_GNU_vector, 1);
21071
21072   /* For Fortran multidimensional arrays use DW_ORD_col_major ordering.  */
21073   if (is_fortran ()
21074       && TREE_CODE (type) == ARRAY_TYPE
21075       && TREE_CODE (TREE_TYPE (type)) == ARRAY_TYPE
21076       && !TYPE_STRING_FLAG (TREE_TYPE (type)))
21077     add_AT_unsigned (array_die, DW_AT_ordering, DW_ORD_col_major);
21078
21079 #if 0
21080   /* We default the array ordering.  Debuggers will probably do the right
21081      things even if DW_AT_ordering is not present.  It's not even an issue
21082      until we start to get into multidimensional arrays anyway.  If a debugger
21083      is ever caught doing the Wrong Thing for multi-dimensional arrays,
21084      then we'll have to put the DW_AT_ordering attribute back in.  (But if
21085      and when we find out that we need to put these in, we will only do so
21086      for multidimensional arrays.  */
21087   add_AT_unsigned (array_die, DW_AT_ordering, DW_ORD_row_major);
21088 #endif
21089
21090   if (TREE_CODE (type) == VECTOR_TYPE)
21091     {
21092       /* For VECTOR_TYPEs we use an array die with appropriate bounds.  */
21093       dw_die_ref subrange_die = new_die (DW_TAG_subrange_type, array_die, NULL);
21094       add_bound_info (subrange_die, DW_AT_lower_bound, size_zero_node, NULL);
21095       add_bound_info (subrange_die, DW_AT_upper_bound,
21096                       size_int (TYPE_VECTOR_SUBPARTS (type) - 1), NULL);
21097     }
21098   else
21099     add_subscript_info (array_die, type, collapse_nested_arrays);
21100
21101   /* Add representation of the type of the elements of this array type and
21102      emit the corresponding DIE if we haven't done it already.  */
21103   element_type = TREE_TYPE (type);
21104   if (collapse_nested_arrays)
21105     while (TREE_CODE (element_type) == ARRAY_TYPE)
21106       {
21107         if (TYPE_STRING_FLAG (element_type) && is_fortran ())
21108           break;
21109         element_type = TREE_TYPE (element_type);
21110       }
21111
21112   add_type_attribute (array_die, element_type, TYPE_UNQUALIFIED,
21113                       TREE_CODE (type) == ARRAY_TYPE
21114                       && TYPE_REVERSE_STORAGE_ORDER (type),
21115                       context_die);
21116
21117   add_gnat_descriptive_type_attribute (array_die, type, context_die);
21118   if (TYPE_ARTIFICIAL (type))
21119     add_AT_flag (array_die, DW_AT_artificial, 1);
21120
21121   if (get_AT (array_die, DW_AT_name))
21122     add_pubtype (type, array_die);
21123
21124   add_alignment_attribute (array_die, type);
21125 }
21126
21127 /* This routine generates DIE for array with hidden descriptor, details
21128    are filled into *info by a langhook.  */
21129
21130 static void
21131 gen_descr_array_type_die (tree type, struct array_descr_info *info,
21132                           dw_die_ref context_die)
21133 {
21134   const dw_die_ref scope_die = scope_die_for (type, context_die);
21135   const dw_die_ref array_die = new_die (DW_TAG_array_type, scope_die, type);
21136   struct loc_descr_context context = { type, info->base_decl, NULL,
21137                                        false, false };
21138   enum dwarf_tag subrange_tag = DW_TAG_subrange_type;
21139   int dim;
21140
21141   add_name_attribute (array_die, type_tag (type));
21142   equate_type_number_to_die (type, array_die);
21143
21144   if (info->ndimensions > 1)
21145     switch (info->ordering)
21146       {
21147       case array_descr_ordering_row_major:
21148         add_AT_unsigned (array_die, DW_AT_ordering, DW_ORD_row_major);
21149         break;
21150       case array_descr_ordering_column_major:
21151         add_AT_unsigned (array_die, DW_AT_ordering, DW_ORD_col_major);
21152         break;
21153       default:
21154         break;
21155       }
21156
21157   if (dwarf_version >= 3 || !dwarf_strict)
21158     {
21159       if (info->data_location)
21160         add_scalar_info (array_die, DW_AT_data_location, info->data_location,
21161                          dw_scalar_form_exprloc, &context);
21162       if (info->associated)
21163         add_scalar_info (array_die, DW_AT_associated, info->associated,
21164                          dw_scalar_form_constant
21165                          | dw_scalar_form_exprloc
21166                          | dw_scalar_form_reference, &context);
21167       if (info->allocated)
21168         add_scalar_info (array_die, DW_AT_allocated, info->allocated,
21169                          dw_scalar_form_constant
21170                          | dw_scalar_form_exprloc
21171                          | dw_scalar_form_reference, &context);
21172       if (info->stride)
21173         {
21174           const enum dwarf_attribute attr
21175             = (info->stride_in_bits) ? DW_AT_bit_stride : DW_AT_byte_stride;
21176           const int forms
21177             = (info->stride_in_bits)
21178               ? dw_scalar_form_constant
21179               : (dw_scalar_form_constant
21180                  | dw_scalar_form_exprloc
21181                  | dw_scalar_form_reference);
21182
21183           add_scalar_info (array_die, attr, info->stride, forms, &context);
21184         }
21185     }
21186   if (dwarf_version >= 5)
21187     {
21188       if (info->rank)
21189         {
21190           add_scalar_info (array_die, DW_AT_rank, info->rank,
21191                            dw_scalar_form_constant
21192                            | dw_scalar_form_exprloc, &context);
21193           subrange_tag = DW_TAG_generic_subrange;
21194           context.placeholder_arg = true;
21195         }
21196     }
21197
21198   add_gnat_descriptive_type_attribute (array_die, type, context_die);
21199
21200   for (dim = 0; dim < info->ndimensions; dim++)
21201     {
21202       dw_die_ref subrange_die = new_die (subrange_tag, array_die, NULL);
21203
21204       if (info->dimen[dim].bounds_type)
21205         add_type_attribute (subrange_die,
21206                             info->dimen[dim].bounds_type, TYPE_UNQUALIFIED,
21207                             false, context_die);
21208       if (info->dimen[dim].lower_bound)
21209         add_bound_info (subrange_die, DW_AT_lower_bound,
21210                         info->dimen[dim].lower_bound, &context);
21211       if (info->dimen[dim].upper_bound)
21212         add_bound_info (subrange_die, DW_AT_upper_bound,
21213                         info->dimen[dim].upper_bound, &context);
21214       if ((dwarf_version >= 3 || !dwarf_strict) && info->dimen[dim].stride)
21215         add_scalar_info (subrange_die, DW_AT_byte_stride,
21216                          info->dimen[dim].stride,
21217                          dw_scalar_form_constant
21218                          | dw_scalar_form_exprloc
21219                          | dw_scalar_form_reference,
21220                          &context);
21221     }
21222
21223   gen_type_die (info->element_type, context_die);
21224   add_type_attribute (array_die, info->element_type, TYPE_UNQUALIFIED,
21225                       TREE_CODE (type) == ARRAY_TYPE
21226                       && TYPE_REVERSE_STORAGE_ORDER (type),
21227                       context_die);
21228
21229   if (get_AT (array_die, DW_AT_name))
21230     add_pubtype (type, array_die);
21231
21232   add_alignment_attribute (array_die, type);
21233 }
21234
21235 #if 0
21236 static void
21237 gen_entry_point_die (tree decl, dw_die_ref context_die)
21238 {
21239   tree origin = decl_ultimate_origin (decl);
21240   dw_die_ref decl_die = new_die (DW_TAG_entry_point, context_die, decl);
21241
21242   if (origin != NULL)
21243     add_abstract_origin_attribute (decl_die, origin);
21244   else
21245     {
21246       add_name_and_src_coords_attributes (decl_die, decl);
21247       add_type_attribute (decl_die, TREE_TYPE (TREE_TYPE (decl)),
21248                           TYPE_UNQUALIFIED, false, context_die);
21249     }
21250
21251   if (DECL_ABSTRACT_P (decl))
21252     equate_decl_number_to_die (decl, decl_die);
21253   else
21254     add_AT_lbl_id (decl_die, DW_AT_low_pc, decl_start_label (decl));
21255 }
21256 #endif
21257
21258 /* Walk through the list of incomplete types again, trying once more to
21259    emit full debugging info for them.  */
21260
21261 static void
21262 retry_incomplete_types (void)
21263 {
21264   set_early_dwarf s;
21265   int i;
21266
21267   for (i = vec_safe_length (incomplete_types) - 1; i >= 0; i--)
21268     if (should_emit_struct_debug ((*incomplete_types)[i], DINFO_USAGE_DIR_USE))
21269       gen_type_die ((*incomplete_types)[i], comp_unit_die ());
21270   vec_safe_truncate (incomplete_types, 0);
21271 }
21272
21273 /* Determine what tag to use for a record type.  */
21274
21275 static enum dwarf_tag
21276 record_type_tag (tree type)
21277 {
21278   if (! lang_hooks.types.classify_record)
21279     return DW_TAG_structure_type;
21280
21281   switch (lang_hooks.types.classify_record (type))
21282     {
21283     case RECORD_IS_STRUCT:
21284       return DW_TAG_structure_type;
21285
21286     case RECORD_IS_CLASS:
21287       return DW_TAG_class_type;
21288
21289     case RECORD_IS_INTERFACE:
21290       if (dwarf_version >= 3 || !dwarf_strict)
21291         return DW_TAG_interface_type;
21292       return DW_TAG_structure_type;
21293
21294     default:
21295       gcc_unreachable ();
21296     }
21297 }
21298
21299 /* Generate a DIE to represent an enumeration type.  Note that these DIEs
21300    include all of the information about the enumeration values also. Each
21301    enumerated type name/value is listed as a child of the enumerated type
21302    DIE.  */
21303
21304 static dw_die_ref
21305 gen_enumeration_type_die (tree type, dw_die_ref context_die)
21306 {
21307   dw_die_ref type_die = lookup_type_die (type);
21308
21309   if (type_die == NULL)
21310     {
21311       type_die = new_die (DW_TAG_enumeration_type,
21312                           scope_die_for (type, context_die), type);
21313       equate_type_number_to_die (type, type_die);
21314       add_name_attribute (type_die, type_tag (type));
21315       if (dwarf_version >= 4 || !dwarf_strict)
21316         {
21317           if (ENUM_IS_SCOPED (type))
21318             add_AT_flag (type_die, DW_AT_enum_class, 1);
21319           if (ENUM_IS_OPAQUE (type))
21320             add_AT_flag (type_die, DW_AT_declaration, 1);
21321         }
21322       if (!dwarf_strict)
21323         add_AT_unsigned (type_die, DW_AT_encoding,
21324                          TYPE_UNSIGNED (type)
21325                          ? DW_ATE_unsigned
21326                          : DW_ATE_signed);
21327     }
21328   else if (! TYPE_SIZE (type))
21329     return type_die;
21330   else
21331     remove_AT (type_die, DW_AT_declaration);
21332
21333   /* Handle a GNU C/C++ extension, i.e. incomplete enum types.  If the
21334      given enum type is incomplete, do not generate the DW_AT_byte_size
21335      attribute or the DW_AT_element_list attribute.  */
21336   if (TYPE_SIZE (type))
21337     {
21338       tree link;
21339
21340       TREE_ASM_WRITTEN (type) = 1;
21341       add_byte_size_attribute (type_die, type);
21342       add_alignment_attribute (type_die, type);
21343       if (dwarf_version >= 3 || !dwarf_strict)
21344         {
21345           tree underlying = lang_hooks.types.enum_underlying_base_type (type);
21346           add_type_attribute (type_die, underlying, TYPE_UNQUALIFIED, false,
21347                               context_die);
21348         }
21349       if (TYPE_STUB_DECL (type) != NULL_TREE)
21350         {
21351           add_src_coords_attributes (type_die, TYPE_STUB_DECL (type));
21352           add_accessibility_attribute (type_die, TYPE_STUB_DECL (type));
21353         }
21354
21355       /* If the first reference to this type was as the return type of an
21356          inline function, then it may not have a parent.  Fix this now.  */
21357       if (type_die->die_parent == NULL)
21358         add_child_die (scope_die_for (type, context_die), type_die);
21359
21360       for (link = TYPE_VALUES (type);
21361            link != NULL; link = TREE_CHAIN (link))
21362         {
21363           dw_die_ref enum_die = new_die (DW_TAG_enumerator, type_die, link);
21364           tree value = TREE_VALUE (link);
21365
21366           add_name_attribute (enum_die,
21367                               IDENTIFIER_POINTER (TREE_PURPOSE (link)));
21368
21369           if (TREE_CODE (value) == CONST_DECL)
21370             value = DECL_INITIAL (value);
21371
21372           if (simple_type_size_in_bits (TREE_TYPE (value))
21373               <= HOST_BITS_PER_WIDE_INT || tree_fits_shwi_p (value))
21374             {
21375               /* For constant forms created by add_AT_unsigned DWARF
21376                  consumers (GDB, elfutils, etc.) always zero extend
21377                  the value.  Only when the actual value is negative
21378                  do we need to use add_AT_int to generate a constant
21379                  form that can represent negative values.  */
21380               HOST_WIDE_INT val = TREE_INT_CST_LOW (value);
21381               if (TYPE_UNSIGNED (TREE_TYPE (value)) || val >= 0)
21382                 add_AT_unsigned (enum_die, DW_AT_const_value,
21383                                  (unsigned HOST_WIDE_INT) val);
21384               else
21385                 add_AT_int (enum_die, DW_AT_const_value, val);
21386             }
21387           else
21388             /* Enumeration constants may be wider than HOST_WIDE_INT.  Handle
21389                that here.  TODO: This should be re-worked to use correct
21390                signed/unsigned double tags for all cases.  */
21391             add_AT_wide (enum_die, DW_AT_const_value, wi::to_wide (value));
21392         }
21393
21394       add_gnat_descriptive_type_attribute (type_die, type, context_die);
21395       if (TYPE_ARTIFICIAL (type))
21396         add_AT_flag (type_die, DW_AT_artificial, 1);
21397     }
21398   else
21399     add_AT_flag (type_die, DW_AT_declaration, 1);
21400
21401   add_pubtype (type, type_die);
21402
21403   return type_die;
21404 }
21405
21406 /* Generate a DIE to represent either a real live formal parameter decl or to
21407    represent just the type of some formal parameter position in some function
21408    type.
21409
21410    Note that this routine is a bit unusual because its argument may be a
21411    ..._DECL node (i.e. either a PARM_DECL or perhaps a VAR_DECL which
21412    represents an inlining of some PARM_DECL) or else some sort of a ..._TYPE
21413    node.  If it's the former then this function is being called to output a
21414    DIE to represent a formal parameter object (or some inlining thereof).  If
21415    it's the latter, then this function is only being called to output a
21416    DW_TAG_formal_parameter DIE to stand as a placeholder for some formal
21417    argument type of some subprogram type.
21418    If EMIT_NAME_P is true, name and source coordinate attributes
21419    are emitted.  */
21420
21421 static dw_die_ref
21422 gen_formal_parameter_die (tree node, tree origin, bool emit_name_p,
21423                           dw_die_ref context_die)
21424 {
21425   tree node_or_origin = node ? node : origin;
21426   tree ultimate_origin;
21427   dw_die_ref parm_die = NULL;
21428   
21429   if (DECL_P (node_or_origin))
21430     {
21431       parm_die = lookup_decl_die (node);
21432
21433       /* If the contexts differ, we may not be talking about the same
21434          thing.
21435          ???  When in LTO the DIE parent is the "abstract" copy and the
21436          context_die is the specification "copy".  But this whole block
21437          should eventually be no longer needed.  */
21438       if (parm_die && parm_die->die_parent != context_die && !in_lto_p)
21439         {
21440           if (!DECL_ABSTRACT_P (node))
21441             {
21442               /* This can happen when creating an inlined instance, in
21443                  which case we need to create a new DIE that will get
21444                  annotated with DW_AT_abstract_origin.  */
21445               parm_die = NULL;
21446             }
21447           else
21448             gcc_unreachable ();
21449         }
21450
21451       if (parm_die && parm_die->die_parent == NULL)
21452         {
21453           /* Check that parm_die already has the right attributes that
21454              we would have added below.  If any attributes are
21455              missing, fall through to add them.  */
21456           if (! DECL_ABSTRACT_P (node_or_origin)
21457               && !get_AT (parm_die, DW_AT_location)
21458               && !get_AT (parm_die, DW_AT_const_value))
21459             /* We are missing  location info, and are about to add it.  */
21460             ;
21461           else
21462             {
21463               add_child_die (context_die, parm_die);
21464               return parm_die;
21465             }
21466         }
21467     }
21468
21469   /* If we have a previously generated DIE, use it, unless this is an
21470      concrete instance (origin != NULL), in which case we need a new
21471      DIE with a corresponding DW_AT_abstract_origin.  */
21472   bool reusing_die;
21473   if (parm_die && origin == NULL)
21474     reusing_die = true;
21475   else
21476     {
21477       parm_die = new_die (DW_TAG_formal_parameter, context_die, node);
21478       reusing_die = false;
21479     }
21480
21481   switch (TREE_CODE_CLASS (TREE_CODE (node_or_origin)))
21482     {
21483     case tcc_declaration:
21484       ultimate_origin = decl_ultimate_origin (node_or_origin);
21485       if (node || ultimate_origin)
21486         origin = ultimate_origin;
21487
21488       if (reusing_die)
21489         goto add_location;
21490
21491       if (origin != NULL)
21492         add_abstract_origin_attribute (parm_die, origin);
21493       else if (emit_name_p)
21494         add_name_and_src_coords_attributes (parm_die, node);
21495       if (origin == NULL
21496           || (! DECL_ABSTRACT_P (node_or_origin)
21497               && variably_modified_type_p (TREE_TYPE (node_or_origin),
21498                                            decl_function_context
21499                                                             (node_or_origin))))
21500         {
21501           tree type = TREE_TYPE (node_or_origin);
21502           if (decl_by_reference_p (node_or_origin))
21503             add_type_attribute (parm_die, TREE_TYPE (type),
21504                                 TYPE_UNQUALIFIED,
21505                                 false, context_die);
21506           else
21507             add_type_attribute (parm_die, type,
21508                                 decl_quals (node_or_origin),
21509                                 false, context_die);
21510         }
21511       if (origin == NULL && DECL_ARTIFICIAL (node))
21512         add_AT_flag (parm_die, DW_AT_artificial, 1);
21513     add_location:
21514       if (node && node != origin)
21515         equate_decl_number_to_die (node, parm_die);
21516       if (! DECL_ABSTRACT_P (node_or_origin))
21517         add_location_or_const_value_attribute (parm_die, node_or_origin,
21518                                                node == NULL);
21519
21520       break;
21521
21522     case tcc_type:
21523       /* We were called with some kind of a ..._TYPE node.  */
21524       add_type_attribute (parm_die, node_or_origin, TYPE_UNQUALIFIED, false,
21525                           context_die);
21526       break;
21527
21528     default:
21529       gcc_unreachable ();
21530     }
21531
21532   return parm_die;
21533 }
21534
21535 /* Generate and return a DW_TAG_GNU_formal_parameter_pack. Also generate
21536    children DW_TAG_formal_parameter DIEs representing the arguments of the
21537    parameter pack.
21538
21539    PARM_PACK must be a function parameter pack.
21540    PACK_ARG is the first argument of the parameter pack. Its TREE_CHAIN
21541    must point to the subsequent arguments of the function PACK_ARG belongs to.
21542    SUBR_DIE is the DIE of the function PACK_ARG belongs to.
21543    If NEXT_ARG is non NULL, *NEXT_ARG is set to the function argument
21544    following the last one for which a DIE was generated.  */
21545
21546 static dw_die_ref
21547 gen_formal_parameter_pack_die  (tree parm_pack,
21548                                 tree pack_arg,
21549                                 dw_die_ref subr_die,
21550                                 tree *next_arg)
21551 {
21552   tree arg;
21553   dw_die_ref parm_pack_die;
21554
21555   gcc_assert (parm_pack
21556               && lang_hooks.function_parameter_pack_p (parm_pack)
21557               && subr_die);
21558
21559   parm_pack_die = new_die (DW_TAG_GNU_formal_parameter_pack, subr_die, parm_pack);
21560   add_src_coords_attributes (parm_pack_die, parm_pack);
21561
21562   for (arg = pack_arg; arg; arg = DECL_CHAIN (arg))
21563     {
21564       if (! lang_hooks.decls.function_parm_expanded_from_pack_p (arg,
21565                                                                  parm_pack))
21566         break;
21567       gen_formal_parameter_die (arg, NULL,
21568                                 false /* Don't emit name attribute.  */,
21569                                 parm_pack_die);
21570     }
21571   if (next_arg)
21572     *next_arg = arg;
21573   return parm_pack_die;
21574 }
21575
21576 /* Generate a special type of DIE used as a stand-in for a trailing ellipsis
21577    at the end of an (ANSI prototyped) formal parameters list.  */
21578
21579 static void
21580 gen_unspecified_parameters_die (tree decl_or_type, dw_die_ref context_die)
21581 {
21582   new_die (DW_TAG_unspecified_parameters, context_die, decl_or_type);
21583 }
21584
21585 /* Generate a list of nameless DW_TAG_formal_parameter DIEs (and perhaps a
21586    DW_TAG_unspecified_parameters DIE) to represent the types of the formal
21587    parameters as specified in some function type specification (except for
21588    those which appear as part of a function *definition*).  */
21589
21590 static void
21591 gen_formal_types_die (tree function_or_method_type, dw_die_ref context_die)
21592 {
21593   tree link;
21594   tree formal_type = NULL;
21595   tree first_parm_type;
21596   tree arg;
21597
21598   if (TREE_CODE (function_or_method_type) == FUNCTION_DECL)
21599     {
21600       arg = DECL_ARGUMENTS (function_or_method_type);
21601       function_or_method_type = TREE_TYPE (function_or_method_type);
21602     }
21603   else
21604     arg = NULL_TREE;
21605
21606   first_parm_type = TYPE_ARG_TYPES (function_or_method_type);
21607
21608   /* Make our first pass over the list of formal parameter types and output a
21609      DW_TAG_formal_parameter DIE for each one.  */
21610   for (link = first_parm_type; link; )
21611     {
21612       dw_die_ref parm_die;
21613
21614       formal_type = TREE_VALUE (link);
21615       if (formal_type == void_type_node)
21616         break;
21617
21618       /* Output a (nameless) DIE to represent the formal parameter itself.  */
21619       if (!POINTER_BOUNDS_TYPE_P (formal_type))
21620         {
21621           parm_die = gen_formal_parameter_die (formal_type, NULL,
21622                                                true /* Emit name attribute.  */,
21623                                                context_die);
21624           if (TREE_CODE (function_or_method_type) == METHOD_TYPE
21625               && link == first_parm_type)
21626             {
21627               add_AT_flag (parm_die, DW_AT_artificial, 1);
21628               if (dwarf_version >= 3 || !dwarf_strict)
21629                 add_AT_die_ref (context_die, DW_AT_object_pointer, parm_die);
21630             }
21631           else if (arg && DECL_ARTIFICIAL (arg))
21632             add_AT_flag (parm_die, DW_AT_artificial, 1);
21633         }
21634
21635       link = TREE_CHAIN (link);
21636       if (arg)
21637         arg = DECL_CHAIN (arg);
21638     }
21639
21640   /* If this function type has an ellipsis, add a
21641      DW_TAG_unspecified_parameters DIE to the end of the parameter list.  */
21642   if (formal_type != void_type_node)
21643     gen_unspecified_parameters_die (function_or_method_type, context_die);
21644
21645   /* Make our second (and final) pass over the list of formal parameter types
21646      and output DIEs to represent those types (as necessary).  */
21647   for (link = TYPE_ARG_TYPES (function_or_method_type);
21648        link && TREE_VALUE (link);
21649        link = TREE_CHAIN (link))
21650     gen_type_die (TREE_VALUE (link), context_die);
21651 }
21652
21653 /* We want to generate the DIE for TYPE so that we can generate the
21654    die for MEMBER, which has been defined; we will need to refer back
21655    to the member declaration nested within TYPE.  If we're trying to
21656    generate minimal debug info for TYPE, processing TYPE won't do the
21657    trick; we need to attach the member declaration by hand.  */
21658
21659 static void
21660 gen_type_die_for_member (tree type, tree member, dw_die_ref context_die)
21661 {
21662   gen_type_die (type, context_die);
21663
21664   /* If we're trying to avoid duplicate debug info, we may not have
21665      emitted the member decl for this function.  Emit it now.  */
21666   if (TYPE_STUB_DECL (type)
21667       && TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type))
21668       && ! lookup_decl_die (member))
21669     {
21670       dw_die_ref type_die;
21671       gcc_assert (!decl_ultimate_origin (member));
21672
21673       push_decl_scope (type);
21674       type_die = lookup_type_die_strip_naming_typedef (type);
21675       if (TREE_CODE (member) == FUNCTION_DECL)
21676         gen_subprogram_die (member, type_die);
21677       else if (TREE_CODE (member) == FIELD_DECL)
21678         {
21679           /* Ignore the nameless fields that are used to skip bits but handle
21680              C++ anonymous unions and structs.  */
21681           if (DECL_NAME (member) != NULL_TREE
21682               || TREE_CODE (TREE_TYPE (member)) == UNION_TYPE
21683               || TREE_CODE (TREE_TYPE (member)) == RECORD_TYPE)
21684             {
21685               struct vlr_context vlr_ctx = {
21686                 DECL_CONTEXT (member), /* struct_type */
21687                 NULL_TREE /* variant_part_offset */
21688               };
21689               gen_type_die (member_declared_type (member), type_die);
21690               gen_field_die (member, &vlr_ctx, type_die);
21691             }
21692         }
21693       else
21694         gen_variable_die (member, NULL_TREE, type_die);
21695
21696       pop_decl_scope ();
21697     }
21698 }
21699 \f
21700 /* Forward declare these functions, because they are mutually recursive
21701   with their set_block_* pairing functions.  */
21702 static void set_decl_origin_self (tree);
21703
21704 /* Given a pointer to some BLOCK node, if the BLOCK_ABSTRACT_ORIGIN for the
21705    given BLOCK node is NULL, set the BLOCK_ABSTRACT_ORIGIN for the node so
21706    that it points to the node itself, thus indicating that the node is its
21707    own (abstract) origin.  Additionally, if the BLOCK_ABSTRACT_ORIGIN for
21708    the given node is NULL, recursively descend the decl/block tree which
21709    it is the root of, and for each other ..._DECL or BLOCK node contained
21710    therein whose DECL_ABSTRACT_ORIGINs or BLOCK_ABSTRACT_ORIGINs are also
21711    still NULL, set *their* DECL_ABSTRACT_ORIGIN or BLOCK_ABSTRACT_ORIGIN
21712    values to point to themselves.  */
21713
21714 static void
21715 set_block_origin_self (tree stmt)
21716 {
21717   if (BLOCK_ABSTRACT_ORIGIN (stmt) == NULL_TREE)
21718     {
21719       BLOCK_ABSTRACT_ORIGIN (stmt) = stmt;
21720
21721       {
21722         tree local_decl;
21723
21724         for (local_decl = BLOCK_VARS (stmt);
21725              local_decl != NULL_TREE;
21726              local_decl = DECL_CHAIN (local_decl))
21727           /* Do not recurse on nested functions since the inlining status
21728              of parent and child can be different as per the DWARF spec.  */
21729           if (TREE_CODE (local_decl) != FUNCTION_DECL
21730               && !DECL_EXTERNAL (local_decl))
21731             set_decl_origin_self (local_decl);
21732       }
21733
21734       {
21735         tree subblock;
21736
21737         for (subblock = BLOCK_SUBBLOCKS (stmt);
21738              subblock != NULL_TREE;
21739              subblock = BLOCK_CHAIN (subblock))
21740           set_block_origin_self (subblock);     /* Recurse.  */
21741       }
21742     }
21743 }
21744
21745 /* Given a pointer to some ..._DECL node, if the DECL_ABSTRACT_ORIGIN for
21746    the given ..._DECL node is NULL, set the DECL_ABSTRACT_ORIGIN for the
21747    node to so that it points to the node itself, thus indicating that the
21748    node represents its own (abstract) origin.  Additionally, if the
21749    DECL_ABSTRACT_ORIGIN for the given node is NULL, recursively descend
21750    the decl/block tree of which the given node is the root of, and for
21751    each other ..._DECL or BLOCK node contained therein whose
21752    DECL_ABSTRACT_ORIGINs or BLOCK_ABSTRACT_ORIGINs are also still NULL,
21753    set *their* DECL_ABSTRACT_ORIGIN or BLOCK_ABSTRACT_ORIGIN values to
21754    point to themselves.  */
21755
21756 static void
21757 set_decl_origin_self (tree decl)
21758 {
21759   if (DECL_ABSTRACT_ORIGIN (decl) == NULL_TREE)
21760     {
21761       DECL_ABSTRACT_ORIGIN (decl) = decl;
21762       if (TREE_CODE (decl) == FUNCTION_DECL)
21763         {
21764           tree arg;
21765
21766           for (arg = DECL_ARGUMENTS (decl); arg; arg = DECL_CHAIN (arg))
21767             DECL_ABSTRACT_ORIGIN (arg) = arg;
21768           if (DECL_INITIAL (decl) != NULL_TREE
21769               && DECL_INITIAL (decl) != error_mark_node)
21770             set_block_origin_self (DECL_INITIAL (decl));
21771         }
21772     }
21773 }
21774 \f
21775 /* Mark the early DIE for DECL as the abstract instance.  */
21776
21777 static void
21778 dwarf2out_abstract_function (tree decl)
21779 {
21780   dw_die_ref old_die;
21781
21782   /* Make sure we have the actual abstract inline, not a clone.  */
21783   decl = DECL_ORIGIN (decl);
21784
21785   if (DECL_IGNORED_P (decl))
21786     return;
21787
21788   old_die = lookup_decl_die (decl);
21789   /* With early debug we always have an old DIE unless we are in LTO
21790      and the user did not compile but only link with debug.  */
21791   if (in_lto_p && ! old_die)
21792     return;
21793   gcc_assert (old_die != NULL);
21794   if (get_AT (old_die, DW_AT_inline)
21795       || get_AT (old_die, DW_AT_abstract_origin))
21796     /* We've already generated the abstract instance.  */
21797     return;
21798
21799   /* Go ahead and put DW_AT_inline on the DIE.  */
21800   if (DECL_DECLARED_INLINE_P (decl))
21801     {
21802       if (cgraph_function_possibly_inlined_p (decl))
21803         add_AT_unsigned (old_die, DW_AT_inline, DW_INL_declared_inlined);
21804       else
21805         add_AT_unsigned (old_die, DW_AT_inline, DW_INL_declared_not_inlined);
21806     }
21807   else
21808     {
21809       if (cgraph_function_possibly_inlined_p (decl))
21810         add_AT_unsigned (old_die, DW_AT_inline, DW_INL_inlined);
21811       else
21812         add_AT_unsigned (old_die, DW_AT_inline, DW_INL_not_inlined);
21813     }
21814
21815   if (DECL_DECLARED_INLINE_P (decl)
21816       && lookup_attribute ("artificial", DECL_ATTRIBUTES (decl)))
21817     add_AT_flag (old_die, DW_AT_artificial, 1);
21818
21819   set_decl_origin_self (decl);
21820 }
21821
21822 /* Helper function of premark_used_types() which gets called through
21823    htab_traverse.
21824
21825    Marks the DIE of a given type in *SLOT as perennial, so it never gets
21826    marked as unused by prune_unused_types.  */
21827
21828 bool
21829 premark_used_types_helper (tree const &type, void *)
21830 {
21831   dw_die_ref die;
21832
21833   die = lookup_type_die (type);
21834   if (die != NULL)
21835     die->die_perennial_p = 1;
21836   return true;
21837 }
21838
21839 /* Helper function of premark_types_used_by_global_vars which gets called
21840    through htab_traverse.
21841
21842    Marks the DIE of a given type in *SLOT as perennial, so it never gets
21843    marked as unused by prune_unused_types. The DIE of the type is marked
21844    only if the global variable using the type will actually be emitted.  */
21845
21846 int
21847 premark_types_used_by_global_vars_helper (types_used_by_vars_entry **slot,
21848                                           void *)
21849 {
21850   struct types_used_by_vars_entry *entry;
21851   dw_die_ref die;
21852
21853   entry = (struct types_used_by_vars_entry *) *slot;
21854   gcc_assert (entry->type != NULL
21855               && entry->var_decl != NULL);
21856   die = lookup_type_die (entry->type);
21857   if (die)
21858     {
21859       /* Ask cgraph if the global variable really is to be emitted.
21860          If yes, then we'll keep the DIE of ENTRY->TYPE.  */
21861       varpool_node *node = varpool_node::get (entry->var_decl);
21862       if (node && node->definition)
21863         {
21864           die->die_perennial_p = 1;
21865           /* Keep the parent DIEs as well.  */
21866           while ((die = die->die_parent) && die->die_perennial_p == 0)
21867             die->die_perennial_p = 1;
21868         }
21869     }
21870   return 1;
21871 }
21872
21873 /* Mark all members of used_types_hash as perennial.  */
21874
21875 static void
21876 premark_used_types (struct function *fun)
21877 {
21878   if (fun && fun->used_types_hash)
21879     fun->used_types_hash->traverse<void *, premark_used_types_helper> (NULL);
21880 }
21881
21882 /* Mark all members of types_used_by_vars_entry as perennial.  */
21883
21884 static void
21885 premark_types_used_by_global_vars (void)
21886 {
21887   if (types_used_by_vars_hash)
21888     types_used_by_vars_hash
21889       ->traverse<void *, premark_types_used_by_global_vars_helper> (NULL);
21890 }
21891
21892 /* Generate a DW_TAG_call_site DIE in function DECL under SUBR_DIE
21893    for CA_LOC call arg loc node.  */
21894
21895 static dw_die_ref
21896 gen_call_site_die (tree decl, dw_die_ref subr_die,
21897                    struct call_arg_loc_node *ca_loc)
21898 {
21899   dw_die_ref stmt_die = NULL, die;
21900   tree block = ca_loc->block;
21901
21902   while (block
21903          && block != DECL_INITIAL (decl)
21904          && TREE_CODE (block) == BLOCK)
21905     {
21906       stmt_die = BLOCK_DIE (block);
21907       if (stmt_die)
21908         break;
21909       block = BLOCK_SUPERCONTEXT (block);
21910     }
21911   if (stmt_die == NULL)
21912     stmt_die = subr_die;
21913   die = new_die (dwarf_TAG (DW_TAG_call_site), stmt_die, NULL_TREE);
21914   add_AT_lbl_id (die, dwarf_AT (DW_AT_call_return_pc), ca_loc->label);
21915   if (ca_loc->tail_call_p)
21916     add_AT_flag (die, dwarf_AT (DW_AT_call_tail_call), 1);
21917   if (ca_loc->symbol_ref)
21918     {
21919       dw_die_ref tdie = lookup_decl_die (SYMBOL_REF_DECL (ca_loc->symbol_ref));
21920       if (tdie)
21921         add_AT_die_ref (die, dwarf_AT (DW_AT_call_origin), tdie);
21922       else
21923         add_AT_addr (die, dwarf_AT (DW_AT_call_origin), ca_loc->symbol_ref,
21924                      false);
21925     }
21926   return die;
21927 }
21928
21929 /* Generate a DIE to represent a declared function (either file-scope or
21930    block-local).  */
21931
21932 static void
21933 gen_subprogram_die (tree decl, dw_die_ref context_die)
21934 {
21935   tree origin = decl_ultimate_origin (decl);
21936   dw_die_ref subr_die;
21937   dw_die_ref old_die = lookup_decl_die (decl);
21938
21939   /* This function gets called multiple times for different stages of
21940      the debug process.  For example, for func() in this code:
21941
21942         namespace S
21943         {
21944           void func() { ... }
21945         }
21946
21947      ...we get called 4 times.  Twice in early debug and twice in
21948      late debug:
21949
21950      Early debug
21951      -----------
21952
21953        1. Once while generating func() within the namespace.  This is
21954           the declaration.  The declaration bit below is set, as the
21955           context is the namespace.
21956
21957           A new DIE will be generated with DW_AT_declaration set.
21958
21959        2. Once for func() itself.  This is the specification.  The
21960           declaration bit below is clear as the context is the CU.
21961
21962           We will use the cached DIE from (1) to create a new DIE with
21963           DW_AT_specification pointing to the declaration in (1).
21964
21965      Late debug via rest_of_handle_final()
21966      -------------------------------------
21967
21968        3. Once generating func() within the namespace.  This is also the
21969           declaration, as in (1), but this time we will early exit below
21970           as we have a cached DIE and a declaration needs no additional
21971           annotations (no locations), as the source declaration line
21972           info is enough.
21973
21974        4. Once for func() itself.  As in (2), this is the specification,
21975           but this time we will re-use the cached DIE, and just annotate
21976           it with the location information that should now be available.
21977
21978      For something without namespaces, but with abstract instances, we
21979      are also called a multiple times:
21980
21981         class Base
21982         {
21983         public:
21984           Base ();        // constructor declaration (1)
21985         };
21986
21987         Base::Base () { } // constructor specification (2)
21988
21989     Early debug
21990     -----------
21991
21992        1. Once for the Base() constructor by virtue of it being a
21993           member of the Base class.  This is done via
21994           rest_of_type_compilation.
21995
21996           This is a declaration, so a new DIE will be created with
21997           DW_AT_declaration.
21998
21999        2. Once for the Base() constructor definition, but this time
22000           while generating the abstract instance of the base
22001           constructor (__base_ctor) which is being generated via early
22002           debug of reachable functions.
22003
22004           Even though we have a cached version of the declaration (1),
22005           we will create a DW_AT_specification of the declaration DIE
22006           in (1).
22007
22008        3. Once for the __base_ctor itself, but this time, we generate
22009           an DW_AT_abstract_origin version of the DW_AT_specification in
22010           (2).
22011
22012     Late debug via rest_of_handle_final
22013     -----------------------------------
22014
22015        4. One final time for the __base_ctor (which will have a cached
22016           DIE with DW_AT_abstract_origin created in (3).  This time,
22017           we will just annotate the location information now
22018           available.
22019   */
22020   int declaration = (current_function_decl != decl
22021                      || class_or_namespace_scope_p (context_die));
22022
22023   /* Now that the C++ front end lazily declares artificial member fns, we
22024      might need to retrofit the declaration into its class.  */
22025   if (!declaration && !origin && !old_die
22026       && DECL_CONTEXT (decl) && TYPE_P (DECL_CONTEXT (decl))
22027       && !class_or_namespace_scope_p (context_die)
22028       && debug_info_level > DINFO_LEVEL_TERSE)
22029     old_die = force_decl_die (decl);
22030
22031   /* A concrete instance, tag a new DIE with DW_AT_abstract_origin.  */
22032   if (origin != NULL)
22033     {
22034       gcc_assert (!declaration || local_scope_p (context_die));
22035
22036       /* Fixup die_parent for the abstract instance of a nested
22037          inline function.  */
22038       if (old_die && old_die->die_parent == NULL)
22039         add_child_die (context_die, old_die);
22040
22041       if (old_die && get_AT_ref (old_die, DW_AT_abstract_origin))
22042         {
22043           /* If we have a DW_AT_abstract_origin we have a working
22044              cached version.  */
22045           subr_die = old_die;
22046         }
22047       else
22048         {
22049           subr_die = new_die (DW_TAG_subprogram, context_die, decl);
22050           add_abstract_origin_attribute (subr_die, origin);
22051           /*  This is where the actual code for a cloned function is.
22052               Let's emit linkage name attribute for it.  This helps
22053               debuggers to e.g, set breakpoints into
22054               constructors/destructors when the user asks "break
22055               K::K".  */
22056           add_linkage_name (subr_die, decl);
22057         }
22058     }
22059   /* A cached copy, possibly from early dwarf generation.  Reuse as
22060      much as possible.  */
22061   else if (old_die)
22062     {
22063       /* A declaration that has been previously dumped needs no
22064          additional information.  */
22065       if (declaration)
22066         return;
22067
22068       if (!get_AT_flag (old_die, DW_AT_declaration)
22069           /* We can have a normal definition following an inline one in the
22070              case of redefinition of GNU C extern inlines.
22071              It seems reasonable to use AT_specification in this case.  */
22072           && !get_AT (old_die, DW_AT_inline))
22073         {
22074           /* Detect and ignore this case, where we are trying to output
22075              something we have already output.  */
22076           if (get_AT (old_die, DW_AT_low_pc)
22077               || get_AT (old_die, DW_AT_ranges))
22078             return;
22079
22080           /* If we have no location information, this must be a
22081              partially generated DIE from early dwarf generation.
22082              Fall through and generate it.  */
22083         }
22084
22085       /* If the definition comes from the same place as the declaration,
22086          maybe use the old DIE.  We always want the DIE for this function
22087          that has the *_pc attributes to be under comp_unit_die so the
22088          debugger can find it.  We also need to do this for abstract
22089          instances of inlines, since the spec requires the out-of-line copy
22090          to have the same parent.  For local class methods, this doesn't
22091          apply; we just use the old DIE.  */
22092       expanded_location s = expand_location (DECL_SOURCE_LOCATION (decl));
22093       struct dwarf_file_data * file_index = lookup_filename (s.file);
22094       if ((is_cu_die (old_die->die_parent)
22095            /* This condition fixes the inconsistency/ICE with the
22096               following Fortran test (or some derivative thereof) while
22097               building libgfortran:
22098
22099                  module some_m
22100                  contains
22101                     logical function funky (FLAG)
22102                       funky = .true.
22103                    end function
22104                  end module
22105            */
22106            || (old_die->die_parent
22107                && old_die->die_parent->die_tag == DW_TAG_module)
22108            || context_die == NULL)
22109            && (DECL_ARTIFICIAL (decl)
22110                /* The location attributes may be in the abstract origin
22111                   which in the case of LTO might be not available to
22112                   look at.  */
22113                || get_AT (old_die, DW_AT_abstract_origin)
22114                || (get_AT_file (old_die, DW_AT_decl_file) == file_index
22115                    && (get_AT_unsigned (old_die, DW_AT_decl_line)
22116                        == (unsigned) s.line)
22117                    && (!debug_column_info
22118                        || s.column == 0
22119                        || (get_AT_unsigned (old_die, DW_AT_decl_column)
22120                            == (unsigned) s.column)))))
22121         {
22122           subr_die = old_die;
22123
22124           /* Clear out the declaration attribute, but leave the
22125              parameters so they can be augmented with location
22126              information later.  Unless this was a declaration, in
22127              which case, wipe out the nameless parameters and recreate
22128              them further down.  */
22129           if (remove_AT (subr_die, DW_AT_declaration))
22130             {
22131
22132               remove_AT (subr_die, DW_AT_object_pointer);
22133               remove_child_TAG (subr_die, DW_TAG_formal_parameter);
22134             }
22135         }
22136       /* Make a specification pointing to the previously built
22137          declaration.  */
22138       else
22139         {
22140           subr_die = new_die (DW_TAG_subprogram, context_die, decl);
22141           add_AT_specification (subr_die, old_die);
22142           add_pubname (decl, subr_die);
22143           if (get_AT_file (old_die, DW_AT_decl_file) != file_index)
22144             add_AT_file (subr_die, DW_AT_decl_file, file_index);
22145           if (get_AT_unsigned (old_die, DW_AT_decl_line) != (unsigned) s.line)
22146             add_AT_unsigned (subr_die, DW_AT_decl_line, s.line);
22147           if (debug_column_info
22148               && s.column
22149               && (get_AT_unsigned (old_die, DW_AT_decl_column)
22150                   != (unsigned) s.column))
22151             add_AT_unsigned (subr_die, DW_AT_decl_column, s.column);
22152
22153           /* If the prototype had an 'auto' or 'decltype(auto)' return type,
22154              emit the real type on the definition die.  */
22155           if (is_cxx () && debug_info_level > DINFO_LEVEL_TERSE)
22156             {
22157               dw_die_ref die = get_AT_ref (old_die, DW_AT_type);
22158               if (die == auto_die || die == decltype_auto_die)
22159                 add_type_attribute (subr_die, TREE_TYPE (TREE_TYPE (decl)),
22160                                     TYPE_UNQUALIFIED, false, context_die);
22161             }
22162
22163           /* When we process the method declaration, we haven't seen
22164              the out-of-class defaulted definition yet, so we have to
22165              recheck now.  */
22166           if ((dwarf_version >= 5 || ! dwarf_strict)
22167               && !get_AT (subr_die, DW_AT_defaulted))
22168             {
22169               int defaulted
22170                 = lang_hooks.decls.decl_dwarf_attribute (decl,
22171                                                          DW_AT_defaulted);
22172               if (defaulted != -1)
22173                 {
22174                   /* Other values must have been handled before.  */
22175                   gcc_assert (defaulted == DW_DEFAULTED_out_of_class);
22176                   add_AT_unsigned (subr_die, DW_AT_defaulted, defaulted);
22177                 }
22178             }
22179         }
22180     }
22181   /* Create a fresh DIE for anything else.  */
22182   else
22183     {
22184       subr_die = new_die (DW_TAG_subprogram, context_die, decl);
22185
22186       if (TREE_PUBLIC (decl))
22187         add_AT_flag (subr_die, DW_AT_external, 1);
22188
22189       add_name_and_src_coords_attributes (subr_die, decl);
22190       add_pubname (decl, subr_die);
22191       if (debug_info_level > DINFO_LEVEL_TERSE)
22192         {
22193           add_prototyped_attribute (subr_die, TREE_TYPE (decl));
22194           add_type_attribute (subr_die, TREE_TYPE (TREE_TYPE (decl)),
22195                               TYPE_UNQUALIFIED, false, context_die);
22196         }
22197
22198       add_pure_or_virtual_attribute (subr_die, decl);
22199       if (DECL_ARTIFICIAL (decl))
22200         add_AT_flag (subr_die, DW_AT_artificial, 1);
22201
22202       if (TREE_THIS_VOLATILE (decl) && (dwarf_version >= 5 || !dwarf_strict))
22203         add_AT_flag (subr_die, DW_AT_noreturn, 1);
22204
22205       add_alignment_attribute (subr_die, decl);
22206
22207       add_accessibility_attribute (subr_die, decl);
22208     }
22209
22210   /* Unless we have an existing non-declaration DIE, equate the new
22211      DIE.  */
22212   if (!old_die || is_declaration_die (old_die))
22213     equate_decl_number_to_die (decl, subr_die);
22214
22215   if (declaration)
22216     {
22217       if (!old_die || !get_AT (old_die, DW_AT_inline))
22218         {
22219           add_AT_flag (subr_die, DW_AT_declaration, 1);
22220
22221           /* If this is an explicit function declaration then generate
22222              a DW_AT_explicit attribute.  */
22223           if ((dwarf_version >= 3 || !dwarf_strict)
22224               && lang_hooks.decls.decl_dwarf_attribute (decl,
22225                                                         DW_AT_explicit) == 1)
22226             add_AT_flag (subr_die, DW_AT_explicit, 1);
22227
22228           /* If this is a C++11 deleted special function member then generate
22229              a DW_AT_deleted attribute.  */
22230           if ((dwarf_version >= 5 || !dwarf_strict)
22231               && lang_hooks.decls.decl_dwarf_attribute (decl,
22232                                                         DW_AT_deleted) == 1)
22233             add_AT_flag (subr_die, DW_AT_deleted, 1);
22234
22235           /* If this is a C++11 defaulted special function member then
22236              generate a DW_AT_defaulted attribute.  */
22237           if (dwarf_version >= 5 || !dwarf_strict)
22238             {
22239               int defaulted
22240                 = lang_hooks.decls.decl_dwarf_attribute (decl,
22241                                                          DW_AT_defaulted);
22242               if (defaulted != -1)
22243                 add_AT_unsigned (subr_die, DW_AT_defaulted, defaulted);
22244             }
22245
22246           /* If this is a C++11 non-static member function with & ref-qualifier
22247              then generate a DW_AT_reference attribute.  */
22248           if ((dwarf_version >= 5 || !dwarf_strict)
22249               && lang_hooks.decls.decl_dwarf_attribute (decl,
22250                                                         DW_AT_reference) == 1)
22251             add_AT_flag (subr_die, DW_AT_reference, 1);
22252
22253           /* If this is a C++11 non-static member function with &&
22254              ref-qualifier then generate a DW_AT_reference attribute.  */
22255           if ((dwarf_version >= 5 || !dwarf_strict)
22256               && lang_hooks.decls.decl_dwarf_attribute (decl,
22257                                                         DW_AT_rvalue_reference)
22258                  == 1)
22259             add_AT_flag (subr_die, DW_AT_rvalue_reference, 1);
22260         }
22261     }
22262   /* For non DECL_EXTERNALs, if range information is available, fill
22263      the DIE with it.  */
22264   else if (!DECL_EXTERNAL (decl) && !early_dwarf)
22265     {
22266       HOST_WIDE_INT cfa_fb_offset;
22267
22268       struct function *fun = DECL_STRUCT_FUNCTION (decl);
22269
22270       if (!crtl->has_bb_partition)
22271         {
22272           dw_fde_ref fde = fun->fde;
22273           if (fde->dw_fde_begin)
22274             {
22275               /* We have already generated the labels.  */
22276              add_AT_low_high_pc (subr_die, fde->dw_fde_begin,
22277                                  fde->dw_fde_end, false);
22278             }
22279           else
22280             {
22281               /* Create start/end labels and add the range.  */
22282               char label_id_low[MAX_ARTIFICIAL_LABEL_BYTES];
22283               char label_id_high[MAX_ARTIFICIAL_LABEL_BYTES];
22284               ASM_GENERATE_INTERNAL_LABEL (label_id_low, FUNC_BEGIN_LABEL,
22285                                            current_function_funcdef_no);
22286               ASM_GENERATE_INTERNAL_LABEL (label_id_high, FUNC_END_LABEL,
22287                                            current_function_funcdef_no);
22288              add_AT_low_high_pc (subr_die, label_id_low, label_id_high,
22289                                  false);
22290             }
22291
22292 #if VMS_DEBUGGING_INFO
22293       /* HP OpenVMS Industry Standard 64: DWARF Extensions
22294          Section 2.3 Prologue and Epilogue Attributes:
22295          When a breakpoint is set on entry to a function, it is generally
22296          desirable for execution to be suspended, not on the very first
22297          instruction of the function, but rather at a point after the
22298          function's frame has been set up, after any language defined local
22299          declaration processing has been completed, and before execution of
22300          the first statement of the function begins. Debuggers generally
22301          cannot properly determine where this point is.  Similarly for a
22302          breakpoint set on exit from a function. The prologue and epilogue
22303          attributes allow a compiler to communicate the location(s) to use.  */
22304
22305       {
22306         if (fde->dw_fde_vms_end_prologue)
22307           add_AT_vms_delta (subr_die, DW_AT_HP_prologue,
22308             fde->dw_fde_begin, fde->dw_fde_vms_end_prologue);
22309
22310         if (fde->dw_fde_vms_begin_epilogue)
22311           add_AT_vms_delta (subr_die, DW_AT_HP_epilogue,
22312             fde->dw_fde_begin, fde->dw_fde_vms_begin_epilogue);
22313       }
22314 #endif
22315
22316         }
22317       else
22318         {
22319           /* Generate pubnames entries for the split function code ranges.  */
22320           dw_fde_ref fde = fun->fde;
22321
22322           if (fde->dw_fde_second_begin)
22323             {
22324               if (dwarf_version >= 3 || !dwarf_strict)
22325                 {
22326                   /* We should use ranges for non-contiguous code section 
22327                      addresses.  Use the actual code range for the initial
22328                      section, since the HOT/COLD labels might precede an 
22329                      alignment offset.  */
22330                   bool range_list_added = false;
22331                   add_ranges_by_labels (subr_die, fde->dw_fde_begin,
22332                                         fde->dw_fde_end, &range_list_added,
22333                                         false);
22334                   add_ranges_by_labels (subr_die, fde->dw_fde_second_begin,
22335                                         fde->dw_fde_second_end,
22336                                         &range_list_added, false);
22337                   if (range_list_added)
22338                     add_ranges (NULL);
22339                 }
22340               else
22341                 {
22342                   /* There is no real support in DW2 for this .. so we make
22343                      a work-around.  First, emit the pub name for the segment
22344                      containing the function label.  Then make and emit a
22345                      simplified subprogram DIE for the second segment with the
22346                      name pre-fixed by __hot/cold_sect_of_.  We use the same
22347                      linkage name for the second die so that gdb will find both
22348                      sections when given "b foo".  */
22349                   const char *name = NULL;
22350                   tree decl_name = DECL_NAME (decl);
22351                   dw_die_ref seg_die;
22352
22353                   /* Do the 'primary' section.   */
22354                   add_AT_low_high_pc (subr_die, fde->dw_fde_begin,
22355                                       fde->dw_fde_end, false);
22356
22357                   /* Build a minimal DIE for the secondary section.  */
22358                   seg_die = new_die (DW_TAG_subprogram,
22359                                      subr_die->die_parent, decl);
22360
22361                   if (TREE_PUBLIC (decl))
22362                     add_AT_flag (seg_die, DW_AT_external, 1);
22363
22364                   if (decl_name != NULL 
22365                       && IDENTIFIER_POINTER (decl_name) != NULL)
22366                     {
22367                       name = dwarf2_name (decl, 1);
22368                       if (! DECL_ARTIFICIAL (decl))
22369                         add_src_coords_attributes (seg_die, decl);
22370
22371                       add_linkage_name (seg_die, decl);
22372                     }
22373                   gcc_assert (name != NULL);
22374                   add_pure_or_virtual_attribute (seg_die, decl);
22375                   if (DECL_ARTIFICIAL (decl))
22376                     add_AT_flag (seg_die, DW_AT_artificial, 1);
22377
22378                   name = concat ("__second_sect_of_", name, NULL); 
22379                   add_AT_low_high_pc (seg_die, fde->dw_fde_second_begin,
22380                                       fde->dw_fde_second_end, false);
22381                   add_name_attribute (seg_die, name);
22382                   if (want_pubnames ())
22383                     add_pubname_string (name, seg_die);
22384                 }
22385             }
22386           else
22387            add_AT_low_high_pc (subr_die, fde->dw_fde_begin, fde->dw_fde_end,
22388                                false);
22389         }
22390
22391       cfa_fb_offset = CFA_FRAME_BASE_OFFSET (decl);
22392
22393       /* We define the "frame base" as the function's CFA.  This is more
22394          convenient for several reasons: (1) It's stable across the prologue
22395          and epilogue, which makes it better than just a frame pointer,
22396          (2) With dwarf3, there exists a one-byte encoding that allows us
22397          to reference the .debug_frame data by proxy, but failing that,
22398          (3) We can at least reuse the code inspection and interpretation
22399          code that determines the CFA position at various points in the
22400          function.  */
22401       if (dwarf_version >= 3 && targetm.debug_unwind_info () == UI_DWARF2)
22402         {
22403           dw_loc_descr_ref op = new_loc_descr (DW_OP_call_frame_cfa, 0, 0);
22404           add_AT_loc (subr_die, DW_AT_frame_base, op);
22405         }
22406       else
22407         {
22408           dw_loc_list_ref list = convert_cfa_to_fb_loc_list (cfa_fb_offset);
22409           if (list->dw_loc_next)
22410             add_AT_loc_list (subr_die, DW_AT_frame_base, list);
22411           else
22412             add_AT_loc (subr_die, DW_AT_frame_base, list->expr);
22413         }
22414
22415       /* Compute a displacement from the "steady-state frame pointer" to
22416          the CFA.  The former is what all stack slots and argument slots
22417          will reference in the rtl; the latter is what we've told the
22418          debugger about.  We'll need to adjust all frame_base references
22419          by this displacement.  */
22420       compute_frame_pointer_to_fb_displacement (cfa_fb_offset);
22421
22422       if (fun->static_chain_decl)
22423         {
22424           /* DWARF requires here a location expression that computes the
22425              address of the enclosing subprogram's frame base.  The machinery
22426              in tree-nested.c is supposed to store this specific address in the
22427              last field of the FRAME record.  */
22428           const tree frame_type
22429             = TREE_TYPE (TREE_TYPE (fun->static_chain_decl));
22430           const tree fb_decl = tree_last (TYPE_FIELDS (frame_type));
22431
22432           tree fb_expr
22433             = build1 (INDIRECT_REF, frame_type, fun->static_chain_decl);
22434           fb_expr = build3 (COMPONENT_REF, TREE_TYPE (fb_decl),
22435                             fb_expr, fb_decl, NULL_TREE);
22436
22437           add_AT_location_description (subr_die, DW_AT_static_link,
22438                                        loc_list_from_tree (fb_expr, 0, NULL));
22439         }
22440
22441       resolve_variable_values ();
22442     }
22443
22444   /* Generate child dies for template paramaters.  */
22445   if (early_dwarf && debug_info_level > DINFO_LEVEL_TERSE)
22446     gen_generic_params_dies (decl);
22447
22448   /* Now output descriptions of the arguments for this function. This gets
22449      (unnecessarily?) complex because of the fact that the DECL_ARGUMENT list
22450      for a FUNCTION_DECL doesn't indicate cases where there was a trailing
22451      `...' at the end of the formal parameter list.  In order to find out if
22452      there was a trailing ellipsis or not, we must instead look at the type
22453      associated with the FUNCTION_DECL.  This will be a node of type
22454      FUNCTION_TYPE. If the chain of type nodes hanging off of this
22455      FUNCTION_TYPE node ends with a void_type_node then there should *not* be
22456      an ellipsis at the end.  */
22457
22458   /* In the case where we are describing a mere function declaration, all we
22459      need to do here (and all we *can* do here) is to describe the *types* of
22460      its formal parameters.  */
22461   if (debug_info_level <= DINFO_LEVEL_TERSE)
22462     ;
22463   else if (declaration)
22464     gen_formal_types_die (decl, subr_die);
22465   else
22466     {
22467       /* Generate DIEs to represent all known formal parameters.  */
22468       tree parm = DECL_ARGUMENTS (decl);
22469       tree generic_decl = early_dwarf
22470         ? lang_hooks.decls.get_generic_function_decl (decl) : NULL;
22471       tree generic_decl_parm = generic_decl
22472                                 ? DECL_ARGUMENTS (generic_decl)
22473                                 : NULL;
22474
22475       /* Now we want to walk the list of parameters of the function and
22476          emit their relevant DIEs.
22477
22478          We consider the case of DECL being an instance of a generic function
22479          as well as it being a normal function.
22480
22481          If DECL is an instance of a generic function we walk the
22482          parameters of the generic function declaration _and_ the parameters of
22483          DECL itself. This is useful because we want to emit specific DIEs for
22484          function parameter packs and those are declared as part of the
22485          generic function declaration. In that particular case,
22486          the parameter pack yields a DW_TAG_GNU_formal_parameter_pack DIE.
22487          That DIE has children DIEs representing the set of arguments
22488          of the pack. Note that the set of pack arguments can be empty.
22489          In that case, the DW_TAG_GNU_formal_parameter_pack DIE will not have any
22490          children DIE.
22491
22492          Otherwise, we just consider the parameters of DECL.  */
22493       while (generic_decl_parm || parm)
22494         {
22495           if (generic_decl_parm
22496               && lang_hooks.function_parameter_pack_p (generic_decl_parm))
22497             gen_formal_parameter_pack_die (generic_decl_parm,
22498                                            parm, subr_die,
22499                                            &parm);
22500           else if (parm && !POINTER_BOUNDS_P (parm))
22501             {
22502               dw_die_ref parm_die = gen_decl_die (parm, NULL, NULL, subr_die);
22503
22504               if (early_dwarf
22505                   && parm == DECL_ARGUMENTS (decl)
22506                   && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE
22507                   && parm_die
22508                   && (dwarf_version >= 3 || !dwarf_strict))
22509                 add_AT_die_ref (subr_die, DW_AT_object_pointer, parm_die);
22510
22511               parm = DECL_CHAIN (parm);
22512             }
22513           else if (parm)
22514             parm = DECL_CHAIN (parm);
22515
22516           if (generic_decl_parm)
22517             generic_decl_parm = DECL_CHAIN (generic_decl_parm);
22518         }
22519
22520       /* Decide whether we need an unspecified_parameters DIE at the end.
22521          There are 2 more cases to do this for: 1) the ansi ... declaration -
22522          this is detectable when the end of the arg list is not a
22523          void_type_node 2) an unprototyped function declaration (not a
22524          definition).  This just means that we have no info about the
22525          parameters at all.  */
22526       if (early_dwarf)
22527         {
22528           if (prototype_p (TREE_TYPE (decl)))
22529             {
22530               /* This is the prototyped case, check for....  */
22531               if (stdarg_p (TREE_TYPE (decl)))
22532                 gen_unspecified_parameters_die (decl, subr_die);
22533             }
22534           else if (DECL_INITIAL (decl) == NULL_TREE)
22535             gen_unspecified_parameters_die (decl, subr_die);
22536         }
22537     }
22538
22539   if (subr_die != old_die)
22540     /* Add the calling convention attribute if requested.  */
22541     add_calling_convention_attribute (subr_die, decl);
22542
22543   /* Output Dwarf info for all of the stuff within the body of the function
22544      (if it has one - it may be just a declaration).
22545
22546      OUTER_SCOPE is a pointer to the outermost BLOCK node created to represent
22547      a function.  This BLOCK actually represents the outermost binding contour
22548      for the function, i.e. the contour in which the function's formal
22549      parameters and labels get declared. Curiously, it appears that the front
22550      end doesn't actually put the PARM_DECL nodes for the current function onto
22551      the BLOCK_VARS list for this outer scope, but are strung off of the
22552      DECL_ARGUMENTS list for the function instead.
22553
22554      The BLOCK_VARS list for the `outer_scope' does provide us with a list of
22555      the LABEL_DECL nodes for the function however, and we output DWARF info
22556      for those in decls_for_scope.  Just within the `outer_scope' there will be
22557      a BLOCK node representing the function's outermost pair of curly braces,
22558      and any blocks used for the base and member initializers of a C++
22559      constructor function.  */
22560   tree outer_scope = DECL_INITIAL (decl);
22561   if (! declaration && outer_scope && TREE_CODE (outer_scope) != ERROR_MARK)
22562     {
22563       int call_site_note_count = 0;
22564       int tail_call_site_note_count = 0;
22565
22566       /* Emit a DW_TAG_variable DIE for a named return value.  */
22567       if (DECL_NAME (DECL_RESULT (decl)))
22568         gen_decl_die (DECL_RESULT (decl), NULL, NULL, subr_die);
22569
22570       /* The first time through decls_for_scope we will generate the
22571          DIEs for the locals.  The second time, we fill in the
22572          location info.  */
22573       decls_for_scope (outer_scope, subr_die);
22574
22575       if (call_arg_locations && (!dwarf_strict || dwarf_version >= 5))
22576         {
22577           struct call_arg_loc_node *ca_loc;
22578           for (ca_loc = call_arg_locations; ca_loc; ca_loc = ca_loc->next)
22579             {
22580               dw_die_ref die = NULL;
22581               rtx tloc = NULL_RTX, tlocc = NULL_RTX;
22582               rtx arg, next_arg;
22583
22584               for (arg = (ca_loc->call_arg_loc_note != NULL_RTX
22585                           ? NOTE_VAR_LOCATION (ca_loc->call_arg_loc_note)
22586                           : NULL_RTX);
22587                    arg; arg = next_arg)
22588                 {
22589                   dw_loc_descr_ref reg, val;
22590                   machine_mode mode = GET_MODE (XEXP (XEXP (arg, 0), 1));
22591                   dw_die_ref cdie, tdie = NULL;
22592
22593                   next_arg = XEXP (arg, 1);
22594                   if (REG_P (XEXP (XEXP (arg, 0), 0))
22595                       && next_arg
22596                       && MEM_P (XEXP (XEXP (next_arg, 0), 0))
22597                       && REG_P (XEXP (XEXP (XEXP (next_arg, 0), 0), 0))
22598                       && REGNO (XEXP (XEXP (arg, 0), 0))
22599                          == REGNO (XEXP (XEXP (XEXP (next_arg, 0), 0), 0)))
22600                     next_arg = XEXP (next_arg, 1);
22601                   if (mode == VOIDmode)
22602                     {
22603                       mode = GET_MODE (XEXP (XEXP (arg, 0), 0));
22604                       if (mode == VOIDmode)
22605                         mode = GET_MODE (XEXP (arg, 0));
22606                     }
22607                   if (mode == VOIDmode || mode == BLKmode)
22608                     continue;
22609                   /* Get dynamic information about call target only if we
22610                      have no static information: we cannot generate both
22611                      DW_AT_call_origin and DW_AT_call_target
22612                      attributes.  */
22613                   if (ca_loc->symbol_ref == NULL_RTX)
22614                     {
22615                       if (XEXP (XEXP (arg, 0), 0) == pc_rtx)
22616                         {
22617                           tloc = XEXP (XEXP (arg, 0), 1);
22618                           continue;
22619                         }
22620                       else if (GET_CODE (XEXP (XEXP (arg, 0), 0)) == CLOBBER
22621                                && XEXP (XEXP (XEXP (arg, 0), 0), 0) == pc_rtx)
22622                         {
22623                           tlocc = XEXP (XEXP (arg, 0), 1);
22624                           continue;
22625                         }
22626                     }
22627                   reg = NULL;
22628                   if (REG_P (XEXP (XEXP (arg, 0), 0)))
22629                     reg = reg_loc_descriptor (XEXP (XEXP (arg, 0), 0),
22630                                               VAR_INIT_STATUS_INITIALIZED);
22631                   else if (MEM_P (XEXP (XEXP (arg, 0), 0)))
22632                     {
22633                       rtx mem = XEXP (XEXP (arg, 0), 0);
22634                       reg = mem_loc_descriptor (XEXP (mem, 0),
22635                                                 get_address_mode (mem),
22636                                                 GET_MODE (mem),
22637                                                 VAR_INIT_STATUS_INITIALIZED);
22638                     }
22639                   else if (GET_CODE (XEXP (XEXP (arg, 0), 0))
22640                            == DEBUG_PARAMETER_REF)
22641                     {
22642                       tree tdecl
22643                         = DEBUG_PARAMETER_REF_DECL (XEXP (XEXP (arg, 0), 0));
22644                       tdie = lookup_decl_die (tdecl);
22645                       if (tdie == NULL)
22646                         continue;
22647                     }
22648                   else
22649                     continue;
22650                   if (reg == NULL
22651                       && GET_CODE (XEXP (XEXP (arg, 0), 0))
22652                          != DEBUG_PARAMETER_REF)
22653                     continue;
22654                   val = mem_loc_descriptor (XEXP (XEXP (arg, 0), 1), mode,
22655                                             VOIDmode,
22656                                             VAR_INIT_STATUS_INITIALIZED);
22657                   if (val == NULL)
22658                     continue;
22659                   if (die == NULL)
22660                     die = gen_call_site_die (decl, subr_die, ca_loc);
22661                   cdie = new_die (dwarf_TAG (DW_TAG_call_site_parameter), die,
22662                                   NULL_TREE);
22663                   if (reg != NULL)
22664                     add_AT_loc (cdie, DW_AT_location, reg);
22665                   else if (tdie != NULL)
22666                     add_AT_die_ref (cdie, dwarf_AT (DW_AT_call_parameter),
22667                                     tdie);
22668                   add_AT_loc (cdie, dwarf_AT (DW_AT_call_value), val);
22669                   if (next_arg != XEXP (arg, 1))
22670                     {
22671                       mode = GET_MODE (XEXP (XEXP (XEXP (arg, 1), 0), 1));
22672                       if (mode == VOIDmode)
22673                         mode = GET_MODE (XEXP (XEXP (XEXP (arg, 1), 0), 0));
22674                       val = mem_loc_descriptor (XEXP (XEXP (XEXP (arg, 1),
22675                                                             0), 1),
22676                                                 mode, VOIDmode,
22677                                                 VAR_INIT_STATUS_INITIALIZED);
22678                       if (val != NULL)
22679                         add_AT_loc (cdie, dwarf_AT (DW_AT_call_data_value),
22680                                     val);
22681                     }
22682                 }
22683               if (die == NULL
22684                   && (ca_loc->symbol_ref || tloc))
22685                 die = gen_call_site_die (decl, subr_die, ca_loc);
22686               if (die != NULL && (tloc != NULL_RTX || tlocc != NULL_RTX))
22687                 {
22688                   dw_loc_descr_ref tval = NULL;
22689
22690                   if (tloc != NULL_RTX)
22691                     tval = mem_loc_descriptor (tloc,
22692                                                GET_MODE (tloc) == VOIDmode
22693                                                ? Pmode : GET_MODE (tloc),
22694                                                VOIDmode,
22695                                                VAR_INIT_STATUS_INITIALIZED);
22696                   if (tval)
22697                     add_AT_loc (die, dwarf_AT (DW_AT_call_target), tval);
22698                   else if (tlocc != NULL_RTX)
22699                     {
22700                       tval = mem_loc_descriptor (tlocc,
22701                                                  GET_MODE (tlocc) == VOIDmode
22702                                                  ? Pmode : GET_MODE (tlocc),
22703                                                  VOIDmode,
22704                                                  VAR_INIT_STATUS_INITIALIZED);
22705                       if (tval)
22706                         add_AT_loc (die,
22707                                     dwarf_AT (DW_AT_call_target_clobbered),
22708                                     tval);
22709                     }
22710                 }
22711               if (die != NULL)
22712                 {
22713                   call_site_note_count++;
22714                   if (ca_loc->tail_call_p)
22715                     tail_call_site_note_count++;
22716                 }
22717             }
22718         }
22719       call_arg_locations = NULL;
22720       call_arg_loc_last = NULL;
22721       if (tail_call_site_count >= 0
22722           && tail_call_site_count == tail_call_site_note_count
22723           && (!dwarf_strict || dwarf_version >= 5))
22724         {
22725           if (call_site_count >= 0
22726               && call_site_count == call_site_note_count)
22727             add_AT_flag (subr_die, dwarf_AT (DW_AT_call_all_calls), 1);
22728           else
22729             add_AT_flag (subr_die, dwarf_AT (DW_AT_call_all_tail_calls), 1);
22730         }
22731       call_site_count = -1;
22732       tail_call_site_count = -1;
22733     }
22734
22735   /* Mark used types after we have created DIEs for the functions scopes.  */
22736   premark_used_types (DECL_STRUCT_FUNCTION (decl));
22737 }
22738
22739 /* Returns a hash value for X (which really is a die_struct).  */
22740
22741 hashval_t
22742 block_die_hasher::hash (die_struct *d)
22743 {
22744   return (hashval_t) d->decl_id ^ htab_hash_pointer (d->die_parent);
22745 }
22746
22747 /* Return nonzero if decl_id and die_parent of die_struct X is the same
22748    as decl_id and die_parent of die_struct Y.  */
22749
22750 bool
22751 block_die_hasher::equal (die_struct *x, die_struct *y)
22752 {
22753   return x->decl_id == y->decl_id && x->die_parent == y->die_parent;
22754 }
22755
22756 /* Return TRUE if DECL, which may have been previously generated as
22757    OLD_DIE, is a candidate for a DW_AT_specification.  DECLARATION is
22758    true if decl (or its origin) is either an extern declaration or a
22759    class/namespace scoped declaration.
22760
22761    The declare_in_namespace support causes us to get two DIEs for one
22762    variable, both of which are declarations.  We want to avoid
22763    considering one to be a specification, so we must test for
22764    DECLARATION and DW_AT_declaration.  */
22765 static inline bool
22766 decl_will_get_specification_p (dw_die_ref old_die, tree decl, bool declaration)
22767 {
22768   return (old_die && TREE_STATIC (decl) && !declaration
22769           && get_AT_flag (old_die, DW_AT_declaration) == 1);
22770 }
22771
22772 /* Return true if DECL is a local static.  */
22773
22774 static inline bool
22775 local_function_static (tree decl)
22776 {
22777   gcc_assert (VAR_P (decl));
22778   return TREE_STATIC (decl)
22779     && DECL_CONTEXT (decl)
22780     && TREE_CODE (DECL_CONTEXT (decl)) == FUNCTION_DECL;
22781 }
22782
22783 /* Generate a DIE to represent a declared data object.
22784    Either DECL or ORIGIN must be non-null.  */
22785
22786 static void
22787 gen_variable_die (tree decl, tree origin, dw_die_ref context_die)
22788 {
22789   HOST_WIDE_INT off = 0;
22790   tree com_decl;
22791   tree decl_or_origin = decl ? decl : origin;
22792   tree ultimate_origin;
22793   dw_die_ref var_die;
22794   dw_die_ref old_die = decl ? lookup_decl_die (decl) : NULL;
22795   bool declaration = (DECL_EXTERNAL (decl_or_origin)
22796                       || class_or_namespace_scope_p (context_die));
22797   bool specialization_p = false;
22798   bool no_linkage_name = false;
22799
22800   /* While C++ inline static data members have definitions inside of the
22801      class, force the first DIE to be a declaration, then let gen_member_die
22802      reparent it to the class context and call gen_variable_die again
22803      to create the outside of the class DIE for the definition.  */
22804   if (!declaration
22805       && old_die == NULL
22806       && decl
22807       && DECL_CONTEXT (decl)
22808       && TYPE_P (DECL_CONTEXT (decl))
22809       && lang_hooks.decls.decl_dwarf_attribute (decl, DW_AT_inline) != -1)
22810     {
22811       declaration = true;
22812       if (dwarf_version < 5)
22813         no_linkage_name = true;
22814     }
22815
22816   ultimate_origin = decl_ultimate_origin (decl_or_origin);
22817   if (decl || ultimate_origin)
22818     origin = ultimate_origin;
22819   com_decl = fortran_common (decl_or_origin, &off);
22820
22821   /* Symbol in common gets emitted as a child of the common block, in the form
22822      of a data member.  */
22823   if (com_decl)
22824     {
22825       dw_die_ref com_die;
22826       dw_loc_list_ref loc = NULL;
22827       die_node com_die_arg;
22828
22829       var_die = lookup_decl_die (decl_or_origin);
22830       if (var_die)
22831         {
22832           if (! early_dwarf && get_AT (var_die, DW_AT_location) == NULL)
22833             {
22834               loc = loc_list_from_tree (com_decl, off ? 1 : 2, NULL);
22835               if (loc)
22836                 {
22837                   if (off)
22838                     {
22839                       /* Optimize the common case.  */
22840                       if (single_element_loc_list_p (loc)
22841                           && loc->expr->dw_loc_opc == DW_OP_addr
22842                           && loc->expr->dw_loc_next == NULL
22843                           && GET_CODE (loc->expr->dw_loc_oprnd1.v.val_addr)
22844                              == SYMBOL_REF)
22845                         {
22846                           rtx x = loc->expr->dw_loc_oprnd1.v.val_addr;
22847                           loc->expr->dw_loc_oprnd1.v.val_addr
22848                             = plus_constant (GET_MODE (x), x , off);
22849                         }
22850                       else
22851                         loc_list_plus_const (loc, off);
22852                     }
22853                   add_AT_location_description (var_die, DW_AT_location, loc);
22854                   remove_AT (var_die, DW_AT_declaration);
22855                 }
22856             }
22857           return;
22858         }
22859
22860       if (common_block_die_table == NULL)
22861         common_block_die_table = hash_table<block_die_hasher>::create_ggc (10);
22862
22863       com_die_arg.decl_id = DECL_UID (com_decl);
22864       com_die_arg.die_parent = context_die;
22865       com_die = common_block_die_table->find (&com_die_arg);
22866       if (! early_dwarf)
22867         loc = loc_list_from_tree (com_decl, 2, NULL);
22868       if (com_die == NULL)
22869         {
22870           const char *cnam
22871             = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (com_decl));
22872           die_node **slot;
22873
22874           com_die = new_die (DW_TAG_common_block, context_die, decl);
22875           add_name_and_src_coords_attributes (com_die, com_decl);
22876           if (loc)
22877             {
22878               add_AT_location_description (com_die, DW_AT_location, loc);
22879               /* Avoid sharing the same loc descriptor between
22880                  DW_TAG_common_block and DW_TAG_variable.  */
22881               loc = loc_list_from_tree (com_decl, 2, NULL);
22882             }
22883           else if (DECL_EXTERNAL (decl_or_origin))
22884             add_AT_flag (com_die, DW_AT_declaration, 1);
22885           if (want_pubnames ())
22886             add_pubname_string (cnam, com_die); /* ??? needed? */
22887           com_die->decl_id = DECL_UID (com_decl);
22888           slot = common_block_die_table->find_slot (com_die, INSERT);
22889           *slot = com_die;
22890         }
22891       else if (get_AT (com_die, DW_AT_location) == NULL && loc)
22892         {
22893           add_AT_location_description (com_die, DW_AT_location, loc);
22894           loc = loc_list_from_tree (com_decl, 2, NULL);
22895           remove_AT (com_die, DW_AT_declaration);
22896         }
22897       var_die = new_die (DW_TAG_variable, com_die, decl);
22898       add_name_and_src_coords_attributes (var_die, decl_or_origin);
22899       add_type_attribute (var_die, TREE_TYPE (decl_or_origin),
22900                           decl_quals (decl_or_origin), false,
22901                           context_die);
22902       add_alignment_attribute (var_die, decl);
22903       add_AT_flag (var_die, DW_AT_external, 1);
22904       if (loc)
22905         {
22906           if (off)
22907             {
22908               /* Optimize the common case.  */
22909               if (single_element_loc_list_p (loc)
22910                   && loc->expr->dw_loc_opc == DW_OP_addr
22911                   && loc->expr->dw_loc_next == NULL
22912                   && GET_CODE (loc->expr->dw_loc_oprnd1.v.val_addr) == SYMBOL_REF)
22913                 {
22914                   rtx x = loc->expr->dw_loc_oprnd1.v.val_addr;
22915                   loc->expr->dw_loc_oprnd1.v.val_addr
22916                     = plus_constant (GET_MODE (x), x, off);
22917                 }
22918               else
22919                 loc_list_plus_const (loc, off);
22920             }
22921           add_AT_location_description (var_die, DW_AT_location, loc);
22922         }
22923       else if (DECL_EXTERNAL (decl_or_origin))
22924         add_AT_flag (var_die, DW_AT_declaration, 1);
22925       if (decl)
22926         equate_decl_number_to_die (decl, var_die);
22927       return;
22928     }
22929
22930   if (old_die)
22931     {
22932       if (declaration)
22933         {
22934           /* A declaration that has been previously dumped, needs no
22935              further annotations, since it doesn't need location on
22936              the second pass.  */
22937           return;
22938         }
22939       else if (decl_will_get_specification_p (old_die, decl, declaration)
22940                && !get_AT (old_die, DW_AT_specification))
22941         {
22942           /* Fall-thru so we can make a new variable die along with a
22943              DW_AT_specification.  */
22944         }
22945       else if (origin && old_die->die_parent != context_die)
22946         {
22947           /* If we will be creating an inlined instance, we need a
22948              new DIE that will get annotated with
22949              DW_AT_abstract_origin.  Clear things so we can get a
22950              new DIE.  */
22951           gcc_assert (!DECL_ABSTRACT_P (decl));
22952           old_die = NULL;
22953         }
22954       else
22955         {
22956           /* If a DIE was dumped early, it still needs location info.
22957              Skip to where we fill the location bits.  */
22958           var_die = old_die;
22959
22960           /* ???  In LTRANS we cannot annotate early created variably
22961              modified type DIEs without copying them and adjusting all
22962              references to them.  Thus we dumped them again, also add a
22963              reference to them.  */
22964           tree type = TREE_TYPE (decl_or_origin);
22965           if (in_lto_p
22966               && variably_modified_type_p
22967                    (type, decl_function_context (decl_or_origin)))
22968             {
22969               if (decl_by_reference_p (decl_or_origin))
22970                 add_type_attribute (var_die, TREE_TYPE (type),
22971                                     TYPE_UNQUALIFIED, false, context_die);
22972               else
22973                 add_type_attribute (var_die, type, decl_quals (decl_or_origin),
22974                                     false, context_die);
22975             }
22976
22977           goto gen_variable_die_location;
22978         }
22979     }
22980
22981   /* For static data members, the declaration in the class is supposed
22982      to have DW_TAG_member tag in DWARF{3,4} and we emit it for compatibility
22983      also in DWARF2; the specification should still be DW_TAG_variable
22984      referencing the DW_TAG_member DIE.  */
22985   if (declaration && class_scope_p (context_die) && dwarf_version < 5)
22986     var_die = new_die (DW_TAG_member, context_die, decl);
22987   else
22988     var_die = new_die (DW_TAG_variable, context_die, decl);
22989
22990   if (origin != NULL)
22991     add_abstract_origin_attribute (var_die, origin);
22992
22993   /* Loop unrolling can create multiple blocks that refer to the same
22994      static variable, so we must test for the DW_AT_declaration flag.
22995
22996      ??? Loop unrolling/reorder_blocks should perhaps be rewritten to
22997      copy decls and set the DECL_ABSTRACT_P flag on them instead of
22998      sharing them.
22999
23000      ??? Duplicated blocks have been rewritten to use .debug_ranges.  */
23001   else if (decl_will_get_specification_p (old_die, decl, declaration))
23002     {
23003       /* This is a definition of a C++ class level static.  */
23004       add_AT_specification (var_die, old_die);
23005       specialization_p = true;
23006       if (DECL_NAME (decl))
23007         {
23008           expanded_location s = expand_location (DECL_SOURCE_LOCATION (decl));
23009           struct dwarf_file_data * file_index = lookup_filename (s.file);
23010
23011           if (get_AT_file (old_die, DW_AT_decl_file) != file_index)
23012             add_AT_file (var_die, DW_AT_decl_file, file_index);
23013
23014           if (get_AT_unsigned (old_die, DW_AT_decl_line) != (unsigned) s.line)
23015             add_AT_unsigned (var_die, DW_AT_decl_line, s.line);
23016
23017           if (debug_column_info
23018               && s.column
23019               && (get_AT_unsigned (old_die, DW_AT_decl_column)
23020                   != (unsigned) s.column))
23021             add_AT_unsigned (var_die, DW_AT_decl_column, s.column);
23022
23023           if (old_die->die_tag == DW_TAG_member)
23024             add_linkage_name (var_die, decl);
23025         }
23026     }
23027   else
23028     add_name_and_src_coords_attributes (var_die, decl, no_linkage_name);
23029
23030   if ((origin == NULL && !specialization_p)
23031       || (origin != NULL
23032           && !DECL_ABSTRACT_P (decl_or_origin)
23033           && variably_modified_type_p (TREE_TYPE (decl_or_origin),
23034                                        decl_function_context
23035                                                         (decl_or_origin))))
23036     {
23037       tree type = TREE_TYPE (decl_or_origin);
23038
23039       if (decl_by_reference_p (decl_or_origin))
23040         add_type_attribute (var_die, TREE_TYPE (type), TYPE_UNQUALIFIED, false,
23041                             context_die);
23042       else
23043         add_type_attribute (var_die, type, decl_quals (decl_or_origin), false,
23044                             context_die);
23045     }
23046
23047   if (origin == NULL && !specialization_p)
23048     {
23049       if (TREE_PUBLIC (decl))
23050         add_AT_flag (var_die, DW_AT_external, 1);
23051
23052       if (DECL_ARTIFICIAL (decl))
23053         add_AT_flag (var_die, DW_AT_artificial, 1);
23054
23055       add_alignment_attribute (var_die, decl);
23056
23057       add_accessibility_attribute (var_die, decl);
23058     }
23059
23060   if (declaration)
23061     add_AT_flag (var_die, DW_AT_declaration, 1);
23062
23063   if (decl && (DECL_ABSTRACT_P (decl)
23064                || !old_die || is_declaration_die (old_die)))
23065     equate_decl_number_to_die (decl, var_die);
23066
23067  gen_variable_die_location:
23068   if (! declaration
23069       && (! DECL_ABSTRACT_P (decl_or_origin)
23070           /* Local static vars are shared between all clones/inlines,
23071              so emit DW_AT_location on the abstract DIE if DECL_RTL is
23072              already set.  */
23073           || (VAR_P (decl_or_origin)
23074               && TREE_STATIC (decl_or_origin)
23075               && DECL_RTL_SET_P (decl_or_origin))))
23076     {
23077       if (early_dwarf)
23078         add_pubname (decl_or_origin, var_die);
23079       else
23080         add_location_or_const_value_attribute (var_die, decl_or_origin,
23081                                                decl == NULL);
23082     }
23083   else
23084     tree_add_const_value_attribute_for_decl (var_die, decl_or_origin);
23085
23086   if ((dwarf_version >= 4 || !dwarf_strict)
23087       && lang_hooks.decls.decl_dwarf_attribute (decl_or_origin,
23088                                                 DW_AT_const_expr) == 1
23089       && !get_AT (var_die, DW_AT_const_expr)
23090       && !specialization_p)
23091     add_AT_flag (var_die, DW_AT_const_expr, 1);
23092
23093   if (!dwarf_strict)
23094     {
23095       int inl = lang_hooks.decls.decl_dwarf_attribute (decl_or_origin,
23096                                                        DW_AT_inline);
23097       if (inl != -1
23098           && !get_AT (var_die, DW_AT_inline)
23099           && !specialization_p)
23100         add_AT_unsigned (var_die, DW_AT_inline, inl);
23101     }
23102 }
23103
23104 /* Generate a DIE to represent a named constant.  */
23105
23106 static void
23107 gen_const_die (tree decl, dw_die_ref context_die)
23108 {
23109   dw_die_ref const_die;
23110   tree type = TREE_TYPE (decl);
23111
23112   const_die = lookup_decl_die (decl);
23113   if (const_die)
23114     return;
23115
23116   const_die = new_die (DW_TAG_constant, context_die, decl);
23117   equate_decl_number_to_die (decl, const_die);
23118   add_name_and_src_coords_attributes (const_die, decl);
23119   add_type_attribute (const_die, type, TYPE_QUAL_CONST, false, context_die);
23120   if (TREE_PUBLIC (decl))
23121     add_AT_flag (const_die, DW_AT_external, 1);
23122   if (DECL_ARTIFICIAL (decl))
23123     add_AT_flag (const_die, DW_AT_artificial, 1);
23124   tree_add_const_value_attribute_for_decl (const_die, decl);
23125 }
23126
23127 /* Generate a DIE to represent a label identifier.  */
23128
23129 static void
23130 gen_label_die (tree decl, dw_die_ref context_die)
23131 {
23132   tree origin = decl_ultimate_origin (decl);
23133   dw_die_ref lbl_die = lookup_decl_die (decl);
23134   rtx insn;
23135   char label[MAX_ARTIFICIAL_LABEL_BYTES];
23136
23137   if (!lbl_die)
23138     {
23139       lbl_die = new_die (DW_TAG_label, context_die, decl);
23140       equate_decl_number_to_die (decl, lbl_die);
23141
23142       if (origin != NULL)
23143         add_abstract_origin_attribute (lbl_die, origin);
23144       else
23145         add_name_and_src_coords_attributes (lbl_die, decl);
23146     }
23147
23148   if (DECL_ABSTRACT_P (decl))
23149     equate_decl_number_to_die (decl, lbl_die);
23150   else if (! early_dwarf)
23151     {
23152       insn = DECL_RTL_IF_SET (decl);
23153
23154       /* Deleted labels are programmer specified labels which have been
23155          eliminated because of various optimizations.  We still emit them
23156          here so that it is possible to put breakpoints on them.  */
23157       if (insn
23158           && (LABEL_P (insn)
23159               || ((NOTE_P (insn)
23160                    && NOTE_KIND (insn) == NOTE_INSN_DELETED_LABEL))))
23161         {
23162           /* When optimization is enabled (via -O) some parts of the compiler
23163              (e.g. jump.c and cse.c) may try to delete CODE_LABEL insns which
23164              represent source-level labels which were explicitly declared by
23165              the user.  This really shouldn't be happening though, so catch
23166              it if it ever does happen.  */
23167           gcc_assert (!as_a<rtx_insn *> (insn)->deleted ());
23168
23169           ASM_GENERATE_INTERNAL_LABEL (label, "L", CODE_LABEL_NUMBER (insn));
23170           add_AT_lbl_id (lbl_die, DW_AT_low_pc, label);
23171         }
23172       else if (insn
23173                && NOTE_P (insn)
23174                && NOTE_KIND (insn) == NOTE_INSN_DELETED_DEBUG_LABEL
23175                && CODE_LABEL_NUMBER (insn) != -1)
23176         {
23177           ASM_GENERATE_INTERNAL_LABEL (label, "LDL", CODE_LABEL_NUMBER (insn));
23178           add_AT_lbl_id (lbl_die, DW_AT_low_pc, label);
23179         }
23180     }
23181 }
23182
23183 /* A helper function for gen_inlined_subroutine_die.  Add source coordinate
23184    attributes to the DIE for a block STMT, to describe where the inlined
23185    function was called from.  This is similar to add_src_coords_attributes.  */
23186
23187 static inline void
23188 add_call_src_coords_attributes (tree stmt, dw_die_ref die)
23189 {
23190   expanded_location s = expand_location (BLOCK_SOURCE_LOCATION (stmt));
23191
23192   if (dwarf_version >= 3 || !dwarf_strict)
23193     {
23194       add_AT_file (die, DW_AT_call_file, lookup_filename (s.file));
23195       add_AT_unsigned (die, DW_AT_call_line, s.line);
23196       if (debug_column_info && s.column)
23197         add_AT_unsigned (die, DW_AT_call_column, s.column);
23198     }
23199 }
23200
23201
23202 /* A helper function for gen_lexical_block_die and gen_inlined_subroutine_die.
23203    Add low_pc and high_pc attributes to the DIE for a block STMT.  */
23204
23205 static inline void
23206 add_high_low_attributes (tree stmt, dw_die_ref die)
23207 {
23208   char label[MAX_ARTIFICIAL_LABEL_BYTES];
23209
23210   if (BLOCK_FRAGMENT_CHAIN (stmt)
23211       && (dwarf_version >= 3 || !dwarf_strict))
23212     {
23213       tree chain, superblock = NULL_TREE;
23214       dw_die_ref pdie;
23215       dw_attr_node *attr = NULL;
23216
23217       if (inlined_function_outer_scope_p (stmt))
23218         {
23219           ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_BEGIN_LABEL,
23220                                        BLOCK_NUMBER (stmt));
23221           add_AT_lbl_id (die, DW_AT_entry_pc, label);
23222         }
23223
23224       /* Optimize duplicate .debug_ranges lists or even tails of
23225          lists.  If this BLOCK has same ranges as its supercontext,
23226          lookup DW_AT_ranges attribute in the supercontext (and
23227          recursively so), verify that the ranges_table contains the
23228          right values and use it instead of adding a new .debug_range.  */
23229       for (chain = stmt, pdie = die;
23230            BLOCK_SAME_RANGE (chain);
23231            chain = BLOCK_SUPERCONTEXT (chain))
23232         {
23233           dw_attr_node *new_attr;
23234
23235           pdie = pdie->die_parent;
23236           if (pdie == NULL)
23237             break;
23238           if (BLOCK_SUPERCONTEXT (chain) == NULL_TREE)
23239             break;
23240           new_attr = get_AT (pdie, DW_AT_ranges);
23241           if (new_attr == NULL
23242               || new_attr->dw_attr_val.val_class != dw_val_class_range_list)
23243             break;
23244           attr = new_attr;
23245           superblock = BLOCK_SUPERCONTEXT (chain);
23246         }
23247       if (attr != NULL
23248           && ((*ranges_table)[attr->dw_attr_val.v.val_offset].num
23249               == BLOCK_NUMBER (superblock))
23250           && BLOCK_FRAGMENT_CHAIN (superblock))
23251         {
23252           unsigned long off = attr->dw_attr_val.v.val_offset;
23253           unsigned long supercnt = 0, thiscnt = 0;
23254           for (chain = BLOCK_FRAGMENT_CHAIN (superblock);
23255                chain; chain = BLOCK_FRAGMENT_CHAIN (chain))
23256             {
23257               ++supercnt;
23258               gcc_checking_assert ((*ranges_table)[off + supercnt].num
23259                                    == BLOCK_NUMBER (chain));
23260             }
23261           gcc_checking_assert ((*ranges_table)[off + supercnt + 1].num == 0);
23262           for (chain = BLOCK_FRAGMENT_CHAIN (stmt);
23263                chain; chain = BLOCK_FRAGMENT_CHAIN (chain))
23264             ++thiscnt;
23265           gcc_assert (supercnt >= thiscnt);
23266           add_AT_range_list (die, DW_AT_ranges, off + supercnt - thiscnt,
23267                              false);
23268           note_rnglist_head (off + supercnt - thiscnt);
23269           return;
23270         }
23271
23272       unsigned int offset = add_ranges (stmt, true);
23273       add_AT_range_list (die, DW_AT_ranges, offset, false);
23274       note_rnglist_head (offset);
23275
23276       bool prev_in_cold = BLOCK_IN_COLD_SECTION_P (stmt);
23277       chain = BLOCK_FRAGMENT_CHAIN (stmt);
23278       do
23279         {
23280           add_ranges (chain, prev_in_cold != BLOCK_IN_COLD_SECTION_P (chain));
23281           prev_in_cold = BLOCK_IN_COLD_SECTION_P (chain);
23282           chain = BLOCK_FRAGMENT_CHAIN (chain);
23283         }
23284       while (chain);
23285       add_ranges (NULL);
23286     }
23287   else
23288     {
23289       char label_high[MAX_ARTIFICIAL_LABEL_BYTES];
23290       ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_BEGIN_LABEL,
23291                                    BLOCK_NUMBER (stmt));
23292       ASM_GENERATE_INTERNAL_LABEL (label_high, BLOCK_END_LABEL,
23293                                    BLOCK_NUMBER (stmt));
23294       add_AT_low_high_pc (die, label, label_high, false);
23295     }
23296 }
23297
23298 /* Generate a DIE for a lexical block.  */
23299
23300 static void
23301 gen_lexical_block_die (tree stmt, dw_die_ref context_die)
23302 {
23303   dw_die_ref old_die = BLOCK_DIE (stmt);
23304   dw_die_ref stmt_die = NULL;
23305   if (!old_die)
23306     {
23307       stmt_die = new_die (DW_TAG_lexical_block, context_die, stmt);
23308       BLOCK_DIE (stmt) = stmt_die;
23309     }
23310
23311   if (BLOCK_ABSTRACT (stmt))
23312     {
23313       if (old_die)
23314         {
23315           /* This must have been generated early and it won't even
23316              need location information since it's a DW_AT_inline
23317              function.  */
23318           if (flag_checking)
23319             for (dw_die_ref c = context_die; c; c = c->die_parent)
23320               if (c->die_tag == DW_TAG_inlined_subroutine
23321                   || c->die_tag == DW_TAG_subprogram)
23322                 {
23323                   gcc_assert (get_AT (c, DW_AT_inline));
23324                   break;
23325                 }
23326           return;
23327         }
23328     }
23329   else if (BLOCK_ABSTRACT_ORIGIN (stmt))
23330     {
23331       /* If this is an inlined instance, create a new lexical die for
23332          anything below to attach DW_AT_abstract_origin to.  */
23333       if (old_die)
23334         {
23335           stmt_die = new_die (DW_TAG_lexical_block, context_die, stmt);
23336           BLOCK_DIE (stmt) = stmt_die;
23337           old_die = NULL;
23338         }
23339
23340       tree origin = block_ultimate_origin (stmt);
23341       if (origin != NULL_TREE && origin != stmt)
23342         add_abstract_origin_attribute (stmt_die, origin);
23343     }
23344
23345   if (old_die)
23346     stmt_die = old_die;
23347
23348   /* A non abstract block whose blocks have already been reordered
23349      should have the instruction range for this block.  If so, set the
23350      high/low attributes.  */
23351   if (!early_dwarf && !BLOCK_ABSTRACT (stmt) && TREE_ASM_WRITTEN (stmt))
23352     {
23353       gcc_assert (stmt_die);
23354       add_high_low_attributes (stmt, stmt_die);
23355     }
23356
23357   decls_for_scope (stmt, stmt_die);
23358 }
23359
23360 /* Generate a DIE for an inlined subprogram.  */
23361
23362 static void
23363 gen_inlined_subroutine_die (tree stmt, dw_die_ref context_die)
23364 {
23365   tree decl;
23366
23367   /* The instance of function that is effectively being inlined shall not
23368      be abstract.  */
23369   gcc_assert (! BLOCK_ABSTRACT (stmt));
23370
23371   decl = block_ultimate_origin (stmt);
23372
23373   /* Make sure any inlined functions are known to be inlineable.  */
23374   gcc_checking_assert (DECL_ABSTRACT_P (decl)
23375                        || cgraph_function_possibly_inlined_p (decl));
23376
23377   if (! BLOCK_ABSTRACT (stmt))
23378     {
23379       dw_die_ref subr_die
23380         = new_die (DW_TAG_inlined_subroutine, context_die, stmt);
23381
23382       if (call_arg_locations)
23383         BLOCK_DIE (stmt) = subr_die;
23384       add_abstract_origin_attribute (subr_die, decl);
23385       if (TREE_ASM_WRITTEN (stmt))
23386         add_high_low_attributes (stmt, subr_die);
23387       add_call_src_coords_attributes (stmt, subr_die);
23388
23389       decls_for_scope (stmt, subr_die);
23390     }
23391 }
23392
23393 /* Generate a DIE for a field in a record, or structure.  CTX is required: see
23394    the comment for VLR_CONTEXT.  */
23395
23396 static void
23397 gen_field_die (tree decl, struct vlr_context *ctx, dw_die_ref context_die)
23398 {
23399   dw_die_ref decl_die;
23400
23401   if (TREE_TYPE (decl) == error_mark_node)
23402     return;
23403
23404   decl_die = new_die (DW_TAG_member, context_die, decl);
23405   add_name_and_src_coords_attributes (decl_die, decl);
23406   add_type_attribute (decl_die, member_declared_type (decl), decl_quals (decl),
23407                       TYPE_REVERSE_STORAGE_ORDER (DECL_FIELD_CONTEXT (decl)),
23408                       context_die);
23409
23410   if (DECL_BIT_FIELD_TYPE (decl))
23411     {
23412       add_byte_size_attribute (decl_die, decl);
23413       add_bit_size_attribute (decl_die, decl);
23414       add_bit_offset_attribute (decl_die, decl, ctx);
23415     }
23416
23417   add_alignment_attribute (decl_die, decl);
23418
23419   /* If we have a variant part offset, then we are supposed to process a member
23420      of a QUAL_UNION_TYPE, which is how we represent variant parts in
23421      trees.  */
23422   gcc_assert (ctx->variant_part_offset == NULL_TREE
23423               || TREE_CODE (DECL_FIELD_CONTEXT (decl)) != QUAL_UNION_TYPE);
23424   if (TREE_CODE (DECL_FIELD_CONTEXT (decl)) != UNION_TYPE)
23425     add_data_member_location_attribute (decl_die, decl, ctx);
23426
23427   if (DECL_ARTIFICIAL (decl))
23428     add_AT_flag (decl_die, DW_AT_artificial, 1);
23429
23430   add_accessibility_attribute (decl_die, decl);
23431
23432   /* Equate decl number to die, so that we can look up this decl later on.  */
23433   equate_decl_number_to_die (decl, decl_die);
23434 }
23435
23436 /* Generate a DIE for a pointer to a member type.  TYPE can be an
23437    OFFSET_TYPE, for a pointer to data member, or a RECORD_TYPE, for a
23438    pointer to member function.  */
23439
23440 static void
23441 gen_ptr_to_mbr_type_die (tree type, dw_die_ref context_die)
23442 {
23443   if (lookup_type_die (type))
23444     return;
23445
23446   dw_die_ref ptr_die = new_die (DW_TAG_ptr_to_member_type,
23447                                 scope_die_for (type, context_die), type);
23448
23449   equate_type_number_to_die (type, ptr_die);
23450   add_AT_die_ref (ptr_die, DW_AT_containing_type,
23451                   lookup_type_die (TYPE_OFFSET_BASETYPE (type)));
23452   add_type_attribute (ptr_die, TREE_TYPE (type), TYPE_UNQUALIFIED, false,
23453                       context_die);
23454   add_alignment_attribute (ptr_die, type);
23455
23456   if (TREE_CODE (TREE_TYPE (type)) != FUNCTION_TYPE
23457       && TREE_CODE (TREE_TYPE (type)) != METHOD_TYPE)
23458     {
23459       dw_loc_descr_ref op = new_loc_descr (DW_OP_plus, 0, 0);
23460       add_AT_loc (ptr_die, DW_AT_use_location, op);
23461     }
23462 }
23463
23464 static char *producer_string;
23465
23466 /* Return a heap allocated producer string including command line options
23467    if -grecord-gcc-switches.  */
23468
23469 static char *
23470 gen_producer_string (void)
23471 {
23472   size_t j;
23473   auto_vec<const char *> switches;
23474   const char *language_string = lang_hooks.name;
23475   char *producer, *tail;
23476   const char *p;
23477   size_t len = dwarf_record_gcc_switches ? 0 : 3;
23478   size_t plen = strlen (language_string) + 1 + strlen (version_string);
23479
23480   for (j = 1; dwarf_record_gcc_switches && j < save_decoded_options_count; j++)
23481     switch (save_decoded_options[j].opt_index)
23482       {
23483       case OPT_o:
23484       case OPT_d:
23485       case OPT_dumpbase:
23486       case OPT_dumpdir:
23487       case OPT_auxbase:
23488       case OPT_auxbase_strip:
23489       case OPT_quiet:
23490       case OPT_version:
23491       case OPT_v:
23492       case OPT_w:
23493       case OPT_L:
23494       case OPT_D:
23495       case OPT_I:
23496       case OPT_U:
23497       case OPT_SPECIAL_unknown:
23498       case OPT_SPECIAL_ignore:
23499       case OPT_SPECIAL_program_name:
23500       case OPT_SPECIAL_input_file:
23501       case OPT_grecord_gcc_switches:
23502       case OPT__output_pch_:
23503       case OPT_fdiagnostics_show_location_:
23504       case OPT_fdiagnostics_show_option:
23505       case OPT_fdiagnostics_show_caret:
23506       case OPT_fdiagnostics_color_:
23507       case OPT_fverbose_asm:
23508       case OPT____:
23509       case OPT__sysroot_:
23510       case OPT_nostdinc:
23511       case OPT_nostdinc__:
23512       case OPT_fpreprocessed:
23513       case OPT_fltrans_output_list_:
23514       case OPT_fresolution_:
23515       case OPT_fdebug_prefix_map_:
23516       case OPT_fcompare_debug:
23517         /* Ignore these.  */
23518         continue;
23519       default:
23520         if (cl_options[save_decoded_options[j].opt_index].flags
23521             & CL_NO_DWARF_RECORD)
23522           continue;
23523         gcc_checking_assert (save_decoded_options[j].canonical_option[0][0]
23524                              == '-');
23525         switch (save_decoded_options[j].canonical_option[0][1])
23526           {
23527           case 'M':
23528           case 'i':
23529           case 'W':
23530             continue;
23531           case 'f':
23532             if (strncmp (save_decoded_options[j].canonical_option[0] + 2,
23533                          "dump", 4) == 0)
23534               continue;
23535             break;
23536           default:
23537             break;
23538           }
23539         switches.safe_push (save_decoded_options[j].orig_option_with_args_text);
23540         len += strlen (save_decoded_options[j].orig_option_with_args_text) + 1;
23541         break;
23542       }
23543
23544   producer = XNEWVEC (char, plen + 1 + len + 1);
23545   tail = producer;
23546   sprintf (tail, "%s %s", language_string, version_string);
23547   tail += plen;
23548
23549   FOR_EACH_VEC_ELT (switches, j, p)
23550     {
23551       len = strlen (p);
23552       *tail = ' ';
23553       memcpy (tail + 1, p, len);
23554       tail += len + 1;
23555     }
23556
23557   *tail = '\0';
23558   return producer;
23559 }
23560
23561 /* Given a C and/or C++ language/version string return the "highest".
23562    C++ is assumed to be "higher" than C in this case.  Used for merging
23563    LTO translation unit languages.  */
23564 static const char *
23565 highest_c_language (const char *lang1, const char *lang2)
23566 {
23567   if (strcmp ("GNU C++17", lang1) == 0 || strcmp ("GNU C++17", lang2) == 0)
23568     return "GNU C++17";
23569   if (strcmp ("GNU C++14", lang1) == 0 || strcmp ("GNU C++14", lang2) == 0)
23570     return "GNU C++14";
23571   if (strcmp ("GNU C++11", lang1) == 0 || strcmp ("GNU C++11", lang2) == 0)
23572     return "GNU C++11";
23573   if (strcmp ("GNU C++98", lang1) == 0 || strcmp ("GNU C++98", lang2) == 0)
23574     return "GNU C++98";
23575
23576   if (strcmp ("GNU C17", lang1) == 0 || strcmp ("GNU C17", lang2) == 0)
23577     return "GNU C17";
23578   if (strcmp ("GNU C11", lang1) == 0 || strcmp ("GNU C11", lang2) == 0)
23579     return "GNU C11";
23580   if (strcmp ("GNU C99", lang1) == 0 || strcmp ("GNU C99", lang2) == 0)
23581     return "GNU C99";
23582   if (strcmp ("GNU C89", lang1) == 0 || strcmp ("GNU C89", lang2) == 0)
23583     return "GNU C89";
23584
23585   gcc_unreachable ();
23586 }
23587
23588
23589 /* Generate the DIE for the compilation unit.  */
23590
23591 static dw_die_ref
23592 gen_compile_unit_die (const char *filename)
23593 {
23594   dw_die_ref die;
23595   const char *language_string = lang_hooks.name;
23596   int language;
23597
23598   die = new_die (DW_TAG_compile_unit, NULL, NULL);
23599
23600   if (filename)
23601     {
23602       add_name_attribute (die, filename);
23603       /* Don't add cwd for <built-in>.  */
23604       if (filename[0] != '<')
23605         add_comp_dir_attribute (die);
23606     }
23607
23608   add_AT_string (die, DW_AT_producer, producer_string ? producer_string : "");
23609
23610   /* If our producer is LTO try to figure out a common language to use
23611      from the global list of translation units.  */
23612   if (strcmp (language_string, "GNU GIMPLE") == 0)
23613     {
23614       unsigned i;
23615       tree t;
23616       const char *common_lang = NULL;
23617
23618       FOR_EACH_VEC_SAFE_ELT (all_translation_units, i, t)
23619         {
23620           if (!TRANSLATION_UNIT_LANGUAGE (t))
23621             continue;
23622           if (!common_lang)
23623             common_lang = TRANSLATION_UNIT_LANGUAGE (t);
23624           else if (strcmp (common_lang, TRANSLATION_UNIT_LANGUAGE (t)) == 0)
23625             ;
23626           else if (strncmp (common_lang, "GNU C", 5) == 0
23627                     && strncmp (TRANSLATION_UNIT_LANGUAGE (t), "GNU C", 5) == 0)
23628             /* Mixing C and C++ is ok, use C++ in that case.  */
23629             common_lang = highest_c_language (common_lang,
23630                                               TRANSLATION_UNIT_LANGUAGE (t));
23631           else
23632             {
23633               /* Fall back to C.  */
23634               common_lang = NULL;
23635               break;
23636             }
23637         }
23638
23639       if (common_lang)
23640         language_string = common_lang;
23641     }
23642
23643   language = DW_LANG_C;
23644   if (strncmp (language_string, "GNU C", 5) == 0
23645       && ISDIGIT (language_string[5]))
23646     {
23647       language = DW_LANG_C89;
23648       if (dwarf_version >= 3 || !dwarf_strict)
23649         {
23650           if (strcmp (language_string, "GNU C89") != 0)
23651             language = DW_LANG_C99;
23652
23653           if (dwarf_version >= 5 /* || !dwarf_strict */)
23654             if (strcmp (language_string, "GNU C11") == 0
23655                 || strcmp (language_string, "GNU C17") == 0)
23656               language = DW_LANG_C11;
23657         }
23658     }
23659   else if (strncmp (language_string, "GNU C++", 7) == 0)
23660     {
23661       language = DW_LANG_C_plus_plus;
23662       if (dwarf_version >= 5 /* || !dwarf_strict */)
23663         {
23664           if (strcmp (language_string, "GNU C++11") == 0)
23665             language = DW_LANG_C_plus_plus_11;
23666           else if (strcmp (language_string, "GNU C++14") == 0)
23667             language = DW_LANG_C_plus_plus_14;
23668           else if (strcmp (language_string, "GNU C++17") == 0)
23669             /* For now.  */
23670             language = DW_LANG_C_plus_plus_14;
23671         }
23672     }
23673   else if (strcmp (language_string, "GNU F77") == 0)
23674     language = DW_LANG_Fortran77;
23675   else if (dwarf_version >= 3 || !dwarf_strict)
23676     {
23677       if (strcmp (language_string, "GNU Ada") == 0)
23678         language = DW_LANG_Ada95;
23679       else if (strncmp (language_string, "GNU Fortran", 11) == 0)
23680         {
23681           language = DW_LANG_Fortran95;
23682           if (dwarf_version >= 5 /* || !dwarf_strict */)
23683             {
23684               if (strcmp (language_string, "GNU Fortran2003") == 0)
23685                 language = DW_LANG_Fortran03;
23686               else if (strcmp (language_string, "GNU Fortran2008") == 0)
23687                 language = DW_LANG_Fortran08;
23688             }
23689         }
23690       else if (strcmp (language_string, "GNU Objective-C") == 0)
23691         language = DW_LANG_ObjC;
23692       else if (strcmp (language_string, "GNU Objective-C++") == 0)
23693         language = DW_LANG_ObjC_plus_plus;
23694       else if (dwarf_version >= 5 || !dwarf_strict)
23695         {
23696           if (strcmp (language_string, "GNU Go") == 0)
23697             language = DW_LANG_Go;
23698         }
23699     }
23700   /* Use a degraded Fortran setting in strict DWARF2 so is_fortran works.  */
23701   else if (strncmp (language_string, "GNU Fortran", 11) == 0)
23702     language = DW_LANG_Fortran90;
23703
23704   add_AT_unsigned (die, DW_AT_language, language);
23705
23706   switch (language)
23707     {
23708     case DW_LANG_Fortran77:
23709     case DW_LANG_Fortran90:
23710     case DW_LANG_Fortran95:
23711     case DW_LANG_Fortran03:
23712     case DW_LANG_Fortran08:
23713       /* Fortran has case insensitive identifiers and the front-end
23714          lowercases everything.  */
23715       add_AT_unsigned (die, DW_AT_identifier_case, DW_ID_down_case);
23716       break;
23717     default:
23718       /* The default DW_ID_case_sensitive doesn't need to be specified.  */
23719       break;
23720     }
23721   return die;
23722 }
23723
23724 /* Generate the DIE for a base class.  */
23725
23726 static void
23727 gen_inheritance_die (tree binfo, tree access, tree type,
23728                      dw_die_ref context_die)
23729 {
23730   dw_die_ref die = new_die (DW_TAG_inheritance, context_die, binfo);
23731   struct vlr_context ctx = { type, NULL };
23732
23733   add_type_attribute (die, BINFO_TYPE (binfo), TYPE_UNQUALIFIED, false,
23734                       context_die);
23735   add_data_member_location_attribute (die, binfo, &ctx);
23736
23737   if (BINFO_VIRTUAL_P (binfo))
23738     add_AT_unsigned (die, DW_AT_virtuality, DW_VIRTUALITY_virtual);
23739
23740   /* In DWARF3+ the default is DW_ACCESS_private only in DW_TAG_class_type
23741      children, otherwise the default is DW_ACCESS_public.  In DWARF2
23742      the default has always been DW_ACCESS_private.  */
23743   if (access == access_public_node)
23744     {
23745       if (dwarf_version == 2
23746           || context_die->die_tag == DW_TAG_class_type)
23747       add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_public);
23748     }
23749   else if (access == access_protected_node)
23750     add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_protected);
23751   else if (dwarf_version > 2
23752            && context_die->die_tag != DW_TAG_class_type)
23753     add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_private);
23754 }
23755
23756 /* Return whether DECL is a FIELD_DECL that represents the variant part of a
23757    structure.  */
23758 static bool
23759 is_variant_part (tree decl)
23760 {
23761   return (TREE_CODE (decl) == FIELD_DECL
23762           && TREE_CODE (TREE_TYPE (decl)) == QUAL_UNION_TYPE);
23763 }
23764
23765 /* Check that OPERAND is a reference to a field in STRUCT_TYPE.  If it is,
23766    return the FIELD_DECL.  Return NULL_TREE otherwise.  */
23767
23768 static tree
23769 analyze_discr_in_predicate (tree operand, tree struct_type)
23770 {
23771   bool continue_stripping = true;
23772   while (continue_stripping)
23773     switch (TREE_CODE (operand))
23774       {
23775       CASE_CONVERT:
23776         operand = TREE_OPERAND (operand, 0);
23777         break;
23778       default:
23779         continue_stripping = false;
23780         break;
23781       }
23782
23783   /* Match field access to members of struct_type only.  */
23784   if (TREE_CODE (operand) == COMPONENT_REF
23785       && TREE_CODE (TREE_OPERAND (operand, 0)) == PLACEHOLDER_EXPR
23786       && TREE_TYPE (TREE_OPERAND (operand, 0)) == struct_type
23787       && TREE_CODE (TREE_OPERAND (operand, 1)) == FIELD_DECL)
23788     return TREE_OPERAND (operand, 1);
23789   else
23790     return NULL_TREE;
23791 }
23792
23793 /* Check that SRC is a constant integer that can be represented as a native
23794    integer constant (either signed or unsigned).  If so, store it into DEST and
23795    return true.  Return false otherwise. */
23796
23797 static bool
23798 get_discr_value (tree src, dw_discr_value *dest)
23799 {
23800   tree discr_type = TREE_TYPE (src);
23801
23802   if (lang_hooks.types.get_debug_type)
23803     {
23804       tree debug_type = lang_hooks.types.get_debug_type (discr_type);
23805       if (debug_type != NULL)
23806         discr_type = debug_type;
23807     }
23808
23809   if (TREE_CODE (src) != INTEGER_CST || !INTEGRAL_TYPE_P (discr_type))
23810     return false;
23811
23812   /* Signedness can vary between the original type and the debug type. This
23813      can happen for character types in Ada for instance: the character type
23814      used for code generation can be signed, to be compatible with the C one,
23815      but from a debugger point of view, it must be unsigned.  */
23816   bool is_orig_unsigned = TYPE_UNSIGNED (TREE_TYPE (src));
23817   bool is_debug_unsigned = TYPE_UNSIGNED (discr_type);
23818
23819   if (is_orig_unsigned != is_debug_unsigned)
23820     src = fold_convert (discr_type, src);
23821
23822   if (!(is_debug_unsigned ? tree_fits_uhwi_p (src) : tree_fits_shwi_p (src)))
23823     return false;
23824
23825   dest->pos = is_debug_unsigned;
23826   if (is_debug_unsigned)
23827     dest->v.uval = tree_to_uhwi (src);
23828   else
23829     dest->v.sval = tree_to_shwi (src);
23830
23831   return true;
23832 }
23833
23834 /* Try to extract synthetic properties out of VARIANT_PART_DECL, which is a
23835    FIELD_DECL in STRUCT_TYPE that represents a variant part.  If unsuccessful,
23836    store NULL_TREE in DISCR_DECL.  Otherwise:
23837
23838      - store the discriminant field in STRUCT_TYPE that controls the variant
23839        part to *DISCR_DECL
23840
23841      - put in *DISCR_LISTS_P an array where for each variant, the item
23842        represents the corresponding matching list of discriminant values.
23843
23844      - put in *DISCR_LISTS_LENGTH the number of variants, which is the size of
23845        the above array.
23846
23847    Note that when the array is allocated (i.e. when the analysis is
23848    successful), it is up to the caller to free the array.  */
23849
23850 static void
23851 analyze_variants_discr (tree variant_part_decl,
23852                         tree struct_type,
23853                         tree *discr_decl,
23854                         dw_discr_list_ref **discr_lists_p,
23855                         unsigned *discr_lists_length)
23856 {
23857   tree variant_part_type = TREE_TYPE (variant_part_decl);
23858   tree variant;
23859   dw_discr_list_ref *discr_lists;
23860   unsigned i;
23861
23862   /* Compute how many variants there are in this variant part.  */
23863   *discr_lists_length = 0;
23864   for (variant = TYPE_FIELDS (variant_part_type);
23865        variant != NULL_TREE;
23866        variant = DECL_CHAIN (variant))
23867     ++*discr_lists_length;
23868
23869   *discr_decl = NULL_TREE;
23870   *discr_lists_p
23871     = (dw_discr_list_ref *) xcalloc (*discr_lists_length,
23872                                      sizeof (**discr_lists_p));
23873   discr_lists = *discr_lists_p;
23874
23875   /* And then analyze all variants to extract discriminant information for all
23876      of them.  This analysis is conservative: as soon as we detect something we
23877      do not support, abort everything and pretend we found nothing.  */
23878   for (variant = TYPE_FIELDS (variant_part_type), i = 0;
23879        variant != NULL_TREE;
23880        variant = DECL_CHAIN (variant), ++i)
23881     {
23882       tree match_expr = DECL_QUALIFIER (variant);
23883
23884       /* Now, try to analyze the predicate and deduce a discriminant for
23885          it.  */
23886       if (match_expr == boolean_true_node)
23887         /* Typically happens for the default variant: it matches all cases that
23888            previous variants rejected.  Don't output any matching value for
23889            this one.  */
23890         continue;
23891
23892       /* The following loop tries to iterate over each discriminant
23893          possibility: single values or ranges.  */
23894       while (match_expr != NULL_TREE)
23895         {
23896           tree next_round_match_expr;
23897           tree candidate_discr = NULL_TREE;
23898           dw_discr_list_ref new_node = NULL;
23899
23900           /* Possibilities are matched one after the other by nested
23901              TRUTH_ORIF_EXPR expressions.  Process the current possibility and
23902              continue with the rest at next iteration.  */
23903           if (TREE_CODE (match_expr) == TRUTH_ORIF_EXPR)
23904             {
23905               next_round_match_expr = TREE_OPERAND (match_expr, 0);
23906               match_expr = TREE_OPERAND (match_expr, 1);
23907             }
23908           else
23909             next_round_match_expr = NULL_TREE;
23910
23911           if (match_expr == boolean_false_node)
23912             /* This sub-expression matches nothing: just wait for the next
23913                one.  */
23914             ;
23915
23916           else if (TREE_CODE (match_expr) == EQ_EXPR)
23917             {
23918               /* We are matching:  <discr_field> == <integer_cst>
23919                  This sub-expression matches a single value.  */
23920               tree integer_cst = TREE_OPERAND (match_expr, 1);
23921
23922               candidate_discr
23923                = analyze_discr_in_predicate (TREE_OPERAND (match_expr, 0),
23924                                              struct_type);
23925
23926               new_node = ggc_cleared_alloc<dw_discr_list_node> ();
23927               if (!get_discr_value (integer_cst,
23928                                     &new_node->dw_discr_lower_bound))
23929                 goto abort;
23930               new_node->dw_discr_range = false;
23931             }
23932
23933           else if (TREE_CODE (match_expr) == TRUTH_ANDIF_EXPR)
23934             {
23935               /* We are matching:
23936                    <discr_field> > <integer_cst>
23937                    && <discr_field> < <integer_cst>.
23938                  This sub-expression matches the range of values between the
23939                  two matched integer constants.  Note that comparisons can be
23940                  inclusive or exclusive.  */
23941               tree candidate_discr_1, candidate_discr_2;
23942               tree lower_cst, upper_cst;
23943               bool lower_cst_included, upper_cst_included;
23944               tree lower_op = TREE_OPERAND (match_expr, 0);
23945               tree upper_op = TREE_OPERAND (match_expr, 1);
23946
23947               /* When the comparison is exclusive, the integer constant is not
23948                  the discriminant range bound we are looking for: we will have
23949                  to increment or decrement it.  */
23950               if (TREE_CODE (lower_op) == GE_EXPR)
23951                 lower_cst_included = true;
23952               else if (TREE_CODE (lower_op) == GT_EXPR)
23953                 lower_cst_included = false;
23954               else
23955                 goto abort;
23956
23957               if (TREE_CODE (upper_op) == LE_EXPR)
23958                 upper_cst_included = true;
23959               else if (TREE_CODE (upper_op) == LT_EXPR)
23960                 upper_cst_included = false;
23961               else
23962                 goto abort;
23963
23964               /* Extract the discriminant from the first operand and check it
23965                  is consistant with the same analysis in the second
23966                  operand.  */
23967               candidate_discr_1
23968                 = analyze_discr_in_predicate (TREE_OPERAND (lower_op, 0),
23969                                               struct_type);
23970               candidate_discr_2
23971                 = analyze_discr_in_predicate (TREE_OPERAND (upper_op, 0),
23972                                               struct_type);
23973               if (candidate_discr_1 == candidate_discr_2)
23974                 candidate_discr = candidate_discr_1;
23975               else
23976                 goto abort;
23977
23978               /* Extract bounds from both.  */
23979               new_node = ggc_cleared_alloc<dw_discr_list_node> ();
23980               lower_cst = TREE_OPERAND (lower_op, 1);
23981               upper_cst = TREE_OPERAND (upper_op, 1);
23982
23983               if (!lower_cst_included)
23984                 lower_cst
23985                   = fold_build2 (PLUS_EXPR, TREE_TYPE (lower_cst), lower_cst,
23986                                  build_int_cst (TREE_TYPE (lower_cst), 1));
23987               if (!upper_cst_included)
23988                 upper_cst
23989                   = fold_build2 (MINUS_EXPR, TREE_TYPE (upper_cst), upper_cst,
23990                                  build_int_cst (TREE_TYPE (upper_cst), 1));
23991
23992               if (!get_discr_value (lower_cst,
23993                                     &new_node->dw_discr_lower_bound)
23994                   || !get_discr_value (upper_cst,
23995                                        &new_node->dw_discr_upper_bound))
23996                 goto abort;
23997
23998               new_node->dw_discr_range = true;
23999             }
24000
24001           else
24002             /* Unsupported sub-expression: we cannot determine the set of
24003                matching discriminant values.  Abort everything.  */
24004             goto abort;
24005
24006           /* If the discriminant info is not consistant with what we saw so
24007              far, consider the analysis failed and abort everything.  */
24008           if (candidate_discr == NULL_TREE
24009               || (*discr_decl != NULL_TREE && candidate_discr != *discr_decl))
24010             goto abort;
24011           else
24012             *discr_decl = candidate_discr;
24013
24014           if (new_node != NULL)
24015             {
24016               new_node->dw_discr_next = discr_lists[i];
24017               discr_lists[i] = new_node;
24018             }
24019           match_expr = next_round_match_expr;
24020         }
24021     }
24022
24023   /* If we reach this point, we could match everything we were interested
24024      in.  */
24025   return;
24026
24027 abort:
24028   /* Clean all data structure and return no result.  */
24029   free (*discr_lists_p);
24030   *discr_lists_p = NULL;
24031   *discr_decl = NULL_TREE;
24032 }
24033
24034 /* Generate a DIE to represent VARIANT_PART_DECL, a variant part that is part
24035    of STRUCT_TYPE, a record type.  This new DIE is emitted as the next child
24036    under CONTEXT_DIE.
24037
24038    Variant parts are supposed to be implemented as a FIELD_DECL whose type is a
24039    QUAL_UNION_TYPE: this is the VARIANT_PART_DECL parameter.  The members for
24040    this type, which are record types, represent the available variants and each
24041    has a DECL_QUALIFIER attribute.  The discriminant and the discriminant
24042    values are inferred from these attributes.
24043
24044    In trees, the offsets for the fields inside these sub-records are relative
24045    to the variant part itself, whereas the corresponding DIEs should have
24046    offset attributes that are relative to the embedding record base address.
24047    This is why the caller must provide a VARIANT_PART_OFFSET expression: it
24048    must be an expression that computes the offset of the variant part to
24049    describe in DWARF.  */
24050
24051 static void
24052 gen_variant_part (tree variant_part_decl, struct vlr_context *vlr_ctx,
24053                   dw_die_ref context_die)
24054 {
24055   const tree variant_part_type = TREE_TYPE (variant_part_decl);
24056   tree variant_part_offset = vlr_ctx->variant_part_offset;
24057   struct loc_descr_context ctx = {
24058     vlr_ctx->struct_type, /* context_type */
24059     NULL_TREE,            /* base_decl */
24060     NULL,                 /* dpi */
24061     false,                /* placeholder_arg */
24062     false                 /* placeholder_seen */
24063   };
24064
24065   /* The FIELD_DECL node in STRUCT_TYPE that acts as the discriminant, or
24066      NULL_TREE if there is no such field.  */
24067   tree discr_decl = NULL_TREE;
24068   dw_discr_list_ref *discr_lists;
24069   unsigned discr_lists_length = 0;
24070   unsigned i;
24071
24072   dw_die_ref dwarf_proc_die = NULL;
24073   dw_die_ref variant_part_die
24074     = new_die (DW_TAG_variant_part, context_die, variant_part_type);
24075
24076   equate_decl_number_to_die (variant_part_decl, variant_part_die);
24077
24078   analyze_variants_discr (variant_part_decl, vlr_ctx->struct_type,
24079                           &discr_decl, &discr_lists, &discr_lists_length);
24080
24081   if (discr_decl != NULL_TREE)
24082     {
24083       dw_die_ref discr_die = lookup_decl_die (discr_decl);
24084
24085       if (discr_die)
24086         add_AT_die_ref (variant_part_die, DW_AT_discr, discr_die);
24087       else
24088         /* We have no DIE for the discriminant, so just discard all
24089            discrimimant information in the output.  */
24090         discr_decl = NULL_TREE;
24091     }
24092
24093   /* If the offset for this variant part is more complex than a constant,
24094      create a DWARF procedure for it so that we will not have to generate DWARF
24095      expressions for it for each member.  */
24096   if (TREE_CODE (variant_part_offset) != INTEGER_CST
24097       && (dwarf_version >= 3 || !dwarf_strict))
24098     {
24099       const tree dwarf_proc_fndecl
24100         = build_decl (UNKNOWN_LOCATION, FUNCTION_DECL, NULL_TREE,
24101                       build_function_type (TREE_TYPE (variant_part_offset),
24102                                            NULL_TREE));
24103       const tree dwarf_proc_call = build_call_expr (dwarf_proc_fndecl, 0);
24104       const dw_loc_descr_ref dwarf_proc_body
24105         = loc_descriptor_from_tree (variant_part_offset, 0, &ctx);
24106
24107       dwarf_proc_die = new_dwarf_proc_die (dwarf_proc_body,
24108                                            dwarf_proc_fndecl, context_die);
24109       if (dwarf_proc_die != NULL)
24110         variant_part_offset = dwarf_proc_call;
24111     }
24112
24113   /* Output DIEs for all variants.  */
24114   i = 0;
24115   for (tree variant = TYPE_FIELDS (variant_part_type);
24116        variant != NULL_TREE;
24117        variant = DECL_CHAIN (variant), ++i)
24118     {
24119       tree variant_type = TREE_TYPE (variant);
24120       dw_die_ref variant_die;
24121
24122       /* All variants (i.e. members of a variant part) are supposed to be
24123          encoded as structures.  Sub-variant parts are QUAL_UNION_TYPE fields
24124          under these records.  */
24125       gcc_assert (TREE_CODE (variant_type) == RECORD_TYPE);
24126
24127       variant_die = new_die (DW_TAG_variant, variant_part_die, variant_type);
24128       equate_decl_number_to_die (variant, variant_die);
24129
24130       /* Output discriminant values this variant matches, if any.  */
24131       if (discr_decl == NULL || discr_lists[i] == NULL)
24132         /* In the case we have discriminant information at all, this is
24133            probably the default variant: as the standard says, don't
24134            output any discriminant value/list attribute.  */
24135         ;
24136       else if (discr_lists[i]->dw_discr_next == NULL
24137                && !discr_lists[i]->dw_discr_range)
24138         /* If there is only one accepted value, don't bother outputting a
24139            list.  */
24140         add_discr_value (variant_die, &discr_lists[i]->dw_discr_lower_bound);
24141       else
24142         add_discr_list (variant_die, discr_lists[i]);
24143
24144       for (tree member = TYPE_FIELDS (variant_type);
24145            member != NULL_TREE;
24146            member = DECL_CHAIN (member))
24147         {
24148           struct vlr_context vlr_sub_ctx = {
24149             vlr_ctx->struct_type, /* struct_type */
24150             NULL                  /* variant_part_offset */
24151           };
24152           if (is_variant_part (member))
24153             {
24154               /* All offsets for fields inside variant parts are relative to
24155                  the top-level embedding RECORD_TYPE's base address.  On the
24156                  other hand, offsets in GCC's types are relative to the
24157                  nested-most variant part.  So we have to sum offsets each time
24158                  we recurse.  */
24159
24160               vlr_sub_ctx.variant_part_offset
24161                 = fold_build2 (PLUS_EXPR, TREE_TYPE (variant_part_offset),
24162                                variant_part_offset, byte_position (member));
24163               gen_variant_part (member, &vlr_sub_ctx, variant_die);
24164             }
24165           else
24166             {
24167               vlr_sub_ctx.variant_part_offset = variant_part_offset;
24168               gen_decl_die (member, NULL, &vlr_sub_ctx, variant_die);
24169             }
24170         }
24171     }
24172
24173   free (discr_lists);
24174 }
24175
24176 /* Generate a DIE for a class member.  */
24177
24178 static void
24179 gen_member_die (tree type, dw_die_ref context_die)
24180 {
24181   tree member;
24182   tree binfo = TYPE_BINFO (type);
24183
24184   gcc_assert (TYPE_MAIN_VARIANT (type) == type);
24185
24186   /* If this is not an incomplete type, output descriptions of each of its
24187      members. Note that as we output the DIEs necessary to represent the
24188      members of this record or union type, we will also be trying to output
24189      DIEs to represent the *types* of those members. However the `type'
24190      function (above) will specifically avoid generating type DIEs for member
24191      types *within* the list of member DIEs for this (containing) type except
24192      for those types (of members) which are explicitly marked as also being
24193      members of this (containing) type themselves.  The g++ front- end can
24194      force any given type to be treated as a member of some other (containing)
24195      type by setting the TYPE_CONTEXT of the given (member) type to point to
24196      the TREE node representing the appropriate (containing) type.  */
24197
24198   /* First output info about the base classes.  */
24199   if (binfo)
24200     {
24201       vec<tree, va_gc> *accesses = BINFO_BASE_ACCESSES (binfo);
24202       int i;
24203       tree base;
24204
24205       for (i = 0; BINFO_BASE_ITERATE (binfo, i, base); i++)
24206         gen_inheritance_die (base,
24207                              (accesses ? (*accesses)[i] : access_public_node),
24208                              type,
24209                              context_die);
24210     }
24211
24212   /* Now output info about the data members and type members.  */
24213   for (member = TYPE_FIELDS (type); member; member = DECL_CHAIN (member))
24214     {
24215       struct vlr_context vlr_ctx = { type, NULL_TREE };
24216       bool static_inline_p
24217         = (TREE_STATIC (member)
24218            && (lang_hooks.decls.decl_dwarf_attribute (member, DW_AT_inline)
24219                != -1));
24220
24221       /* Ignore clones.  */
24222       if (DECL_ABSTRACT_ORIGIN (member))
24223         continue;
24224
24225       /* If we thought we were generating minimal debug info for TYPE
24226          and then changed our minds, some of the member declarations
24227          may have already been defined.  Don't define them again, but
24228          do put them in the right order.  */
24229
24230       if (dw_die_ref child = lookup_decl_die (member))
24231         {
24232           /* Handle inline static data members, which only have in-class
24233              declarations.  */
24234           dw_die_ref ref = NULL; 
24235           if (child->die_tag == DW_TAG_variable
24236               && child->die_parent == comp_unit_die ())
24237             {
24238               ref = get_AT_ref (child, DW_AT_specification);
24239               /* For C++17 inline static data members followed by redundant
24240                  out of class redeclaration, we might get here with
24241                  child being the DIE created for the out of class
24242                  redeclaration and with its DW_AT_specification being
24243                  the DIE created for in-class definition.  We want to
24244                  reparent the latter, and don't want to create another
24245                  DIE with DW_AT_specification in that case, because
24246                  we already have one.  */
24247               if (ref
24248                   && static_inline_p
24249                   && ref->die_tag == DW_TAG_variable
24250                   && ref->die_parent == comp_unit_die ()
24251                   && get_AT (ref, DW_AT_specification) == NULL)
24252                 {
24253                   child = ref;
24254                   ref = NULL;
24255                   static_inline_p = false;
24256                 }
24257             }
24258
24259           if (child->die_tag == DW_TAG_variable
24260               && child->die_parent == comp_unit_die ()
24261               && ref == NULL)
24262             {
24263               reparent_child (child, context_die);
24264               if (dwarf_version < 5)
24265                 child->die_tag = DW_TAG_member;
24266             }
24267           else
24268             splice_child_die (context_die, child);
24269         }
24270
24271       /* Do not generate standard DWARF for variant parts if we are generating
24272          the corresponding GNAT encodings: DIEs generated for both would
24273          conflict in our mappings.  */
24274       else if (is_variant_part (member)
24275                && gnat_encodings == DWARF_GNAT_ENCODINGS_MINIMAL)
24276         {
24277           vlr_ctx.variant_part_offset = byte_position (member);
24278           gen_variant_part (member, &vlr_ctx, context_die);
24279         }
24280       else
24281         {
24282           vlr_ctx.variant_part_offset = NULL_TREE;
24283           gen_decl_die (member, NULL, &vlr_ctx, context_die);
24284         }
24285
24286       /* For C++ inline static data members emit immediately a DW_TAG_variable
24287          DIE that will refer to that DW_TAG_member/DW_TAG_variable through
24288          DW_AT_specification.  */
24289       if (static_inline_p)
24290         {
24291           int old_extern = DECL_EXTERNAL (member);
24292           DECL_EXTERNAL (member) = 0;
24293           gen_decl_die (member, NULL, NULL, comp_unit_die ());
24294           DECL_EXTERNAL (member) = old_extern;
24295         }
24296     }
24297 }
24298
24299 /* Generate a DIE for a structure or union type.  If TYPE_DECL_SUPPRESS_DEBUG
24300    is set, we pretend that the type was never defined, so we only get the
24301    member DIEs needed by later specification DIEs.  */
24302
24303 static void
24304 gen_struct_or_union_type_die (tree type, dw_die_ref context_die,
24305                                 enum debug_info_usage usage)
24306 {
24307   if (TREE_ASM_WRITTEN (type))
24308     {
24309       /* Fill in the bound of variable-length fields in late dwarf if
24310          still incomplete.  */
24311       if (!early_dwarf && variably_modified_type_p (type, NULL))
24312         for (tree member = TYPE_FIELDS (type);
24313              member;
24314              member = DECL_CHAIN (member))
24315           fill_variable_array_bounds (TREE_TYPE (member));
24316       return;
24317     }
24318
24319   dw_die_ref type_die = lookup_type_die (type);
24320   dw_die_ref scope_die = 0;
24321   int nested = 0;
24322   int complete = (TYPE_SIZE (type)
24323                   && (! TYPE_STUB_DECL (type)
24324                       || ! TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type))));
24325   int ns_decl = (context_die && context_die->die_tag == DW_TAG_namespace);
24326   complete = complete && should_emit_struct_debug (type, usage);
24327
24328   if (type_die && ! complete)
24329     return;
24330
24331   if (TYPE_CONTEXT (type) != NULL_TREE
24332       && (AGGREGATE_TYPE_P (TYPE_CONTEXT (type))
24333           || TREE_CODE (TYPE_CONTEXT (type)) == NAMESPACE_DECL))
24334     nested = 1;
24335
24336   scope_die = scope_die_for (type, context_die);
24337
24338   /* Generate child dies for template paramaters.  */
24339   if (!type_die && debug_info_level > DINFO_LEVEL_TERSE)
24340     schedule_generic_params_dies_gen (type);
24341
24342   if (! type_die || (nested && is_cu_die (scope_die)))
24343     /* First occurrence of type or toplevel definition of nested class.  */
24344     {
24345       dw_die_ref old_die = type_die;
24346
24347       type_die = new_die (TREE_CODE (type) == RECORD_TYPE
24348                           ? record_type_tag (type) : DW_TAG_union_type,
24349                           scope_die, type);
24350       equate_type_number_to_die (type, type_die);
24351       if (old_die)
24352         add_AT_specification (type_die, old_die);
24353       else
24354         add_name_attribute (type_die, type_tag (type));
24355     }
24356   else
24357     remove_AT (type_die, DW_AT_declaration);
24358
24359   /* If this type has been completed, then give it a byte_size attribute and
24360      then give a list of members.  */
24361   if (complete && !ns_decl)
24362     {
24363       /* Prevent infinite recursion in cases where the type of some member of
24364          this type is expressed in terms of this type itself.  */
24365       TREE_ASM_WRITTEN (type) = 1;
24366       add_byte_size_attribute (type_die, type);
24367       add_alignment_attribute (type_die, type);
24368       if (TYPE_STUB_DECL (type) != NULL_TREE)
24369         {
24370           add_src_coords_attributes (type_die, TYPE_STUB_DECL (type));
24371           add_accessibility_attribute (type_die, TYPE_STUB_DECL (type));
24372         }
24373
24374       /* If the first reference to this type was as the return type of an
24375          inline function, then it may not have a parent.  Fix this now.  */
24376       if (type_die->die_parent == NULL)
24377         add_child_die (scope_die, type_die);
24378
24379       push_decl_scope (type);
24380       gen_member_die (type, type_die);
24381       pop_decl_scope ();
24382
24383       add_gnat_descriptive_type_attribute (type_die, type, context_die);
24384       if (TYPE_ARTIFICIAL (type))
24385         add_AT_flag (type_die, DW_AT_artificial, 1);
24386
24387       /* GNU extension: Record what type our vtable lives in.  */
24388       if (TYPE_VFIELD (type))
24389         {
24390           tree vtype = DECL_FCONTEXT (TYPE_VFIELD (type));
24391
24392           gen_type_die (vtype, context_die);
24393           add_AT_die_ref (type_die, DW_AT_containing_type,
24394                           lookup_type_die (vtype));
24395         }
24396     }
24397   else
24398     {
24399       add_AT_flag (type_die, DW_AT_declaration, 1);
24400
24401       /* We don't need to do this for function-local types.  */
24402       if (TYPE_STUB_DECL (type)
24403           && ! decl_function_context (TYPE_STUB_DECL (type)))
24404         vec_safe_push (incomplete_types, type);
24405     }
24406
24407   if (get_AT (type_die, DW_AT_name))
24408     add_pubtype (type, type_die);
24409 }
24410
24411 /* Generate a DIE for a subroutine _type_.  */
24412
24413 static void
24414 gen_subroutine_type_die (tree type, dw_die_ref context_die)
24415 {
24416   tree return_type = TREE_TYPE (type);
24417   dw_die_ref subr_die
24418     = new_die (DW_TAG_subroutine_type,
24419                scope_die_for (type, context_die), type);
24420
24421   equate_type_number_to_die (type, subr_die);
24422   add_prototyped_attribute (subr_die, type);
24423   add_type_attribute (subr_die, return_type, TYPE_UNQUALIFIED, false,
24424                       context_die);
24425   add_alignment_attribute (subr_die, type);
24426   gen_formal_types_die (type, subr_die);
24427
24428   if (get_AT (subr_die, DW_AT_name))
24429     add_pubtype (type, subr_die);
24430   if ((dwarf_version >= 5 || !dwarf_strict)
24431       && lang_hooks.types.type_dwarf_attribute (type, DW_AT_reference) != -1)
24432     add_AT_flag (subr_die, DW_AT_reference, 1);
24433   if ((dwarf_version >= 5 || !dwarf_strict)
24434       && lang_hooks.types.type_dwarf_attribute (type,
24435                                                 DW_AT_rvalue_reference) != -1)
24436     add_AT_flag (subr_die, DW_AT_rvalue_reference, 1);
24437 }
24438
24439 /* Generate a DIE for a type definition.  */
24440
24441 static void
24442 gen_typedef_die (tree decl, dw_die_ref context_die)
24443 {
24444   dw_die_ref type_die;
24445   tree type;
24446
24447   if (TREE_ASM_WRITTEN (decl))
24448     {
24449       if (DECL_ORIGINAL_TYPE (decl))
24450         fill_variable_array_bounds (DECL_ORIGINAL_TYPE (decl));
24451       return;
24452     }
24453
24454   /* As we avoid creating DIEs for local typedefs (see decl_ultimate_origin
24455      checks in process_scope_var and modified_type_die), this should be called
24456      only for original types.  */
24457   gcc_assert (decl_ultimate_origin (decl) == NULL
24458               || decl_ultimate_origin (decl) == decl);
24459
24460   TREE_ASM_WRITTEN (decl) = 1;
24461   type_die = new_die (DW_TAG_typedef, context_die, decl);
24462
24463   add_name_and_src_coords_attributes (type_die, decl);
24464   if (DECL_ORIGINAL_TYPE (decl))
24465     {
24466       type = DECL_ORIGINAL_TYPE (decl);
24467       if (type == error_mark_node)
24468         return;
24469
24470       gcc_assert (type != TREE_TYPE (decl));
24471       equate_type_number_to_die (TREE_TYPE (decl), type_die);
24472     }
24473   else
24474     {
24475       type = TREE_TYPE (decl);
24476       if (type == error_mark_node)
24477         return;
24478
24479       if (is_naming_typedef_decl (TYPE_NAME (type)))
24480         {
24481           /* Here, we are in the case of decl being a typedef naming
24482              an anonymous type, e.g:
24483                  typedef struct {...} foo;
24484              In that case TREE_TYPE (decl) is not a typedef variant
24485              type and TYPE_NAME of the anonymous type is set to the
24486              TYPE_DECL of the typedef. This construct is emitted by
24487              the C++ FE.
24488
24489              TYPE is the anonymous struct named by the typedef
24490              DECL. As we need the DW_AT_type attribute of the
24491              DW_TAG_typedef to point to the DIE of TYPE, let's
24492              generate that DIE right away. add_type_attribute
24493              called below will then pick (via lookup_type_die) that
24494              anonymous struct DIE.  */
24495           if (!TREE_ASM_WRITTEN (type))
24496             gen_tagged_type_die (type, context_die, DINFO_USAGE_DIR_USE);
24497
24498           /* This is a GNU Extension.  We are adding a
24499              DW_AT_linkage_name attribute to the DIE of the
24500              anonymous struct TYPE.  The value of that attribute
24501              is the name of the typedef decl naming the anonymous
24502              struct.  This greatly eases the work of consumers of
24503              this debug info.  */
24504           add_linkage_name_raw (lookup_type_die (type), decl);
24505         }
24506     }
24507
24508   add_type_attribute (type_die, type, decl_quals (decl), false,
24509                       context_die);
24510
24511   if (is_naming_typedef_decl (decl))
24512     /* We want that all subsequent calls to lookup_type_die with
24513        TYPE in argument yield the DW_TAG_typedef we have just
24514        created.  */
24515     equate_type_number_to_die (type, type_die);
24516
24517   add_alignment_attribute (type_die, TREE_TYPE (decl));
24518
24519   add_accessibility_attribute (type_die, decl);
24520
24521   if (DECL_ABSTRACT_P (decl))
24522     equate_decl_number_to_die (decl, type_die);
24523
24524   if (get_AT (type_die, DW_AT_name))
24525     add_pubtype (decl, type_die);
24526 }
24527
24528 /* Generate a DIE for a struct, class, enum or union type.  */
24529
24530 static void
24531 gen_tagged_type_die (tree type,
24532                      dw_die_ref context_die,
24533                      enum debug_info_usage usage)
24534 {
24535   int need_pop;
24536
24537   if (type == NULL_TREE
24538       || !is_tagged_type (type))
24539     return;
24540
24541   if (TREE_ASM_WRITTEN (type))
24542     need_pop = 0;
24543   /* If this is a nested type whose containing class hasn't been written
24544      out yet, writing it out will cover this one, too.  This does not apply
24545      to instantiations of member class templates; they need to be added to
24546      the containing class as they are generated.  FIXME: This hurts the
24547      idea of combining type decls from multiple TUs, since we can't predict
24548      what set of template instantiations we'll get.  */
24549   else if (TYPE_CONTEXT (type)
24550       && AGGREGATE_TYPE_P (TYPE_CONTEXT (type))
24551       && ! TREE_ASM_WRITTEN (TYPE_CONTEXT (type)))
24552     {
24553       gen_type_die_with_usage (TYPE_CONTEXT (type), context_die, usage);
24554
24555       if (TREE_ASM_WRITTEN (type))
24556         return;
24557
24558       /* If that failed, attach ourselves to the stub.  */
24559       push_decl_scope (TYPE_CONTEXT (type));
24560       context_die = lookup_type_die (TYPE_CONTEXT (type));
24561       need_pop = 1;
24562     }
24563   else if (TYPE_CONTEXT (type) != NULL_TREE
24564            && (TREE_CODE (TYPE_CONTEXT (type)) == FUNCTION_DECL))
24565     {
24566       /* If this type is local to a function that hasn't been written
24567          out yet, use a NULL context for now; it will be fixed up in
24568          decls_for_scope.  */
24569       context_die = lookup_decl_die (TYPE_CONTEXT (type));
24570       /* A declaration DIE doesn't count; nested types need to go in the
24571          specification.  */
24572       if (context_die && is_declaration_die (context_die))
24573         context_die = NULL;
24574       need_pop = 0;
24575     }
24576   else
24577     {
24578       context_die = declare_in_namespace (type, context_die);
24579       need_pop = 0;
24580     }
24581
24582   if (TREE_CODE (type) == ENUMERAL_TYPE)
24583     {
24584       /* This might have been written out by the call to
24585          declare_in_namespace.  */
24586       if (!TREE_ASM_WRITTEN (type))
24587         gen_enumeration_type_die (type, context_die);
24588     }
24589   else
24590     gen_struct_or_union_type_die (type, context_die, usage);
24591
24592   if (need_pop)
24593     pop_decl_scope ();
24594
24595   /* Don't set TREE_ASM_WRITTEN on an incomplete struct; we want to fix
24596      it up if it is ever completed.  gen_*_type_die will set it for us
24597      when appropriate.  */
24598 }
24599
24600 /* Generate a type description DIE.  */
24601
24602 static void
24603 gen_type_die_with_usage (tree type, dw_die_ref context_die,
24604                          enum debug_info_usage usage)
24605 {
24606   struct array_descr_info info;
24607
24608   if (type == NULL_TREE || type == error_mark_node)
24609     return;
24610
24611   if (flag_checking && type)
24612      verify_type (type);
24613
24614   if (TYPE_NAME (type) != NULL_TREE
24615       && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
24616       && is_redundant_typedef (TYPE_NAME (type))
24617       && DECL_ORIGINAL_TYPE (TYPE_NAME (type)))
24618     /* The DECL of this type is a typedef we don't want to emit debug
24619        info for but we want debug info for its underlying typedef.
24620        This can happen for e.g, the injected-class-name of a C++
24621        type.  */
24622     type = DECL_ORIGINAL_TYPE (TYPE_NAME (type));
24623
24624   /* If TYPE is a typedef type variant, let's generate debug info
24625      for the parent typedef which TYPE is a type of.  */
24626   if (typedef_variant_p (type))
24627     {
24628       if (TREE_ASM_WRITTEN (type))
24629         return;
24630
24631       tree name = TYPE_NAME (type);
24632       tree origin = decl_ultimate_origin (name);
24633       if (origin != NULL && origin != name)
24634         {
24635           gen_decl_die (origin, NULL, NULL, context_die);
24636           return;
24637         }
24638
24639       /* Prevent broken recursion; we can't hand off to the same type.  */
24640       gcc_assert (DECL_ORIGINAL_TYPE (name) != type);
24641
24642       /* Give typedefs the right scope.  */
24643       context_die = scope_die_for (type, context_die);
24644
24645       TREE_ASM_WRITTEN (type) = 1;
24646
24647       gen_decl_die (name, NULL, NULL, context_die);
24648       return;
24649     }
24650
24651   /* If type is an anonymous tagged type named by a typedef, let's
24652      generate debug info for the typedef.  */
24653   if (is_naming_typedef_decl (TYPE_NAME (type)))
24654     {
24655       /* Use the DIE of the containing namespace as the parent DIE of
24656          the type description DIE we want to generate.  */
24657       if (DECL_CONTEXT (TYPE_NAME (type))
24658           && TREE_CODE (DECL_CONTEXT (TYPE_NAME (type))) == NAMESPACE_DECL)
24659         context_die = get_context_die (DECL_CONTEXT (TYPE_NAME (type)));
24660
24661       gen_decl_die (TYPE_NAME (type), NULL, NULL, context_die);
24662       return;
24663     }
24664
24665   if (lang_hooks.types.get_debug_type)
24666     {
24667       tree debug_type = lang_hooks.types.get_debug_type (type);
24668
24669       if (debug_type != NULL_TREE && debug_type != type)
24670         {
24671           gen_type_die_with_usage (debug_type, context_die, usage);
24672           return;
24673         }
24674     }
24675
24676   /* We are going to output a DIE to represent the unqualified version
24677      of this type (i.e. without any const or volatile qualifiers) so
24678      get the main variant (i.e. the unqualified version) of this type
24679      now.  (Vectors and arrays are special because the debugging info is in the
24680      cloned type itself.  Similarly function/method types can contain extra
24681      ref-qualification).  */
24682   if (TREE_CODE (type) == FUNCTION_TYPE
24683       || TREE_CODE (type) == METHOD_TYPE)
24684     {
24685       /* For function/method types, can't use type_main_variant here,
24686          because that can have different ref-qualifiers for C++,
24687          but try to canonicalize.  */
24688       tree main = TYPE_MAIN_VARIANT (type);
24689       for (tree t = main; t; t = TYPE_NEXT_VARIANT (t))
24690         if (TYPE_QUALS_NO_ADDR_SPACE (t) == 0
24691             && check_base_type (t, main)
24692             && check_lang_type (t, type))
24693           {
24694             type = t;
24695             break;
24696           }
24697     }
24698   else if (TREE_CODE (type) != VECTOR_TYPE
24699            && TREE_CODE (type) != ARRAY_TYPE)
24700     type = type_main_variant (type);
24701
24702   /* If this is an array type with hidden descriptor, handle it first.  */
24703   if (!TREE_ASM_WRITTEN (type)
24704       && lang_hooks.types.get_array_descr_info)
24705     {
24706       memset (&info, 0, sizeof (info));
24707       if (lang_hooks.types.get_array_descr_info (type, &info))
24708         {
24709           /* Fortran sometimes emits array types with no dimension.  */
24710           gcc_assert (info.ndimensions >= 0
24711                       && (info.ndimensions
24712                           <= DWARF2OUT_ARRAY_DESCR_INFO_MAX_DIMEN));
24713           gen_descr_array_type_die (type, &info, context_die);
24714           TREE_ASM_WRITTEN (type) = 1;
24715           return;
24716         }
24717     }
24718
24719   if (TREE_ASM_WRITTEN (type))
24720     {
24721       /* Variable-length types may be incomplete even if
24722          TREE_ASM_WRITTEN.  For such types, fall through to
24723          gen_array_type_die() and possibly fill in
24724          DW_AT_{upper,lower}_bound attributes.  */
24725       if ((TREE_CODE (type) != ARRAY_TYPE
24726            && TREE_CODE (type) != RECORD_TYPE
24727            && TREE_CODE (type) != UNION_TYPE
24728            && TREE_CODE (type) != QUAL_UNION_TYPE)
24729           || !variably_modified_type_p (type, NULL))
24730         return;
24731     }
24732
24733   switch (TREE_CODE (type))
24734     {
24735     case ERROR_MARK:
24736       break;
24737
24738     case POINTER_TYPE:
24739     case REFERENCE_TYPE:
24740       /* We must set TREE_ASM_WRITTEN in case this is a recursive type.  This
24741          ensures that the gen_type_die recursion will terminate even if the
24742          type is recursive.  Recursive types are possible in Ada.  */
24743       /* ??? We could perhaps do this for all types before the switch
24744          statement.  */
24745       TREE_ASM_WRITTEN (type) = 1;
24746
24747       /* For these types, all that is required is that we output a DIE (or a
24748          set of DIEs) to represent the "basis" type.  */
24749       gen_type_die_with_usage (TREE_TYPE (type), context_die,
24750                                DINFO_USAGE_IND_USE);
24751       break;
24752
24753     case OFFSET_TYPE:
24754       /* This code is used for C++ pointer-to-data-member types.
24755          Output a description of the relevant class type.  */
24756       gen_type_die_with_usage (TYPE_OFFSET_BASETYPE (type), context_die,
24757                                DINFO_USAGE_IND_USE);
24758
24759       /* Output a description of the type of the object pointed to.  */
24760       gen_type_die_with_usage (TREE_TYPE (type), context_die,
24761                                DINFO_USAGE_IND_USE);
24762
24763       /* Now output a DIE to represent this pointer-to-data-member type
24764          itself.  */
24765       gen_ptr_to_mbr_type_die (type, context_die);
24766       break;
24767
24768     case FUNCTION_TYPE:
24769       /* Force out return type (in case it wasn't forced out already).  */
24770       gen_type_die_with_usage (TREE_TYPE (type), context_die,
24771                                DINFO_USAGE_DIR_USE);
24772       gen_subroutine_type_die (type, context_die);
24773       break;
24774
24775     case METHOD_TYPE:
24776       /* Force out return type (in case it wasn't forced out already).  */
24777       gen_type_die_with_usage (TREE_TYPE (type), context_die,
24778                                DINFO_USAGE_DIR_USE);
24779       gen_subroutine_type_die (type, context_die);
24780       break;
24781
24782     case ARRAY_TYPE:
24783     case VECTOR_TYPE:
24784       gen_array_type_die (type, context_die);
24785       break;
24786
24787     case ENUMERAL_TYPE:
24788     case RECORD_TYPE:
24789     case UNION_TYPE:
24790     case QUAL_UNION_TYPE:
24791       gen_tagged_type_die (type, context_die, usage);
24792       return;
24793
24794     case VOID_TYPE:
24795     case INTEGER_TYPE:
24796     case REAL_TYPE:
24797     case FIXED_POINT_TYPE:
24798     case COMPLEX_TYPE:
24799     case BOOLEAN_TYPE:
24800     case POINTER_BOUNDS_TYPE:
24801       /* No DIEs needed for fundamental types.  */
24802       break;
24803
24804     case NULLPTR_TYPE:
24805     case LANG_TYPE:
24806       /* Just use DW_TAG_unspecified_type.  */
24807       {
24808         dw_die_ref type_die = lookup_type_die (type);
24809         if (type_die == NULL)
24810           {
24811             tree name = TYPE_IDENTIFIER (type);
24812             type_die = new_die (DW_TAG_unspecified_type, comp_unit_die (),
24813                                 type);
24814             add_name_attribute (type_die, IDENTIFIER_POINTER (name));
24815             equate_type_number_to_die (type, type_die);
24816           }
24817       }
24818       break;
24819
24820     default:
24821       if (is_cxx_auto (type))
24822         {
24823           tree name = TYPE_IDENTIFIER (type);
24824           dw_die_ref *die = (name == get_identifier ("auto")
24825                              ? &auto_die : &decltype_auto_die);
24826           if (!*die)
24827             {
24828               *die = new_die (DW_TAG_unspecified_type,
24829                               comp_unit_die (), NULL_TREE);
24830               add_name_attribute (*die, IDENTIFIER_POINTER (name));
24831             }
24832           equate_type_number_to_die (type, *die);
24833           break;
24834         }
24835       gcc_unreachable ();
24836     }
24837
24838   TREE_ASM_WRITTEN (type) = 1;
24839 }
24840
24841 static void
24842 gen_type_die (tree type, dw_die_ref context_die)
24843 {
24844   if (type != error_mark_node)
24845     {
24846       gen_type_die_with_usage (type, context_die, DINFO_USAGE_DIR_USE);
24847       if (flag_checking)
24848         {
24849           dw_die_ref die = lookup_type_die (type);
24850           if (die)
24851             check_die (die);
24852         }
24853     }
24854 }
24855
24856 /* Generate a DW_TAG_lexical_block DIE followed by DIEs to represent all of the
24857    things which are local to the given block.  */
24858
24859 static void
24860 gen_block_die (tree stmt, dw_die_ref context_die)
24861 {
24862   int must_output_die = 0;
24863   bool inlined_func;
24864
24865   /* Ignore blocks that are NULL.  */
24866   if (stmt == NULL_TREE)
24867     return;
24868
24869   inlined_func = inlined_function_outer_scope_p (stmt);
24870
24871   /* If the block is one fragment of a non-contiguous block, do not
24872      process the variables, since they will have been done by the
24873      origin block.  Do process subblocks.  */
24874   if (BLOCK_FRAGMENT_ORIGIN (stmt))
24875     {
24876       tree sub;
24877
24878       for (sub = BLOCK_SUBBLOCKS (stmt); sub; sub = BLOCK_CHAIN (sub))
24879         gen_block_die (sub, context_die);
24880
24881       return;
24882     }
24883
24884   /* Determine if we need to output any Dwarf DIEs at all to represent this
24885      block.  */
24886   if (inlined_func)
24887     /* The outer scopes for inlinings *must* always be represented.  We
24888        generate DW_TAG_inlined_subroutine DIEs for them.  (See below.) */
24889     must_output_die = 1;
24890   else
24891     {
24892       /* Determine if this block directly contains any "significant"
24893          local declarations which we will need to output DIEs for.  */
24894       if (debug_info_level > DINFO_LEVEL_TERSE)
24895         /* We are not in terse mode so *any* local declaration counts
24896            as being a "significant" one.  */
24897         must_output_die = ((BLOCK_VARS (stmt) != NULL
24898                             || BLOCK_NUM_NONLOCALIZED_VARS (stmt))
24899                            && (TREE_USED (stmt)
24900                                || TREE_ASM_WRITTEN (stmt)
24901                                || BLOCK_ABSTRACT (stmt)));
24902       else if ((TREE_USED (stmt)
24903                 || TREE_ASM_WRITTEN (stmt)
24904                 || BLOCK_ABSTRACT (stmt))
24905                && !dwarf2out_ignore_block (stmt))
24906         must_output_die = 1;
24907     }
24908
24909   /* It would be a waste of space to generate a Dwarf DW_TAG_lexical_block
24910      DIE for any block which contains no significant local declarations at
24911      all.  Rather, in such cases we just call `decls_for_scope' so that any
24912      needed Dwarf info for any sub-blocks will get properly generated. Note
24913      that in terse mode, our definition of what constitutes a "significant"
24914      local declaration gets restricted to include only inlined function
24915      instances and local (nested) function definitions.  */
24916   if (must_output_die)
24917     {
24918       if (inlined_func)
24919         {
24920           /* If STMT block is abstract, that means we have been called
24921              indirectly from dwarf2out_abstract_function.
24922              That function rightfully marks the descendent blocks (of
24923              the abstract function it is dealing with) as being abstract,
24924              precisely to prevent us from emitting any
24925              DW_TAG_inlined_subroutine DIE as a descendent
24926              of an abstract function instance. So in that case, we should
24927              not call gen_inlined_subroutine_die.
24928
24929              Later though, when cgraph asks dwarf2out to emit info
24930              for the concrete instance of the function decl into which
24931              the concrete instance of STMT got inlined, the later will lead
24932              to the generation of a DW_TAG_inlined_subroutine DIE.  */
24933           if (! BLOCK_ABSTRACT (stmt))
24934             gen_inlined_subroutine_die (stmt, context_die);
24935         }
24936       else
24937         gen_lexical_block_die (stmt, context_die);
24938     }
24939   else
24940     decls_for_scope (stmt, context_die);
24941 }
24942
24943 /* Process variable DECL (or variable with origin ORIGIN) within
24944    block STMT and add it to CONTEXT_DIE.  */
24945 static void
24946 process_scope_var (tree stmt, tree decl, tree origin, dw_die_ref context_die)
24947 {
24948   dw_die_ref die;
24949   tree decl_or_origin = decl ? decl : origin;
24950
24951   if (TREE_CODE (decl_or_origin) == FUNCTION_DECL)
24952     die = lookup_decl_die (decl_or_origin);
24953   else if (TREE_CODE (decl_or_origin) == TYPE_DECL)
24954     {
24955       if (TYPE_DECL_IS_STUB (decl_or_origin))
24956         die = lookup_type_die (TREE_TYPE (decl_or_origin));
24957       else
24958         die = lookup_decl_die (decl_or_origin);
24959       /* Avoid re-creating the DIE late if it was optimized as unused early.  */
24960       if (! die && ! early_dwarf)
24961         return;
24962     }
24963   else
24964     die = NULL;
24965
24966   /* Avoid creating DIEs for local typedefs and concrete static variables that
24967      will only be pruned later.  */
24968   if ((origin || decl_ultimate_origin (decl))
24969       && (TREE_CODE (decl_or_origin) == TYPE_DECL
24970           || (VAR_P (decl_or_origin) && TREE_STATIC (decl_or_origin))))
24971     {
24972       origin = decl_ultimate_origin (decl_or_origin);
24973       if (decl && VAR_P (decl) && die != NULL)
24974         {
24975           die = lookup_decl_die (origin);
24976           if (die != NULL)
24977             equate_decl_number_to_die (decl, die);
24978         }
24979       return;
24980     }
24981
24982   if (die != NULL && die->die_parent == NULL)
24983     add_child_die (context_die, die);
24984   else if (TREE_CODE (decl_or_origin) == IMPORTED_DECL)
24985     {
24986       if (early_dwarf)
24987         dwarf2out_imported_module_or_decl_1 (decl_or_origin, DECL_NAME (decl_or_origin),
24988                                              stmt, context_die);
24989     }
24990   else
24991     {
24992       if (decl && DECL_P (decl))
24993         {
24994           die = lookup_decl_die (decl);
24995
24996           /* Early created DIEs do not have a parent as the decls refer
24997              to the function as DECL_CONTEXT rather than the BLOCK.  */
24998           if (die && die->die_parent == NULL)
24999             {
25000               gcc_assert (in_lto_p);
25001               add_child_die (context_die, die);
25002             }
25003         }
25004
25005       gen_decl_die (decl, origin, NULL, context_die);
25006     }
25007 }
25008
25009 /* Generate all of the decls declared within a given scope and (recursively)
25010    all of its sub-blocks.  */
25011
25012 static void
25013 decls_for_scope (tree stmt, dw_die_ref context_die)
25014 {
25015   tree decl;
25016   unsigned int i;
25017   tree subblocks;
25018
25019   /* Ignore NULL blocks.  */
25020   if (stmt == NULL_TREE)
25021     return;
25022
25023   /* Output the DIEs to represent all of the data objects and typedefs
25024      declared directly within this block but not within any nested
25025      sub-blocks.  Also, nested function and tag DIEs have been
25026      generated with a parent of NULL; fix that up now.  We don't
25027      have to do this if we're at -g1.  */
25028   if (debug_info_level > DINFO_LEVEL_TERSE)
25029     {
25030       for (decl = BLOCK_VARS (stmt); decl != NULL; decl = DECL_CHAIN (decl))
25031         process_scope_var (stmt, decl, NULL_TREE, context_die);
25032       /* BLOCK_NONLOCALIZED_VARs simply generate DIE stubs with abstract
25033          origin - avoid doing this twice as we have no good way to see
25034          if we've done it once already.  */
25035       if (! early_dwarf)
25036         for (i = 0; i < BLOCK_NUM_NONLOCALIZED_VARS (stmt); i++)
25037           {
25038             decl = BLOCK_NONLOCALIZED_VAR (stmt, i);
25039             if (decl == current_function_decl)
25040               /* Ignore declarations of the current function, while they
25041                  are declarations, gen_subprogram_die would treat them
25042                  as definitions again, because they are equal to
25043                  current_function_decl and endlessly recurse.  */;
25044             else if (TREE_CODE (decl) == FUNCTION_DECL)
25045               process_scope_var (stmt, decl, NULL_TREE, context_die);
25046             else
25047               process_scope_var (stmt, NULL_TREE, decl, context_die);
25048           }
25049     }
25050
25051   /* Even if we're at -g1, we need to process the subblocks in order to get
25052      inlined call information.  */
25053
25054   /* Output the DIEs to represent all sub-blocks (and the items declared
25055      therein) of this block.  */
25056   for (subblocks = BLOCK_SUBBLOCKS (stmt);
25057        subblocks != NULL;
25058        subblocks = BLOCK_CHAIN (subblocks))
25059     gen_block_die (subblocks, context_die);
25060 }
25061
25062 /* Is this a typedef we can avoid emitting?  */
25063
25064 bool
25065 is_redundant_typedef (const_tree decl)
25066 {
25067   if (TYPE_DECL_IS_STUB (decl))
25068     return true;
25069
25070   if (DECL_ARTIFICIAL (decl)
25071       && DECL_CONTEXT (decl)
25072       && is_tagged_type (DECL_CONTEXT (decl))
25073       && TREE_CODE (TYPE_NAME (DECL_CONTEXT (decl))) == TYPE_DECL
25074       && DECL_NAME (decl) == DECL_NAME (TYPE_NAME (DECL_CONTEXT (decl))))
25075     /* Also ignore the artificial member typedef for the class name.  */
25076     return true;
25077
25078   return false;
25079 }
25080
25081 /* Return TRUE if TYPE is a typedef that names a type for linkage
25082    purposes. This kind of typedefs is produced by the C++ FE for
25083    constructs like:
25084
25085    typedef struct {...} foo;
25086
25087    In that case, there is no typedef variant type produced for foo.
25088    Rather, the TREE_TYPE of the TYPE_DECL of foo is the anonymous
25089    struct type.  */
25090
25091 static bool
25092 is_naming_typedef_decl (const_tree decl)
25093 {
25094   if (decl == NULL_TREE
25095       || TREE_CODE (decl) != TYPE_DECL
25096       || DECL_NAMELESS (decl)
25097       || !is_tagged_type (TREE_TYPE (decl))
25098       || DECL_IS_BUILTIN (decl)
25099       || is_redundant_typedef (decl)
25100       /* It looks like Ada produces TYPE_DECLs that are very similar
25101          to C++ naming typedefs but that have different
25102          semantics. Let's be specific to c++ for now.  */
25103       || !is_cxx (decl))
25104     return FALSE;
25105
25106   return (DECL_ORIGINAL_TYPE (decl) == NULL_TREE
25107           && TYPE_NAME (TREE_TYPE (decl)) == decl
25108           && (TYPE_STUB_DECL (TREE_TYPE (decl))
25109               != TYPE_NAME (TREE_TYPE (decl))));
25110 }
25111
25112 /* Looks up the DIE for a context.  */
25113
25114 static inline dw_die_ref
25115 lookup_context_die (tree context)
25116 {
25117   if (context)
25118     {
25119       /* Find die that represents this context.  */
25120       if (TYPE_P (context))
25121         {
25122           context = TYPE_MAIN_VARIANT (context);
25123           dw_die_ref ctx = lookup_type_die (context);
25124           if (!ctx)
25125             return NULL;
25126           return strip_naming_typedef (context, ctx);
25127         }
25128       else
25129         return lookup_decl_die (context);
25130     }
25131   return comp_unit_die ();
25132 }
25133
25134 /* Returns the DIE for a context.  */
25135
25136 static inline dw_die_ref
25137 get_context_die (tree context)
25138 {
25139   if (context)
25140     {
25141       /* Find die that represents this context.  */
25142       if (TYPE_P (context))
25143         {
25144           context = TYPE_MAIN_VARIANT (context);
25145           return strip_naming_typedef (context, force_type_die (context));
25146         }
25147       else
25148         return force_decl_die (context);
25149     }
25150   return comp_unit_die ();
25151 }
25152
25153 /* Returns the DIE for decl.  A DIE will always be returned.  */
25154
25155 static dw_die_ref
25156 force_decl_die (tree decl)
25157 {
25158   dw_die_ref decl_die;
25159   unsigned saved_external_flag;
25160   tree save_fn = NULL_TREE;
25161   decl_die = lookup_decl_die (decl);
25162   if (!decl_die)
25163     {
25164       dw_die_ref context_die = get_context_die (DECL_CONTEXT (decl));
25165
25166       decl_die = lookup_decl_die (decl);
25167       if (decl_die)
25168         return decl_die;
25169
25170       switch (TREE_CODE (decl))
25171         {
25172         case FUNCTION_DECL:
25173           /* Clear current_function_decl, so that gen_subprogram_die thinks
25174              that this is a declaration. At this point, we just want to force
25175              declaration die.  */
25176           save_fn = current_function_decl;
25177           current_function_decl = NULL_TREE;
25178           gen_subprogram_die (decl, context_die);
25179           current_function_decl = save_fn;
25180           break;
25181
25182         case VAR_DECL:
25183           /* Set external flag to force declaration die. Restore it after
25184            gen_decl_die() call.  */
25185           saved_external_flag = DECL_EXTERNAL (decl);
25186           DECL_EXTERNAL (decl) = 1;
25187           gen_decl_die (decl, NULL, NULL, context_die);
25188           DECL_EXTERNAL (decl) = saved_external_flag;
25189           break;
25190
25191         case NAMESPACE_DECL:
25192           if (dwarf_version >= 3 || !dwarf_strict)
25193             dwarf2out_decl (decl);
25194           else
25195             /* DWARF2 has neither DW_TAG_module, nor DW_TAG_namespace.  */
25196             decl_die = comp_unit_die ();
25197           break;
25198
25199         case TRANSLATION_UNIT_DECL:
25200           decl_die = comp_unit_die ();
25201           break;
25202
25203         default:
25204           gcc_unreachable ();
25205         }
25206
25207       /* We should be able to find the DIE now.  */
25208       if (!decl_die)
25209         decl_die = lookup_decl_die (decl);
25210       gcc_assert (decl_die);
25211     }
25212
25213   return decl_die;
25214 }
25215
25216 /* Returns the DIE for TYPE, that must not be a base type.  A DIE is
25217    always returned.  */
25218
25219 static dw_die_ref
25220 force_type_die (tree type)
25221 {
25222   dw_die_ref type_die;
25223
25224   type_die = lookup_type_die (type);
25225   if (!type_die)
25226     {
25227       dw_die_ref context_die = get_context_die (TYPE_CONTEXT (type));
25228
25229       type_die = modified_type_die (type, TYPE_QUALS_NO_ADDR_SPACE (type),
25230                                     false, context_die);
25231       gcc_assert (type_die);
25232     }
25233   return type_die;
25234 }
25235
25236 /* Force out any required namespaces to be able to output DECL,
25237    and return the new context_die for it, if it's changed.  */
25238
25239 static dw_die_ref
25240 setup_namespace_context (tree thing, dw_die_ref context_die)
25241 {
25242   tree context = (DECL_P (thing)
25243                   ? DECL_CONTEXT (thing) : TYPE_CONTEXT (thing));
25244   if (context && TREE_CODE (context) == NAMESPACE_DECL)
25245     /* Force out the namespace.  */
25246     context_die = force_decl_die (context);
25247
25248   return context_die;
25249 }
25250
25251 /* Emit a declaration DIE for THING (which is either a DECL or a tagged
25252    type) within its namespace, if appropriate.
25253
25254    For compatibility with older debuggers, namespace DIEs only contain
25255    declarations; all definitions are emitted at CU scope, with
25256    DW_AT_specification pointing to the declaration (like with class
25257    members).  */
25258
25259 static dw_die_ref
25260 declare_in_namespace (tree thing, dw_die_ref context_die)
25261 {
25262   dw_die_ref ns_context;
25263
25264   if (debug_info_level <= DINFO_LEVEL_TERSE)
25265     return context_die;
25266
25267   /* External declarations in the local scope only need to be emitted
25268      once, not once in the namespace and once in the scope.
25269
25270      This avoids declaring the `extern' below in the
25271      namespace DIE as well as in the innermost scope:
25272
25273           namespace S
25274           {
25275             int i=5;
25276             int foo()
25277             {
25278               int i=8;
25279               extern int i;
25280               return i;
25281             }
25282           }
25283   */
25284   if (DECL_P (thing) && DECL_EXTERNAL (thing) && local_scope_p (context_die))
25285     return context_die;
25286
25287   /* If this decl is from an inlined function, then don't try to emit it in its
25288      namespace, as we will get confused.  It would have already been emitted
25289      when the abstract instance of the inline function was emitted anyways.  */
25290   if (DECL_P (thing) && DECL_ABSTRACT_ORIGIN (thing))
25291     return context_die;
25292
25293   ns_context = setup_namespace_context (thing, context_die);
25294
25295   if (ns_context != context_die)
25296     {
25297       if (is_fortran ())
25298         return ns_context;
25299       if (DECL_P (thing))
25300         gen_decl_die (thing, NULL, NULL, ns_context);
25301       else
25302         gen_type_die (thing, ns_context);
25303     }
25304   return context_die;
25305 }
25306
25307 /* Generate a DIE for a namespace or namespace alias.  */
25308
25309 static void
25310 gen_namespace_die (tree decl, dw_die_ref context_die)
25311 {
25312   dw_die_ref namespace_die;
25313
25314   /* Namespace aliases have a DECL_ABSTRACT_ORIGIN of the namespace
25315      they are an alias of.  */
25316   if (DECL_ABSTRACT_ORIGIN (decl) == NULL)
25317     {
25318       /* Output a real namespace or module.  */
25319       context_die = setup_namespace_context (decl, comp_unit_die ());
25320       namespace_die = new_die (is_fortran ()
25321                                ? DW_TAG_module : DW_TAG_namespace,
25322                                context_die, decl);
25323       /* For Fortran modules defined in different CU don't add src coords.  */
25324       if (namespace_die->die_tag == DW_TAG_module && DECL_EXTERNAL (decl))
25325         {
25326           const char *name = dwarf2_name (decl, 0);
25327           if (name)
25328             add_name_attribute (namespace_die, name);
25329         }
25330       else
25331         add_name_and_src_coords_attributes (namespace_die, decl);
25332       if (DECL_EXTERNAL (decl))
25333         add_AT_flag (namespace_die, DW_AT_declaration, 1);
25334       equate_decl_number_to_die (decl, namespace_die);
25335     }
25336   else
25337     {
25338       /* Output a namespace alias.  */
25339
25340       /* Force out the namespace we are an alias of, if necessary.  */
25341       dw_die_ref origin_die
25342         = force_decl_die (DECL_ABSTRACT_ORIGIN (decl));
25343
25344       if (DECL_FILE_SCOPE_P (decl)
25345           || TREE_CODE (DECL_CONTEXT (decl)) == NAMESPACE_DECL)
25346         context_die = setup_namespace_context (decl, comp_unit_die ());
25347       /* Now create the namespace alias DIE.  */
25348       namespace_die = new_die (DW_TAG_imported_declaration, context_die, decl);
25349       add_name_and_src_coords_attributes (namespace_die, decl);
25350       add_AT_die_ref (namespace_die, DW_AT_import, origin_die);
25351       equate_decl_number_to_die (decl, namespace_die);
25352     }
25353   if ((dwarf_version >= 5 || !dwarf_strict)
25354       && lang_hooks.decls.decl_dwarf_attribute (decl,
25355                                                 DW_AT_export_symbols) == 1)
25356     add_AT_flag (namespace_die, DW_AT_export_symbols, 1);
25357
25358   /* Bypass dwarf2_name's check for DECL_NAMELESS.  */
25359   if (want_pubnames ())
25360     add_pubname_string (lang_hooks.dwarf_name (decl, 1), namespace_die);
25361 }
25362
25363 /* Generate Dwarf debug information for a decl described by DECL.
25364    The return value is currently only meaningful for PARM_DECLs,
25365    for all other decls it returns NULL.
25366
25367    If DECL is a FIELD_DECL, CTX is required: see the comment for VLR_CONTEXT.
25368    It can be NULL otherwise.  */
25369
25370 static dw_die_ref
25371 gen_decl_die (tree decl, tree origin, struct vlr_context *ctx,
25372               dw_die_ref context_die)
25373 {
25374   tree decl_or_origin = decl ? decl : origin;
25375   tree class_origin = NULL, ultimate_origin;
25376
25377   if (DECL_P (decl_or_origin) && DECL_IGNORED_P (decl_or_origin))
25378     return NULL;
25379
25380   /* Ignore pointer bounds decls.  */
25381   if (DECL_P (decl_or_origin)
25382       && TREE_TYPE (decl_or_origin)
25383       && POINTER_BOUNDS_P (decl_or_origin))
25384     return NULL;
25385
25386   switch (TREE_CODE (decl_or_origin))
25387     {
25388     case ERROR_MARK:
25389       break;
25390
25391     case CONST_DECL:
25392       if (!is_fortran () && !is_ada ())
25393         {
25394           /* The individual enumerators of an enum type get output when we output
25395              the Dwarf representation of the relevant enum type itself.  */
25396           break;
25397         }
25398
25399       /* Emit its type.  */
25400       gen_type_die (TREE_TYPE (decl), context_die);
25401
25402       /* And its containing namespace.  */
25403       context_die = declare_in_namespace (decl, context_die);
25404
25405       gen_const_die (decl, context_die);
25406       break;
25407
25408     case FUNCTION_DECL:
25409 #if 0
25410       /* FIXME */
25411       /* This doesn't work because the C frontend sets DECL_ABSTRACT_ORIGIN
25412          on local redeclarations of global functions.  That seems broken.  */
25413       if (current_function_decl != decl)
25414         /* This is only a declaration.  */;
25415 #endif
25416
25417       /* We should have abstract copies already and should not generate
25418          stray type DIEs in late LTO dumping.  */
25419       if (! early_dwarf)
25420         ;
25421
25422       /* If we're emitting a clone, emit info for the abstract instance.  */
25423       else if (origin || DECL_ORIGIN (decl) != decl)
25424         dwarf2out_abstract_function (origin
25425                                      ? DECL_ORIGIN (origin)
25426                                      : DECL_ABSTRACT_ORIGIN (decl));
25427
25428       /* If we're emitting a possibly inlined function emit it as
25429          abstract instance.  */
25430       else if (cgraph_function_possibly_inlined_p (decl)
25431                && ! DECL_ABSTRACT_P (decl)
25432                && ! class_or_namespace_scope_p (context_die)
25433                /* dwarf2out_abstract_function won't emit a die if this is just
25434                   a declaration.  We must avoid setting DECL_ABSTRACT_ORIGIN in
25435                   that case, because that works only if we have a die.  */
25436                && DECL_INITIAL (decl) != NULL_TREE)
25437         dwarf2out_abstract_function (decl);
25438
25439       /* Otherwise we're emitting the primary DIE for this decl.  */
25440       else if (debug_info_level > DINFO_LEVEL_TERSE)
25441         {
25442           /* Before we describe the FUNCTION_DECL itself, make sure that we
25443              have its containing type.  */
25444           if (!origin)
25445             origin = decl_class_context (decl);
25446           if (origin != NULL_TREE)
25447             gen_type_die (origin, context_die);
25448
25449           /* And its return type.  */
25450           gen_type_die (TREE_TYPE (TREE_TYPE (decl)), context_die);
25451
25452           /* And its virtual context.  */
25453           if (DECL_VINDEX (decl) != NULL_TREE)
25454             gen_type_die (DECL_CONTEXT (decl), context_die);
25455
25456           /* Make sure we have a member DIE for decl.  */
25457           if (origin != NULL_TREE)
25458             gen_type_die_for_member (origin, decl, context_die);
25459
25460           /* And its containing namespace.  */
25461           context_die = declare_in_namespace (decl, context_die);
25462         }
25463
25464       /* Now output a DIE to represent the function itself.  */
25465       if (decl)
25466         gen_subprogram_die (decl, context_die);
25467       break;
25468
25469     case TYPE_DECL:
25470       /* If we are in terse mode, don't generate any DIEs to represent any
25471          actual typedefs.  */
25472       if (debug_info_level <= DINFO_LEVEL_TERSE)
25473         break;
25474
25475       /* In the special case of a TYPE_DECL node representing the declaration
25476          of some type tag, if the given TYPE_DECL is marked as having been
25477          instantiated from some other (original) TYPE_DECL node (e.g. one which
25478          was generated within the original definition of an inline function) we
25479          used to generate a special (abbreviated) DW_TAG_structure_type,
25480          DW_TAG_union_type, or DW_TAG_enumeration_type DIE here.  But nothing
25481          should be actually referencing those DIEs, as variable DIEs with that
25482          type would be emitted already in the abstract origin, so it was always
25483          removed during unused type prunning.  Don't add anything in this
25484          case.  */
25485       if (TYPE_DECL_IS_STUB (decl) && decl_ultimate_origin (decl) != NULL_TREE)
25486         break;
25487
25488       if (is_redundant_typedef (decl))
25489         gen_type_die (TREE_TYPE (decl), context_die);
25490       else
25491         /* Output a DIE to represent the typedef itself.  */
25492         gen_typedef_die (decl, context_die);
25493       break;
25494
25495     case LABEL_DECL:
25496       if (debug_info_level >= DINFO_LEVEL_NORMAL)
25497         gen_label_die (decl, context_die);
25498       break;
25499
25500     case VAR_DECL:
25501     case RESULT_DECL:
25502       /* If we are in terse mode, don't generate any DIEs to represent any
25503          variable declarations or definitions.  */
25504       if (debug_info_level <= DINFO_LEVEL_TERSE)
25505         break;
25506
25507       /* Avoid generating stray type DIEs during late dwarf dumping.
25508          All types have been dumped early.  */
25509       if (early_dwarf
25510           /* ???  But in LTRANS we cannot annotate early created variably
25511              modified type DIEs without copying them and adjusting all
25512              references to them.  Dump them again as happens for inlining
25513              which copies both the decl and the types.  */
25514           /* ???  And even non-LTO needs to re-visit type DIEs to fill
25515              in VLA bound information for example.  */
25516           || (decl && variably_modified_type_p (TREE_TYPE (decl),
25517                                                 current_function_decl)))
25518         {
25519           /* Output any DIEs that are needed to specify the type of this data
25520              object.  */
25521           if (decl_by_reference_p (decl_or_origin))
25522             gen_type_die (TREE_TYPE (TREE_TYPE (decl_or_origin)), context_die);
25523           else
25524             gen_type_die (TREE_TYPE (decl_or_origin), context_die);
25525         }
25526
25527       if (early_dwarf)
25528         {
25529           /* And its containing type.  */
25530           class_origin = decl_class_context (decl_or_origin);
25531           if (class_origin != NULL_TREE)
25532             gen_type_die_for_member (class_origin, decl_or_origin, context_die);
25533
25534           /* And its containing namespace.  */
25535           context_die = declare_in_namespace (decl_or_origin, context_die);
25536         }
25537
25538       /* Now output the DIE to represent the data object itself.  This gets
25539          complicated because of the possibility that the VAR_DECL really
25540          represents an inlined instance of a formal parameter for an inline
25541          function.  */
25542       ultimate_origin = decl_ultimate_origin (decl_or_origin);
25543       if (ultimate_origin != NULL_TREE
25544           && TREE_CODE (ultimate_origin) == PARM_DECL)
25545         gen_formal_parameter_die (decl, origin,
25546                                   true /* Emit name attribute.  */,
25547                                   context_die);
25548       else
25549         gen_variable_die (decl, origin, context_die);
25550       break;
25551
25552     case FIELD_DECL:
25553       gcc_assert (ctx != NULL && ctx->struct_type != NULL);
25554       /* Ignore the nameless fields that are used to skip bits but handle C++
25555          anonymous unions and structs.  */
25556       if (DECL_NAME (decl) != NULL_TREE
25557           || TREE_CODE (TREE_TYPE (decl)) == UNION_TYPE
25558           || TREE_CODE (TREE_TYPE (decl)) == RECORD_TYPE)
25559         {
25560           gen_type_die (member_declared_type (decl), context_die);
25561           gen_field_die (decl, ctx, context_die);
25562         }
25563       break;
25564
25565     case PARM_DECL:
25566       /* Avoid generating stray type DIEs during late dwarf dumping.
25567          All types have been dumped early.  */
25568       if (early_dwarf
25569           /* ???  But in LTRANS we cannot annotate early created variably
25570              modified type DIEs without copying them and adjusting all
25571              references to them.  Dump them again as happens for inlining
25572              which copies both the decl and the types.  */
25573           /* ???  And even non-LTO needs to re-visit type DIEs to fill
25574              in VLA bound information for example.  */
25575           || (decl && variably_modified_type_p (TREE_TYPE (decl),
25576                                                 current_function_decl)))
25577         {
25578           if (DECL_BY_REFERENCE (decl_or_origin))
25579             gen_type_die (TREE_TYPE (TREE_TYPE (decl_or_origin)), context_die);
25580           else
25581             gen_type_die (TREE_TYPE (decl_or_origin), context_die);
25582         }
25583       return gen_formal_parameter_die (decl, origin,
25584                                        true /* Emit name attribute.  */,
25585                                        context_die);
25586
25587     case NAMESPACE_DECL:
25588       if (dwarf_version >= 3 || !dwarf_strict)
25589         gen_namespace_die (decl, context_die);
25590       break;
25591
25592     case IMPORTED_DECL:
25593       dwarf2out_imported_module_or_decl_1 (decl, DECL_NAME (decl),
25594                                            DECL_CONTEXT (decl), context_die);
25595       break;
25596
25597     case NAMELIST_DECL:
25598       gen_namelist_decl (DECL_NAME (decl), context_die,
25599                          NAMELIST_DECL_ASSOCIATED_DECL (decl));
25600       break;
25601
25602     default:
25603       /* Probably some frontend-internal decl.  Assume we don't care.  */
25604       gcc_assert ((int)TREE_CODE (decl) > NUM_TREE_CODES);
25605       break;
25606     }
25607
25608   return NULL;
25609 }
25610 \f
25611 /* Output initial debug information for global DECL.  Called at the
25612    end of the parsing process.
25613
25614    This is the initial debug generation process.  As such, the DIEs
25615    generated may be incomplete.  A later debug generation pass
25616    (dwarf2out_late_global_decl) will augment the information generated
25617    in this pass (e.g., with complete location info).  */
25618
25619 static void
25620 dwarf2out_early_global_decl (tree decl)
25621 {
25622   set_early_dwarf s;
25623
25624   /* gen_decl_die() will set DECL_ABSTRACT because
25625      cgraph_function_possibly_inlined_p() returns true.  This is in
25626      turn will cause DW_AT_inline attributes to be set.
25627
25628      This happens because at early dwarf generation, there is no
25629      cgraph information, causing cgraph_function_possibly_inlined_p()
25630      to return true.  Trick cgraph_function_possibly_inlined_p()
25631      while we generate dwarf early.  */
25632   bool save = symtab->global_info_ready;
25633   symtab->global_info_ready = true;
25634
25635   /* We don't handle TYPE_DECLs.  If required, they'll be reached via
25636      other DECLs and they can point to template types or other things
25637      that dwarf2out can't handle when done via dwarf2out_decl.  */
25638   if (TREE_CODE (decl) != TYPE_DECL
25639       && TREE_CODE (decl) != PARM_DECL)
25640     {
25641       if (TREE_CODE (decl) == FUNCTION_DECL)
25642         {
25643           tree save_fndecl = current_function_decl;
25644
25645           /* For nested functions, make sure we have DIEs for the parents first
25646              so that all nested DIEs are generated at the proper scope in the
25647              first shot.  */
25648           tree context = decl_function_context (decl);
25649           if (context != NULL)
25650             {
25651               dw_die_ref context_die = lookup_decl_die (context);
25652               current_function_decl = context;
25653
25654               /* Avoid emitting DIEs multiple times, but still process CONTEXT
25655                  enough so that it lands in its own context.  This avoids type
25656                  pruning issues later on.  */
25657               if (context_die == NULL || is_declaration_die (context_die))
25658                 dwarf2out_decl (context);
25659             }
25660
25661           /* Emit an abstract origin of a function first.  This happens
25662              with C++ constructor clones for example and makes
25663              dwarf2out_abstract_function happy which requires the early
25664              DIE of the abstract instance to be present.  */
25665           tree origin = DECL_ABSTRACT_ORIGIN (decl);
25666           dw_die_ref origin_die;
25667           if (origin != NULL
25668               /* Do not emit the DIE multiple times but make sure to
25669                  process it fully here in case we just saw a declaration.  */
25670               && ((origin_die = lookup_decl_die (origin)) == NULL
25671                   || is_declaration_die (origin_die)))
25672             {
25673               current_function_decl = origin;
25674               dwarf2out_decl (origin);
25675             }
25676
25677           /* Emit the DIE for decl but avoid doing that multiple times.  */
25678           dw_die_ref old_die;
25679           if ((old_die = lookup_decl_die (decl)) == NULL
25680               || is_declaration_die (old_die))
25681             {
25682               current_function_decl = decl;
25683               dwarf2out_decl (decl);
25684             }
25685
25686           current_function_decl = save_fndecl;
25687         }
25688       else
25689         dwarf2out_decl (decl);
25690     }
25691   symtab->global_info_ready = save;
25692 }
25693
25694 /* Output debug information for global decl DECL.  Called from
25695    toplev.c after compilation proper has finished.  */
25696
25697 static void
25698 dwarf2out_late_global_decl (tree decl)
25699 {
25700   /* Fill-in any location information we were unable to determine
25701      on the first pass.  */
25702   if (VAR_P (decl) && !POINTER_BOUNDS_P (decl))
25703     {
25704       dw_die_ref die = lookup_decl_die (decl);
25705
25706       /* We may have to generate early debug late for LTO in case debug
25707          was not enabled at compile-time or the target doesn't support
25708          the LTO early debug scheme.  */
25709       if (! die && in_lto_p)
25710         {
25711           dwarf2out_decl (decl);
25712           die = lookup_decl_die (decl);
25713         }
25714
25715       if (die)
25716         {
25717           /* We get called via the symtab code invoking late_global_decl
25718              for symbols that are optimized out.  Do not add locations
25719              for those, except if they have a DECL_VALUE_EXPR, in which case
25720              they are relevant for debuggers.  */
25721           varpool_node *node = varpool_node::get (decl);
25722           if ((! node || ! node->definition) && ! DECL_HAS_VALUE_EXPR_P (decl))
25723             tree_add_const_value_attribute_for_decl (die, decl);
25724           else
25725             add_location_or_const_value_attribute (die, decl, false);
25726         }
25727     }
25728 }
25729
25730 /* Output debug information for type decl DECL.  Called from toplev.c
25731    and from language front ends (to record built-in types).  */
25732 static void
25733 dwarf2out_type_decl (tree decl, int local)
25734 {
25735   if (!local)
25736     {
25737       set_early_dwarf s;
25738       dwarf2out_decl (decl);
25739     }
25740 }
25741
25742 /* Output debug information for imported module or decl DECL.
25743    NAME is non-NULL name in the lexical block if the decl has been renamed.
25744    LEXICAL_BLOCK is the lexical block (which TREE_CODE is a BLOCK)
25745    that DECL belongs to.
25746    LEXICAL_BLOCK_DIE is the DIE of LEXICAL_BLOCK.  */
25747 static void
25748 dwarf2out_imported_module_or_decl_1 (tree decl,
25749                                      tree name,
25750                                      tree lexical_block,
25751                                      dw_die_ref lexical_block_die)
25752 {
25753   expanded_location xloc;
25754   dw_die_ref imported_die = NULL;
25755   dw_die_ref at_import_die;
25756
25757   if (TREE_CODE (decl) == IMPORTED_DECL)
25758     {
25759       xloc = expand_location (DECL_SOURCE_LOCATION (decl));
25760       decl = IMPORTED_DECL_ASSOCIATED_DECL (decl);
25761       gcc_assert (decl);
25762     }
25763   else
25764     xloc = expand_location (input_location);
25765
25766   if (TREE_CODE (decl) == TYPE_DECL || TREE_CODE (decl) == CONST_DECL)
25767     {
25768       at_import_die = force_type_die (TREE_TYPE (decl));
25769       /* For namespace N { typedef void T; } using N::T; base_type_die
25770          returns NULL, but DW_TAG_imported_declaration requires
25771          the DW_AT_import tag.  Force creation of DW_TAG_typedef.  */
25772       if (!at_import_die)
25773         {
25774           gcc_assert (TREE_CODE (decl) == TYPE_DECL);
25775           gen_typedef_die (decl, get_context_die (DECL_CONTEXT (decl)));
25776           at_import_die = lookup_type_die (TREE_TYPE (decl));
25777           gcc_assert (at_import_die);
25778         }
25779     }
25780   else
25781     {
25782       at_import_die = lookup_decl_die (decl);
25783       if (!at_import_die)
25784         {
25785           /* If we're trying to avoid duplicate debug info, we may not have
25786              emitted the member decl for this field.  Emit it now.  */
25787           if (TREE_CODE (decl) == FIELD_DECL)
25788             {
25789               tree type = DECL_CONTEXT (decl);
25790
25791               if (TYPE_CONTEXT (type)
25792                   && TYPE_P (TYPE_CONTEXT (type))
25793                   && !should_emit_struct_debug (TYPE_CONTEXT (type),
25794                                                 DINFO_USAGE_DIR_USE))
25795                 return;
25796               gen_type_die_for_member (type, decl,
25797                                        get_context_die (TYPE_CONTEXT (type)));
25798             }
25799           if (TREE_CODE (decl) == NAMELIST_DECL)
25800             at_import_die = gen_namelist_decl (DECL_NAME (decl),
25801                                          get_context_die (DECL_CONTEXT (decl)),
25802                                          NULL_TREE);
25803           else
25804             at_import_die = force_decl_die (decl);
25805         }
25806     }
25807
25808   if (TREE_CODE (decl) == NAMESPACE_DECL)
25809     {
25810       if (dwarf_version >= 3 || !dwarf_strict)
25811         imported_die = new_die (DW_TAG_imported_module,
25812                                 lexical_block_die,
25813                                 lexical_block);
25814       else
25815         return;
25816     }
25817   else
25818     imported_die = new_die (DW_TAG_imported_declaration,
25819                             lexical_block_die,
25820                             lexical_block);
25821
25822   add_AT_file (imported_die, DW_AT_decl_file, lookup_filename (xloc.file));
25823   add_AT_unsigned (imported_die, DW_AT_decl_line, xloc.line);
25824   if (debug_column_info && xloc.column)
25825     add_AT_unsigned (imported_die, DW_AT_decl_column, xloc.column);
25826   if (name)
25827     add_AT_string (imported_die, DW_AT_name,
25828                    IDENTIFIER_POINTER (name));
25829   add_AT_die_ref (imported_die, DW_AT_import, at_import_die);
25830 }
25831
25832 /* Output debug information for imported module or decl DECL.
25833    NAME is non-NULL name in context if the decl has been renamed.
25834    CHILD is true if decl is one of the renamed decls as part of
25835    importing whole module.
25836    IMPLICIT is set if this hook is called for an implicit import
25837    such as inline namespace.  */
25838
25839 static void
25840 dwarf2out_imported_module_or_decl (tree decl, tree name, tree context,
25841                                    bool child, bool implicit)
25842 {
25843   /* dw_die_ref at_import_die;  */
25844   dw_die_ref scope_die;
25845
25846   if (debug_info_level <= DINFO_LEVEL_TERSE)
25847     return;
25848
25849   gcc_assert (decl);
25850
25851   /* For DWARF5, just DW_AT_export_symbols on the DW_TAG_namespace
25852      should be enough, for DWARF4 and older even if we emit as extension
25853      DW_AT_export_symbols add the implicit DW_TAG_imported_module anyway
25854      for the benefit of consumers unaware of DW_AT_export_symbols.  */
25855   if (implicit
25856       && dwarf_version >= 5
25857       && lang_hooks.decls.decl_dwarf_attribute (decl,
25858                                                 DW_AT_export_symbols) == 1)
25859     return;
25860
25861   set_early_dwarf s;
25862
25863   /* To emit DW_TAG_imported_module or DW_TAG_imported_decl, we need two DIEs.
25864      We need decl DIE for reference and scope die. First, get DIE for the decl
25865      itself.  */
25866
25867   /* Get the scope die for decl context. Use comp_unit_die for global module
25868      or decl. If die is not found for non globals, force new die.  */
25869   if (context
25870       && TYPE_P (context)
25871       && !should_emit_struct_debug (context, DINFO_USAGE_DIR_USE))
25872     return;
25873
25874   scope_die = get_context_die (context);
25875
25876   if (child)
25877     {
25878       /* DW_TAG_imported_module was introduced in the DWARFv3 specification, so
25879          there is nothing we can do, here.  */
25880       if (dwarf_version < 3 && dwarf_strict)
25881         return;
25882
25883       gcc_assert (scope_die->die_child);
25884       gcc_assert (scope_die->die_child->die_tag == DW_TAG_imported_module);
25885       gcc_assert (TREE_CODE (decl) != NAMESPACE_DECL);
25886       scope_die = scope_die->die_child;
25887     }
25888
25889   /* OK, now we have DIEs for decl as well as scope. Emit imported die.  */
25890   dwarf2out_imported_module_or_decl_1 (decl, name, context, scope_die);
25891 }
25892
25893 /* Output debug information for namelists.   */
25894
25895 static dw_die_ref
25896 gen_namelist_decl (tree name, dw_die_ref scope_die, tree item_decls)
25897 {
25898   dw_die_ref nml_die, nml_item_die, nml_item_ref_die;
25899   tree value;
25900   unsigned i;
25901
25902   if (debug_info_level <= DINFO_LEVEL_TERSE)
25903     return NULL;
25904
25905   gcc_assert (scope_die != NULL);
25906   nml_die = new_die (DW_TAG_namelist, scope_die, NULL);
25907   add_AT_string (nml_die, DW_AT_name, IDENTIFIER_POINTER (name));
25908
25909   /* If there are no item_decls, we have a nondefining namelist, e.g.
25910      with USE association; hence, set DW_AT_declaration.  */
25911   if (item_decls == NULL_TREE)
25912     {
25913       add_AT_flag (nml_die, DW_AT_declaration, 1);
25914       return nml_die;
25915     }
25916
25917   FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (item_decls), i, value)
25918     {
25919       nml_item_ref_die = lookup_decl_die (value);
25920       if (!nml_item_ref_die)
25921         nml_item_ref_die = force_decl_die (value);
25922
25923       nml_item_die = new_die (DW_TAG_namelist_item, nml_die, NULL);
25924       add_AT_die_ref (nml_item_die, DW_AT_namelist_items, nml_item_ref_die);
25925     }
25926   return nml_die;
25927 }
25928
25929
25930 /* Write the debugging output for DECL and return the DIE.  */
25931
25932 static void
25933 dwarf2out_decl (tree decl)
25934 {
25935   dw_die_ref context_die = comp_unit_die ();
25936
25937   switch (TREE_CODE (decl))
25938     {
25939     case ERROR_MARK:
25940       return;
25941
25942     case FUNCTION_DECL:
25943       /* If we're a nested function, initially use a parent of NULL; if we're
25944          a plain function, this will be fixed up in decls_for_scope.  If
25945          we're a method, it will be ignored, since we already have a DIE.  */
25946       if (decl_function_context (decl)
25947           /* But if we're in terse mode, we don't care about scope.  */
25948           && debug_info_level > DINFO_LEVEL_TERSE)
25949         context_die = NULL;
25950       break;
25951
25952     case VAR_DECL:
25953       /* For local statics lookup proper context die.  */
25954       if (local_function_static (decl))
25955         context_die = lookup_decl_die (DECL_CONTEXT (decl));
25956
25957       /* If we are in terse mode, don't generate any DIEs to represent any
25958          variable declarations or definitions.  */
25959       if (debug_info_level <= DINFO_LEVEL_TERSE)
25960         return;
25961       break;
25962
25963     case CONST_DECL:
25964       if (debug_info_level <= DINFO_LEVEL_TERSE)
25965         return;
25966       if (!is_fortran () && !is_ada ())
25967         return;
25968       if (TREE_STATIC (decl) && decl_function_context (decl))
25969         context_die = lookup_decl_die (DECL_CONTEXT (decl));
25970       break;
25971
25972     case NAMESPACE_DECL:
25973     case IMPORTED_DECL:
25974       if (debug_info_level <= DINFO_LEVEL_TERSE)
25975         return;
25976       if (lookup_decl_die (decl) != NULL)
25977         return;
25978       break;
25979
25980     case TYPE_DECL:
25981       /* Don't emit stubs for types unless they are needed by other DIEs.  */
25982       if (TYPE_DECL_SUPPRESS_DEBUG (decl))
25983         return;
25984
25985       /* Don't bother trying to generate any DIEs to represent any of the
25986          normal built-in types for the language we are compiling.  */
25987       if (DECL_IS_BUILTIN (decl))
25988         return;
25989
25990       /* If we are in terse mode, don't generate any DIEs for types.  */
25991       if (debug_info_level <= DINFO_LEVEL_TERSE)
25992         return;
25993
25994       /* If we're a function-scope tag, initially use a parent of NULL;
25995          this will be fixed up in decls_for_scope.  */
25996       if (decl_function_context (decl))
25997         context_die = NULL;
25998
25999       break;
26000
26001     case NAMELIST_DECL:
26002       break;
26003
26004     default:
26005       return;
26006     }
26007
26008   gen_decl_die (decl, NULL, NULL, context_die);
26009
26010   if (flag_checking)
26011     {
26012       dw_die_ref die = lookup_decl_die (decl);
26013       if (die)
26014         check_die (die);
26015     }
26016 }
26017
26018 /* Write the debugging output for DECL.  */
26019
26020 static void
26021 dwarf2out_function_decl (tree decl)
26022 {
26023   dwarf2out_decl (decl);
26024   call_arg_locations = NULL;
26025   call_arg_loc_last = NULL;
26026   call_site_count = -1;
26027   tail_call_site_count = -1;
26028   decl_loc_table->empty ();
26029   cached_dw_loc_list_table->empty ();
26030 }
26031
26032 /* Output a marker (i.e. a label) for the beginning of the generated code for
26033    a lexical block.  */
26034
26035 static void
26036 dwarf2out_begin_block (unsigned int line ATTRIBUTE_UNUSED,
26037                        unsigned int blocknum)
26038 {
26039   switch_to_section (current_function_section ());
26040   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, BLOCK_BEGIN_LABEL, blocknum);
26041 }
26042
26043 /* Output a marker (i.e. a label) for the end of the generated code for a
26044    lexical block.  */
26045
26046 static void
26047 dwarf2out_end_block (unsigned int line ATTRIBUTE_UNUSED, unsigned int blocknum)
26048 {
26049   switch_to_section (current_function_section ());
26050   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, BLOCK_END_LABEL, blocknum);
26051 }
26052
26053 /* Returns nonzero if it is appropriate not to emit any debugging
26054    information for BLOCK, because it doesn't contain any instructions.
26055
26056    Don't allow this for blocks with nested functions or local classes
26057    as we would end up with orphans, and in the presence of scheduling
26058    we may end up calling them anyway.  */
26059
26060 static bool
26061 dwarf2out_ignore_block (const_tree block)
26062 {
26063   tree decl;
26064   unsigned int i;
26065
26066   for (decl = BLOCK_VARS (block); decl; decl = DECL_CHAIN (decl))
26067     if (TREE_CODE (decl) == FUNCTION_DECL
26068         || (TREE_CODE (decl) == TYPE_DECL && TYPE_DECL_IS_STUB (decl)))
26069       return 0;
26070   for (i = 0; i < BLOCK_NUM_NONLOCALIZED_VARS (block); i++)
26071     {
26072       decl = BLOCK_NONLOCALIZED_VAR (block, i);
26073       if (TREE_CODE (decl) == FUNCTION_DECL
26074           || (TREE_CODE (decl) == TYPE_DECL && TYPE_DECL_IS_STUB (decl)))
26075       return 0;
26076     }
26077
26078   return 1;
26079 }
26080
26081 /* Hash table routines for file_hash.  */
26082
26083 bool
26084 dwarf_file_hasher::equal (dwarf_file_data *p1, const char *p2)
26085 {
26086   return filename_cmp (p1->filename, p2) == 0;
26087 }
26088
26089 hashval_t
26090 dwarf_file_hasher::hash (dwarf_file_data *p)
26091 {
26092   return htab_hash_string (p->filename);
26093 }
26094
26095 /* Lookup FILE_NAME (in the list of filenames that we know about here in
26096    dwarf2out.c) and return its "index".  The index of each (known) filename is
26097    just a unique number which is associated with only that one filename.  We
26098    need such numbers for the sake of generating labels (in the .debug_sfnames
26099    section) and references to those files numbers (in the .debug_srcinfo
26100    and .debug_macinfo sections).  If the filename given as an argument is not
26101    found in our current list, add it to the list and assign it the next
26102    available unique index number.  */
26103
26104 static struct dwarf_file_data *
26105 lookup_filename (const char *file_name)
26106 {
26107   struct dwarf_file_data * created;
26108
26109   if (!file_name)
26110     return NULL;
26111
26112   dwarf_file_data **slot
26113     = file_table->find_slot_with_hash (file_name, htab_hash_string (file_name),
26114                                        INSERT);
26115   if (*slot)
26116     return *slot;
26117
26118   created = ggc_alloc<dwarf_file_data> ();
26119   created->filename = file_name;
26120   created->emitted_number = 0;
26121   *slot = created;
26122   return created;
26123 }
26124
26125 /* If the assembler will construct the file table, then translate the compiler
26126    internal file table number into the assembler file table number, and emit
26127    a .file directive if we haven't already emitted one yet.  The file table
26128    numbers are different because we prune debug info for unused variables and
26129    types, which may include filenames.  */
26130
26131 static int
26132 maybe_emit_file (struct dwarf_file_data * fd)
26133 {
26134   if (! fd->emitted_number)
26135     {
26136       if (last_emitted_file)
26137         fd->emitted_number = last_emitted_file->emitted_number + 1;
26138       else
26139         fd->emitted_number = 1;
26140       last_emitted_file = fd;
26141
26142       if (DWARF2_ASM_LINE_DEBUG_INFO)
26143         {
26144           fprintf (asm_out_file, "\t.file %u ", fd->emitted_number);
26145           output_quoted_string (asm_out_file,
26146                                 remap_debug_filename (fd->filename));
26147           fputc ('\n', asm_out_file);
26148         }
26149     }
26150
26151   return fd->emitted_number;
26152 }
26153
26154 /* Schedule generation of a DW_AT_const_value attribute to DIE.
26155    That generation should happen after function debug info has been
26156    generated. The value of the attribute is the constant value of ARG.  */
26157
26158 static void
26159 append_entry_to_tmpl_value_parm_die_table (dw_die_ref die, tree arg)
26160 {
26161   die_arg_entry entry;
26162
26163   if (!die || !arg)
26164     return;
26165
26166   gcc_assert (early_dwarf);
26167
26168   if (!tmpl_value_parm_die_table)
26169     vec_alloc (tmpl_value_parm_die_table, 32);
26170
26171   entry.die = die;
26172   entry.arg = arg;
26173   vec_safe_push (tmpl_value_parm_die_table, entry);
26174 }
26175
26176 /* Return TRUE if T is an instance of generic type, FALSE
26177    otherwise.  */
26178
26179 static bool
26180 generic_type_p (tree t)
26181 {
26182   if (t == NULL_TREE || !TYPE_P (t))
26183     return false;
26184   return lang_hooks.get_innermost_generic_parms (t) != NULL_TREE;
26185 }
26186
26187 /* Schedule the generation of the generic parameter dies for the
26188   instance of generic type T. The proper generation itself is later
26189   done by gen_scheduled_generic_parms_dies. */
26190
26191 static void
26192 schedule_generic_params_dies_gen (tree t)
26193 {
26194   if (!generic_type_p (t))
26195     return;
26196
26197   gcc_assert (early_dwarf);
26198
26199   if (!generic_type_instances)
26200     vec_alloc (generic_type_instances, 256);
26201
26202   vec_safe_push (generic_type_instances, t);
26203 }
26204
26205 /* Add a DW_AT_const_value attribute to DIEs that were scheduled
26206    by append_entry_to_tmpl_value_parm_die_table. This function must
26207    be called after function DIEs have been generated.  */
26208
26209 static void
26210 gen_remaining_tmpl_value_param_die_attribute (void)
26211 {
26212   if (tmpl_value_parm_die_table)
26213     {
26214       unsigned i, j;
26215       die_arg_entry *e;
26216
26217       /* We do this in two phases - first get the cases we can
26218          handle during early-finish, preserving those we cannot
26219          (containing symbolic constants where we don't yet know
26220          whether we are going to output the referenced symbols).
26221          For those we try again at late-finish.  */
26222       j = 0;
26223       FOR_EACH_VEC_ELT (*tmpl_value_parm_die_table, i, e)
26224         {
26225           if (!e->die->removed
26226               && !tree_add_const_value_attribute (e->die, e->arg))
26227             {
26228               dw_loc_descr_ref loc = NULL;
26229               if (! early_dwarf
26230                   && (dwarf_version >= 5 || !dwarf_strict))
26231                 loc = loc_descriptor_from_tree (e->arg, 2, NULL);
26232               if (loc)
26233                 add_AT_loc (e->die, DW_AT_location, loc);
26234               else
26235                 (*tmpl_value_parm_die_table)[j++] = *e;
26236             }
26237         }
26238       tmpl_value_parm_die_table->truncate (j);
26239     }
26240 }
26241
26242 /* Generate generic parameters DIEs for instances of generic types
26243    that have been previously scheduled by
26244    schedule_generic_params_dies_gen. This function must be called
26245    after all the types of the CU have been laid out.  */
26246
26247 static void
26248 gen_scheduled_generic_parms_dies (void)
26249 {
26250   unsigned i;
26251   tree t;
26252
26253   if (!generic_type_instances)
26254     return;
26255   
26256   FOR_EACH_VEC_ELT (*generic_type_instances, i, t)
26257     if (COMPLETE_TYPE_P (t))
26258       gen_generic_params_dies (t);
26259
26260   generic_type_instances = NULL;
26261 }
26262
26263
26264 /* Replace DW_AT_name for the decl with name.  */
26265
26266 static void
26267 dwarf2out_set_name (tree decl, tree name)
26268 {
26269   dw_die_ref die;
26270   dw_attr_node *attr;
26271   const char *dname;
26272
26273   die = TYPE_SYMTAB_DIE (decl);
26274   if (!die)
26275     return;
26276
26277   dname = dwarf2_name (name, 0);
26278   if (!dname)
26279     return;
26280
26281   attr = get_AT (die, DW_AT_name);
26282   if (attr)
26283     {
26284       struct indirect_string_node *node;
26285
26286       node = find_AT_string (dname);
26287       /* replace the string.  */
26288       attr->dw_attr_val.v.val_str = node;
26289     }
26290
26291   else
26292     add_name_attribute (die, dname);
26293 }
26294
26295 /* True if before or during processing of the first function being emitted.  */
26296 static bool in_first_function_p = true;
26297 /* True if loc_note during dwarf2out_var_location call might still be
26298    before first real instruction at address equal to .Ltext0.  */
26299 static bool maybe_at_text_label_p = true;
26300 /* One above highest N where .LVLN label might be equal to .Ltext0 label.  */
26301 static unsigned int first_loclabel_num_not_at_text_label;
26302
26303 /* Look ahead for a real insn, or for a begin stmt marker.  */
26304
26305 static rtx_insn *
26306 dwarf2out_next_real_insn (rtx_insn *loc_note)
26307 {
26308   rtx_insn *next_real = NEXT_INSN (loc_note);
26309
26310   while (next_real)
26311     if (INSN_P (next_real))
26312       break;
26313     else
26314       next_real = NEXT_INSN (next_real);
26315
26316   return next_real;
26317 }
26318
26319 /* Called by the final INSN scan whenever we see a var location.  We
26320    use it to drop labels in the right places, and throw the location in
26321    our lookup table.  */
26322
26323 static void
26324 dwarf2out_var_location (rtx_insn *loc_note)
26325 {
26326   char loclabel[MAX_ARTIFICIAL_LABEL_BYTES + 2];
26327   struct var_loc_node *newloc;
26328   rtx_insn *next_real, *next_note;
26329   rtx_insn *call_insn = NULL;
26330   static const char *last_label;
26331   static const char *last_postcall_label;
26332   static bool last_in_cold_section_p;
26333   static rtx_insn *expected_next_loc_note;
26334   tree decl;
26335   bool var_loc_p;
26336
26337   if (!NOTE_P (loc_note))
26338     {
26339       if (CALL_P (loc_note))
26340         {
26341           call_site_count++;
26342           if (SIBLING_CALL_P (loc_note))
26343             tail_call_site_count++;
26344           if (optimize == 0 && !flag_var_tracking)
26345             {
26346               /* When the var-tracking pass is not running, there is no note
26347                  for indirect calls whose target is compile-time known. In this
26348                  case, process such calls specifically so that we generate call
26349                  sites for them anyway.  */
26350               rtx x = PATTERN (loc_note);
26351               if (GET_CODE (x) == PARALLEL)
26352                 x = XVECEXP (x, 0, 0);
26353               if (GET_CODE (x) == SET)
26354                 x = SET_SRC (x);
26355               if (GET_CODE (x) == CALL)
26356                 x = XEXP (x, 0);
26357               if (!MEM_P (x)
26358                   || GET_CODE (XEXP (x, 0)) != SYMBOL_REF
26359                   || !SYMBOL_REF_DECL (XEXP (x, 0))
26360                   || (TREE_CODE (SYMBOL_REF_DECL (XEXP (x, 0)))
26361                       != FUNCTION_DECL))
26362                 {
26363                   call_insn = loc_note;
26364                   loc_note = NULL;
26365                   var_loc_p = false;
26366
26367                   next_real = dwarf2out_next_real_insn (call_insn);
26368                   next_note = NULL;
26369                   cached_next_real_insn = NULL;
26370                   goto create_label;
26371                 }
26372             }
26373         }
26374       return;
26375     }
26376
26377   var_loc_p = NOTE_KIND (loc_note) == NOTE_INSN_VAR_LOCATION;
26378   if (var_loc_p && !DECL_P (NOTE_VAR_LOCATION_DECL (loc_note)))
26379     return;
26380
26381   /* Optimize processing a large consecutive sequence of location
26382      notes so we don't spend too much time in next_real_insn.  If the
26383      next insn is another location note, remember the next_real_insn
26384      calculation for next time.  */
26385   next_real = cached_next_real_insn;
26386   if (next_real)
26387     {
26388       if (expected_next_loc_note != loc_note)
26389         next_real = NULL;
26390     }
26391
26392   next_note = NEXT_INSN (loc_note);
26393   if (! next_note
26394       || next_note->deleted ()
26395       || ! NOTE_P (next_note)
26396       || (NOTE_KIND (next_note) != NOTE_INSN_VAR_LOCATION
26397           && NOTE_KIND (next_note) != NOTE_INSN_BEGIN_STMT
26398           && NOTE_KIND (next_note) != NOTE_INSN_CALL_ARG_LOCATION))
26399     next_note = NULL;
26400
26401   if (! next_real)
26402     next_real = dwarf2out_next_real_insn (loc_note);
26403
26404   if (next_note)
26405     {
26406       expected_next_loc_note = next_note;
26407       cached_next_real_insn = next_real;
26408     }
26409   else
26410     cached_next_real_insn = NULL;
26411
26412   /* If there are no instructions which would be affected by this note,
26413      don't do anything.  */
26414   if (var_loc_p
26415       && next_real == NULL_RTX
26416       && !NOTE_DURING_CALL_P (loc_note))
26417     return;
26418
26419 create_label:
26420
26421   if (next_real == NULL_RTX)
26422     next_real = get_last_insn ();
26423
26424   /* If there were any real insns between note we processed last time
26425      and this note (or if it is the first note), clear
26426      last_{,postcall_}label so that they are not reused this time.  */
26427   if (last_var_location_insn == NULL_RTX
26428       || last_var_location_insn != next_real
26429       || last_in_cold_section_p != in_cold_section_p)
26430     {
26431       last_label = NULL;
26432       last_postcall_label = NULL;
26433     }
26434
26435   if (var_loc_p)
26436     {
26437       decl = NOTE_VAR_LOCATION_DECL (loc_note);
26438       newloc = add_var_loc_to_decl (decl, loc_note,
26439                                     NOTE_DURING_CALL_P (loc_note)
26440                                     ? last_postcall_label : last_label);
26441       if (newloc == NULL)
26442         return;
26443     }
26444   else
26445     {
26446       decl = NULL_TREE;
26447       newloc = NULL;
26448     }
26449
26450   /* If there were no real insns between note we processed last time
26451      and this note, use the label we emitted last time.  Otherwise
26452      create a new label and emit it.  */
26453   if (last_label == NULL)
26454     {
26455       ASM_GENERATE_INTERNAL_LABEL (loclabel, "LVL", loclabel_num);
26456       ASM_OUTPUT_DEBUG_LABEL (asm_out_file, "LVL", loclabel_num);
26457       loclabel_num++;
26458       last_label = ggc_strdup (loclabel);
26459       /* See if loclabel might be equal to .Ltext0.  If yes,
26460          bump first_loclabel_num_not_at_text_label.  */
26461       if (!have_multiple_function_sections
26462           && in_first_function_p
26463           && maybe_at_text_label_p)
26464         {
26465           static rtx_insn *last_start;
26466           rtx_insn *insn;
26467           for (insn = loc_note; insn; insn = previous_insn (insn))
26468             if (insn == last_start)
26469               break;
26470             else if (!NONDEBUG_INSN_P (insn))
26471               continue;
26472             else
26473               {
26474                 rtx body = PATTERN (insn);
26475                 if (GET_CODE (body) == USE || GET_CODE (body) == CLOBBER)
26476                   continue;
26477                 /* Inline asm could occupy zero bytes.  */
26478                 else if (GET_CODE (body) == ASM_INPUT
26479                          || asm_noperands (body) >= 0)
26480                   continue;
26481 #ifdef HAVE_attr_length
26482                 else if (get_attr_min_length (insn) == 0)
26483                   continue;
26484 #endif
26485                 else
26486                   {
26487                     /* Assume insn has non-zero length.  */
26488                     maybe_at_text_label_p = false;
26489                     break;
26490                   }
26491               }
26492           if (maybe_at_text_label_p)
26493             {
26494               last_start = loc_note;
26495               first_loclabel_num_not_at_text_label = loclabel_num;
26496             }
26497         }
26498     }
26499
26500   gcc_assert ((loc_note == NULL_RTX && call_insn != NULL_RTX)
26501               || (loc_note != NULL_RTX && call_insn == NULL_RTX));
26502
26503   if (!var_loc_p)
26504     {
26505       struct call_arg_loc_node *ca_loc
26506         = ggc_cleared_alloc<call_arg_loc_node> ();
26507       rtx_insn *prev
26508         = loc_note != NULL_RTX ? prev_real_insn (loc_note) : call_insn;
26509
26510       ca_loc->call_arg_loc_note = loc_note;
26511       ca_loc->next = NULL;
26512       ca_loc->label = last_label;
26513       gcc_assert (prev
26514                   && (CALL_P (prev)
26515                       || (NONJUMP_INSN_P (prev)
26516                           && GET_CODE (PATTERN (prev)) == SEQUENCE
26517                           && CALL_P (XVECEXP (PATTERN (prev), 0, 0)))));
26518       if (!CALL_P (prev))
26519         prev = as_a <rtx_sequence *> (PATTERN (prev))->insn (0);
26520       ca_loc->tail_call_p = SIBLING_CALL_P (prev);
26521
26522       /* Look for a SYMBOL_REF in the "prev" instruction.  */
26523       rtx x = get_call_rtx_from (PATTERN (prev));
26524       if (x)
26525         {
26526           /* Try to get the call symbol, if any.  */
26527           if (MEM_P (XEXP (x, 0)))
26528             x = XEXP (x, 0);
26529           /* First, look for a memory access to a symbol_ref.  */
26530           if (GET_CODE (XEXP (x, 0)) == SYMBOL_REF
26531               && SYMBOL_REF_DECL (XEXP (x, 0))
26532               && TREE_CODE (SYMBOL_REF_DECL (XEXP (x, 0))) == FUNCTION_DECL)
26533             ca_loc->symbol_ref = XEXP (x, 0);
26534           /* Otherwise, look at a compile-time known user-level function
26535              declaration.  */
26536           else if (MEM_P (x)
26537                    && MEM_EXPR (x)
26538                    && TREE_CODE (MEM_EXPR (x)) == FUNCTION_DECL)
26539             ca_loc->symbol_ref = XEXP (DECL_RTL (MEM_EXPR (x)), 0);
26540         }
26541
26542       ca_loc->block = insn_scope (prev);
26543       if (call_arg_locations)
26544         call_arg_loc_last->next = ca_loc;
26545       else
26546         call_arg_locations = ca_loc;
26547       call_arg_loc_last = ca_loc;
26548     }
26549   else if (loc_note != NULL_RTX && !NOTE_DURING_CALL_P (loc_note))
26550     newloc->label = last_label;
26551   else
26552     {
26553       if (!last_postcall_label)
26554         {
26555           sprintf (loclabel, "%s-1", last_label);
26556           last_postcall_label = ggc_strdup (loclabel);
26557         }
26558       newloc->label = last_postcall_label;
26559     }
26560
26561   if (var_loc_p && flag_debug_asm)
26562     {
26563       const char *name = NULL, *sep = " => ", *patstr = NULL;
26564       if (decl && DECL_NAME (decl))
26565         name = IDENTIFIER_POINTER (DECL_NAME (decl));
26566       if (NOTE_VAR_LOCATION_LOC (loc_note))
26567         patstr = str_pattern_slim (NOTE_VAR_LOCATION_LOC (loc_note));
26568       else
26569         {
26570           sep = " ";
26571           patstr = "RESET";
26572         }
26573       fprintf (asm_out_file, "\t%s DEBUG %s%s%s\n", ASM_COMMENT_START,
26574                name, sep, patstr);
26575     }
26576
26577   last_var_location_insn = next_real;
26578   last_in_cold_section_p = in_cold_section_p;
26579 }
26580
26581 /* Called from finalize_size_functions for size functions so that their body
26582    can be encoded in the debug info to describe the layout of variable-length
26583    structures.  */
26584
26585 static void
26586 dwarf2out_size_function (tree decl)
26587 {
26588   function_to_dwarf_procedure (decl);
26589 }
26590
26591 /* Note in one location list that text section has changed.  */
26592
26593 int
26594 var_location_switch_text_section_1 (var_loc_list **slot, void *)
26595 {
26596   var_loc_list *list = *slot;
26597   if (list->first)
26598     list->last_before_switch
26599       = list->last->next ? list->last->next : list->last;
26600   return 1;
26601 }
26602
26603 /* Note in all location lists that text section has changed.  */
26604
26605 static void
26606 var_location_switch_text_section (void)
26607 {
26608   if (decl_loc_table == NULL)
26609     return;
26610
26611   decl_loc_table->traverse<void *, var_location_switch_text_section_1> (NULL);
26612 }
26613
26614 /* Create a new line number table.  */
26615
26616 static dw_line_info_table *
26617 new_line_info_table (void)
26618 {
26619   dw_line_info_table *table;
26620
26621   table = ggc_cleared_alloc<dw_line_info_table> ();
26622   table->file_num = 1;
26623   table->line_num = 1;
26624   table->is_stmt = DWARF_LINE_DEFAULT_IS_STMT_START;
26625
26626   return table;
26627 }
26628
26629 /* Lookup the "current" table into which we emit line info, so
26630    that we don't have to do it for every source line.  */
26631
26632 static void
26633 set_cur_line_info_table (section *sec)
26634 {
26635   dw_line_info_table *table;
26636
26637   if (sec == text_section)
26638     table = text_section_line_info;
26639   else if (sec == cold_text_section)
26640     {
26641       table = cold_text_section_line_info;
26642       if (!table)
26643         {
26644           cold_text_section_line_info = table = new_line_info_table ();
26645           table->end_label = cold_end_label;
26646         }
26647     }
26648   else
26649     {
26650       const char *end_label;
26651
26652       if (crtl->has_bb_partition)
26653         {
26654           if (in_cold_section_p)
26655             end_label = crtl->subsections.cold_section_end_label;
26656           else
26657             end_label = crtl->subsections.hot_section_end_label;
26658         }
26659       else
26660         {
26661           char label[MAX_ARTIFICIAL_LABEL_BYTES];
26662           ASM_GENERATE_INTERNAL_LABEL (label, FUNC_END_LABEL,
26663                                        current_function_funcdef_no);
26664           end_label = ggc_strdup (label);
26665         }
26666
26667       table = new_line_info_table ();
26668       table->end_label = end_label;
26669
26670       vec_safe_push (separate_line_info, table);
26671     }
26672
26673   if (DWARF2_ASM_LINE_DEBUG_INFO)
26674     table->is_stmt = (cur_line_info_table
26675                       ? cur_line_info_table->is_stmt
26676                       : DWARF_LINE_DEFAULT_IS_STMT_START);
26677   cur_line_info_table = table;
26678 }
26679
26680
26681 /* We need to reset the locations at the beginning of each
26682    function. We can't do this in the end_function hook, because the
26683    declarations that use the locations won't have been output when
26684    that hook is called.  Also compute have_multiple_function_sections here.  */
26685
26686 static void
26687 dwarf2out_begin_function (tree fun)
26688 {
26689   section *sec = function_section (fun);
26690
26691   if (sec != text_section)
26692     have_multiple_function_sections = true;
26693
26694   if (crtl->has_bb_partition && !cold_text_section)
26695     {
26696       gcc_assert (current_function_decl == fun);
26697       cold_text_section = unlikely_text_section ();
26698       switch_to_section (cold_text_section);
26699       ASM_OUTPUT_LABEL (asm_out_file, cold_text_section_label);
26700       switch_to_section (sec);
26701     }
26702
26703   dwarf2out_note_section_used ();
26704   call_site_count = 0;
26705   tail_call_site_count = 0;
26706
26707   set_cur_line_info_table (sec);
26708 }
26709
26710 /* Helper function of dwarf2out_end_function, called only after emitting
26711    the very first function into assembly.  Check if some .debug_loc range
26712    might end with a .LVL* label that could be equal to .Ltext0.
26713    In that case we must force using absolute addresses in .debug_loc ranges,
26714    because this range could be .LVLN-.Ltext0 .. .LVLM-.Ltext0 for
26715    .LVLN == .LVLM == .Ltext0, thus 0 .. 0, which is a .debug_loc
26716    list terminator.
26717    Set have_multiple_function_sections to true in that case and
26718    terminate htab traversal.  */
26719
26720 int
26721 find_empty_loc_ranges_at_text_label (var_loc_list **slot, int)
26722 {
26723   var_loc_list *entry = *slot;
26724   struct var_loc_node *node;
26725
26726   node = entry->first;
26727   if (node && node->next && node->next->label)
26728     {
26729       unsigned int i;
26730       const char *label = node->next->label;
26731       char loclabel[MAX_ARTIFICIAL_LABEL_BYTES];
26732
26733       for (i = 0; i < first_loclabel_num_not_at_text_label; i++)
26734         {
26735           ASM_GENERATE_INTERNAL_LABEL (loclabel, "LVL", i);
26736           if (strcmp (label, loclabel) == 0)
26737             {
26738               have_multiple_function_sections = true;
26739               return 0;
26740             }
26741         }
26742     }
26743   return 1;
26744 }
26745
26746 /* Hook called after emitting a function into assembly.
26747    This does something only for the very first function emitted.  */
26748
26749 static void
26750 dwarf2out_end_function (unsigned int)
26751 {
26752   if (in_first_function_p
26753       && !have_multiple_function_sections
26754       && first_loclabel_num_not_at_text_label
26755       && decl_loc_table)
26756     decl_loc_table->traverse<int, find_empty_loc_ranges_at_text_label> (0);
26757   in_first_function_p = false;
26758   maybe_at_text_label_p = false;
26759 }
26760
26761 /* Temporary holder for dwarf2out_register_main_translation_unit.  Used to let
26762    front-ends register a translation unit even before dwarf2out_init is
26763    called.  */
26764 static tree main_translation_unit = NULL_TREE;
26765
26766 /* Hook called by front-ends after they built their main translation unit.
26767    Associate comp_unit_die to UNIT.  */
26768
26769 static void
26770 dwarf2out_register_main_translation_unit (tree unit)
26771 {
26772   gcc_assert (TREE_CODE (unit) == TRANSLATION_UNIT_DECL
26773               && main_translation_unit == NULL_TREE);
26774   main_translation_unit = unit;
26775   /* If dwarf2out_init has not been called yet, it will perform the association
26776      itself looking at main_translation_unit.  */
26777   if (decl_die_table != NULL)
26778     equate_decl_number_to_die (unit, comp_unit_die ());
26779 }
26780
26781 /* Add OPCODE+VAL as an entry at the end of the opcode array in TABLE.  */
26782
26783 static void
26784 push_dw_line_info_entry (dw_line_info_table *table,
26785                          enum dw_line_info_opcode opcode, unsigned int val)
26786 {
26787   dw_line_info_entry e;
26788   e.opcode = opcode;
26789   e.val = val;
26790   vec_safe_push (table->entries, e);
26791 }
26792
26793 /* Output a label to mark the beginning of a source code line entry
26794    and record information relating to this source line, in
26795    'line_info_table' for later output of the .debug_line section.  */
26796 /* ??? The discriminator parameter ought to be unsigned.  */
26797
26798 static void
26799 dwarf2out_source_line (unsigned int line, unsigned int column,
26800                        const char *filename,
26801                        int discriminator, bool is_stmt)
26802 {
26803   unsigned int file_num;
26804   dw_line_info_table *table;
26805
26806   if (debug_info_level < DINFO_LEVEL_TERSE || line == 0)
26807     return;
26808
26809   /* The discriminator column was added in dwarf4.  Simplify the below
26810      by simply removing it if we're not supposed to output it.  */
26811   if (dwarf_version < 4 && dwarf_strict)
26812     discriminator = 0;
26813
26814   if (!debug_column_info)
26815     column = 0;
26816
26817   table = cur_line_info_table;
26818   file_num = maybe_emit_file (lookup_filename (filename));
26819
26820   /* ??? TODO: Elide duplicate line number entries.  Traditionally,
26821      the debugger has used the second (possibly duplicate) line number
26822      at the beginning of the function to mark the end of the prologue.
26823      We could eliminate any other duplicates within the function.  For
26824      Dwarf3, we ought to include the DW_LNS_set_prologue_end mark in
26825      that second line number entry.  */
26826   /* Recall that this end-of-prologue indication is *not* the same thing
26827      as the end_prologue debug hook.  The NOTE_INSN_PROLOGUE_END note,
26828      to which the hook corresponds, follows the last insn that was 
26829      emitted by gen_prologue.  What we need is to precede the first insn
26830      that had been emitted after NOTE_INSN_FUNCTION_BEG, i.e. the first
26831      insn that corresponds to something the user wrote.  These may be
26832      very different locations once scheduling is enabled.  */
26833
26834   if (0 && file_num == table->file_num
26835       && line == table->line_num
26836       && column == table->column_num
26837       && discriminator == table->discrim_num
26838       && is_stmt == table->is_stmt)
26839     return;
26840
26841   switch_to_section (current_function_section ());
26842
26843   /* If requested, emit something human-readable.  */
26844   if (flag_debug_asm)
26845     {
26846       if (debug_column_info)
26847         fprintf (asm_out_file, "\t%s %s:%d:%d\n", ASM_COMMENT_START,
26848                  filename, line, column);
26849       else
26850         fprintf (asm_out_file, "\t%s %s:%d\n", ASM_COMMENT_START,
26851                  filename, line);
26852     }
26853
26854   if (DWARF2_ASM_LINE_DEBUG_INFO)
26855     {
26856       /* Emit the .loc directive understood by GNU as.  */
26857       /* "\t.loc %u %u 0 is_stmt %u discriminator %u",
26858          file_num, line, is_stmt, discriminator */
26859       fputs ("\t.loc ", asm_out_file);
26860       fprint_ul (asm_out_file, file_num);
26861       putc (' ', asm_out_file);
26862       fprint_ul (asm_out_file, line);
26863       putc (' ', asm_out_file);
26864       fprint_ul (asm_out_file, column);
26865
26866       if (is_stmt != table->is_stmt)
26867         {
26868           fputs (" is_stmt ", asm_out_file);
26869           putc (is_stmt ? '1' : '0', asm_out_file);
26870         }
26871       if (SUPPORTS_DISCRIMINATOR && discriminator != 0)
26872         {
26873           gcc_assert (discriminator > 0);
26874           fputs (" discriminator ", asm_out_file);
26875           fprint_ul (asm_out_file, (unsigned long) discriminator);
26876         }
26877       putc ('\n', asm_out_file);
26878     }
26879   else
26880     {
26881       unsigned int label_num = ++line_info_label_num;
26882
26883       targetm.asm_out.internal_label (asm_out_file, LINE_CODE_LABEL, label_num);
26884
26885       push_dw_line_info_entry (table, LI_set_address, label_num);
26886       if (file_num != table->file_num)
26887         push_dw_line_info_entry (table, LI_set_file, file_num);
26888       if (discriminator != table->discrim_num)
26889         push_dw_line_info_entry (table, LI_set_discriminator, discriminator);
26890       if (is_stmt != table->is_stmt)
26891         push_dw_line_info_entry (table, LI_negate_stmt, 0);
26892       push_dw_line_info_entry (table, LI_set_line, line);
26893       if (debug_column_info)
26894         push_dw_line_info_entry (table, LI_set_column, column);
26895     }
26896
26897   table->file_num = file_num;
26898   table->line_num = line;
26899   table->column_num = column;
26900   table->discrim_num = discriminator;
26901   table->is_stmt = is_stmt;
26902   table->in_use = true;
26903 }
26904
26905 /* Record the beginning of a new source file.  */
26906
26907 static void
26908 dwarf2out_start_source_file (unsigned int lineno, const char *filename)
26909 {
26910   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
26911     {
26912       macinfo_entry e;
26913       e.code = DW_MACINFO_start_file;
26914       e.lineno = lineno;
26915       e.info = ggc_strdup (filename);
26916       vec_safe_push (macinfo_table, e);
26917     }
26918 }
26919
26920 /* Record the end of a source file.  */
26921
26922 static void
26923 dwarf2out_end_source_file (unsigned int lineno ATTRIBUTE_UNUSED)
26924 {
26925   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
26926     {
26927       macinfo_entry e;
26928       e.code = DW_MACINFO_end_file;
26929       e.lineno = lineno;
26930       e.info = NULL;
26931       vec_safe_push (macinfo_table, e);
26932     }
26933 }
26934
26935 /* Called from debug_define in toplev.c.  The `buffer' parameter contains
26936    the tail part of the directive line, i.e. the part which is past the
26937    initial whitespace, #, whitespace, directive-name, whitespace part.  */
26938
26939 static void
26940 dwarf2out_define (unsigned int lineno ATTRIBUTE_UNUSED,
26941                   const char *buffer ATTRIBUTE_UNUSED)
26942 {
26943   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
26944     {
26945       macinfo_entry e;
26946       /* Insert a dummy first entry to be able to optimize the whole
26947          predefined macro block using DW_MACRO_import.  */
26948       if (macinfo_table->is_empty () && lineno <= 1)
26949         {
26950           e.code = 0;
26951           e.lineno = 0;
26952           e.info = NULL;
26953           vec_safe_push (macinfo_table, e);
26954         }
26955       e.code = DW_MACINFO_define;
26956       e.lineno = lineno;
26957       e.info = ggc_strdup (buffer);
26958       vec_safe_push (macinfo_table, e);
26959     }
26960 }
26961
26962 /* Called from debug_undef in toplev.c.  The `buffer' parameter contains
26963    the tail part of the directive line, i.e. the part which is past the
26964    initial whitespace, #, whitespace, directive-name, whitespace part.  */
26965
26966 static void
26967 dwarf2out_undef (unsigned int lineno ATTRIBUTE_UNUSED,
26968                  const char *buffer ATTRIBUTE_UNUSED)
26969 {
26970   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
26971     {
26972       macinfo_entry e;
26973       /* Insert a dummy first entry to be able to optimize the whole
26974          predefined macro block using DW_MACRO_import.  */
26975       if (macinfo_table->is_empty () && lineno <= 1)
26976         {
26977           e.code = 0;
26978           e.lineno = 0;
26979           e.info = NULL;
26980           vec_safe_push (macinfo_table, e);
26981         }
26982       e.code = DW_MACINFO_undef;
26983       e.lineno = lineno;
26984       e.info = ggc_strdup (buffer);
26985       vec_safe_push (macinfo_table, e);
26986     }
26987 }
26988
26989 /* Helpers to manipulate hash table of CUs.  */
26990
26991 struct macinfo_entry_hasher : nofree_ptr_hash <macinfo_entry>
26992 {
26993   static inline hashval_t hash (const macinfo_entry *);
26994   static inline bool equal (const macinfo_entry *, const macinfo_entry *);
26995 };
26996
26997 inline hashval_t
26998 macinfo_entry_hasher::hash (const macinfo_entry *entry)
26999 {
27000   return htab_hash_string (entry->info);
27001 }
27002
27003 inline bool
27004 macinfo_entry_hasher::equal (const macinfo_entry *entry1,
27005                              const macinfo_entry *entry2)
27006 {
27007   return !strcmp (entry1->info, entry2->info);
27008 }
27009
27010 typedef hash_table<macinfo_entry_hasher> macinfo_hash_type;
27011
27012 /* Output a single .debug_macinfo entry.  */
27013
27014 static void
27015 output_macinfo_op (macinfo_entry *ref)
27016 {
27017   int file_num;
27018   size_t len;
27019   struct indirect_string_node *node;
27020   char label[MAX_ARTIFICIAL_LABEL_BYTES];
27021   struct dwarf_file_data *fd;
27022
27023   switch (ref->code)
27024     {
27025     case DW_MACINFO_start_file:
27026       fd = lookup_filename (ref->info);
27027       file_num = maybe_emit_file (fd);
27028       dw2_asm_output_data (1, DW_MACINFO_start_file, "Start new file");
27029       dw2_asm_output_data_uleb128 (ref->lineno,
27030                                    "Included from line number %lu", 
27031                                    (unsigned long) ref->lineno);
27032       dw2_asm_output_data_uleb128 (file_num, "file %s", ref->info);
27033       break;
27034     case DW_MACINFO_end_file:
27035       dw2_asm_output_data (1, DW_MACINFO_end_file, "End file");
27036       break;
27037     case DW_MACINFO_define:
27038     case DW_MACINFO_undef:
27039       len = strlen (ref->info) + 1;
27040       if (!dwarf_strict
27041           && len > DWARF_OFFSET_SIZE
27042           && !DWARF2_INDIRECT_STRING_SUPPORT_MISSING_ON_TARGET
27043           && (debug_str_section->common.flags & SECTION_MERGE) != 0)
27044         {
27045           ref->code = ref->code == DW_MACINFO_define
27046                       ? DW_MACRO_define_strp : DW_MACRO_undef_strp;
27047           output_macinfo_op (ref);
27048           return;
27049         }
27050       dw2_asm_output_data (1, ref->code,
27051                            ref->code == DW_MACINFO_define
27052                            ? "Define macro" : "Undefine macro");
27053       dw2_asm_output_data_uleb128 (ref->lineno, "At line number %lu", 
27054                                    (unsigned long) ref->lineno);
27055       dw2_asm_output_nstring (ref->info, -1, "The macro");
27056       break;
27057     case DW_MACRO_define_strp:
27058     case DW_MACRO_undef_strp:
27059       node = find_AT_string (ref->info);
27060       gcc_assert (node
27061                   && (node->form == DW_FORM_strp
27062                       || node->form == DW_FORM_GNU_str_index));
27063       dw2_asm_output_data (1, ref->code,
27064                            ref->code == DW_MACRO_define_strp
27065                            ? "Define macro strp"
27066                            : "Undefine macro strp");
27067       dw2_asm_output_data_uleb128 (ref->lineno, "At line number %lu",
27068                                    (unsigned long) ref->lineno);
27069       if (node->form == DW_FORM_strp)
27070         dw2_asm_output_offset (DWARF_OFFSET_SIZE, node->label,
27071                                debug_str_section, "The macro: \"%s\"",
27072                                ref->info);
27073       else
27074         dw2_asm_output_data_uleb128 (node->index, "The macro: \"%s\"",
27075                                      ref->info);
27076       break;
27077     case DW_MACRO_import:
27078       dw2_asm_output_data (1, ref->code, "Import");
27079       ASM_GENERATE_INTERNAL_LABEL (label,
27080                                    DEBUG_MACRO_SECTION_LABEL,
27081                                    ref->lineno + macinfo_label_base);
27082       dw2_asm_output_offset (DWARF_OFFSET_SIZE, label, NULL, NULL);
27083       break;
27084     default:
27085       fprintf (asm_out_file, "%s unrecognized macinfo code %lu\n",
27086                ASM_COMMENT_START, (unsigned long) ref->code);
27087       break;
27088     }
27089 }
27090
27091 /* Attempt to make a sequence of define/undef macinfo ops shareable with
27092    other compilation unit .debug_macinfo sections.  IDX is the first
27093    index of a define/undef, return the number of ops that should be
27094    emitted in a comdat .debug_macinfo section and emit
27095    a DW_MACRO_import entry referencing it.
27096    If the define/undef entry should be emitted normally, return 0.  */
27097
27098 static unsigned
27099 optimize_macinfo_range (unsigned int idx, vec<macinfo_entry, va_gc> *files,
27100                         macinfo_hash_type **macinfo_htab)
27101 {
27102   macinfo_entry *first, *second, *cur, *inc;
27103   char linebuf[sizeof (HOST_WIDE_INT) * 3 + 1];
27104   unsigned char checksum[16];
27105   struct md5_ctx ctx;
27106   char *grp_name, *tail;
27107   const char *base;
27108   unsigned int i, count, encoded_filename_len, linebuf_len;
27109   macinfo_entry **slot;
27110
27111   first = &(*macinfo_table)[idx];
27112   second = &(*macinfo_table)[idx + 1];
27113
27114   /* Optimize only if there are at least two consecutive define/undef ops,
27115      and either all of them are before first DW_MACINFO_start_file
27116      with lineno {0,1} (i.e. predefined macro block), or all of them are
27117      in some included header file.  */
27118   if (second->code != DW_MACINFO_define && second->code != DW_MACINFO_undef)
27119     return 0;
27120   if (vec_safe_is_empty (files))
27121     {
27122       if (first->lineno > 1 || second->lineno > 1)
27123         return 0;
27124     }
27125   else if (first->lineno == 0)
27126     return 0;
27127
27128   /* Find the last define/undef entry that can be grouped together
27129      with first and at the same time compute md5 checksum of their
27130      codes, linenumbers and strings.  */
27131   md5_init_ctx (&ctx);
27132   for (i = idx; macinfo_table->iterate (i, &cur); i++)
27133     if (cur->code != DW_MACINFO_define && cur->code != DW_MACINFO_undef)
27134       break;
27135     else if (vec_safe_is_empty (files) && cur->lineno > 1)
27136       break;
27137     else
27138       {
27139         unsigned char code = cur->code;
27140         md5_process_bytes (&code, 1, &ctx);
27141         checksum_uleb128 (cur->lineno, &ctx);
27142         md5_process_bytes (cur->info, strlen (cur->info) + 1, &ctx);
27143       }
27144   md5_finish_ctx (&ctx, checksum);
27145   count = i - idx;
27146
27147   /* From the containing include filename (if any) pick up just
27148      usable characters from its basename.  */
27149   if (vec_safe_is_empty (files))
27150     base = "";
27151   else
27152     base = lbasename (files->last ().info);
27153   for (encoded_filename_len = 0, i = 0; base[i]; i++)
27154     if (ISIDNUM (base[i]) || base[i] == '.')
27155       encoded_filename_len++;
27156   /* Count . at the end.  */
27157   if (encoded_filename_len)
27158     encoded_filename_len++;
27159
27160   sprintf (linebuf, HOST_WIDE_INT_PRINT_UNSIGNED, first->lineno);
27161   linebuf_len = strlen (linebuf);
27162
27163   /* The group name format is: wmN.[<encoded filename>.]<lineno>.<md5sum>  */
27164   grp_name = XALLOCAVEC (char, 4 + encoded_filename_len + linebuf_len + 1
27165                          + 16 * 2 + 1);
27166   memcpy (grp_name, DWARF_OFFSET_SIZE == 4 ? "wm4." : "wm8.", 4);
27167   tail = grp_name + 4;
27168   if (encoded_filename_len)
27169     {
27170       for (i = 0; base[i]; i++)
27171         if (ISIDNUM (base[i]) || base[i] == '.')
27172           *tail++ = base[i];
27173       *tail++ = '.';
27174     }
27175   memcpy (tail, linebuf, linebuf_len);
27176   tail += linebuf_len;
27177   *tail++ = '.';
27178   for (i = 0; i < 16; i++)
27179     sprintf (tail + i * 2, "%02x", checksum[i] & 0xff);
27180
27181   /* Construct a macinfo_entry for DW_MACRO_import
27182      in the empty vector entry before the first define/undef.  */
27183   inc = &(*macinfo_table)[idx - 1];
27184   inc->code = DW_MACRO_import;
27185   inc->lineno = 0;
27186   inc->info = ggc_strdup (grp_name);
27187   if (!*macinfo_htab)
27188     *macinfo_htab = new macinfo_hash_type (10);
27189   /* Avoid emitting duplicates.  */
27190   slot = (*macinfo_htab)->find_slot (inc, INSERT);
27191   if (*slot != NULL)
27192     {
27193       inc->code = 0;
27194       inc->info = NULL;
27195       /* If such an entry has been used before, just emit
27196          a DW_MACRO_import op.  */
27197       inc = *slot;
27198       output_macinfo_op (inc);
27199       /* And clear all macinfo_entry in the range to avoid emitting them
27200          in the second pass.  */
27201       for (i = idx; macinfo_table->iterate (i, &cur) && i < idx + count; i++)
27202         {
27203           cur->code = 0;
27204           cur->info = NULL;
27205         }
27206     }
27207   else
27208     {
27209       *slot = inc;
27210       inc->lineno = (*macinfo_htab)->elements ();
27211       output_macinfo_op (inc);
27212     }
27213   return count;
27214 }
27215
27216 /* Save any strings needed by the macinfo table in the debug str
27217    table.  All strings must be collected into the table by the time
27218    index_string is called.  */
27219
27220 static void
27221 save_macinfo_strings (void)
27222 {
27223   unsigned len;
27224   unsigned i;
27225   macinfo_entry *ref;
27226
27227   for (i = 0; macinfo_table && macinfo_table->iterate (i, &ref); i++)
27228     {
27229       switch (ref->code)
27230         {
27231           /* Match the logic in output_macinfo_op to decide on
27232              indirect strings.  */
27233           case DW_MACINFO_define:
27234           case DW_MACINFO_undef:
27235             len = strlen (ref->info) + 1;
27236             if (!dwarf_strict
27237                 && len > DWARF_OFFSET_SIZE
27238                 && !DWARF2_INDIRECT_STRING_SUPPORT_MISSING_ON_TARGET
27239                 && (debug_str_section->common.flags & SECTION_MERGE) != 0)
27240               set_indirect_string (find_AT_string (ref->info));
27241             break;
27242           case DW_MACRO_define_strp:
27243           case DW_MACRO_undef_strp:
27244             set_indirect_string (find_AT_string (ref->info));
27245             break;
27246           default:
27247             break;
27248         }
27249     }
27250 }
27251
27252 /* Output macinfo section(s).  */
27253
27254 static void
27255 output_macinfo (const char *debug_line_label, bool early_lto_debug)
27256 {
27257   unsigned i;
27258   unsigned long length = vec_safe_length (macinfo_table);
27259   macinfo_entry *ref;
27260   vec<macinfo_entry, va_gc> *files = NULL;
27261   macinfo_hash_type *macinfo_htab = NULL;
27262   char dl_section_ref[MAX_ARTIFICIAL_LABEL_BYTES];
27263
27264   if (! length)
27265     return;
27266
27267   /* output_macinfo* uses these interchangeably.  */
27268   gcc_assert ((int) DW_MACINFO_define == (int) DW_MACRO_define
27269               && (int) DW_MACINFO_undef == (int) DW_MACRO_undef
27270               && (int) DW_MACINFO_start_file == (int) DW_MACRO_start_file
27271               && (int) DW_MACINFO_end_file == (int) DW_MACRO_end_file);
27272
27273   /* AIX Assembler inserts the length, so adjust the reference to match the
27274      offset expected by debuggers.  */
27275   strcpy (dl_section_ref, debug_line_label);
27276   if (XCOFF_DEBUGGING_INFO)
27277     strcat (dl_section_ref, DWARF_INITIAL_LENGTH_SIZE_STR);
27278
27279   /* For .debug_macro emit the section header.  */
27280   if (!dwarf_strict || dwarf_version >= 5)
27281     {
27282       dw2_asm_output_data (2, dwarf_version >= 5 ? 5 : 4,
27283                            "DWARF macro version number");
27284       if (DWARF_OFFSET_SIZE == 8)
27285         dw2_asm_output_data (1, 3, "Flags: 64-bit, lineptr present");
27286       else
27287         dw2_asm_output_data (1, 2, "Flags: 32-bit, lineptr present");
27288       dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_line_label,
27289                              debug_line_section, NULL);
27290     }
27291
27292   /* In the first loop, it emits the primary .debug_macinfo section
27293      and after each emitted op the macinfo_entry is cleared.
27294      If a longer range of define/undef ops can be optimized using
27295      DW_MACRO_import, the DW_MACRO_import op is emitted and kept in
27296      the vector before the first define/undef in the range and the
27297      whole range of define/undef ops is not emitted and kept.  */
27298   for (i = 0; macinfo_table->iterate (i, &ref); i++)
27299     {
27300       switch (ref->code)
27301         {
27302         case DW_MACINFO_start_file:
27303           vec_safe_push (files, *ref);
27304           break;
27305         case DW_MACINFO_end_file:
27306           if (!vec_safe_is_empty (files))
27307             files->pop ();
27308           break;
27309         case DW_MACINFO_define:
27310         case DW_MACINFO_undef:
27311           if ((!dwarf_strict || dwarf_version >= 5)
27312               && HAVE_COMDAT_GROUP
27313               && vec_safe_length (files) != 1
27314               && i > 0
27315               && i + 1 < length
27316               && (*macinfo_table)[i - 1].code == 0)
27317             {
27318               unsigned count = optimize_macinfo_range (i, files, &macinfo_htab);
27319               if (count)
27320                 {
27321                   i += count - 1;
27322                   continue;
27323                 }
27324             }
27325           break;
27326         case 0:
27327           /* A dummy entry may be inserted at the beginning to be able
27328              to optimize the whole block of predefined macros.  */
27329           if (i == 0)
27330             continue;
27331         default:
27332           break;
27333         }
27334       output_macinfo_op (ref);
27335       ref->info = NULL;
27336       ref->code = 0;
27337     }
27338
27339   if (!macinfo_htab)
27340     return;
27341
27342   /* Save the number of transparent includes so we can adjust the
27343      label number for the fat LTO object DWARF.  */
27344   unsigned macinfo_label_base_adj = macinfo_htab->elements ();
27345
27346   delete macinfo_htab;
27347   macinfo_htab = NULL;
27348
27349   /* If any DW_MACRO_import were used, on those DW_MACRO_import entries
27350      terminate the current chain and switch to a new comdat .debug_macinfo
27351      section and emit the define/undef entries within it.  */
27352   for (i = 0; macinfo_table->iterate (i, &ref); i++)
27353     switch (ref->code)
27354       {
27355       case 0:
27356         continue;
27357       case DW_MACRO_import:
27358         {
27359           char label[MAX_ARTIFICIAL_LABEL_BYTES];
27360           tree comdat_key = get_identifier (ref->info);
27361           /* Terminate the previous .debug_macinfo section.  */
27362           dw2_asm_output_data (1, 0, "End compilation unit");
27363           targetm.asm_out.named_section (debug_macinfo_section_name,
27364                                          SECTION_DEBUG
27365                                          | SECTION_LINKONCE
27366                                          | (early_lto_debug
27367                                             ? SECTION_EXCLUDE : 0),
27368                                          comdat_key);
27369           ASM_GENERATE_INTERNAL_LABEL (label,
27370                                        DEBUG_MACRO_SECTION_LABEL,
27371                                        ref->lineno + macinfo_label_base);
27372           ASM_OUTPUT_LABEL (asm_out_file, label);
27373           ref->code = 0;
27374           ref->info = NULL;
27375           dw2_asm_output_data (2, dwarf_version >= 5 ? 5 : 4,
27376                                "DWARF macro version number");
27377           if (DWARF_OFFSET_SIZE == 8)
27378             dw2_asm_output_data (1, 1, "Flags: 64-bit");
27379           else
27380             dw2_asm_output_data (1, 0, "Flags: 32-bit");
27381         }
27382         break;
27383       case DW_MACINFO_define:
27384       case DW_MACINFO_undef:
27385         output_macinfo_op (ref);
27386         ref->code = 0;
27387         ref->info = NULL;
27388         break;
27389       default:
27390         gcc_unreachable ();
27391       }
27392
27393   macinfo_label_base += macinfo_label_base_adj;
27394 }
27395
27396 /* Initialize the various sections and labels for dwarf output and prefix
27397    them with PREFIX if non-NULL.  Returns the generation (zero based
27398    number of times function was called).  */
27399
27400 static unsigned
27401 init_sections_and_labels (bool early_lto_debug)
27402 {
27403   /* As we may get called multiple times have a generation count for
27404      labels.  */
27405   static unsigned generation = 0;
27406
27407   if (early_lto_debug)
27408     {
27409       if (!dwarf_split_debug_info)
27410         {
27411           debug_info_section = get_section (DEBUG_LTO_INFO_SECTION,
27412                                             SECTION_DEBUG | SECTION_EXCLUDE,
27413                                             NULL);
27414           debug_abbrev_section = get_section (DEBUG_LTO_ABBREV_SECTION,
27415                                               SECTION_DEBUG | SECTION_EXCLUDE,
27416                                               NULL);
27417           debug_macinfo_section_name
27418             = ((dwarf_strict && dwarf_version < 5)
27419                ? DEBUG_LTO_MACINFO_SECTION : DEBUG_LTO_MACRO_SECTION);
27420           debug_macinfo_section = get_section (debug_macinfo_section_name,
27421                                                SECTION_DEBUG
27422                                                | SECTION_EXCLUDE, NULL);
27423           /* For macro info we have to refer to a debug_line section, so
27424              similar to split-dwarf emit a skeleton one for early debug.  */
27425           debug_skeleton_line_section
27426             = get_section (DEBUG_LTO_LINE_SECTION,
27427                            SECTION_DEBUG | SECTION_EXCLUDE, NULL);
27428           ASM_GENERATE_INTERNAL_LABEL (debug_skeleton_line_section_label,
27429                                        DEBUG_SKELETON_LINE_SECTION_LABEL,
27430                                        generation);
27431         }
27432       else
27433         {
27434           /* ???  Which of the following do we need early?  */
27435           debug_info_section = get_section (DEBUG_LTO_DWO_INFO_SECTION,
27436                                             SECTION_DEBUG | SECTION_EXCLUDE,
27437                                             NULL);
27438           debug_abbrev_section = get_section (DEBUG_LTO_DWO_ABBREV_SECTION,
27439                                               SECTION_DEBUG | SECTION_EXCLUDE,
27440                                               NULL);
27441           debug_skeleton_info_section = get_section (DEBUG_LTO_INFO_SECTION,
27442                                                      SECTION_DEBUG
27443                                                      | SECTION_EXCLUDE, NULL);
27444           debug_skeleton_abbrev_section
27445             = get_section (DEBUG_LTO_ABBREV_SECTION,
27446                            SECTION_DEBUG | SECTION_EXCLUDE, NULL);
27447           ASM_GENERATE_INTERNAL_LABEL (debug_skeleton_abbrev_section_label,
27448                                        DEBUG_SKELETON_ABBREV_SECTION_LABEL,
27449                                        generation);
27450
27451           /* Somewhat confusing detail: The skeleton_[abbrev|info] sections
27452              stay in the main .o, but the skeleton_line goes into the split
27453              off dwo.  */
27454           debug_skeleton_line_section
27455             = get_section (DEBUG_LTO_LINE_SECTION,
27456                            SECTION_DEBUG | SECTION_EXCLUDE, NULL);
27457           ASM_GENERATE_INTERNAL_LABEL (debug_skeleton_line_section_label,
27458                                        DEBUG_SKELETON_LINE_SECTION_LABEL,
27459                                        generation);
27460           debug_str_offsets_section
27461             = get_section (DEBUG_LTO_DWO_STR_OFFSETS_SECTION,
27462                            SECTION_DEBUG | SECTION_EXCLUDE,
27463                            NULL);
27464           ASM_GENERATE_INTERNAL_LABEL (debug_skeleton_info_section_label,
27465                                        DEBUG_SKELETON_INFO_SECTION_LABEL,
27466                                        generation);
27467           debug_str_dwo_section = get_section (DEBUG_LTO_STR_DWO_SECTION,
27468                                                DEBUG_STR_DWO_SECTION_FLAGS,
27469                                                NULL);
27470           debug_macinfo_section_name
27471             = ((dwarf_strict && dwarf_version < 5)
27472                ? DEBUG_LTO_DWO_MACINFO_SECTION : DEBUG_LTO_DWO_MACRO_SECTION);
27473           debug_macinfo_section = get_section (debug_macinfo_section_name,
27474                                                SECTION_DEBUG | SECTION_EXCLUDE,
27475                                                NULL);
27476         }
27477       debug_str_section = get_section (DEBUG_LTO_STR_SECTION,
27478                                        DEBUG_STR_SECTION_FLAGS
27479                                        | SECTION_EXCLUDE, NULL);
27480       if (!dwarf_split_debug_info && !DWARF2_ASM_LINE_DEBUG_INFO)
27481         debug_line_str_section
27482           = get_section (DEBUG_LTO_LINE_STR_SECTION,
27483                          DEBUG_STR_SECTION_FLAGS | SECTION_EXCLUDE, NULL);
27484     }
27485   else
27486     {
27487       if (!dwarf_split_debug_info)
27488         {
27489           debug_info_section = get_section (DEBUG_INFO_SECTION,
27490                                             SECTION_DEBUG, NULL);
27491           debug_abbrev_section = get_section (DEBUG_ABBREV_SECTION,
27492                                               SECTION_DEBUG, NULL);
27493           debug_loc_section = get_section (dwarf_version >= 5
27494                                            ? DEBUG_LOCLISTS_SECTION
27495                                            : DEBUG_LOC_SECTION,
27496                                            SECTION_DEBUG, NULL);
27497           debug_macinfo_section_name
27498             = ((dwarf_strict && dwarf_version < 5)
27499                ? DEBUG_MACINFO_SECTION : DEBUG_MACRO_SECTION);
27500           debug_macinfo_section = get_section (debug_macinfo_section_name,
27501                                                SECTION_DEBUG, NULL);
27502         }
27503       else
27504         {
27505           debug_info_section = get_section (DEBUG_DWO_INFO_SECTION,
27506                                             SECTION_DEBUG | SECTION_EXCLUDE,
27507                                             NULL);
27508           debug_abbrev_section = get_section (DEBUG_DWO_ABBREV_SECTION,
27509                                               SECTION_DEBUG | SECTION_EXCLUDE,
27510                                               NULL);
27511           debug_addr_section = get_section (DEBUG_ADDR_SECTION,
27512                                             SECTION_DEBUG, NULL);
27513           debug_skeleton_info_section = get_section (DEBUG_INFO_SECTION,
27514                                                      SECTION_DEBUG, NULL);
27515           debug_skeleton_abbrev_section = get_section (DEBUG_ABBREV_SECTION,
27516                                                        SECTION_DEBUG, NULL);
27517           ASM_GENERATE_INTERNAL_LABEL (debug_skeleton_abbrev_section_label,
27518                                        DEBUG_SKELETON_ABBREV_SECTION_LABEL,
27519                                        generation);
27520
27521           /* Somewhat confusing detail: The skeleton_[abbrev|info] sections
27522              stay in the main .o, but the skeleton_line goes into the
27523              split off dwo.  */
27524           debug_skeleton_line_section
27525               = get_section (DEBUG_DWO_LINE_SECTION,
27526                              SECTION_DEBUG | SECTION_EXCLUDE, NULL);
27527           ASM_GENERATE_INTERNAL_LABEL (debug_skeleton_line_section_label,
27528                                        DEBUG_SKELETON_LINE_SECTION_LABEL,
27529                                        generation);
27530           debug_str_offsets_section
27531             = get_section (DEBUG_DWO_STR_OFFSETS_SECTION,
27532                            SECTION_DEBUG | SECTION_EXCLUDE, NULL);
27533           ASM_GENERATE_INTERNAL_LABEL (debug_skeleton_info_section_label,
27534                                        DEBUG_SKELETON_INFO_SECTION_LABEL,
27535                                        generation);
27536           debug_loc_section = get_section (dwarf_version >= 5
27537                                            ? DEBUG_DWO_LOCLISTS_SECTION
27538                                            : DEBUG_DWO_LOC_SECTION,
27539                                            SECTION_DEBUG | SECTION_EXCLUDE,
27540                                            NULL);
27541           debug_str_dwo_section = get_section (DEBUG_STR_DWO_SECTION,
27542                                                DEBUG_STR_DWO_SECTION_FLAGS,
27543                                                NULL);
27544           debug_macinfo_section_name
27545             = ((dwarf_strict && dwarf_version < 5)
27546                ? DEBUG_DWO_MACINFO_SECTION : DEBUG_DWO_MACRO_SECTION);
27547           debug_macinfo_section = get_section (debug_macinfo_section_name,
27548                                                SECTION_DEBUG | SECTION_EXCLUDE,
27549                                                NULL);
27550         }
27551       debug_aranges_section = get_section (DEBUG_ARANGES_SECTION,
27552                                            SECTION_DEBUG, NULL);
27553       debug_line_section = get_section (DEBUG_LINE_SECTION,
27554                                         SECTION_DEBUG, NULL);
27555       debug_pubnames_section = get_section (DEBUG_PUBNAMES_SECTION,
27556                                             SECTION_DEBUG, NULL);
27557       debug_pubtypes_section = get_section (DEBUG_PUBTYPES_SECTION,
27558                                             SECTION_DEBUG, NULL);
27559       debug_str_section = get_section (DEBUG_STR_SECTION,
27560                                        DEBUG_STR_SECTION_FLAGS, NULL);
27561       if (!dwarf_split_debug_info && !DWARF2_ASM_LINE_DEBUG_INFO)
27562         debug_line_str_section = get_section (DEBUG_LINE_STR_SECTION,
27563                                               DEBUG_STR_SECTION_FLAGS, NULL);
27564       debug_ranges_section = get_section (dwarf_version >= 5
27565                                           ? DEBUG_RNGLISTS_SECTION
27566                                           : DEBUG_RANGES_SECTION,
27567                                           SECTION_DEBUG, NULL);
27568       debug_frame_section = get_section (DEBUG_FRAME_SECTION,
27569                                          SECTION_DEBUG, NULL);
27570     }
27571
27572   ASM_GENERATE_INTERNAL_LABEL (abbrev_section_label,
27573                                DEBUG_ABBREV_SECTION_LABEL, generation);
27574   ASM_GENERATE_INTERNAL_LABEL (debug_info_section_label,
27575                                DEBUG_INFO_SECTION_LABEL, generation);
27576   info_section_emitted = false;
27577   ASM_GENERATE_INTERNAL_LABEL (debug_line_section_label,
27578                                DEBUG_LINE_SECTION_LABEL, generation);
27579   /* There are up to 4 unique ranges labels per generation.
27580      See also output_rnglists.  */
27581   ASM_GENERATE_INTERNAL_LABEL (ranges_section_label,
27582                                DEBUG_RANGES_SECTION_LABEL, generation * 4);
27583   if (dwarf_version >= 5 && dwarf_split_debug_info)
27584     ASM_GENERATE_INTERNAL_LABEL (ranges_base_label,
27585                                  DEBUG_RANGES_SECTION_LABEL,
27586                                  1 + generation * 4);
27587   ASM_GENERATE_INTERNAL_LABEL (debug_addr_section_label,
27588                                DEBUG_ADDR_SECTION_LABEL, generation);
27589   ASM_GENERATE_INTERNAL_LABEL (macinfo_section_label,
27590                                (dwarf_strict && dwarf_version < 5)
27591                                ? DEBUG_MACINFO_SECTION_LABEL
27592                                : DEBUG_MACRO_SECTION_LABEL, generation);
27593   ASM_GENERATE_INTERNAL_LABEL (loc_section_label, DEBUG_LOC_SECTION_LABEL,
27594                                generation);
27595
27596   ++generation;
27597   return generation - 1;
27598 }
27599
27600 /* Set up for Dwarf output at the start of compilation.  */
27601
27602 static void
27603 dwarf2out_init (const char *filename ATTRIBUTE_UNUSED)
27604 {
27605   /* Allocate the file_table.  */
27606   file_table = hash_table<dwarf_file_hasher>::create_ggc (50);
27607
27608 #ifndef DWARF2_LINENO_DEBUGGING_INFO
27609   /* Allocate the decl_die_table.  */
27610   decl_die_table = hash_table<decl_die_hasher>::create_ggc (10);
27611
27612   /* Allocate the decl_loc_table.  */
27613   decl_loc_table = hash_table<decl_loc_hasher>::create_ggc (10);
27614
27615   /* Allocate the cached_dw_loc_list_table.  */
27616   cached_dw_loc_list_table = hash_table<dw_loc_list_hasher>::create_ggc (10);
27617
27618   /* Allocate the initial hunk of the decl_scope_table.  */
27619   vec_alloc (decl_scope_table, 256);
27620
27621   /* Allocate the initial hunk of the abbrev_die_table.  */
27622   vec_alloc (abbrev_die_table, 256);
27623   /* Zero-th entry is allocated, but unused.  */
27624   abbrev_die_table->quick_push (NULL);
27625
27626   /* Allocate the dwarf_proc_stack_usage_map.  */
27627   dwarf_proc_stack_usage_map = new hash_map<dw_die_ref, int>;
27628
27629   /* Allocate the pubtypes and pubnames vectors.  */
27630   vec_alloc (pubname_table, 32);
27631   vec_alloc (pubtype_table, 32);
27632
27633   vec_alloc (incomplete_types, 64);
27634
27635   vec_alloc (used_rtx_array, 32);
27636
27637   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
27638     vec_alloc (macinfo_table, 64);
27639 #endif
27640
27641   /* If front-ends already registered a main translation unit but we were not
27642      ready to perform the association, do this now.  */
27643   if (main_translation_unit != NULL_TREE)
27644     equate_decl_number_to_die (main_translation_unit, comp_unit_die ());
27645 }
27646
27647 /* Called before compile () starts outputtting functions, variables
27648    and toplevel asms into assembly.  */
27649
27650 static void
27651 dwarf2out_assembly_start (void)
27652 {
27653   if (text_section_line_info)
27654     return;
27655
27656 #ifndef DWARF2_LINENO_DEBUGGING_INFO
27657   ASM_GENERATE_INTERNAL_LABEL (text_section_label, TEXT_SECTION_LABEL, 0);
27658   ASM_GENERATE_INTERNAL_LABEL (text_end_label, TEXT_END_LABEL, 0);
27659   ASM_GENERATE_INTERNAL_LABEL (cold_text_section_label,
27660                                COLD_TEXT_SECTION_LABEL, 0);
27661   ASM_GENERATE_INTERNAL_LABEL (cold_end_label, COLD_END_LABEL, 0);
27662
27663   switch_to_section (text_section);
27664   ASM_OUTPUT_LABEL (asm_out_file, text_section_label);
27665 #endif
27666
27667   /* Make sure the line number table for .text always exists.  */
27668   text_section_line_info = new_line_info_table ();
27669   text_section_line_info->end_label = text_end_label;
27670
27671 #ifdef DWARF2_LINENO_DEBUGGING_INFO
27672   cur_line_info_table = text_section_line_info;
27673 #endif
27674
27675   if (HAVE_GAS_CFI_SECTIONS_DIRECTIVE
27676       && dwarf2out_do_cfi_asm ()
27677       && !dwarf2out_do_eh_frame ())
27678     fprintf (asm_out_file, "\t.cfi_sections\t.debug_frame\n");
27679 }
27680
27681 /* A helper function for dwarf2out_finish called through
27682    htab_traverse.  Assign a string its index.  All strings must be
27683    collected into the table by the time index_string is called,
27684    because the indexing code relies on htab_traverse to traverse nodes
27685    in the same order for each run. */
27686
27687 int
27688 index_string (indirect_string_node **h, unsigned int *index)
27689 {
27690   indirect_string_node *node = *h;
27691
27692   find_string_form (node);
27693   if (node->form == DW_FORM_GNU_str_index && node->refcount > 0)
27694     {
27695       gcc_assert (node->index == NO_INDEX_ASSIGNED);
27696       node->index = *index;
27697       *index += 1;
27698     }
27699   return 1;
27700 }
27701
27702 /* A helper function for output_indirect_strings called through
27703    htab_traverse.  Output the offset to a string and update the
27704    current offset.  */
27705
27706 int
27707 output_index_string_offset (indirect_string_node **h, unsigned int *offset)
27708 {
27709   indirect_string_node *node = *h;
27710
27711   if (node->form == DW_FORM_GNU_str_index && node->refcount > 0)
27712     {
27713       /* Assert that this node has been assigned an index.  */
27714       gcc_assert (node->index != NO_INDEX_ASSIGNED
27715                   && node->index != NOT_INDEXED);
27716       dw2_asm_output_data (DWARF_OFFSET_SIZE, *offset,
27717                            "indexed string 0x%x: %s", node->index, node->str);
27718       *offset += strlen (node->str) + 1;
27719     }
27720   return 1;
27721 }
27722
27723 /* A helper function for dwarf2out_finish called through
27724    htab_traverse.  Output the indexed string.  */
27725
27726 int
27727 output_index_string (indirect_string_node **h, unsigned int *cur_idx)
27728 {
27729   struct indirect_string_node *node = *h;
27730
27731   if (node->form == DW_FORM_GNU_str_index && node->refcount > 0)
27732     {
27733       /* Assert that the strings are output in the same order as their
27734          indexes were assigned.  */
27735       gcc_assert (*cur_idx == node->index);
27736       assemble_string (node->str, strlen (node->str) + 1);
27737       *cur_idx += 1;
27738     }
27739   return 1;
27740 }
27741
27742 /* A helper function for dwarf2out_finish called through
27743    htab_traverse.  Emit one queued .debug_str string.  */
27744
27745 int
27746 output_indirect_string (indirect_string_node **h, enum dwarf_form form)
27747 {
27748   struct indirect_string_node *node = *h;
27749
27750   node->form = find_string_form (node);
27751   if (node->form == form && node->refcount > 0)
27752     {
27753       ASM_OUTPUT_LABEL (asm_out_file, node->label);
27754       assemble_string (node->str, strlen (node->str) + 1);
27755     }
27756
27757   return 1;
27758 }
27759
27760 /* Output the indexed string table.  */
27761
27762 static void
27763 output_indirect_strings (void)
27764 {
27765   switch_to_section (debug_str_section);
27766   if (!dwarf_split_debug_info)
27767     debug_str_hash->traverse<enum dwarf_form,
27768                              output_indirect_string> (DW_FORM_strp);
27769   else
27770     {
27771       unsigned int offset = 0;
27772       unsigned int cur_idx = 0;
27773
27774       skeleton_debug_str_hash->traverse<enum dwarf_form,
27775                                         output_indirect_string> (DW_FORM_strp);
27776
27777       switch_to_section (debug_str_offsets_section);
27778       debug_str_hash->traverse_noresize
27779         <unsigned int *, output_index_string_offset> (&offset);
27780       switch_to_section (debug_str_dwo_section);
27781       debug_str_hash->traverse_noresize<unsigned int *, output_index_string>
27782         (&cur_idx);
27783     }
27784 }
27785
27786 /* Callback for htab_traverse to assign an index to an entry in the
27787    table, and to write that entry to the .debug_addr section.  */
27788
27789 int
27790 output_addr_table_entry (addr_table_entry **slot, unsigned int *cur_index)
27791 {
27792   addr_table_entry *entry = *slot;
27793
27794   if (entry->refcount == 0)
27795     {
27796       gcc_assert (entry->index == NO_INDEX_ASSIGNED
27797                   || entry->index == NOT_INDEXED);
27798       return 1;
27799     }
27800
27801   gcc_assert (entry->index == *cur_index);
27802   (*cur_index)++;
27803
27804   switch (entry->kind)
27805     {
27806       case ate_kind_rtx:
27807         dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE, entry->addr.rtl,
27808                                  "0x%x", entry->index);
27809         break;
27810       case ate_kind_rtx_dtprel:
27811         gcc_assert (targetm.asm_out.output_dwarf_dtprel);
27812         targetm.asm_out.output_dwarf_dtprel (asm_out_file,
27813                                              DWARF2_ADDR_SIZE,
27814                                              entry->addr.rtl);
27815         fputc ('\n', asm_out_file);
27816         break;
27817       case ate_kind_label:
27818         dw2_asm_output_addr (DWARF2_ADDR_SIZE, entry->addr.label,
27819                                  "0x%x", entry->index);
27820         break;
27821       default:
27822         gcc_unreachable ();
27823     }
27824   return 1;
27825 }
27826
27827 /* Produce the .debug_addr section.  */
27828
27829 static void
27830 output_addr_table (void)
27831 {
27832   unsigned int index = 0;
27833   if (addr_index_table == NULL || addr_index_table->size () == 0)
27834     return;
27835
27836   switch_to_section (debug_addr_section);
27837   addr_index_table
27838     ->traverse_noresize<unsigned int *, output_addr_table_entry> (&index);
27839 }
27840
27841 #if ENABLE_ASSERT_CHECKING
27842 /* Verify that all marks are clear.  */
27843
27844 static void
27845 verify_marks_clear (dw_die_ref die)
27846 {
27847   dw_die_ref c;
27848
27849   gcc_assert (! die->die_mark);
27850   FOR_EACH_CHILD (die, c, verify_marks_clear (c));
27851 }
27852 #endif /* ENABLE_ASSERT_CHECKING */
27853
27854 /* Clear the marks for a die and its children.
27855    Be cool if the mark isn't set.  */
27856
27857 static void
27858 prune_unmark_dies (dw_die_ref die)
27859 {
27860   dw_die_ref c;
27861
27862   if (die->die_mark)
27863     die->die_mark = 0;
27864   FOR_EACH_CHILD (die, c, prune_unmark_dies (c));
27865 }
27866
27867 /* Given LOC that is referenced by a DIE we're marking as used, find all
27868    referenced DWARF procedures it references and mark them as used.  */
27869
27870 static void
27871 prune_unused_types_walk_loc_descr (dw_loc_descr_ref loc)
27872 {
27873   for (; loc != NULL; loc = loc->dw_loc_next)
27874     switch (loc->dw_loc_opc)
27875       {
27876       case DW_OP_implicit_pointer:
27877       case DW_OP_convert:
27878       case DW_OP_reinterpret:
27879       case DW_OP_GNU_implicit_pointer:
27880       case DW_OP_GNU_convert:
27881       case DW_OP_GNU_reinterpret:
27882         if (loc->dw_loc_oprnd1.val_class == dw_val_class_die_ref)
27883           prune_unused_types_mark (loc->dw_loc_oprnd1.v.val_die_ref.die, 1);
27884         break;
27885       case DW_OP_GNU_variable_value:
27886         if (loc->dw_loc_oprnd1.val_class == dw_val_class_decl_ref)
27887           {
27888             dw_die_ref ref
27889               = lookup_decl_die (loc->dw_loc_oprnd1.v.val_decl_ref);
27890             if (ref == NULL)
27891               break;
27892             loc->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
27893             loc->dw_loc_oprnd1.v.val_die_ref.die = ref;
27894             loc->dw_loc_oprnd1.v.val_die_ref.external = 0;
27895           }
27896         /* FALLTHRU */
27897       case DW_OP_call2:
27898       case DW_OP_call4:
27899       case DW_OP_call_ref:
27900       case DW_OP_const_type:
27901       case DW_OP_GNU_const_type:
27902       case DW_OP_GNU_parameter_ref:
27903         gcc_assert (loc->dw_loc_oprnd1.val_class == dw_val_class_die_ref);
27904         prune_unused_types_mark (loc->dw_loc_oprnd1.v.val_die_ref.die, 1);
27905         break;
27906       case DW_OP_regval_type:
27907       case DW_OP_deref_type:
27908       case DW_OP_GNU_regval_type:
27909       case DW_OP_GNU_deref_type:
27910         gcc_assert (loc->dw_loc_oprnd2.val_class == dw_val_class_die_ref);
27911         prune_unused_types_mark (loc->dw_loc_oprnd2.v.val_die_ref.die, 1);
27912         break;
27913       case DW_OP_entry_value:
27914       case DW_OP_GNU_entry_value:
27915         gcc_assert (loc->dw_loc_oprnd1.val_class == dw_val_class_loc);
27916         prune_unused_types_walk_loc_descr (loc->dw_loc_oprnd1.v.val_loc);
27917         break;
27918       default:
27919         break;
27920       }
27921 }
27922
27923 /* Given DIE that we're marking as used, find any other dies
27924    it references as attributes and mark them as used.  */
27925
27926 static void
27927 prune_unused_types_walk_attribs (dw_die_ref die)
27928 {
27929   dw_attr_node *a;
27930   unsigned ix;
27931
27932   FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
27933     {
27934       switch (AT_class (a))
27935         {
27936         /* Make sure DWARF procedures referenced by location descriptions will
27937            get emitted.  */
27938         case dw_val_class_loc:
27939           prune_unused_types_walk_loc_descr (AT_loc (a));
27940           break;
27941         case dw_val_class_loc_list:
27942           for (dw_loc_list_ref list = AT_loc_list (a);
27943                list != NULL;
27944                list = list->dw_loc_next)
27945             prune_unused_types_walk_loc_descr (list->expr);
27946           break;
27947
27948         case dw_val_class_die_ref:
27949           /* A reference to another DIE.
27950              Make sure that it will get emitted.
27951              If it was broken out into a comdat group, don't follow it.  */
27952           if (! AT_ref (a)->comdat_type_p
27953               || a->dw_attr == DW_AT_specification)
27954             prune_unused_types_mark (a->dw_attr_val.v.val_die_ref.die, 1);
27955           break;
27956
27957         case dw_val_class_str:
27958           /* Set the string's refcount to 0 so that prune_unused_types_mark
27959              accounts properly for it.  */
27960           a->dw_attr_val.v.val_str->refcount = 0;
27961           break;
27962
27963         default:
27964           break;
27965         }
27966     }
27967 }
27968
27969 /* Mark the generic parameters and arguments children DIEs of DIE.  */
27970
27971 static void
27972 prune_unused_types_mark_generic_parms_dies (dw_die_ref die)
27973 {
27974   dw_die_ref c;
27975
27976   if (die == NULL || die->die_child == NULL)
27977     return;
27978   c = die->die_child;
27979   do
27980     {
27981       if (is_template_parameter (c))
27982         prune_unused_types_mark (c, 1);
27983       c = c->die_sib;
27984     } while (c && c != die->die_child);
27985 }
27986
27987 /* Mark DIE as being used.  If DOKIDS is true, then walk down
27988    to DIE's children.  */
27989
27990 static void
27991 prune_unused_types_mark (dw_die_ref die, int dokids)
27992 {
27993   dw_die_ref c;
27994
27995   if (die->die_mark == 0)
27996     {
27997       /* We haven't done this node yet.  Mark it as used.  */
27998       die->die_mark = 1;
27999       /* If this is the DIE of a generic type instantiation,
28000          mark the children DIEs that describe its generic parms and
28001          args.  */
28002       prune_unused_types_mark_generic_parms_dies (die);
28003
28004       /* We also have to mark its parents as used.
28005          (But we don't want to mark our parent's kids due to this,
28006          unless it is a class.)  */
28007       if (die->die_parent)
28008         prune_unused_types_mark (die->die_parent,
28009                                  class_scope_p (die->die_parent));
28010
28011       /* Mark any referenced nodes.  */
28012       prune_unused_types_walk_attribs (die);
28013
28014       /* If this node is a specification,
28015          also mark the definition, if it exists.  */
28016       if (get_AT_flag (die, DW_AT_declaration) && die->die_definition)
28017         prune_unused_types_mark (die->die_definition, 1);
28018     }
28019
28020   if (dokids && die->die_mark != 2)
28021     {
28022       /* We need to walk the children, but haven't done so yet.
28023          Remember that we've walked the kids.  */
28024       die->die_mark = 2;
28025
28026       /* If this is an array type, we need to make sure our
28027          kids get marked, even if they're types.  If we're
28028          breaking out types into comdat sections, do this
28029          for all type definitions.  */
28030       if (die->die_tag == DW_TAG_array_type
28031           || (use_debug_types
28032               && is_type_die (die) && ! is_declaration_die (die)))
28033         FOR_EACH_CHILD (die, c, prune_unused_types_mark (c, 1));
28034       else
28035         FOR_EACH_CHILD (die, c, prune_unused_types_walk (c));
28036     }
28037 }
28038
28039 /* For local classes, look if any static member functions were emitted
28040    and if so, mark them.  */
28041
28042 static void
28043 prune_unused_types_walk_local_classes (dw_die_ref die)
28044 {
28045   dw_die_ref c;
28046
28047   if (die->die_mark == 2)
28048     return;
28049
28050   switch (die->die_tag)
28051     {
28052     case DW_TAG_structure_type:
28053     case DW_TAG_union_type:
28054     case DW_TAG_class_type:
28055       break;
28056
28057     case DW_TAG_subprogram:
28058       if (!get_AT_flag (die, DW_AT_declaration)
28059           || die->die_definition != NULL)
28060         prune_unused_types_mark (die, 1);
28061       return;
28062
28063     default:
28064       return;
28065     }
28066
28067   /* Mark children.  */
28068   FOR_EACH_CHILD (die, c, prune_unused_types_walk_local_classes (c));
28069 }
28070
28071 /* Walk the tree DIE and mark types that we actually use.  */
28072
28073 static void
28074 prune_unused_types_walk (dw_die_ref die)
28075 {
28076   dw_die_ref c;
28077
28078   /* Don't do anything if this node is already marked and
28079      children have been marked as well.  */
28080   if (die->die_mark == 2)
28081     return;
28082
28083   switch (die->die_tag)
28084     {
28085     case DW_TAG_structure_type:
28086     case DW_TAG_union_type:
28087     case DW_TAG_class_type:
28088       if (die->die_perennial_p)
28089         break;
28090
28091       for (c = die->die_parent; c; c = c->die_parent)
28092         if (c->die_tag == DW_TAG_subprogram)
28093           break;
28094
28095       /* Finding used static member functions inside of classes
28096          is needed just for local classes, because for other classes
28097          static member function DIEs with DW_AT_specification
28098          are emitted outside of the DW_TAG_*_type.  If we ever change
28099          it, we'd need to call this even for non-local classes.  */
28100       if (c)
28101         prune_unused_types_walk_local_classes (die);
28102
28103       /* It's a type node --- don't mark it.  */
28104       return;
28105
28106     case DW_TAG_const_type:
28107     case DW_TAG_packed_type:
28108     case DW_TAG_pointer_type:
28109     case DW_TAG_reference_type:
28110     case DW_TAG_rvalue_reference_type:
28111     case DW_TAG_volatile_type:
28112     case DW_TAG_typedef:
28113     case DW_TAG_array_type:
28114     case DW_TAG_interface_type:
28115     case DW_TAG_friend:
28116     case DW_TAG_enumeration_type:
28117     case DW_TAG_subroutine_type:
28118     case DW_TAG_string_type:
28119     case DW_TAG_set_type:
28120     case DW_TAG_subrange_type:
28121     case DW_TAG_ptr_to_member_type:
28122     case DW_TAG_file_type:
28123       /* Type nodes are useful only when other DIEs reference them --- don't
28124          mark them.  */
28125       /* FALLTHROUGH */
28126
28127     case DW_TAG_dwarf_procedure:
28128       /* Likewise for DWARF procedures.  */
28129
28130       if (die->die_perennial_p)
28131         break;
28132
28133       return;
28134
28135     default:
28136       /* Mark everything else.  */
28137       break;
28138   }
28139
28140   if (die->die_mark == 0)
28141     {
28142       die->die_mark = 1;
28143
28144       /* Now, mark any dies referenced from here.  */
28145       prune_unused_types_walk_attribs (die);
28146     }
28147
28148   die->die_mark = 2;
28149
28150   /* Mark children.  */
28151   FOR_EACH_CHILD (die, c, prune_unused_types_walk (c));
28152 }
28153
28154 /* Increment the string counts on strings referred to from DIE's
28155    attributes.  */
28156
28157 static void
28158 prune_unused_types_update_strings (dw_die_ref die)
28159 {
28160   dw_attr_node *a;
28161   unsigned ix;
28162
28163   FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
28164     if (AT_class (a) == dw_val_class_str)
28165       {
28166         struct indirect_string_node *s = a->dw_attr_val.v.val_str;
28167         s->refcount++;
28168         /* Avoid unnecessarily putting strings that are used less than
28169            twice in the hash table.  */
28170         if (s->refcount
28171             == ((DEBUG_STR_SECTION_FLAGS & SECTION_MERGE) ? 1 : 2))
28172           {
28173             indirect_string_node **slot
28174               = debug_str_hash->find_slot_with_hash (s->str,
28175                                                      htab_hash_string (s->str),
28176                                                      INSERT);
28177             gcc_assert (*slot == NULL);
28178             *slot = s;
28179           }
28180       }
28181 }
28182
28183 /* Mark DIE and its children as removed.  */
28184
28185 static void
28186 mark_removed (dw_die_ref die)
28187 {
28188   dw_die_ref c;
28189   die->removed = true;
28190   FOR_EACH_CHILD (die, c, mark_removed (c));
28191 }
28192
28193 /* Remove from the tree DIE any dies that aren't marked.  */
28194
28195 static void
28196 prune_unused_types_prune (dw_die_ref die)
28197 {
28198   dw_die_ref c;
28199
28200   gcc_assert (die->die_mark);
28201   prune_unused_types_update_strings (die);
28202
28203   if (! die->die_child)
28204     return;
28205
28206   c = die->die_child;
28207   do {
28208     dw_die_ref prev = c, next;
28209     for (c = c->die_sib; ! c->die_mark; c = next)
28210       if (c == die->die_child)
28211         {
28212           /* No marked children between 'prev' and the end of the list.  */
28213           if (prev == c)
28214             /* No marked children at all.  */
28215             die->die_child = NULL;
28216           else
28217             {
28218               prev->die_sib = c->die_sib;
28219               die->die_child = prev;
28220             }
28221           c->die_sib = NULL;
28222           mark_removed (c);
28223           return;
28224         }
28225       else
28226         {
28227           next = c->die_sib;
28228           c->die_sib = NULL;
28229           mark_removed (c);
28230         }
28231
28232     if (c != prev->die_sib)
28233       prev->die_sib = c;
28234     prune_unused_types_prune (c);
28235   } while (c != die->die_child);
28236 }
28237
28238 /* Remove dies representing declarations that we never use.  */
28239
28240 static void
28241 prune_unused_types (void)
28242 {
28243   unsigned int i;
28244   limbo_die_node *node;
28245   comdat_type_node *ctnode;
28246   pubname_entry *pub;
28247   dw_die_ref base_type;
28248
28249 #if ENABLE_ASSERT_CHECKING
28250   /* All the marks should already be clear.  */
28251   verify_marks_clear (comp_unit_die ());
28252   for (node = limbo_die_list; node; node = node->next)
28253     verify_marks_clear (node->die);
28254   for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next)
28255     verify_marks_clear (ctnode->root_die);
28256 #endif /* ENABLE_ASSERT_CHECKING */
28257
28258   /* Mark types that are used in global variables.  */
28259   premark_types_used_by_global_vars ();
28260
28261   /* Set the mark on nodes that are actually used.  */
28262   prune_unused_types_walk (comp_unit_die ());
28263   for (node = limbo_die_list; node; node = node->next)
28264     prune_unused_types_walk (node->die);
28265   for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next)
28266     {
28267       prune_unused_types_walk (ctnode->root_die);
28268       prune_unused_types_mark (ctnode->type_die, 1);
28269     }
28270
28271   /* Also set the mark on nodes referenced from the pubname_table.  Enumerators
28272      are unusual in that they are pubnames that are the children of pubtypes.
28273      They should only be marked via their parent DW_TAG_enumeration_type die,
28274      not as roots in themselves.  */
28275   FOR_EACH_VEC_ELT (*pubname_table, i, pub)
28276     if (pub->die->die_tag != DW_TAG_enumerator)
28277       prune_unused_types_mark (pub->die, 1);
28278   for (i = 0; base_types.iterate (i, &base_type); i++)
28279     prune_unused_types_mark (base_type, 1);
28280
28281   /* For -fvar-tracking-assignments, also set the mark on nodes that could be
28282      referenced by DW_TAG_call_site DW_AT_call_origin (i.e. direct call
28283      callees).  */
28284   cgraph_node *cnode;
28285   FOR_EACH_FUNCTION (cnode)
28286     if (cnode->referred_to_p (false))
28287       {
28288         dw_die_ref die = lookup_decl_die (cnode->decl);
28289         if (die == NULL || die->die_mark)
28290           continue;
28291         for (cgraph_edge *e = cnode->callers; e; e = e->next_caller)
28292           if (e->caller != cnode
28293               && opt_for_fn (e->caller->decl, flag_var_tracking_assignments))
28294             {
28295               prune_unused_types_mark (die, 1);
28296               break;
28297             }
28298       }
28299
28300   if (debug_str_hash)
28301     debug_str_hash->empty ();
28302   if (skeleton_debug_str_hash)
28303     skeleton_debug_str_hash->empty ();
28304   prune_unused_types_prune (comp_unit_die ());
28305   for (limbo_die_node **pnode = &limbo_die_list; *pnode; )
28306     {
28307       node = *pnode;
28308       if (!node->die->die_mark)
28309         *pnode = node->next;
28310       else
28311         {
28312           prune_unused_types_prune (node->die);
28313           pnode = &node->next;
28314         }
28315     }
28316   for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next)
28317     prune_unused_types_prune (ctnode->root_die);
28318
28319   /* Leave the marks clear.  */
28320   prune_unmark_dies (comp_unit_die ());
28321   for (node = limbo_die_list; node; node = node->next)
28322     prune_unmark_dies (node->die);
28323   for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next)
28324     prune_unmark_dies (ctnode->root_die);
28325 }
28326
28327 /* Helpers to manipulate hash table of comdat type units.  */
28328
28329 struct comdat_type_hasher : nofree_ptr_hash <comdat_type_node>
28330 {
28331   static inline hashval_t hash (const comdat_type_node *);
28332   static inline bool equal (const comdat_type_node *, const comdat_type_node *);
28333 };
28334
28335 inline hashval_t
28336 comdat_type_hasher::hash (const comdat_type_node *type_node)
28337 {
28338   hashval_t h;
28339   memcpy (&h, type_node->signature, sizeof (h));
28340   return h;
28341 }
28342
28343 inline bool
28344 comdat_type_hasher::equal (const comdat_type_node *type_node_1,
28345                            const comdat_type_node *type_node_2)
28346 {
28347   return (! memcmp (type_node_1->signature, type_node_2->signature,
28348                     DWARF_TYPE_SIGNATURE_SIZE));
28349 }
28350
28351 /* Move a DW_AT_{,MIPS_}linkage_name attribute just added to dw_die_ref
28352    to the location it would have been added, should we know its
28353    DECL_ASSEMBLER_NAME when we added other attributes.  This will
28354    probably improve compactness of debug info, removing equivalent
28355    abbrevs, and hide any differences caused by deferring the
28356    computation of the assembler name, triggered by e.g. PCH.  */
28357
28358 static inline void
28359 move_linkage_attr (dw_die_ref die)
28360 {
28361   unsigned ix = vec_safe_length (die->die_attr);
28362   dw_attr_node linkage = (*die->die_attr)[ix - 1];
28363
28364   gcc_assert (linkage.dw_attr == DW_AT_linkage_name
28365               || linkage.dw_attr == DW_AT_MIPS_linkage_name);
28366
28367   while (--ix > 0)
28368     {
28369       dw_attr_node *prev = &(*die->die_attr)[ix - 1];
28370
28371       if (prev->dw_attr == DW_AT_decl_line
28372           || prev->dw_attr == DW_AT_decl_column
28373           || prev->dw_attr == DW_AT_name)
28374         break;
28375     }
28376
28377   if (ix != vec_safe_length (die->die_attr) - 1)
28378     {
28379       die->die_attr->pop ();
28380       die->die_attr->quick_insert (ix, linkage);
28381     }
28382 }
28383
28384 /* Helper function for resolve_addr, mark DW_TAG_base_type nodes
28385    referenced from typed stack ops and count how often they are used.  */
28386
28387 static void
28388 mark_base_types (dw_loc_descr_ref loc)
28389 {
28390   dw_die_ref base_type = NULL;
28391
28392   for (; loc; loc = loc->dw_loc_next)
28393     {
28394       switch (loc->dw_loc_opc)
28395         {
28396         case DW_OP_regval_type:
28397         case DW_OP_deref_type:
28398         case DW_OP_GNU_regval_type:
28399         case DW_OP_GNU_deref_type:
28400           base_type = loc->dw_loc_oprnd2.v.val_die_ref.die;
28401           break;
28402         case DW_OP_convert:
28403         case DW_OP_reinterpret:
28404         case DW_OP_GNU_convert:
28405         case DW_OP_GNU_reinterpret:
28406           if (loc->dw_loc_oprnd1.val_class == dw_val_class_unsigned_const)
28407             continue;
28408           /* FALLTHRU */
28409         case DW_OP_const_type:
28410         case DW_OP_GNU_const_type:
28411           base_type = loc->dw_loc_oprnd1.v.val_die_ref.die;
28412           break;
28413         case DW_OP_entry_value:
28414         case DW_OP_GNU_entry_value:
28415           mark_base_types (loc->dw_loc_oprnd1.v.val_loc);
28416           continue;
28417         default:
28418           continue;
28419         }
28420       gcc_assert (base_type->die_parent == comp_unit_die ());
28421       if (base_type->die_mark)
28422         base_type->die_mark++;
28423       else
28424         {
28425           base_types.safe_push (base_type);
28426           base_type->die_mark = 1;
28427         }
28428     }
28429 }
28430
28431 /* Comparison function for sorting marked base types.  */
28432
28433 static int
28434 base_type_cmp (const void *x, const void *y)
28435 {
28436   dw_die_ref dx = *(const dw_die_ref *) x;
28437   dw_die_ref dy = *(const dw_die_ref *) y;
28438   unsigned int byte_size1, byte_size2;
28439   unsigned int encoding1, encoding2;
28440   unsigned int align1, align2;
28441   if (dx->die_mark > dy->die_mark)
28442     return -1;
28443   if (dx->die_mark < dy->die_mark)
28444     return 1;
28445   byte_size1 = get_AT_unsigned (dx, DW_AT_byte_size);
28446   byte_size2 = get_AT_unsigned (dy, DW_AT_byte_size);
28447   if (byte_size1 < byte_size2)
28448     return 1;
28449   if (byte_size1 > byte_size2)
28450     return -1;
28451   encoding1 = get_AT_unsigned (dx, DW_AT_encoding);
28452   encoding2 = get_AT_unsigned (dy, DW_AT_encoding);
28453   if (encoding1 < encoding2)
28454     return 1;
28455   if (encoding1 > encoding2)
28456     return -1;
28457   align1 = get_AT_unsigned (dx, DW_AT_alignment);
28458   align2 = get_AT_unsigned (dy, DW_AT_alignment);
28459   if (align1 < align2)
28460     return 1;
28461   if (align1 > align2)
28462     return -1;
28463   return 0;
28464 }
28465
28466 /* Move base types marked by mark_base_types as early as possible
28467    in the CU, sorted by decreasing usage count both to make the
28468    uleb128 references as small as possible and to make sure they
28469    will have die_offset already computed by calc_die_sizes when
28470    sizes of typed stack loc ops is computed.  */
28471
28472 static void
28473 move_marked_base_types (void)
28474 {
28475   unsigned int i;
28476   dw_die_ref base_type, die, c;
28477
28478   if (base_types.is_empty ())
28479     return;
28480
28481   /* Sort by decreasing usage count, they will be added again in that
28482      order later on.  */
28483   base_types.qsort (base_type_cmp);
28484   die = comp_unit_die ();
28485   c = die->die_child;
28486   do
28487     {
28488       dw_die_ref prev = c;
28489       c = c->die_sib;
28490       while (c->die_mark)
28491         {
28492           remove_child_with_prev (c, prev);
28493           /* As base types got marked, there must be at least
28494              one node other than DW_TAG_base_type.  */
28495           gcc_assert (die->die_child != NULL);
28496           c = prev->die_sib;
28497         }
28498     }
28499   while (c != die->die_child);
28500   gcc_assert (die->die_child);
28501   c = die->die_child;
28502   for (i = 0; base_types.iterate (i, &base_type); i++)
28503     {
28504       base_type->die_mark = 0;
28505       base_type->die_sib = c->die_sib;
28506       c->die_sib = base_type;
28507       c = base_type;
28508     }
28509 }
28510
28511 /* Helper function for resolve_addr, attempt to resolve
28512    one CONST_STRING, return true if successful.  Similarly verify that
28513    SYMBOL_REFs refer to variables emitted in the current CU.  */
28514
28515 static bool
28516 resolve_one_addr (rtx *addr)
28517 {
28518   rtx rtl = *addr;
28519
28520   if (GET_CODE (rtl) == CONST_STRING)
28521     {
28522       size_t len = strlen (XSTR (rtl, 0)) + 1;
28523       tree t = build_string (len, XSTR (rtl, 0));
28524       tree tlen = size_int (len - 1);
28525       TREE_TYPE (t)
28526         = build_array_type (char_type_node, build_index_type (tlen));
28527       rtl = lookup_constant_def (t);
28528       if (!rtl || !MEM_P (rtl))
28529         return false;
28530       rtl = XEXP (rtl, 0);
28531       if (GET_CODE (rtl) == SYMBOL_REF
28532           && SYMBOL_REF_DECL (rtl)
28533           && !TREE_ASM_WRITTEN (SYMBOL_REF_DECL (rtl)))
28534         return false;
28535       vec_safe_push (used_rtx_array, rtl);
28536       *addr = rtl;
28537       return true;
28538     }
28539
28540   if (GET_CODE (rtl) == SYMBOL_REF
28541       && SYMBOL_REF_DECL (rtl))
28542     {
28543       if (TREE_CONSTANT_POOL_ADDRESS_P (rtl))
28544         {
28545           if (!TREE_ASM_WRITTEN (DECL_INITIAL (SYMBOL_REF_DECL (rtl))))
28546             return false;
28547         }
28548       else if (!TREE_ASM_WRITTEN (SYMBOL_REF_DECL (rtl)))
28549         return false;
28550     }
28551
28552   if (GET_CODE (rtl) == CONST)
28553     {
28554       subrtx_ptr_iterator::array_type array;
28555       FOR_EACH_SUBRTX_PTR (iter, array, &XEXP (rtl, 0), ALL)
28556         if (!resolve_one_addr (*iter))
28557           return false;
28558     }
28559
28560   return true;
28561 }
28562
28563 /* For STRING_CST, return SYMBOL_REF of its constant pool entry,
28564    if possible, and create DW_TAG_dwarf_procedure that can be referenced
28565    from DW_OP_implicit_pointer if the string hasn't been seen yet.  */
28566
28567 static rtx
28568 string_cst_pool_decl (tree t)
28569 {
28570   rtx rtl = output_constant_def (t, 1);
28571   unsigned char *array;
28572   dw_loc_descr_ref l;
28573   tree decl;
28574   size_t len;
28575   dw_die_ref ref;
28576
28577   if (!rtl || !MEM_P (rtl))
28578     return NULL_RTX;
28579   rtl = XEXP (rtl, 0);
28580   if (GET_CODE (rtl) != SYMBOL_REF
28581       || SYMBOL_REF_DECL (rtl) == NULL_TREE)
28582     return NULL_RTX;
28583
28584   decl = SYMBOL_REF_DECL (rtl);
28585   if (!lookup_decl_die (decl))
28586     {
28587       len = TREE_STRING_LENGTH (t);
28588       vec_safe_push (used_rtx_array, rtl);
28589       ref = new_die (DW_TAG_dwarf_procedure, comp_unit_die (), decl);
28590       array = ggc_vec_alloc<unsigned char> (len);
28591       memcpy (array, TREE_STRING_POINTER (t), len);
28592       l = new_loc_descr (DW_OP_implicit_value, len, 0);
28593       l->dw_loc_oprnd2.val_class = dw_val_class_vec;
28594       l->dw_loc_oprnd2.v.val_vec.length = len;
28595       l->dw_loc_oprnd2.v.val_vec.elt_size = 1;
28596       l->dw_loc_oprnd2.v.val_vec.array = array;
28597       add_AT_loc (ref, DW_AT_location, l);
28598       equate_decl_number_to_die (decl, ref);
28599     }
28600   return rtl;
28601 }
28602
28603 /* Helper function of resolve_addr_in_expr.  LOC is
28604    a DW_OP_addr followed by DW_OP_stack_value, either at the start
28605    of exprloc or after DW_OP_{,bit_}piece, and val_addr can't be
28606    resolved.  Replace it (both DW_OP_addr and DW_OP_stack_value)
28607    with DW_OP_implicit_pointer if possible
28608    and return true, if unsuccessful, return false.  */
28609
28610 static bool
28611 optimize_one_addr_into_implicit_ptr (dw_loc_descr_ref loc)
28612 {
28613   rtx rtl = loc->dw_loc_oprnd1.v.val_addr;
28614   HOST_WIDE_INT offset = 0;
28615   dw_die_ref ref = NULL;
28616   tree decl;
28617
28618   if (GET_CODE (rtl) == CONST
28619       && GET_CODE (XEXP (rtl, 0)) == PLUS
28620       && CONST_INT_P (XEXP (XEXP (rtl, 0), 1)))
28621     {
28622       offset = INTVAL (XEXP (XEXP (rtl, 0), 1));
28623       rtl = XEXP (XEXP (rtl, 0), 0);
28624     }
28625   if (GET_CODE (rtl) == CONST_STRING)
28626     {
28627       size_t len = strlen (XSTR (rtl, 0)) + 1;
28628       tree t = build_string (len, XSTR (rtl, 0));
28629       tree tlen = size_int (len - 1);
28630
28631       TREE_TYPE (t)
28632         = build_array_type (char_type_node, build_index_type (tlen));
28633       rtl = string_cst_pool_decl (t);
28634       if (!rtl)
28635         return false;
28636     }
28637   if (GET_CODE (rtl) == SYMBOL_REF && SYMBOL_REF_DECL (rtl))
28638     {
28639       decl = SYMBOL_REF_DECL (rtl);
28640       if (VAR_P (decl) && !DECL_EXTERNAL (decl))
28641         {
28642           ref = lookup_decl_die (decl);
28643           if (ref && (get_AT (ref, DW_AT_location)
28644                       || get_AT (ref, DW_AT_const_value)))
28645             {
28646               loc->dw_loc_opc = dwarf_OP (DW_OP_implicit_pointer);
28647               loc->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
28648               loc->dw_loc_oprnd1.val_entry = NULL;
28649               loc->dw_loc_oprnd1.v.val_die_ref.die = ref;
28650               loc->dw_loc_oprnd1.v.val_die_ref.external = 0;
28651               loc->dw_loc_next = loc->dw_loc_next->dw_loc_next;
28652               loc->dw_loc_oprnd2.v.val_int = offset;
28653               return true;
28654             }
28655         }
28656     }
28657   return false;
28658 }
28659
28660 /* Helper function for resolve_addr, handle one location
28661    expression, return false if at least one CONST_STRING or SYMBOL_REF in
28662    the location list couldn't be resolved.  */
28663
28664 static bool
28665 resolve_addr_in_expr (dw_attr_node *a, dw_loc_descr_ref loc)
28666 {
28667   dw_loc_descr_ref keep = NULL;
28668   for (dw_loc_descr_ref prev = NULL; loc; prev = loc, loc = loc->dw_loc_next)
28669     switch (loc->dw_loc_opc)
28670       {
28671       case DW_OP_addr:
28672         if (!resolve_one_addr (&loc->dw_loc_oprnd1.v.val_addr))
28673           {
28674             if ((prev == NULL
28675                  || prev->dw_loc_opc == DW_OP_piece
28676                  || prev->dw_loc_opc == DW_OP_bit_piece)
28677                 && loc->dw_loc_next
28678                 && loc->dw_loc_next->dw_loc_opc == DW_OP_stack_value
28679                 && (!dwarf_strict || dwarf_version >= 5)
28680                 && optimize_one_addr_into_implicit_ptr (loc))
28681               break;
28682             return false;
28683           }
28684         break;
28685       case DW_OP_GNU_addr_index:
28686       case DW_OP_GNU_const_index:
28687         if (loc->dw_loc_opc == DW_OP_GNU_addr_index
28688             || (loc->dw_loc_opc == DW_OP_GNU_const_index && loc->dtprel))
28689           {
28690             rtx rtl = loc->dw_loc_oprnd1.val_entry->addr.rtl;
28691             if (!resolve_one_addr (&rtl))
28692               return false;
28693             remove_addr_table_entry (loc->dw_loc_oprnd1.val_entry);
28694             loc->dw_loc_oprnd1.val_entry
28695               = add_addr_table_entry (rtl, ate_kind_rtx);
28696           }
28697         break;
28698       case DW_OP_const4u:
28699       case DW_OP_const8u:
28700         if (loc->dtprel
28701             && !resolve_one_addr (&loc->dw_loc_oprnd1.v.val_addr))
28702           return false;
28703         break;
28704       case DW_OP_plus_uconst:
28705         if (size_of_loc_descr (loc)
28706             > size_of_int_loc_descriptor (loc->dw_loc_oprnd1.v.val_unsigned)
28707               + 1
28708             && loc->dw_loc_oprnd1.v.val_unsigned > 0)
28709           {
28710             dw_loc_descr_ref repl
28711               = int_loc_descriptor (loc->dw_loc_oprnd1.v.val_unsigned);
28712             add_loc_descr (&repl, new_loc_descr (DW_OP_plus, 0, 0));
28713             add_loc_descr (&repl, loc->dw_loc_next);
28714             *loc = *repl;
28715           }
28716         break;
28717       case DW_OP_implicit_value:
28718         if (loc->dw_loc_oprnd2.val_class == dw_val_class_addr
28719             && !resolve_one_addr (&loc->dw_loc_oprnd2.v.val_addr))
28720           return false;
28721         break;
28722       case DW_OP_implicit_pointer:
28723       case DW_OP_GNU_implicit_pointer:
28724       case DW_OP_GNU_parameter_ref:
28725       case DW_OP_GNU_variable_value:
28726         if (loc->dw_loc_oprnd1.val_class == dw_val_class_decl_ref)
28727           {
28728             dw_die_ref ref
28729               = lookup_decl_die (loc->dw_loc_oprnd1.v.val_decl_ref);
28730             if (ref == NULL)
28731               return false;
28732             loc->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
28733             loc->dw_loc_oprnd1.v.val_die_ref.die = ref;
28734             loc->dw_loc_oprnd1.v.val_die_ref.external = 0;
28735           }
28736         if (loc->dw_loc_opc == DW_OP_GNU_variable_value)
28737           {
28738             if (prev == NULL
28739                 && loc->dw_loc_next == NULL
28740                 && AT_class (a) == dw_val_class_loc)
28741               switch (a->dw_attr)
28742                 {
28743                   /* Following attributes allow both exprloc and reference,
28744                      so if the whole expression is DW_OP_GNU_variable_value
28745                      alone we could transform it into reference.  */
28746                 case DW_AT_byte_size:
28747                 case DW_AT_bit_size:
28748                 case DW_AT_lower_bound:
28749                 case DW_AT_upper_bound:
28750                 case DW_AT_bit_stride:
28751                 case DW_AT_count:
28752                 case DW_AT_allocated:
28753                 case DW_AT_associated:
28754                 case DW_AT_byte_stride:
28755                   a->dw_attr_val.val_class = dw_val_class_die_ref;
28756                   a->dw_attr_val.val_entry = NULL;
28757                   a->dw_attr_val.v.val_die_ref.die
28758                     = loc->dw_loc_oprnd1.v.val_die_ref.die;
28759                   a->dw_attr_val.v.val_die_ref.external = 0;
28760                   return true;
28761                 default:
28762                   break;
28763                 }
28764             if (dwarf_strict)
28765               return false;
28766           }
28767         break;
28768       case DW_OP_const_type:
28769       case DW_OP_regval_type:
28770       case DW_OP_deref_type:
28771       case DW_OP_convert:
28772       case DW_OP_reinterpret:
28773       case DW_OP_GNU_const_type:
28774       case DW_OP_GNU_regval_type:
28775       case DW_OP_GNU_deref_type:
28776       case DW_OP_GNU_convert:
28777       case DW_OP_GNU_reinterpret:
28778         while (loc->dw_loc_next
28779                && (loc->dw_loc_next->dw_loc_opc == DW_OP_convert
28780                    || loc->dw_loc_next->dw_loc_opc == DW_OP_GNU_convert))
28781           {
28782             dw_die_ref base1, base2;
28783             unsigned enc1, enc2, size1, size2;
28784             if (loc->dw_loc_opc == DW_OP_regval_type
28785                 || loc->dw_loc_opc == DW_OP_deref_type
28786                 || loc->dw_loc_opc == DW_OP_GNU_regval_type
28787                 || loc->dw_loc_opc == DW_OP_GNU_deref_type)
28788               base1 = loc->dw_loc_oprnd2.v.val_die_ref.die;
28789             else if (loc->dw_loc_oprnd1.val_class
28790                      == dw_val_class_unsigned_const)
28791               break;
28792             else
28793               base1 = loc->dw_loc_oprnd1.v.val_die_ref.die;
28794             if (loc->dw_loc_next->dw_loc_oprnd1.val_class
28795                 == dw_val_class_unsigned_const)
28796               break;
28797             base2 = loc->dw_loc_next->dw_loc_oprnd1.v.val_die_ref.die;
28798             gcc_assert (base1->die_tag == DW_TAG_base_type
28799                         && base2->die_tag == DW_TAG_base_type);
28800             enc1 = get_AT_unsigned (base1, DW_AT_encoding);
28801             enc2 = get_AT_unsigned (base2, DW_AT_encoding);
28802             size1 = get_AT_unsigned (base1, DW_AT_byte_size);
28803             size2 = get_AT_unsigned (base2, DW_AT_byte_size);
28804             if (size1 == size2
28805                 && (((enc1 == DW_ATE_unsigned || enc1 == DW_ATE_signed)
28806                      && (enc2 == DW_ATE_unsigned || enc2 == DW_ATE_signed)
28807                      && loc != keep)
28808                     || enc1 == enc2))
28809               {
28810                 /* Optimize away next DW_OP_convert after
28811                    adjusting LOC's base type die reference.  */
28812                 if (loc->dw_loc_opc == DW_OP_regval_type
28813                     || loc->dw_loc_opc == DW_OP_deref_type
28814                     || loc->dw_loc_opc == DW_OP_GNU_regval_type
28815                     || loc->dw_loc_opc == DW_OP_GNU_deref_type)
28816                   loc->dw_loc_oprnd2.v.val_die_ref.die = base2;
28817                 else
28818                   loc->dw_loc_oprnd1.v.val_die_ref.die = base2;
28819                 loc->dw_loc_next = loc->dw_loc_next->dw_loc_next;
28820                 continue;
28821               }
28822             /* Don't change integer DW_OP_convert after e.g. floating
28823                point typed stack entry.  */
28824             else if (enc1 != DW_ATE_unsigned && enc1 != DW_ATE_signed)
28825               keep = loc->dw_loc_next;
28826             break;
28827           }
28828         break;
28829       default:
28830         break;
28831       }
28832   return true;
28833 }
28834
28835 /* Helper function of resolve_addr.  DIE had DW_AT_location of
28836    DW_OP_addr alone, which referred to DECL in DW_OP_addr's operand
28837    and DW_OP_addr couldn't be resolved.  resolve_addr has already
28838    removed the DW_AT_location attribute.  This function attempts to
28839    add a new DW_AT_location attribute with DW_OP_implicit_pointer
28840    to it or DW_AT_const_value attribute, if possible.  */
28841
28842 static void
28843 optimize_location_into_implicit_ptr (dw_die_ref die, tree decl)
28844 {
28845   if (!VAR_P (decl)
28846       || lookup_decl_die (decl) != die
28847       || DECL_EXTERNAL (decl)
28848       || !TREE_STATIC (decl)
28849       || DECL_INITIAL (decl) == NULL_TREE
28850       || DECL_P (DECL_INITIAL (decl))
28851       || get_AT (die, DW_AT_const_value))
28852     return;
28853
28854   tree init = DECL_INITIAL (decl);
28855   HOST_WIDE_INT offset = 0;
28856   /* For variables that have been optimized away and thus
28857      don't have a memory location, see if we can emit
28858      DW_AT_const_value instead.  */
28859   if (tree_add_const_value_attribute (die, init))
28860     return;
28861   if (dwarf_strict && dwarf_version < 5)
28862     return;
28863   /* If init is ADDR_EXPR or POINTER_PLUS_EXPR of ADDR_EXPR,
28864      and ADDR_EXPR refers to a decl that has DW_AT_location or
28865      DW_AT_const_value (but isn't addressable, otherwise
28866      resolving the original DW_OP_addr wouldn't fail), see if
28867      we can add DW_OP_implicit_pointer.  */
28868   STRIP_NOPS (init);
28869   if (TREE_CODE (init) == POINTER_PLUS_EXPR
28870       && tree_fits_shwi_p (TREE_OPERAND (init, 1)))
28871     {
28872       offset = tree_to_shwi (TREE_OPERAND (init, 1));
28873       init = TREE_OPERAND (init, 0);
28874       STRIP_NOPS (init);
28875     }
28876   if (TREE_CODE (init) != ADDR_EXPR)
28877     return;
28878   if ((TREE_CODE (TREE_OPERAND (init, 0)) == STRING_CST
28879        && !TREE_ASM_WRITTEN (TREE_OPERAND (init, 0)))
28880       || (TREE_CODE (TREE_OPERAND (init, 0)) == VAR_DECL
28881           && !DECL_EXTERNAL (TREE_OPERAND (init, 0))
28882           && TREE_OPERAND (init, 0) != decl))
28883     {
28884       dw_die_ref ref;
28885       dw_loc_descr_ref l;
28886
28887       if (TREE_CODE (TREE_OPERAND (init, 0)) == STRING_CST)
28888         {
28889           rtx rtl = string_cst_pool_decl (TREE_OPERAND (init, 0));
28890           if (!rtl)
28891             return;
28892           decl = SYMBOL_REF_DECL (rtl);
28893         }
28894       else
28895         decl = TREE_OPERAND (init, 0);
28896       ref = lookup_decl_die (decl);
28897       if (ref == NULL
28898           || (!get_AT (ref, DW_AT_location)
28899               && !get_AT (ref, DW_AT_const_value)))
28900         return;
28901       l = new_loc_descr (dwarf_OP (DW_OP_implicit_pointer), 0, offset);
28902       l->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
28903       l->dw_loc_oprnd1.v.val_die_ref.die = ref;
28904       l->dw_loc_oprnd1.v.val_die_ref.external = 0;
28905       add_AT_loc (die, DW_AT_location, l);
28906     }
28907 }
28908
28909 /* Return NULL if l is a DWARF expression, or first op that is not
28910    valid DWARF expression.  */
28911
28912 static dw_loc_descr_ref
28913 non_dwarf_expression (dw_loc_descr_ref l)
28914 {
28915   while (l)
28916     {
28917       if (l->dw_loc_opc >= DW_OP_reg0 && l->dw_loc_opc <= DW_OP_reg31)
28918         return l;
28919       switch (l->dw_loc_opc)
28920         {
28921         case DW_OP_regx:
28922         case DW_OP_implicit_value:
28923         case DW_OP_stack_value:
28924         case DW_OP_implicit_pointer:
28925         case DW_OP_GNU_implicit_pointer:
28926         case DW_OP_GNU_parameter_ref:
28927         case DW_OP_piece:
28928         case DW_OP_bit_piece:
28929           return l;
28930         default:
28931           break;
28932         }
28933       l = l->dw_loc_next;
28934     }
28935   return NULL;
28936 }
28937
28938 /* Return adjusted copy of EXPR:
28939    If it is empty DWARF expression, return it.
28940    If it is valid non-empty DWARF expression,
28941    return copy of EXPR with DW_OP_deref appended to it.
28942    If it is DWARF expression followed by DW_OP_reg{N,x}, return
28943    copy of the DWARF expression with DW_OP_breg{N,x} <0> appended.
28944    If it is DWARF expression followed by DW_OP_stack_value, return
28945    copy of the DWARF expression without anything appended.
28946    Otherwise, return NULL.  */
28947
28948 static dw_loc_descr_ref
28949 copy_deref_exprloc (dw_loc_descr_ref expr)
28950 {
28951   dw_loc_descr_ref tail = NULL;
28952
28953   if (expr == NULL)
28954     return NULL;
28955
28956   dw_loc_descr_ref l = non_dwarf_expression (expr);
28957   if (l && l->dw_loc_next)
28958     return NULL;
28959
28960   if (l)
28961     {
28962       if (l->dw_loc_opc >= DW_OP_reg0 && l->dw_loc_opc <= DW_OP_reg31)
28963         tail = new_loc_descr ((enum dwarf_location_atom)
28964                               (DW_OP_breg0 + (l->dw_loc_opc - DW_OP_reg0)),
28965                               0, 0);
28966       else
28967         switch (l->dw_loc_opc)
28968           {
28969           case DW_OP_regx:
28970             tail = new_loc_descr (DW_OP_bregx,
28971                                   l->dw_loc_oprnd1.v.val_unsigned, 0);
28972             break;
28973           case DW_OP_stack_value:
28974             break;
28975           default:
28976             return NULL;
28977           }
28978     }
28979   else
28980     tail = new_loc_descr (DW_OP_deref, 0, 0);
28981
28982   dw_loc_descr_ref ret = NULL, *p = &ret;
28983   while (expr != l)
28984     {
28985       *p = new_loc_descr (expr->dw_loc_opc, 0, 0);
28986       (*p)->dw_loc_oprnd1 = expr->dw_loc_oprnd1;
28987       (*p)->dw_loc_oprnd2 = expr->dw_loc_oprnd2;
28988       p = &(*p)->dw_loc_next;
28989       expr = expr->dw_loc_next;
28990     }
28991   *p = tail;
28992   return ret;
28993 }
28994
28995 /* For DW_AT_string_length attribute with DW_OP_GNU_variable_value
28996    reference to a variable or argument, adjust it if needed and return:
28997    -1 if the DW_AT_string_length attribute and DW_AT_{string_length_,}byte_size
28998       attribute if present should be removed
28999    0 keep the attribute perhaps with minor modifications, no need to rescan
29000    1 if the attribute has been successfully adjusted.  */
29001
29002 static int
29003 optimize_string_length (dw_attr_node *a)
29004 {
29005   dw_loc_descr_ref l = AT_loc (a), lv;
29006   dw_die_ref die;
29007   if (l->dw_loc_oprnd1.val_class == dw_val_class_decl_ref)
29008     {
29009       tree decl = l->dw_loc_oprnd1.v.val_decl_ref;
29010       die = lookup_decl_die (decl);
29011       if (die)
29012         {
29013           l->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
29014           l->dw_loc_oprnd1.v.val_die_ref.die = die;
29015           l->dw_loc_oprnd1.v.val_die_ref.external = 0;
29016         }
29017       else
29018         return -1;
29019     }
29020   else
29021     die = l->dw_loc_oprnd1.v.val_die_ref.die;
29022
29023   /* DWARF5 allows reference class, so we can then reference the DIE.
29024      Only do this for DW_OP_GNU_variable_value DW_OP_stack_value.  */
29025   if (l->dw_loc_next != NULL && dwarf_version >= 5)
29026     {
29027       a->dw_attr_val.val_class = dw_val_class_die_ref;
29028       a->dw_attr_val.val_entry = NULL;
29029       a->dw_attr_val.v.val_die_ref.die = die;
29030       a->dw_attr_val.v.val_die_ref.external = 0;
29031       return 0;
29032     }
29033
29034   dw_attr_node *av = get_AT (die, DW_AT_location);
29035   dw_loc_list_ref d;
29036   bool non_dwarf_expr = false;
29037
29038   if (av == NULL)
29039     return dwarf_strict ? -1 : 0;
29040   switch (AT_class (av))
29041     {
29042     case dw_val_class_loc_list:
29043       for (d = AT_loc_list (av); d != NULL; d = d->dw_loc_next)
29044         if (d->expr && non_dwarf_expression (d->expr))
29045           non_dwarf_expr = true;
29046       break;
29047     case dw_val_class_loc:
29048       lv = AT_loc (av);
29049       if (lv == NULL)
29050         return dwarf_strict ? -1 : 0;
29051       if (non_dwarf_expression (lv))
29052         non_dwarf_expr = true;
29053       break;
29054     default:
29055       return dwarf_strict ? -1 : 0;
29056     }
29057
29058   /* If it is safe to transform DW_OP_GNU_variable_value DW_OP_stack_value
29059      into DW_OP_call4  or DW_OP_GNU_variable_value into
29060      DW_OP_call4 DW_OP_deref, do so.  */
29061   if (!non_dwarf_expr
29062       && (l->dw_loc_next != NULL || AT_class (av) == dw_val_class_loc))
29063     {
29064       l->dw_loc_opc = DW_OP_call4;
29065       if (l->dw_loc_next)
29066         l->dw_loc_next = NULL;
29067       else
29068         l->dw_loc_next = new_loc_descr (DW_OP_deref, 0, 0);
29069       return 0;
29070     }
29071
29072   /* For DW_OP_GNU_variable_value DW_OP_stack_value, we can just
29073      copy over the DW_AT_location attribute from die to a.  */
29074   if (l->dw_loc_next != NULL)
29075     {
29076       a->dw_attr_val = av->dw_attr_val;
29077       return 1;
29078     }
29079
29080   dw_loc_list_ref list, *p;
29081   switch (AT_class (av))
29082     {
29083     case dw_val_class_loc_list:
29084       p = &list;
29085       list = NULL;
29086       for (d = AT_loc_list (av); d != NULL; d = d->dw_loc_next)
29087         {
29088           lv = copy_deref_exprloc (d->expr);
29089           if (lv)
29090             {
29091               *p = new_loc_list (lv, d->begin, d->end, d->section);
29092               p = &(*p)->dw_loc_next;
29093             }
29094           else if (!dwarf_strict && d->expr)
29095             return 0;
29096         }
29097       if (list == NULL)
29098         return dwarf_strict ? -1 : 0;
29099       a->dw_attr_val.val_class = dw_val_class_loc_list;
29100       gen_llsym (list);
29101       *AT_loc_list_ptr (a) = list;
29102       return 1;
29103     case dw_val_class_loc:
29104       lv = copy_deref_exprloc (AT_loc (av));
29105       if (lv == NULL)
29106         return dwarf_strict ? -1 : 0;
29107       a->dw_attr_val.v.val_loc = lv;
29108       return 1;
29109     default:
29110       gcc_unreachable ();
29111     }
29112 }
29113
29114 /* Resolve DW_OP_addr and DW_AT_const_value CONST_STRING arguments to
29115    an address in .rodata section if the string literal is emitted there,
29116    or remove the containing location list or replace DW_AT_const_value
29117    with DW_AT_location and empty location expression, if it isn't found
29118    in .rodata.  Similarly for SYMBOL_REFs, keep only those that refer
29119    to something that has been emitted in the current CU.  */
29120
29121 static void
29122 resolve_addr (dw_die_ref die)
29123 {
29124   dw_die_ref c;
29125   dw_attr_node *a;
29126   dw_loc_list_ref *curr, *start, loc;
29127   unsigned ix;
29128   bool remove_AT_byte_size = false;
29129
29130   FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
29131     switch (AT_class (a))
29132       {
29133       case dw_val_class_loc_list:
29134         start = curr = AT_loc_list_ptr (a);
29135         loc = *curr;
29136         gcc_assert (loc);
29137         /* The same list can be referenced more than once.  See if we have
29138            already recorded the result from a previous pass.  */
29139         if (loc->replaced)
29140           *curr = loc->dw_loc_next;
29141         else if (!loc->resolved_addr)
29142           {
29143             /* As things stand, we do not expect or allow one die to
29144                reference a suffix of another die's location list chain.
29145                References must be identical or completely separate.
29146                There is therefore no need to cache the result of this
29147                pass on any list other than the first; doing so
29148                would lead to unnecessary writes.  */
29149             while (*curr)
29150               {
29151                 gcc_assert (!(*curr)->replaced && !(*curr)->resolved_addr);
29152                 if (!resolve_addr_in_expr (a, (*curr)->expr))
29153                   {
29154                     dw_loc_list_ref next = (*curr)->dw_loc_next;
29155                     dw_loc_descr_ref l = (*curr)->expr;
29156
29157                     if (next && (*curr)->ll_symbol)
29158                       {
29159                         gcc_assert (!next->ll_symbol);
29160                         next->ll_symbol = (*curr)->ll_symbol;
29161                       }
29162                     if (dwarf_split_debug_info)
29163                       remove_loc_list_addr_table_entries (l);
29164                     *curr = next;
29165                   }
29166                 else
29167                   {
29168                     mark_base_types ((*curr)->expr);
29169                     curr = &(*curr)->dw_loc_next;
29170                   }
29171               }
29172             if (loc == *start)
29173               loc->resolved_addr = 1;
29174             else
29175               {
29176                 loc->replaced = 1;
29177                 loc->dw_loc_next = *start;
29178               }
29179           }
29180         if (!*start)
29181           {
29182             remove_AT (die, a->dw_attr);
29183             ix--;
29184           }
29185         break;
29186       case dw_val_class_loc:
29187         {
29188           dw_loc_descr_ref l = AT_loc (a);
29189           /* DW_OP_GNU_variable_value DW_OP_stack_value or
29190              DW_OP_GNU_variable_value in DW_AT_string_length can be converted
29191              into DW_OP_call4 or DW_OP_call4 DW_OP_deref, which is standard
29192              DWARF4 unlike DW_OP_GNU_variable_value.  Or for DWARF5
29193              DW_OP_GNU_variable_value DW_OP_stack_value can be replaced
29194              with DW_FORM_ref referencing the same DIE as
29195              DW_OP_GNU_variable_value used to reference.  */
29196           if (a->dw_attr == DW_AT_string_length
29197               && l
29198               && l->dw_loc_opc == DW_OP_GNU_variable_value
29199               && (l->dw_loc_next == NULL
29200                   || (l->dw_loc_next->dw_loc_next == NULL
29201                       && l->dw_loc_next->dw_loc_opc == DW_OP_stack_value)))
29202             {
29203               switch (optimize_string_length (a))
29204                 {
29205                 case -1:
29206                   remove_AT (die, a->dw_attr);
29207                   ix--;
29208                   /* If we drop DW_AT_string_length, we need to drop also
29209                      DW_AT_{string_length_,}byte_size.  */
29210                   remove_AT_byte_size = true;
29211                   continue;
29212                 default:
29213                   break;
29214                 case 1:
29215                   /* Even if we keep the optimized DW_AT_string_length,
29216                      it might have changed AT_class, so process it again.  */
29217                   ix--;
29218                   continue;
29219                 }
29220             }
29221           /* For -gdwarf-2 don't attempt to optimize
29222              DW_AT_data_member_location containing
29223              DW_OP_plus_uconst - older consumers might
29224              rely on it being that op instead of a more complex,
29225              but shorter, location description.  */
29226           if ((dwarf_version > 2
29227                || a->dw_attr != DW_AT_data_member_location
29228                || l == NULL
29229                || l->dw_loc_opc != DW_OP_plus_uconst
29230                || l->dw_loc_next != NULL)
29231               && !resolve_addr_in_expr (a, l))
29232             {
29233               if (dwarf_split_debug_info)
29234                 remove_loc_list_addr_table_entries (l);
29235               if (l != NULL
29236                   && l->dw_loc_next == NULL
29237                   && l->dw_loc_opc == DW_OP_addr
29238                   && GET_CODE (l->dw_loc_oprnd1.v.val_addr) == SYMBOL_REF
29239                   && SYMBOL_REF_DECL (l->dw_loc_oprnd1.v.val_addr)
29240                   && a->dw_attr == DW_AT_location)
29241                 {
29242                   tree decl = SYMBOL_REF_DECL (l->dw_loc_oprnd1.v.val_addr);
29243                   remove_AT (die, a->dw_attr);
29244                   ix--;
29245                   optimize_location_into_implicit_ptr (die, decl);
29246                   break;
29247                 }
29248               if (a->dw_attr == DW_AT_string_length)
29249                 /* If we drop DW_AT_string_length, we need to drop also
29250                    DW_AT_{string_length_,}byte_size.  */
29251                 remove_AT_byte_size = true;
29252               remove_AT (die, a->dw_attr);
29253               ix--;
29254             }
29255           else
29256             mark_base_types (l);
29257         }
29258         break;
29259       case dw_val_class_addr:
29260         if (a->dw_attr == DW_AT_const_value
29261             && !resolve_one_addr (&a->dw_attr_val.v.val_addr))
29262           {
29263             if (AT_index (a) != NOT_INDEXED)
29264               remove_addr_table_entry (a->dw_attr_val.val_entry);
29265             remove_AT (die, a->dw_attr);
29266             ix--;
29267           }
29268         if ((die->die_tag == DW_TAG_call_site
29269              && a->dw_attr == DW_AT_call_origin)
29270             || (die->die_tag == DW_TAG_GNU_call_site
29271                 && a->dw_attr == DW_AT_abstract_origin))
29272           {
29273             tree tdecl = SYMBOL_REF_DECL (a->dw_attr_val.v.val_addr);
29274             dw_die_ref tdie = lookup_decl_die (tdecl);
29275             dw_die_ref cdie;
29276             if (tdie == NULL
29277                 && DECL_EXTERNAL (tdecl)
29278                 && DECL_ABSTRACT_ORIGIN (tdecl) == NULL_TREE
29279                 && (cdie = lookup_context_die (DECL_CONTEXT (tdecl))))
29280               {
29281                 dw_die_ref pdie = cdie;
29282                 /* Make sure we don't add these DIEs into type units.
29283                    We could emit skeleton DIEs for context (namespaces,
29284                    outer structs/classes) and a skeleton DIE for the
29285                    innermost context with DW_AT_signature pointing to the
29286                    type unit.  See PR78835.  */
29287                 while (pdie && pdie->die_tag != DW_TAG_type_unit)
29288                   pdie = pdie->die_parent;
29289                 if (pdie == NULL)
29290                   {
29291                     /* Creating a full DIE for tdecl is overly expensive and
29292                        at this point even wrong when in the LTO phase
29293                        as it can end up generating new type DIEs we didn't
29294                        output and thus optimize_external_refs will crash.  */
29295                     tdie = new_die (DW_TAG_subprogram, cdie, NULL_TREE);
29296                     add_AT_flag (tdie, DW_AT_external, 1);
29297                     add_AT_flag (tdie, DW_AT_declaration, 1);
29298                     add_linkage_attr (tdie, tdecl);
29299                     add_name_and_src_coords_attributes (tdie, tdecl, true);
29300                     equate_decl_number_to_die (tdecl, tdie);
29301                   }
29302               }
29303             if (tdie)
29304               {
29305                 a->dw_attr_val.val_class = dw_val_class_die_ref;
29306                 a->dw_attr_val.v.val_die_ref.die = tdie;
29307                 a->dw_attr_val.v.val_die_ref.external = 0;
29308               }
29309             else
29310               {
29311                 if (AT_index (a) != NOT_INDEXED)
29312                   remove_addr_table_entry (a->dw_attr_val.val_entry);
29313                 remove_AT (die, a->dw_attr);
29314                 ix--;
29315               }
29316           }
29317         break;
29318       default:
29319         break;
29320       }
29321
29322   if (remove_AT_byte_size)
29323     remove_AT (die, dwarf_version >= 5
29324                     ? DW_AT_string_length_byte_size
29325                     : DW_AT_byte_size);
29326
29327   FOR_EACH_CHILD (die, c, resolve_addr (c));
29328 }
29329 \f
29330 /* Helper routines for optimize_location_lists.
29331    This pass tries to share identical local lists in .debug_loc
29332    section.  */
29333
29334 /* Iteratively hash operands of LOC opcode into HSTATE.  */
29335
29336 static void
29337 hash_loc_operands (dw_loc_descr_ref loc, inchash::hash &hstate)
29338 {
29339   dw_val_ref val1 = &loc->dw_loc_oprnd1;
29340   dw_val_ref val2 = &loc->dw_loc_oprnd2;
29341
29342   switch (loc->dw_loc_opc)
29343     {
29344     case DW_OP_const4u:
29345     case DW_OP_const8u:
29346       if (loc->dtprel)
29347         goto hash_addr;
29348       /* FALLTHRU */
29349     case DW_OP_const1u:
29350     case DW_OP_const1s:
29351     case DW_OP_const2u:
29352     case DW_OP_const2s:
29353     case DW_OP_const4s:
29354     case DW_OP_const8s:
29355     case DW_OP_constu:
29356     case DW_OP_consts:
29357     case DW_OP_pick:
29358     case DW_OP_plus_uconst:
29359     case DW_OP_breg0:
29360     case DW_OP_breg1:
29361     case DW_OP_breg2:
29362     case DW_OP_breg3:
29363     case DW_OP_breg4:
29364     case DW_OP_breg5:
29365     case DW_OP_breg6:
29366     case DW_OP_breg7:
29367     case DW_OP_breg8:
29368     case DW_OP_breg9:
29369     case DW_OP_breg10:
29370     case DW_OP_breg11:
29371     case DW_OP_breg12:
29372     case DW_OP_breg13:
29373     case DW_OP_breg14:
29374     case DW_OP_breg15:
29375     case DW_OP_breg16:
29376     case DW_OP_breg17:
29377     case DW_OP_breg18:
29378     case DW_OP_breg19:
29379     case DW_OP_breg20:
29380     case DW_OP_breg21:
29381     case DW_OP_breg22:
29382     case DW_OP_breg23:
29383     case DW_OP_breg24:
29384     case DW_OP_breg25:
29385     case DW_OP_breg26:
29386     case DW_OP_breg27:
29387     case DW_OP_breg28:
29388     case DW_OP_breg29:
29389     case DW_OP_breg30:
29390     case DW_OP_breg31:
29391     case DW_OP_regx:
29392     case DW_OP_fbreg:
29393     case DW_OP_piece:
29394     case DW_OP_deref_size:
29395     case DW_OP_xderef_size:
29396       hstate.add_object (val1->v.val_int);
29397       break;
29398     case DW_OP_skip:
29399     case DW_OP_bra:
29400       {
29401         int offset;
29402
29403         gcc_assert (val1->val_class == dw_val_class_loc);
29404         offset = val1->v.val_loc->dw_loc_addr - (loc->dw_loc_addr + 3);
29405         hstate.add_object (offset);
29406       }
29407       break;
29408     case DW_OP_implicit_value:
29409       hstate.add_object (val1->v.val_unsigned);
29410       switch (val2->val_class)
29411         {
29412         case dw_val_class_const:
29413           hstate.add_object (val2->v.val_int);
29414           break;
29415         case dw_val_class_vec:
29416           {
29417             unsigned int elt_size = val2->v.val_vec.elt_size;
29418             unsigned int len = val2->v.val_vec.length;
29419
29420             hstate.add_int (elt_size);
29421             hstate.add_int (len);
29422             hstate.add (val2->v.val_vec.array, len * elt_size);
29423           }
29424           break;
29425         case dw_val_class_const_double:
29426           hstate.add_object (val2->v.val_double.low);
29427           hstate.add_object (val2->v.val_double.high);
29428           break;
29429         case dw_val_class_wide_int:
29430           hstate.add (val2->v.val_wide->get_val (),
29431                       get_full_len (*val2->v.val_wide)
29432                       * HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR);
29433           break;
29434         case dw_val_class_addr: 
29435           inchash::add_rtx (val2->v.val_addr, hstate);
29436           break;
29437         default:
29438           gcc_unreachable ();
29439         }
29440       break;
29441     case DW_OP_bregx:
29442     case DW_OP_bit_piece:
29443       hstate.add_object (val1->v.val_int);
29444       hstate.add_object (val2->v.val_int);
29445       break;
29446     case DW_OP_addr:
29447     hash_addr:
29448       if (loc->dtprel)
29449         {
29450           unsigned char dtprel = 0xd1;
29451           hstate.add_object (dtprel);
29452         }
29453       inchash::add_rtx (val1->v.val_addr, hstate);
29454       break;
29455     case DW_OP_GNU_addr_index:
29456     case DW_OP_GNU_const_index:
29457       {
29458         if (loc->dtprel)
29459           {
29460             unsigned char dtprel = 0xd1;
29461             hstate.add_object (dtprel);
29462           }
29463         inchash::add_rtx (val1->val_entry->addr.rtl, hstate);
29464       }
29465       break;
29466     case DW_OP_implicit_pointer:
29467     case DW_OP_GNU_implicit_pointer:
29468       hstate.add_int (val2->v.val_int);
29469       break;
29470     case DW_OP_entry_value:
29471     case DW_OP_GNU_entry_value:
29472       hstate.add_object (val1->v.val_loc);
29473       break;
29474     case DW_OP_regval_type:
29475     case DW_OP_deref_type:
29476     case DW_OP_GNU_regval_type:
29477     case DW_OP_GNU_deref_type:
29478       {
29479         unsigned int byte_size
29480           = get_AT_unsigned (val2->v.val_die_ref.die, DW_AT_byte_size);
29481         unsigned int encoding
29482           = get_AT_unsigned (val2->v.val_die_ref.die, DW_AT_encoding);
29483         hstate.add_object (val1->v.val_int);
29484         hstate.add_object (byte_size);
29485         hstate.add_object (encoding);
29486       }
29487       break;
29488     case DW_OP_convert:
29489     case DW_OP_reinterpret:
29490     case DW_OP_GNU_convert:
29491     case DW_OP_GNU_reinterpret:
29492       if (val1->val_class == dw_val_class_unsigned_const)
29493         {
29494           hstate.add_object (val1->v.val_unsigned);
29495           break;
29496         }
29497       /* FALLTHRU */
29498     case DW_OP_const_type:
29499     case DW_OP_GNU_const_type:
29500       {
29501         unsigned int byte_size
29502           = get_AT_unsigned (val1->v.val_die_ref.die, DW_AT_byte_size);
29503         unsigned int encoding
29504           = get_AT_unsigned (val1->v.val_die_ref.die, DW_AT_encoding);
29505         hstate.add_object (byte_size);
29506         hstate.add_object (encoding);
29507         if (loc->dw_loc_opc != DW_OP_const_type
29508             && loc->dw_loc_opc != DW_OP_GNU_const_type)
29509           break;
29510         hstate.add_object (val2->val_class);
29511         switch (val2->val_class)
29512           {
29513           case dw_val_class_const:
29514             hstate.add_object (val2->v.val_int);
29515             break;
29516           case dw_val_class_vec:
29517             {
29518               unsigned int elt_size = val2->v.val_vec.elt_size;
29519               unsigned int len = val2->v.val_vec.length;
29520
29521               hstate.add_object (elt_size);
29522               hstate.add_object (len);
29523               hstate.add (val2->v.val_vec.array, len * elt_size);
29524             }
29525             break;
29526           case dw_val_class_const_double:
29527             hstate.add_object (val2->v.val_double.low);
29528             hstate.add_object (val2->v.val_double.high);
29529             break;
29530           case dw_val_class_wide_int:
29531             hstate.add (val2->v.val_wide->get_val (),
29532                         get_full_len (*val2->v.val_wide)
29533                         * HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR);
29534             break;
29535           default:
29536             gcc_unreachable ();
29537           }
29538       }
29539       break;
29540
29541     default:
29542       /* Other codes have no operands.  */
29543       break;
29544     }
29545 }
29546
29547 /* Iteratively hash the whole DWARF location expression LOC into HSTATE.  */
29548
29549 static inline void
29550 hash_locs (dw_loc_descr_ref loc, inchash::hash &hstate)
29551 {
29552   dw_loc_descr_ref l;
29553   bool sizes_computed = false;
29554   /* Compute sizes, so that DW_OP_skip/DW_OP_bra can be checksummed.  */
29555   size_of_locs (loc);
29556
29557   for (l = loc; l != NULL; l = l->dw_loc_next)
29558     {
29559       enum dwarf_location_atom opc = l->dw_loc_opc;
29560       hstate.add_object (opc);
29561       if ((opc == DW_OP_skip || opc == DW_OP_bra) && !sizes_computed)
29562         {
29563           size_of_locs (loc);
29564           sizes_computed = true;
29565         }
29566       hash_loc_operands (l, hstate);
29567     }
29568 }
29569
29570 /* Compute hash of the whole location list LIST_HEAD.  */
29571
29572 static inline void
29573 hash_loc_list (dw_loc_list_ref list_head)
29574 {
29575   dw_loc_list_ref curr = list_head;
29576   inchash::hash hstate;
29577
29578   for (curr = list_head; curr != NULL; curr = curr->dw_loc_next)
29579     {
29580       hstate.add (curr->begin, strlen (curr->begin) + 1);
29581       hstate.add (curr->end, strlen (curr->end) + 1);
29582       if (curr->section)
29583         hstate.add (curr->section, strlen (curr->section) + 1);
29584       hash_locs (curr->expr, hstate);
29585     }
29586   list_head->hash = hstate.end ();
29587 }
29588
29589 /* Return true if X and Y opcodes have the same operands.  */
29590
29591 static inline bool
29592 compare_loc_operands (dw_loc_descr_ref x, dw_loc_descr_ref y)
29593 {
29594   dw_val_ref valx1 = &x->dw_loc_oprnd1;
29595   dw_val_ref valx2 = &x->dw_loc_oprnd2;
29596   dw_val_ref valy1 = &y->dw_loc_oprnd1;
29597   dw_val_ref valy2 = &y->dw_loc_oprnd2;
29598
29599   switch (x->dw_loc_opc)
29600     {
29601     case DW_OP_const4u:
29602     case DW_OP_const8u:
29603       if (x->dtprel)
29604         goto hash_addr;
29605       /* FALLTHRU */
29606     case DW_OP_const1u:
29607     case DW_OP_const1s:
29608     case DW_OP_const2u:
29609     case DW_OP_const2s:
29610     case DW_OP_const4s:
29611     case DW_OP_const8s:
29612     case DW_OP_constu:
29613     case DW_OP_consts:
29614     case DW_OP_pick:
29615     case DW_OP_plus_uconst:
29616     case DW_OP_breg0:
29617     case DW_OP_breg1:
29618     case DW_OP_breg2:
29619     case DW_OP_breg3:
29620     case DW_OP_breg4:
29621     case DW_OP_breg5:
29622     case DW_OP_breg6:
29623     case DW_OP_breg7:
29624     case DW_OP_breg8:
29625     case DW_OP_breg9:
29626     case DW_OP_breg10:
29627     case DW_OP_breg11:
29628     case DW_OP_breg12:
29629     case DW_OP_breg13:
29630     case DW_OP_breg14:
29631     case DW_OP_breg15:
29632     case DW_OP_breg16:
29633     case DW_OP_breg17:
29634     case DW_OP_breg18:
29635     case DW_OP_breg19:
29636     case DW_OP_breg20:
29637     case DW_OP_breg21:
29638     case DW_OP_breg22:
29639     case DW_OP_breg23:
29640     case DW_OP_breg24:
29641     case DW_OP_breg25:
29642     case DW_OP_breg26:
29643     case DW_OP_breg27:
29644     case DW_OP_breg28:
29645     case DW_OP_breg29:
29646     case DW_OP_breg30:
29647     case DW_OP_breg31:
29648     case DW_OP_regx:
29649     case DW_OP_fbreg:
29650     case DW_OP_piece:
29651     case DW_OP_deref_size:
29652     case DW_OP_xderef_size:
29653       return valx1->v.val_int == valy1->v.val_int;
29654     case DW_OP_skip:
29655     case DW_OP_bra:
29656       /* If splitting debug info, the use of DW_OP_GNU_addr_index
29657         can cause irrelevant differences in dw_loc_addr.  */
29658       gcc_assert (valx1->val_class == dw_val_class_loc
29659                   && valy1->val_class == dw_val_class_loc
29660                   && (dwarf_split_debug_info
29661                       || x->dw_loc_addr == y->dw_loc_addr));
29662       return valx1->v.val_loc->dw_loc_addr == valy1->v.val_loc->dw_loc_addr;
29663     case DW_OP_implicit_value:
29664       if (valx1->v.val_unsigned != valy1->v.val_unsigned
29665           || valx2->val_class != valy2->val_class)
29666         return false;
29667       switch (valx2->val_class)
29668         {
29669         case dw_val_class_const:
29670           return valx2->v.val_int == valy2->v.val_int;
29671         case dw_val_class_vec:
29672           return valx2->v.val_vec.elt_size == valy2->v.val_vec.elt_size
29673                  && valx2->v.val_vec.length == valy2->v.val_vec.length
29674                  && memcmp (valx2->v.val_vec.array, valy2->v.val_vec.array,
29675                             valx2->v.val_vec.elt_size
29676                             * valx2->v.val_vec.length) == 0;
29677         case dw_val_class_const_double:
29678           return valx2->v.val_double.low == valy2->v.val_double.low
29679                  && valx2->v.val_double.high == valy2->v.val_double.high;
29680         case dw_val_class_wide_int:
29681           return *valx2->v.val_wide == *valy2->v.val_wide;
29682         case dw_val_class_addr:
29683           return rtx_equal_p (valx2->v.val_addr, valy2->v.val_addr);
29684         default:
29685           gcc_unreachable ();
29686         }
29687     case DW_OP_bregx:
29688     case DW_OP_bit_piece:
29689       return valx1->v.val_int == valy1->v.val_int
29690              && valx2->v.val_int == valy2->v.val_int;
29691     case DW_OP_addr:
29692     hash_addr:
29693       return rtx_equal_p (valx1->v.val_addr, valy1->v.val_addr);
29694     case DW_OP_GNU_addr_index:
29695     case DW_OP_GNU_const_index:
29696       {
29697         rtx ax1 = valx1->val_entry->addr.rtl;
29698         rtx ay1 = valy1->val_entry->addr.rtl;
29699         return rtx_equal_p (ax1, ay1);
29700       }
29701     case DW_OP_implicit_pointer:
29702     case DW_OP_GNU_implicit_pointer:
29703       return valx1->val_class == dw_val_class_die_ref
29704              && valx1->val_class == valy1->val_class
29705              && valx1->v.val_die_ref.die == valy1->v.val_die_ref.die
29706              && valx2->v.val_int == valy2->v.val_int;
29707     case DW_OP_entry_value:
29708     case DW_OP_GNU_entry_value:
29709       return compare_loc_operands (valx1->v.val_loc, valy1->v.val_loc);
29710     case DW_OP_const_type:
29711     case DW_OP_GNU_const_type:
29712       if (valx1->v.val_die_ref.die != valy1->v.val_die_ref.die
29713           || valx2->val_class != valy2->val_class)
29714         return false;
29715       switch (valx2->val_class)
29716         {
29717         case dw_val_class_const:
29718           return valx2->v.val_int == valy2->v.val_int;
29719         case dw_val_class_vec:
29720           return valx2->v.val_vec.elt_size == valy2->v.val_vec.elt_size
29721                  && valx2->v.val_vec.length == valy2->v.val_vec.length
29722                  && memcmp (valx2->v.val_vec.array, valy2->v.val_vec.array,
29723                             valx2->v.val_vec.elt_size
29724                             * valx2->v.val_vec.length) == 0;
29725         case dw_val_class_const_double:
29726           return valx2->v.val_double.low == valy2->v.val_double.low
29727                  && valx2->v.val_double.high == valy2->v.val_double.high;
29728         case dw_val_class_wide_int:
29729           return *valx2->v.val_wide == *valy2->v.val_wide;
29730         default:
29731           gcc_unreachable ();
29732         }
29733     case DW_OP_regval_type:
29734     case DW_OP_deref_type:
29735     case DW_OP_GNU_regval_type:
29736     case DW_OP_GNU_deref_type:
29737       return valx1->v.val_int == valy1->v.val_int
29738              && valx2->v.val_die_ref.die == valy2->v.val_die_ref.die;
29739     case DW_OP_convert:
29740     case DW_OP_reinterpret:
29741     case DW_OP_GNU_convert:
29742     case DW_OP_GNU_reinterpret:
29743       if (valx1->val_class != valy1->val_class)
29744         return false;
29745       if (valx1->val_class == dw_val_class_unsigned_const)
29746         return valx1->v.val_unsigned == valy1->v.val_unsigned;
29747       return valx1->v.val_die_ref.die == valy1->v.val_die_ref.die;
29748     case DW_OP_GNU_parameter_ref:
29749       return valx1->val_class == dw_val_class_die_ref
29750              && valx1->val_class == valy1->val_class
29751              && valx1->v.val_die_ref.die == valy1->v.val_die_ref.die;
29752     default:
29753       /* Other codes have no operands.  */
29754       return true;
29755     }
29756 }
29757
29758 /* Return true if DWARF location expressions X and Y are the same.  */
29759
29760 static inline bool
29761 compare_locs (dw_loc_descr_ref x, dw_loc_descr_ref y)
29762 {
29763   for (; x != NULL && y != NULL; x = x->dw_loc_next, y = y->dw_loc_next)
29764     if (x->dw_loc_opc != y->dw_loc_opc
29765         || x->dtprel != y->dtprel
29766         || !compare_loc_operands (x, y))
29767       break;
29768   return x == NULL && y == NULL;
29769 }
29770
29771 /* Hashtable helpers.  */
29772
29773 struct loc_list_hasher : nofree_ptr_hash <dw_loc_list_struct>
29774 {
29775   static inline hashval_t hash (const dw_loc_list_struct *);
29776   static inline bool equal (const dw_loc_list_struct *,
29777                             const dw_loc_list_struct *);
29778 };
29779
29780 /* Return precomputed hash of location list X.  */
29781
29782 inline hashval_t
29783 loc_list_hasher::hash (const dw_loc_list_struct *x)
29784 {
29785   return x->hash;
29786 }
29787
29788 /* Return true if location lists A and B are the same.  */
29789
29790 inline bool
29791 loc_list_hasher::equal (const dw_loc_list_struct *a,
29792                         const dw_loc_list_struct *b)
29793 {
29794   if (a == b)
29795     return 1;
29796   if (a->hash != b->hash)
29797     return 0;
29798   for (; a != NULL && b != NULL; a = a->dw_loc_next, b = b->dw_loc_next)
29799     if (strcmp (a->begin, b->begin) != 0
29800         || strcmp (a->end, b->end) != 0
29801         || (a->section == NULL) != (b->section == NULL)
29802         || (a->section && strcmp (a->section, b->section) != 0)
29803         || !compare_locs (a->expr, b->expr))
29804       break;
29805   return a == NULL && b == NULL;
29806 }
29807
29808 typedef hash_table<loc_list_hasher> loc_list_hash_type;
29809
29810
29811 /* Recursively optimize location lists referenced from DIE
29812    children and share them whenever possible.  */
29813
29814 static void
29815 optimize_location_lists_1 (dw_die_ref die, loc_list_hash_type *htab)
29816 {
29817   dw_die_ref c;
29818   dw_attr_node *a;
29819   unsigned ix;
29820   dw_loc_list_struct **slot;
29821
29822   FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
29823     if (AT_class (a) == dw_val_class_loc_list)
29824       {
29825         dw_loc_list_ref list = AT_loc_list (a);
29826         /* TODO: perform some optimizations here, before hashing
29827            it and storing into the hash table.  */
29828         hash_loc_list (list);
29829         slot = htab->find_slot_with_hash (list, list->hash, INSERT);
29830         if (*slot == NULL)
29831           *slot = list;
29832         else
29833           a->dw_attr_val.v.val_loc_list = *slot;
29834       }
29835
29836   FOR_EACH_CHILD (die, c, optimize_location_lists_1 (c, htab));
29837 }
29838
29839
29840 /* Recursively assign each location list a unique index into the debug_addr
29841    section.  */
29842
29843 static void
29844 index_location_lists (dw_die_ref die)
29845 {
29846   dw_die_ref c;
29847   dw_attr_node *a;
29848   unsigned ix;
29849
29850   FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
29851     if (AT_class (a) == dw_val_class_loc_list)
29852       {
29853         dw_loc_list_ref list = AT_loc_list (a);
29854         dw_loc_list_ref curr;
29855         for (curr = list; curr != NULL; curr = curr->dw_loc_next)
29856           {
29857             /* Don't index an entry that has already been indexed
29858                or won't be output.  */
29859             if (curr->begin_entry != NULL
29860                 || (strcmp (curr->begin, curr->end) == 0 && !curr->force))
29861               continue;
29862
29863             curr->begin_entry
29864               = add_addr_table_entry (xstrdup (curr->begin), ate_kind_label);
29865           }
29866       }
29867
29868   FOR_EACH_CHILD (die, c, index_location_lists (c));
29869 }
29870
29871 /* Optimize location lists referenced from DIE
29872    children and share them whenever possible.  */
29873
29874 static void
29875 optimize_location_lists (dw_die_ref die)
29876 {
29877   loc_list_hash_type htab (500);
29878   optimize_location_lists_1 (die, &htab);
29879 }
29880 \f
29881 /* Traverse the limbo die list, and add parent/child links.  The only
29882    dies without parents that should be here are concrete instances of
29883    inline functions, and the comp_unit_die.  We can ignore the comp_unit_die.
29884    For concrete instances, we can get the parent die from the abstract
29885    instance.  */
29886
29887 static void
29888 flush_limbo_die_list (void)
29889 {
29890   limbo_die_node *node;
29891
29892   /* get_context_die calls force_decl_die, which can put new DIEs on the
29893      limbo list in LTO mode when nested functions are put in a different
29894      partition than that of their parent function.  */
29895   while ((node = limbo_die_list))
29896     {
29897       dw_die_ref die = node->die;
29898       limbo_die_list = node->next;
29899
29900       if (die->die_parent == NULL)
29901         {
29902           dw_die_ref origin = get_AT_ref (die, DW_AT_abstract_origin);
29903
29904           if (origin && origin->die_parent)
29905             add_child_die (origin->die_parent, die);
29906           else if (is_cu_die (die))
29907             ;
29908           else if (seen_error ())
29909             /* It's OK to be confused by errors in the input.  */
29910             add_child_die (comp_unit_die (), die);
29911           else
29912             {
29913               /* In certain situations, the lexical block containing a
29914                  nested function can be optimized away, which results
29915                  in the nested function die being orphaned.  Likewise
29916                  with the return type of that nested function.  Force
29917                  this to be a child of the containing function.
29918
29919                  It may happen that even the containing function got fully
29920                  inlined and optimized out.  In that case we are lost and
29921                  assign the empty child.  This should not be big issue as
29922                  the function is likely unreachable too.  */
29923               gcc_assert (node->created_for);
29924
29925               if (DECL_P (node->created_for))
29926                 origin = get_context_die (DECL_CONTEXT (node->created_for));
29927               else if (TYPE_P (node->created_for))
29928                 origin = scope_die_for (node->created_for, comp_unit_die ());
29929               else
29930                 origin = comp_unit_die ();
29931
29932               add_child_die (origin, die);
29933             }
29934         }
29935     }
29936 }
29937
29938 /* Reset DIEs so we can output them again.  */
29939
29940 static void
29941 reset_dies (dw_die_ref die)
29942 {
29943   dw_die_ref c;
29944
29945   /* Remove stuff we re-generate.  */
29946   die->die_mark = 0;
29947   die->die_offset = 0;
29948   die->die_abbrev = 0;
29949   remove_AT (die, DW_AT_sibling);
29950
29951   FOR_EACH_CHILD (die, c, reset_dies (c));
29952 }
29953
29954 /* Output stuff that dwarf requires at the end of every file,
29955    and generate the DWARF-2 debugging info.  */
29956
29957 static void
29958 dwarf2out_finish (const char *)
29959 {
29960   comdat_type_node *ctnode;
29961   dw_die_ref main_comp_unit_die;
29962   unsigned char checksum[16];
29963   char dl_section_ref[MAX_ARTIFICIAL_LABEL_BYTES];
29964
29965   /* Flush out any latecomers to the limbo party.  */
29966   flush_limbo_die_list ();
29967
29968   if (flag_checking)
29969     {
29970       verify_die (comp_unit_die ());
29971       for (limbo_die_node *node = cu_die_list; node; node = node->next)
29972         verify_die (node->die);
29973     }
29974
29975   /* We shouldn't have any symbols with delayed asm names for
29976      DIEs generated after early finish.  */
29977   gcc_assert (deferred_asm_name == NULL);
29978
29979   gen_remaining_tmpl_value_param_die_attribute ();
29980
29981   if (flag_generate_lto || flag_generate_offload)
29982     {
29983       gcc_assert (flag_fat_lto_objects || flag_generate_offload);
29984
29985       /* Prune stuff so that dwarf2out_finish runs successfully
29986          for the fat part of the object.  */
29987       reset_dies (comp_unit_die ());
29988       for (limbo_die_node *node = cu_die_list; node; node = node->next)
29989         reset_dies (node->die);
29990
29991       hash_table<comdat_type_hasher> comdat_type_table (100);
29992       for (ctnode = comdat_type_list; ctnode != NULL; ctnode = ctnode->next)
29993         {
29994           comdat_type_node **slot
29995               = comdat_type_table.find_slot (ctnode, INSERT);
29996
29997           /* Don't reset types twice.  */
29998           if (*slot != HTAB_EMPTY_ENTRY)
29999             continue;
30000
30001           /* Add a pointer to the line table for the main compilation unit
30002              so that the debugger can make sense of DW_AT_decl_file
30003              attributes.  */
30004           if (debug_info_level >= DINFO_LEVEL_TERSE)
30005             reset_dies (ctnode->root_die);
30006
30007           *slot = ctnode;
30008         }
30009
30010       /* Reset die CU symbol so we don't output it twice.  */
30011       comp_unit_die ()->die_id.die_symbol = NULL;
30012
30013       /* Remove DW_AT_macro from the early output.  */
30014       if (have_macinfo)
30015         remove_AT (comp_unit_die (), DEBUG_MACRO_ATTRIBUTE);
30016
30017       /* Remove indirect string decisions.  */
30018       debug_str_hash->traverse<void *, reset_indirect_string> (NULL);
30019     }
30020
30021 #if ENABLE_ASSERT_CHECKING
30022   {
30023     dw_die_ref die = comp_unit_die (), c;
30024     FOR_EACH_CHILD (die, c, gcc_assert (! c->die_mark));
30025   }
30026 #endif
30027   resolve_addr (comp_unit_die ());
30028   move_marked_base_types ();
30029
30030   /* Initialize sections and labels used for actual assembler output.  */
30031   unsigned generation = init_sections_and_labels (false);
30032
30033   /* Traverse the DIE's and add sibling attributes to those DIE's that
30034      have children.  */
30035   add_sibling_attributes (comp_unit_die ());
30036   limbo_die_node *node;
30037   for (node = cu_die_list; node; node = node->next)
30038     add_sibling_attributes (node->die);
30039   for (ctnode = comdat_type_list; ctnode != NULL; ctnode = ctnode->next)
30040     add_sibling_attributes (ctnode->root_die);
30041
30042   /* When splitting DWARF info, we put some attributes in the
30043      skeleton compile_unit DIE that remains in the .o, while
30044      most attributes go in the DWO compile_unit_die.  */
30045   if (dwarf_split_debug_info)
30046     {
30047       limbo_die_node *cu;
30048       main_comp_unit_die = gen_compile_unit_die (NULL);
30049       if (dwarf_version >= 5)
30050         main_comp_unit_die->die_tag = DW_TAG_skeleton_unit;
30051       cu = limbo_die_list;
30052       gcc_assert (cu->die == main_comp_unit_die);
30053       limbo_die_list = limbo_die_list->next;
30054       cu->next = cu_die_list;
30055       cu_die_list = cu;
30056     }
30057   else
30058     main_comp_unit_die = comp_unit_die ();
30059
30060   /* Output a terminator label for the .text section.  */
30061   switch_to_section (text_section);
30062   targetm.asm_out.internal_label (asm_out_file, TEXT_END_LABEL, 0);
30063   if (cold_text_section)
30064     {
30065       switch_to_section (cold_text_section);
30066       targetm.asm_out.internal_label (asm_out_file, COLD_END_LABEL, 0);
30067     }
30068
30069   /* We can only use the low/high_pc attributes if all of the code was
30070      in .text.  */
30071   if (!have_multiple_function_sections 
30072       || (dwarf_version < 3 && dwarf_strict))
30073     {
30074       /* Don't add if the CU has no associated code.  */
30075       if (text_section_used)
30076         add_AT_low_high_pc (main_comp_unit_die, text_section_label,
30077                             text_end_label, true);
30078     }
30079   else
30080     {
30081       unsigned fde_idx;
30082       dw_fde_ref fde;
30083       bool range_list_added = false;
30084
30085       if (text_section_used)
30086         add_ranges_by_labels (main_comp_unit_die, text_section_label,
30087                               text_end_label, &range_list_added, true);
30088       if (cold_text_section_used)
30089         add_ranges_by_labels (main_comp_unit_die, cold_text_section_label,
30090                               cold_end_label, &range_list_added, true);
30091
30092       FOR_EACH_VEC_ELT (*fde_vec, fde_idx, fde)
30093         {
30094           if (DECL_IGNORED_P (fde->decl))
30095             continue;
30096           if (!fde->in_std_section)
30097             add_ranges_by_labels (main_comp_unit_die, fde->dw_fde_begin,
30098                                   fde->dw_fde_end, &range_list_added,
30099                                   true);
30100           if (fde->dw_fde_second_begin && !fde->second_in_std_section)
30101             add_ranges_by_labels (main_comp_unit_die, fde->dw_fde_second_begin,
30102                                   fde->dw_fde_second_end, &range_list_added,
30103                                   true);
30104         }
30105
30106       if (range_list_added)
30107         {
30108           /* We need to give .debug_loc and .debug_ranges an appropriate
30109              "base address".  Use zero so that these addresses become
30110              absolute.  Historically, we've emitted the unexpected
30111              DW_AT_entry_pc instead of DW_AT_low_pc for this purpose.
30112              Emit both to give time for other tools to adapt.  */
30113           add_AT_addr (main_comp_unit_die, DW_AT_low_pc, const0_rtx, true);
30114           if (! dwarf_strict && dwarf_version < 4)
30115             add_AT_addr (main_comp_unit_die, DW_AT_entry_pc, const0_rtx, true);
30116
30117           add_ranges (NULL);
30118         }
30119     }
30120
30121   /* AIX Assembler inserts the length, so adjust the reference to match the
30122      offset expected by debuggers.  */
30123   strcpy (dl_section_ref, debug_line_section_label);
30124   if (XCOFF_DEBUGGING_INFO)
30125     strcat (dl_section_ref, DWARF_INITIAL_LENGTH_SIZE_STR);
30126
30127   if (debug_info_level >= DINFO_LEVEL_TERSE)
30128     add_AT_lineptr (main_comp_unit_die, DW_AT_stmt_list,
30129                     dl_section_ref);
30130
30131   if (have_macinfo)
30132     add_AT_macptr (comp_unit_die (), DEBUG_MACRO_ATTRIBUTE,
30133                    macinfo_section_label);
30134
30135   if (dwarf_split_debug_info)
30136     {
30137       if (have_location_lists)
30138         {
30139           if (dwarf_version >= 5)
30140             add_AT_loclistsptr (comp_unit_die (), DW_AT_loclists_base,
30141                                 loc_section_label);
30142           /* optimize_location_lists calculates the size of the lists,
30143              so index them first, and assign indices to the entries.
30144              Although optimize_location_lists will remove entries from
30145              the table, it only does so for duplicates, and therefore
30146              only reduces ref_counts to 1.  */
30147           index_location_lists (comp_unit_die ());
30148         }
30149
30150       if (addr_index_table != NULL)
30151         {
30152           unsigned int index = 0;
30153           addr_index_table
30154             ->traverse_noresize<unsigned int *, index_addr_table_entry>
30155             (&index);
30156         }
30157     }
30158
30159   loc_list_idx = 0;
30160   if (have_location_lists)
30161     {
30162       optimize_location_lists (comp_unit_die ());
30163       /* And finally assign indexes to the entries for -gsplit-dwarf.  */
30164       if (dwarf_version >= 5 && dwarf_split_debug_info)
30165         assign_location_list_indexes (comp_unit_die ());
30166     }
30167
30168   save_macinfo_strings ();
30169
30170   if (dwarf_split_debug_info)
30171     {
30172       unsigned int index = 0;
30173
30174       /* Add attributes common to skeleton compile_units and
30175          type_units.  Because these attributes include strings, it
30176          must be done before freezing the string table.  Top-level
30177          skeleton die attrs are added when the skeleton type unit is
30178          created, so ensure it is created by this point.  */
30179       add_top_level_skeleton_die_attrs (main_comp_unit_die);
30180       debug_str_hash->traverse_noresize<unsigned int *, index_string> (&index);
30181     }
30182
30183   /* Output all of the compilation units.  We put the main one last so that
30184      the offsets are available to output_pubnames.  */
30185   for (node = cu_die_list; node; node = node->next)
30186     output_comp_unit (node->die, 0, NULL);
30187
30188   hash_table<comdat_type_hasher> comdat_type_table (100);
30189   for (ctnode = comdat_type_list; ctnode != NULL; ctnode = ctnode->next)
30190     {
30191       comdat_type_node **slot = comdat_type_table.find_slot (ctnode, INSERT);
30192
30193       /* Don't output duplicate types.  */
30194       if (*slot != HTAB_EMPTY_ENTRY)
30195         continue;
30196
30197       /* Add a pointer to the line table for the main compilation unit
30198          so that the debugger can make sense of DW_AT_decl_file
30199          attributes.  */
30200       if (debug_info_level >= DINFO_LEVEL_TERSE)
30201         add_AT_lineptr (ctnode->root_die, DW_AT_stmt_list,
30202                         (!dwarf_split_debug_info
30203                          ? dl_section_ref
30204                          : debug_skeleton_line_section_label));
30205
30206       output_comdat_type_unit (ctnode);
30207       *slot = ctnode;
30208     }
30209
30210   if (dwarf_split_debug_info)
30211     {
30212       int mark;
30213       struct md5_ctx ctx;
30214
30215       if (dwarf_version >= 5 && !vec_safe_is_empty (ranges_table))
30216         index_rnglists ();
30217
30218       /* Compute a checksum of the comp_unit to use as the dwo_id.  */
30219       md5_init_ctx (&ctx);
30220       mark = 0;
30221       die_checksum (comp_unit_die (), &ctx, &mark);
30222       unmark_all_dies (comp_unit_die ());
30223       md5_finish_ctx (&ctx, checksum);
30224
30225       if (dwarf_version < 5)
30226         {
30227           /* Use the first 8 bytes of the checksum as the dwo_id,
30228              and add it to both comp-unit DIEs.  */
30229           add_AT_data8 (main_comp_unit_die, DW_AT_GNU_dwo_id, checksum);
30230           add_AT_data8 (comp_unit_die (), DW_AT_GNU_dwo_id, checksum);
30231         }
30232
30233       /* Add the base offset of the ranges table to the skeleton
30234         comp-unit DIE.  */
30235       if (!vec_safe_is_empty (ranges_table))
30236         {
30237           if (dwarf_version >= 5)
30238             add_AT_lineptr (main_comp_unit_die, DW_AT_rnglists_base,
30239                             ranges_base_label);
30240           else
30241             add_AT_lineptr (main_comp_unit_die, DW_AT_GNU_ranges_base,
30242                             ranges_section_label);
30243         }
30244
30245       switch_to_section (debug_addr_section);
30246       ASM_OUTPUT_LABEL (asm_out_file, debug_addr_section_label);
30247       output_addr_table ();
30248     }
30249
30250   /* Output the main compilation unit if non-empty or if .debug_macinfo
30251      or .debug_macro will be emitted.  */
30252   output_comp_unit (comp_unit_die (), have_macinfo,
30253                     dwarf_split_debug_info ? checksum : NULL);
30254
30255   if (dwarf_split_debug_info && info_section_emitted)
30256     output_skeleton_debug_sections (main_comp_unit_die, checksum);
30257
30258   /* Output the abbreviation table.  */
30259   if (vec_safe_length (abbrev_die_table) != 1)
30260     {
30261       switch_to_section (debug_abbrev_section);
30262       ASM_OUTPUT_LABEL (asm_out_file, abbrev_section_label);
30263       output_abbrev_section ();
30264     }
30265
30266   /* Output location list section if necessary.  */
30267   if (have_location_lists)
30268     {
30269       char l1[MAX_ARTIFICIAL_LABEL_BYTES];
30270       char l2[MAX_ARTIFICIAL_LABEL_BYTES];
30271       /* Output the location lists info.  */
30272       switch_to_section (debug_loc_section);
30273       if (dwarf_version >= 5)
30274         {
30275           ASM_GENERATE_INTERNAL_LABEL (l1, DEBUG_LOC_SECTION_LABEL, 1);
30276           ASM_GENERATE_INTERNAL_LABEL (l2, DEBUG_LOC_SECTION_LABEL, 2);
30277           if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
30278             dw2_asm_output_data (4, 0xffffffff,
30279                                  "Initial length escape value indicating "
30280                                  "64-bit DWARF extension");
30281           dw2_asm_output_delta (DWARF_OFFSET_SIZE, l2, l1,
30282                             "Length of Location Lists");
30283           ASM_OUTPUT_LABEL (asm_out_file, l1);
30284           dw2_asm_output_data (2, dwarf_version, "DWARF Version");
30285           dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Address Size");
30286           dw2_asm_output_data (1, 0, "Segment Size");
30287           dw2_asm_output_data (4, dwarf_split_debug_info ? loc_list_idx : 0,
30288                                "Offset Entry Count");
30289         }
30290       ASM_OUTPUT_LABEL (asm_out_file, loc_section_label);
30291       if (dwarf_version >= 5 && dwarf_split_debug_info)
30292         {
30293           unsigned int save_loc_list_idx = loc_list_idx;
30294           loc_list_idx = 0;
30295           output_loclists_offsets (comp_unit_die ());
30296           gcc_assert (save_loc_list_idx == loc_list_idx);
30297         }
30298       output_location_lists (comp_unit_die ());
30299       if (dwarf_version >= 5)
30300         ASM_OUTPUT_LABEL (asm_out_file, l2);
30301     }
30302
30303   output_pubtables ();
30304
30305   /* Output the address range information if a CU (.debug_info section)
30306      was emitted.  We output an empty table even if we had no functions
30307      to put in it.  This because the consumer has no way to tell the
30308      difference between an empty table that we omitted and failure to
30309      generate a table that would have contained data.  */
30310   if (info_section_emitted)
30311     {
30312       switch_to_section (debug_aranges_section);
30313       output_aranges ();
30314     }
30315
30316   /* Output ranges section if necessary.  */
30317   if (!vec_safe_is_empty (ranges_table))
30318     {
30319       if (dwarf_version >= 5)
30320         output_rnglists (generation);
30321       else
30322         output_ranges ();
30323     }
30324
30325   /* Have to end the macro section.  */
30326   if (have_macinfo)
30327     {
30328       switch_to_section (debug_macinfo_section);
30329       ASM_OUTPUT_LABEL (asm_out_file, macinfo_section_label);
30330       output_macinfo (!dwarf_split_debug_info ? debug_line_section_label
30331                       : debug_skeleton_line_section_label, false);
30332       dw2_asm_output_data (1, 0, "End compilation unit");
30333     }
30334
30335   /* Output the source line correspondence table.  We must do this
30336      even if there is no line information.  Otherwise, on an empty
30337      translation unit, we will generate a present, but empty,
30338      .debug_info section.  IRIX 6.5 `nm' will then complain when
30339      examining the file.  This is done late so that any filenames
30340      used by the debug_info section are marked as 'used'.  */
30341   switch_to_section (debug_line_section);
30342   ASM_OUTPUT_LABEL (asm_out_file, debug_line_section_label);
30343   if (! DWARF2_ASM_LINE_DEBUG_INFO)
30344     output_line_info (false);
30345
30346   if (dwarf_split_debug_info && info_section_emitted)
30347     {
30348       switch_to_section (debug_skeleton_line_section);
30349       ASM_OUTPUT_LABEL (asm_out_file, debug_skeleton_line_section_label);
30350       output_line_info (true);
30351     }
30352
30353   /* If we emitted any indirect strings, output the string table too.  */
30354   if (debug_str_hash || skeleton_debug_str_hash)
30355     output_indirect_strings ();
30356   if (debug_line_str_hash)
30357     {
30358       switch_to_section (debug_line_str_section);
30359       const enum dwarf_form form = DW_FORM_line_strp;
30360       debug_line_str_hash->traverse<enum dwarf_form,
30361                                     output_indirect_string> (form);
30362     }
30363 }
30364
30365 /* Returns a hash value for X (which really is a variable_value_struct).  */
30366
30367 inline hashval_t
30368 variable_value_hasher::hash (variable_value_struct *x)
30369 {
30370   return (hashval_t) x->decl_id;
30371 }
30372
30373 /* Return nonzero if decl_id of variable_value_struct X is the same as
30374    UID of decl Y.  */
30375
30376 inline bool
30377 variable_value_hasher::equal (variable_value_struct *x, tree y)
30378 {
30379   return x->decl_id == DECL_UID (y);
30380 }
30381
30382 /* Helper function for resolve_variable_value, handle
30383    DW_OP_GNU_variable_value in one location expression.
30384    Return true if exprloc has been changed into loclist.  */
30385
30386 static bool
30387 resolve_variable_value_in_expr (dw_attr_node *a, dw_loc_descr_ref loc)
30388 {
30389   dw_loc_descr_ref next;
30390   for (dw_loc_descr_ref prev = NULL; loc; prev = loc, loc = next)
30391     {
30392       next = loc->dw_loc_next;
30393       if (loc->dw_loc_opc != DW_OP_GNU_variable_value
30394           || loc->dw_loc_oprnd1.val_class != dw_val_class_decl_ref)
30395         continue;
30396
30397       tree decl = loc->dw_loc_oprnd1.v.val_decl_ref;
30398       if (DECL_CONTEXT (decl) != current_function_decl)
30399         continue;
30400
30401       dw_die_ref ref = lookup_decl_die (decl);
30402       if (ref)
30403         {
30404           loc->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
30405           loc->dw_loc_oprnd1.v.val_die_ref.die = ref;
30406           loc->dw_loc_oprnd1.v.val_die_ref.external = 0;
30407           continue;
30408         }
30409       dw_loc_list_ref l = loc_list_from_tree (decl, 0, NULL);
30410       if (l == NULL)
30411         continue;
30412       if (l->dw_loc_next)
30413         {
30414           if (AT_class (a) != dw_val_class_loc)
30415             continue;
30416           switch (a->dw_attr)
30417             {
30418             /* Following attributes allow both exprloc and loclist
30419                classes, so we can change them into a loclist.  */
30420             case DW_AT_location:
30421             case DW_AT_string_length:
30422             case DW_AT_return_addr:
30423             case DW_AT_data_member_location:
30424             case DW_AT_frame_base:
30425             case DW_AT_segment:
30426             case DW_AT_static_link:
30427             case DW_AT_use_location:
30428             case DW_AT_vtable_elem_location:
30429               if (prev)
30430                 {
30431                   prev->dw_loc_next = NULL;
30432                   prepend_loc_descr_to_each (l, AT_loc (a));
30433                 }
30434               if (next)
30435                 add_loc_descr_to_each (l, next);
30436               a->dw_attr_val.val_class = dw_val_class_loc_list;
30437               a->dw_attr_val.val_entry = NULL;
30438               a->dw_attr_val.v.val_loc_list = l;
30439               have_location_lists = true;
30440               return true;
30441             /* Following attributes allow both exprloc and reference,
30442                so if the whole expression is DW_OP_GNU_variable_value alone
30443                we could transform it into reference.  */
30444             case DW_AT_byte_size:
30445             case DW_AT_bit_size:
30446             case DW_AT_lower_bound:
30447             case DW_AT_upper_bound:
30448             case DW_AT_bit_stride:
30449             case DW_AT_count:
30450             case DW_AT_allocated:
30451             case DW_AT_associated:
30452             case DW_AT_byte_stride:
30453               if (prev == NULL && next == NULL)
30454                 break;
30455               /* FALLTHRU */
30456             default:
30457               if (dwarf_strict)
30458                 continue;
30459               break;
30460             }
30461           /* Create DW_TAG_variable that we can refer to.  */
30462           gen_decl_die (decl, NULL_TREE, NULL,
30463                         lookup_decl_die (current_function_decl));
30464           ref = lookup_decl_die (decl);
30465           if (ref)
30466             {
30467               loc->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
30468               loc->dw_loc_oprnd1.v.val_die_ref.die = ref;
30469               loc->dw_loc_oprnd1.v.val_die_ref.external = 0;
30470             }
30471           continue;
30472         }
30473       if (prev)
30474         {
30475           prev->dw_loc_next = l->expr;
30476           add_loc_descr (&prev->dw_loc_next, next);
30477           free_loc_descr (loc, NULL);
30478           next = prev->dw_loc_next;
30479         }
30480       else
30481         {
30482           memcpy (loc, l->expr, sizeof (dw_loc_descr_node));
30483           add_loc_descr (&loc, next);
30484           next = loc;
30485         }
30486       loc = prev;
30487     }
30488   return false;
30489 }
30490
30491 /* Attempt to resolve DW_OP_GNU_variable_value using loc_list_from_tree.  */
30492
30493 static void
30494 resolve_variable_value (dw_die_ref die)
30495 {
30496   dw_attr_node *a;
30497   dw_loc_list_ref loc;
30498   unsigned ix;
30499
30500   FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
30501     switch (AT_class (a))
30502       {
30503       case dw_val_class_loc:
30504         if (!resolve_variable_value_in_expr (a, AT_loc (a)))
30505           break;
30506         /* FALLTHRU */
30507       case dw_val_class_loc_list:
30508         loc = AT_loc_list (a);
30509         gcc_assert (loc);
30510         for (; loc; loc = loc->dw_loc_next)
30511           resolve_variable_value_in_expr (a, loc->expr);
30512         break;
30513       default:
30514         break;
30515       }
30516 }
30517
30518 /* Attempt to optimize DW_OP_GNU_variable_value refering to
30519    temporaries in the current function.  */
30520
30521 static void
30522 resolve_variable_values (void)
30523 {
30524   if (!variable_value_hash || !current_function_decl)
30525     return;
30526
30527   struct variable_value_struct *node
30528     = variable_value_hash->find_with_hash (current_function_decl,
30529                                            DECL_UID (current_function_decl));
30530
30531   if (node == NULL)
30532     return;
30533
30534   unsigned int i;
30535   dw_die_ref die;
30536   FOR_EACH_VEC_SAFE_ELT (node->dies, i, die)
30537     resolve_variable_value (die);
30538 }
30539
30540 /* Helper function for note_variable_value, handle one location
30541    expression.  */
30542
30543 static void
30544 note_variable_value_in_expr (dw_die_ref die, dw_loc_descr_ref loc)
30545 {
30546   for (; loc; loc = loc->dw_loc_next)
30547     if (loc->dw_loc_opc == DW_OP_GNU_variable_value
30548         && loc->dw_loc_oprnd1.val_class == dw_val_class_decl_ref)
30549       {
30550         tree decl = loc->dw_loc_oprnd1.v.val_decl_ref;
30551         dw_die_ref ref = lookup_decl_die (decl);
30552         if (! ref && (flag_generate_lto || flag_generate_offload))
30553           {
30554             /* ???  This is somewhat a hack because we do not create DIEs
30555                for variables not in BLOCK trees early but when generating
30556                early LTO output we need the dw_val_class_decl_ref to be
30557                fully resolved.  For fat LTO objects we'd also like to
30558                undo this after LTO dwarf output.  */
30559             gcc_assert (DECL_CONTEXT (decl));
30560             dw_die_ref ctx = lookup_decl_die (DECL_CONTEXT (decl));
30561             gcc_assert (ctx != NULL);
30562             gen_decl_die (decl, NULL_TREE, NULL, ctx);
30563             ref = lookup_decl_die (decl);
30564             gcc_assert (ref != NULL);
30565           }
30566         if (ref)
30567           {
30568             loc->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
30569             loc->dw_loc_oprnd1.v.val_die_ref.die = ref;
30570             loc->dw_loc_oprnd1.v.val_die_ref.external = 0;
30571             continue;
30572           }
30573         if (VAR_P (decl)
30574             && DECL_CONTEXT (decl)
30575             && TREE_CODE (DECL_CONTEXT (decl)) == FUNCTION_DECL
30576             && lookup_decl_die (DECL_CONTEXT (decl)))
30577           {
30578             if (!variable_value_hash)
30579               variable_value_hash
30580                 = hash_table<variable_value_hasher>::create_ggc (10);
30581
30582             tree fndecl = DECL_CONTEXT (decl);
30583             struct variable_value_struct *node;
30584             struct variable_value_struct **slot
30585               = variable_value_hash->find_slot_with_hash (fndecl,
30586                                                           DECL_UID (fndecl),
30587                                                           INSERT);
30588             if (*slot == NULL)
30589               {
30590                 node = ggc_cleared_alloc<variable_value_struct> ();
30591                 node->decl_id = DECL_UID (fndecl);
30592                 *slot = node;
30593               }
30594             else
30595               node = *slot;
30596
30597             vec_safe_push (node->dies, die);
30598           }
30599       }
30600 }
30601
30602 /* Walk the tree DIE and note DIEs with DW_OP_GNU_variable_value still
30603    with dw_val_class_decl_ref operand.  */
30604
30605 static void
30606 note_variable_value (dw_die_ref die)
30607 {
30608   dw_die_ref c;
30609   dw_attr_node *a;
30610   dw_loc_list_ref loc;
30611   unsigned ix;
30612
30613   FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
30614     switch (AT_class (a))
30615       {
30616       case dw_val_class_loc_list:
30617         loc = AT_loc_list (a);
30618         gcc_assert (loc);
30619         if (!loc->noted_variable_value)
30620           {
30621             loc->noted_variable_value = 1;
30622             for (; loc; loc = loc->dw_loc_next)
30623               note_variable_value_in_expr (die, loc->expr);
30624           }
30625         break;
30626       case dw_val_class_loc:
30627         note_variable_value_in_expr (die, AT_loc (a));
30628         break;
30629       default:
30630         break;
30631       }
30632
30633   /* Mark children.  */
30634   FOR_EACH_CHILD (die, c, note_variable_value (c));
30635 }
30636
30637 /* Perform any cleanups needed after the early debug generation pass
30638    has run.  */
30639
30640 static void
30641 dwarf2out_early_finish (const char *filename)
30642 {
30643   set_early_dwarf s;
30644
30645   /* PCH might result in DW_AT_producer string being restored from the
30646      header compilation, so always fill it with empty string initially
30647      and overwrite only here.  */
30648   dw_attr_node *producer = get_AT (comp_unit_die (), DW_AT_producer);
30649   producer_string = gen_producer_string ();
30650   producer->dw_attr_val.v.val_str->refcount--;
30651   producer->dw_attr_val.v.val_str = find_AT_string (producer_string);
30652
30653   /* Add the name for the main input file now.  We delayed this from
30654      dwarf2out_init to avoid complications with PCH.  */
30655   add_name_attribute (comp_unit_die (), remap_debug_filename (filename));
30656   add_comp_dir_attribute (comp_unit_die ());
30657
30658   /* When emitting DWARF5 .debug_line_str, move DW_AT_name and
30659      DW_AT_comp_dir into .debug_line_str section.  */
30660   if (!DWARF2_ASM_LINE_DEBUG_INFO
30661       && dwarf_version >= 5
30662       && DWARF5_USE_DEBUG_LINE_STR)
30663     {
30664       for (int i = 0; i < 2; i++)
30665         {
30666           dw_attr_node *a = get_AT (comp_unit_die (),
30667                                     i ? DW_AT_comp_dir : DW_AT_name);
30668           if (a == NULL
30669               || AT_class (a) != dw_val_class_str
30670               || strlen (AT_string (a)) + 1 <= DWARF_OFFSET_SIZE)
30671             continue;
30672
30673           if (! debug_line_str_hash)
30674             debug_line_str_hash
30675               = hash_table<indirect_string_hasher>::create_ggc (10);
30676
30677           struct indirect_string_node *node
30678             = find_AT_string_in_table (AT_string (a), debug_line_str_hash);
30679           set_indirect_string (node);
30680           node->form = DW_FORM_line_strp;
30681           a->dw_attr_val.v.val_str->refcount--;
30682           a->dw_attr_val.v.val_str = node;
30683         }
30684     }
30685
30686   /* With LTO early dwarf was really finished at compile-time, so make
30687      sure to adjust the phase after annotating the LTRANS CU DIE.  */
30688   if (in_lto_p)
30689     {
30690       early_dwarf_finished = true;
30691       return;
30692     }
30693
30694   /* Walk through the list of incomplete types again, trying once more to
30695      emit full debugging info for them.  */
30696   retry_incomplete_types ();
30697
30698   /* The point here is to flush out the limbo list so that it is empty
30699      and we don't need to stream it for LTO.  */
30700   flush_limbo_die_list ();
30701
30702   gen_scheduled_generic_parms_dies ();
30703   gen_remaining_tmpl_value_param_die_attribute ();
30704
30705   /* Add DW_AT_linkage_name for all deferred DIEs.  */
30706   for (limbo_die_node *node = deferred_asm_name; node; node = node->next)
30707     {
30708       tree decl = node->created_for;
30709       if (DECL_ASSEMBLER_NAME (decl) != DECL_NAME (decl)
30710           /* A missing DECL_ASSEMBLER_NAME can be a constant DIE that
30711              ended up in deferred_asm_name before we knew it was
30712              constant and never written to disk.  */
30713           && DECL_ASSEMBLER_NAME (decl))
30714         {
30715           add_linkage_attr (node->die, decl);
30716           move_linkage_attr (node->die);
30717         }
30718     }
30719   deferred_asm_name = NULL;
30720
30721   if (flag_eliminate_unused_debug_types)
30722     prune_unused_types ();
30723
30724   /* Generate separate COMDAT sections for type DIEs. */
30725   if (use_debug_types)
30726     {
30727       break_out_comdat_types (comp_unit_die ());
30728
30729       /* Each new type_unit DIE was added to the limbo die list when created.
30730          Since these have all been added to comdat_type_list, clear the
30731          limbo die list.  */
30732       limbo_die_list = NULL;
30733
30734       /* For each new comdat type unit, copy declarations for incomplete
30735          types to make the new unit self-contained (i.e., no direct
30736          references to the main compile unit).  */
30737       for (comdat_type_node *ctnode = comdat_type_list;
30738            ctnode != NULL; ctnode = ctnode->next)
30739         copy_decls_for_unworthy_types (ctnode->root_die);
30740       copy_decls_for_unworthy_types (comp_unit_die ());
30741
30742       /* In the process of copying declarations from one unit to another,
30743          we may have left some declarations behind that are no longer
30744          referenced.  Prune them.  */
30745       prune_unused_types ();
30746     }
30747
30748   /* Traverse the DIE's and note DIEs with DW_OP_GNU_variable_value still
30749      with dw_val_class_decl_ref operand.  */
30750   note_variable_value (comp_unit_die ());
30751   for (limbo_die_node *node = cu_die_list; node; node = node->next)
30752     note_variable_value (node->die);
30753   for (comdat_type_node *ctnode = comdat_type_list; ctnode != NULL;
30754        ctnode = ctnode->next)
30755     note_variable_value (ctnode->root_die);
30756   for (limbo_die_node *node = limbo_die_list; node; node = node->next)
30757     note_variable_value (node->die);
30758
30759   /* The AT_pubnames attribute needs to go in all skeleton dies, including
30760      both the main_cu and all skeleton TUs.  Making this call unconditional
30761      would end up either adding a second copy of the AT_pubnames attribute, or
30762      requiring a special case in add_top_level_skeleton_die_attrs.  */
30763   if (!dwarf_split_debug_info)
30764     add_AT_pubnames (comp_unit_die ());
30765
30766   /* The early debug phase is now finished.  */
30767   early_dwarf_finished = true;
30768
30769   /* Do not generate DWARF assembler now when not producing LTO bytecode.  */
30770   if (!flag_generate_lto && !flag_generate_offload)
30771     return;
30772
30773   /* Now as we are going to output for LTO initialize sections and labels
30774      to the LTO variants.  We don't need a random-seed postfix as other
30775      LTO sections as linking the LTO debug sections into one in a partial
30776      link is fine.  */
30777   init_sections_and_labels (true);
30778
30779   /* The output below is modeled after dwarf2out_finish with all
30780      location related output removed and some LTO specific changes.
30781      Some refactoring might make both smaller and easier to match up.  */
30782
30783   /* Traverse the DIE's and add add sibling attributes to those DIE's
30784      that have children.  */
30785   add_sibling_attributes (comp_unit_die ());
30786   for (limbo_die_node *node = limbo_die_list; node; node = node->next)
30787     add_sibling_attributes (node->die);
30788   for (comdat_type_node *ctnode = comdat_type_list;
30789        ctnode != NULL; ctnode = ctnode->next)
30790     add_sibling_attributes (ctnode->root_die);
30791
30792   if (have_macinfo)
30793     add_AT_macptr (comp_unit_die (), DEBUG_MACRO_ATTRIBUTE,
30794                    macinfo_section_label);
30795
30796   save_macinfo_strings ();
30797
30798   /* Output all of the compilation units.  We put the main one last so that
30799      the offsets are available to output_pubnames.  */
30800   for (limbo_die_node *node = limbo_die_list; node; node = node->next)
30801     output_comp_unit (node->die, 0, NULL);
30802
30803   hash_table<comdat_type_hasher> comdat_type_table (100);
30804   for (comdat_type_node *ctnode = comdat_type_list;
30805        ctnode != NULL; ctnode = ctnode->next)
30806     {
30807       comdat_type_node **slot = comdat_type_table.find_slot (ctnode, INSERT);
30808
30809       /* Don't output duplicate types.  */
30810       if (*slot != HTAB_EMPTY_ENTRY)
30811         continue;
30812
30813       /* Add a pointer to the line table for the main compilation unit
30814          so that the debugger can make sense of DW_AT_decl_file
30815          attributes.  */
30816       if (debug_info_level >= DINFO_LEVEL_TERSE)
30817         add_AT_lineptr (ctnode->root_die, DW_AT_stmt_list,
30818                         (!dwarf_split_debug_info
30819                          ? debug_line_section_label
30820                          : debug_skeleton_line_section_label));
30821
30822       output_comdat_type_unit (ctnode);
30823       *slot = ctnode;
30824     }
30825
30826   /* Stick a unique symbol to the main debuginfo section.  */
30827   compute_comp_unit_symbol (comp_unit_die ());
30828
30829   /* Output the main compilation unit.  We always need it if only for
30830      the CU symbol.  */
30831   output_comp_unit (comp_unit_die (), true, NULL);
30832
30833   /* Output the abbreviation table.  */
30834   if (vec_safe_length (abbrev_die_table) != 1)
30835     {
30836       switch_to_section (debug_abbrev_section);
30837       ASM_OUTPUT_LABEL (asm_out_file, abbrev_section_label);
30838       output_abbrev_section ();
30839     }
30840
30841   /* Have to end the macro section.  */
30842   if (have_macinfo)
30843     {
30844       /* We have to save macinfo state if we need to output it again
30845          for the FAT part of the object.  */
30846       vec<macinfo_entry, va_gc> *saved_macinfo_table = macinfo_table;
30847       if (flag_fat_lto_objects)
30848         macinfo_table = macinfo_table->copy ();
30849
30850       switch_to_section (debug_macinfo_section);
30851       ASM_OUTPUT_LABEL (asm_out_file, macinfo_section_label);
30852       output_macinfo (debug_skeleton_line_section_label, true);
30853       dw2_asm_output_data (1, 0, "End compilation unit");
30854
30855       /* Emit a skeleton debug_line section.  */
30856       switch_to_section (debug_skeleton_line_section);
30857       ASM_OUTPUT_LABEL (asm_out_file, debug_skeleton_line_section_label);
30858       output_line_info (true);
30859
30860       if (flag_fat_lto_objects)
30861         {
30862           vec_free (macinfo_table);
30863           macinfo_table = saved_macinfo_table;
30864         }
30865     }
30866
30867
30868   /* If we emitted any indirect strings, output the string table too.  */
30869   if (debug_str_hash || skeleton_debug_str_hash)
30870     output_indirect_strings ();
30871
30872   /* Switch back to the text section.  */
30873   switch_to_section (text_section);
30874 }
30875
30876 /* Reset all state within dwarf2out.c so that we can rerun the compiler
30877    within the same process.  For use by toplev::finalize.  */
30878
30879 void
30880 dwarf2out_c_finalize (void)
30881 {
30882   last_var_location_insn = NULL;
30883   cached_next_real_insn = NULL;
30884   used_rtx_array = NULL;
30885   incomplete_types = NULL;
30886   decl_scope_table = NULL;
30887   debug_info_section = NULL;
30888   debug_skeleton_info_section = NULL;
30889   debug_abbrev_section = NULL;
30890   debug_skeleton_abbrev_section = NULL;
30891   debug_aranges_section = NULL;
30892   debug_addr_section = NULL;
30893   debug_macinfo_section = NULL;
30894   debug_line_section = NULL;
30895   debug_skeleton_line_section = NULL;
30896   debug_loc_section = NULL;
30897   debug_pubnames_section = NULL;
30898   debug_pubtypes_section = NULL;
30899   debug_str_section = NULL;
30900   debug_line_str_section = NULL;
30901   debug_str_dwo_section = NULL;
30902   debug_str_offsets_section = NULL;
30903   debug_ranges_section = NULL;
30904   debug_frame_section = NULL;
30905   fde_vec = NULL;
30906   debug_str_hash = NULL;
30907   debug_line_str_hash = NULL;
30908   skeleton_debug_str_hash = NULL;
30909   dw2_string_counter = 0;
30910   have_multiple_function_sections = false;
30911   text_section_used = false;
30912   cold_text_section_used = false;
30913   cold_text_section = NULL;
30914   current_unit_personality = NULL;
30915
30916   early_dwarf = false;
30917   early_dwarf_finished = false;
30918
30919   next_die_offset = 0;
30920   single_comp_unit_die = NULL;
30921   comdat_type_list = NULL;
30922   limbo_die_list = NULL;
30923   file_table = NULL;
30924   decl_die_table = NULL;
30925   common_block_die_table = NULL;
30926   decl_loc_table = NULL;
30927   call_arg_locations = NULL;
30928   call_arg_loc_last = NULL;
30929   call_site_count = -1;
30930   tail_call_site_count = -1;
30931   cached_dw_loc_list_table = NULL;
30932   abbrev_die_table = NULL;
30933   delete dwarf_proc_stack_usage_map;
30934   dwarf_proc_stack_usage_map = NULL;
30935   line_info_label_num = 0;
30936   cur_line_info_table = NULL;
30937   text_section_line_info = NULL;
30938   cold_text_section_line_info = NULL;
30939   separate_line_info = NULL;
30940   info_section_emitted = false;
30941   pubname_table = NULL;
30942   pubtype_table = NULL;
30943   macinfo_table = NULL;
30944   ranges_table = NULL;
30945   ranges_by_label = NULL;
30946   rnglist_idx = 0;
30947   have_location_lists = false;
30948   loclabel_num = 0;
30949   poc_label_num = 0;
30950   last_emitted_file = NULL;
30951   label_num = 0;
30952   tmpl_value_parm_die_table = NULL;
30953   generic_type_instances = NULL;
30954   frame_pointer_fb_offset = 0;
30955   frame_pointer_fb_offset_valid = false;
30956   base_types.release ();
30957   XDELETEVEC (producer_string);
30958   producer_string = NULL;
30959 }
30960
30961 #include "gt-dwarf2out.h"