re PR debug/69244 (ICE in plus_constant, at explow.c:87 on i686-linux-gnu)
[gcc.git] / gcc / dwarf2out.c
1 /* Output Dwarf2 format symbol table information from GCC.
2 Copyright (C) 1992-2016 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 "tm_p.h"
66 #include "stringpool.h"
67 #include "insn-config.h"
68 #include "ira.h"
69 #include "cgraph.h"
70 #include "diagnostic.h"
71 #include "fold-const.h"
72 #include "stor-layout.h"
73 #include "varasm.h"
74 #include "version.h"
75 #include "flags.h"
76 #include "rtlhash.h"
77 #include "reload.h"
78 #include "output.h"
79 #include "expr.h"
80 #include "dwarf2out.h"
81 #include "dwarf2asm.h"
82 #include "toplev.h"
83 #include "md5.h"
84 #include "tree-pretty-print.h"
85 #include "debug.h"
86 #include "common/common-target.h"
87 #include "langhooks.h"
88 #include "lra.h"
89 #include "dumpfile.h"
90 #include "opts.h"
91 #include "tree-dfa.h"
92 #include "gdb/gdb-index.h"
93 #include "rtl-iter.h"
94
95 static void dwarf2out_source_line (unsigned int, const char *, int, bool);
96 static rtx_insn *last_var_location_insn;
97 static rtx_insn *cached_next_real_insn;
98 static void dwarf2out_decl (tree);
99
100 #ifndef XCOFF_DEBUGGING_INFO
101 #define XCOFF_DEBUGGING_INFO 0
102 #endif
103
104 #ifndef HAVE_XCOFF_DWARF_EXTRAS
105 #define HAVE_XCOFF_DWARF_EXTRAS 0
106 #endif
107
108 #ifdef VMS_DEBUGGING_INFO
109 int vms_file_stats_name (const char *, long long *, long *, char *, int *);
110
111 /* Define this macro to be a nonzero value if the directory specifications
112 which are output in the debug info should end with a separator. */
113 #define DWARF2_DIR_SHOULD_END_WITH_SEPARATOR 1
114 /* Define this macro to evaluate to a nonzero value if GCC should refrain
115 from generating indirect strings in DWARF2 debug information, for instance
116 if your target is stuck with an old version of GDB that is unable to
117 process them properly or uses VMS Debug. */
118 #define DWARF2_INDIRECT_STRING_SUPPORT_MISSING_ON_TARGET 1
119 #else
120 #define DWARF2_DIR_SHOULD_END_WITH_SEPARATOR 0
121 #define DWARF2_INDIRECT_STRING_SUPPORT_MISSING_ON_TARGET 0
122 #endif
123
124 /* ??? Poison these here until it can be done generically. They've been
125 totally replaced in this file; make sure it stays that way. */
126 #undef DWARF2_UNWIND_INFO
127 #undef DWARF2_FRAME_INFO
128 #if (GCC_VERSION >= 3000)
129 #pragma GCC poison DWARF2_UNWIND_INFO DWARF2_FRAME_INFO
130 #endif
131
132 /* The size of the target's pointer type. */
133 #ifndef PTR_SIZE
134 #define PTR_SIZE (POINTER_SIZE / BITS_PER_UNIT)
135 #endif
136
137 /* Array of RTXes referenced by the debugging information, which therefore
138 must be kept around forever. */
139 static GTY(()) vec<rtx, va_gc> *used_rtx_array;
140
141 /* A pointer to the base of a list of incomplete types which might be
142 completed at some later time. incomplete_types_list needs to be a
143 vec<tree, va_gc> *because we want to tell the garbage collector about
144 it. */
145 static GTY(()) vec<tree, va_gc> *incomplete_types;
146
147 /* A pointer to the base of a table of references to declaration
148 scopes. This table is a display which tracks the nesting
149 of declaration scopes at the current scope and containing
150 scopes. This table is used to find the proper place to
151 define type declaration DIE's. */
152 static GTY(()) vec<tree, va_gc> *decl_scope_table;
153
154 /* Pointers to various DWARF2 sections. */
155 static GTY(()) section *debug_info_section;
156 static GTY(()) section *debug_skeleton_info_section;
157 static GTY(()) section *debug_abbrev_section;
158 static GTY(()) section *debug_skeleton_abbrev_section;
159 static GTY(()) section *debug_aranges_section;
160 static GTY(()) section *debug_addr_section;
161 static GTY(()) section *debug_macinfo_section;
162 static GTY(()) section *debug_line_section;
163 static GTY(()) section *debug_skeleton_line_section;
164 static GTY(()) section *debug_loc_section;
165 static GTY(()) section *debug_pubnames_section;
166 static GTY(()) section *debug_pubtypes_section;
167 static GTY(()) section *debug_str_section;
168 static GTY(()) section *debug_str_dwo_section;
169 static GTY(()) section *debug_str_offsets_section;
170 static GTY(()) section *debug_ranges_section;
171 static GTY(()) section *debug_frame_section;
172
173 /* Maximum size (in bytes) of an artificially generated label. */
174 #define MAX_ARTIFICIAL_LABEL_BYTES 30
175
176 /* According to the (draft) DWARF 3 specification, the initial length
177 should either be 4 or 12 bytes. When it's 12 bytes, the first 4
178 bytes are 0xffffffff, followed by the length stored in the next 8
179 bytes.
180
181 However, the SGI/MIPS ABI uses an initial length which is equal to
182 DWARF_OFFSET_SIZE. It is defined (elsewhere) accordingly. */
183
184 #ifndef DWARF_INITIAL_LENGTH_SIZE
185 #define DWARF_INITIAL_LENGTH_SIZE (DWARF_OFFSET_SIZE == 4 ? 4 : 12)
186 #endif
187
188 /* Round SIZE up to the nearest BOUNDARY. */
189 #define DWARF_ROUND(SIZE,BOUNDARY) \
190 ((((SIZE) + (BOUNDARY) - 1) / (BOUNDARY)) * (BOUNDARY))
191
192 /* CIE identifier. */
193 #if HOST_BITS_PER_WIDE_INT >= 64
194 #define DWARF_CIE_ID \
195 (unsigned HOST_WIDE_INT) (DWARF_OFFSET_SIZE == 4 ? DW_CIE_ID : DW64_CIE_ID)
196 #else
197 #define DWARF_CIE_ID DW_CIE_ID
198 #endif
199
200
201 /* A vector for a table that contains frame description
202 information for each routine. */
203 #define NOT_INDEXED (-1U)
204 #define NO_INDEX_ASSIGNED (-2U)
205
206 static GTY(()) vec<dw_fde_ref, va_gc> *fde_vec;
207
208 struct GTY((for_user)) indirect_string_node {
209 const char *str;
210 unsigned int refcount;
211 enum dwarf_form form;
212 char *label;
213 unsigned int index;
214 };
215
216 struct indirect_string_hasher : ggc_ptr_hash<indirect_string_node>
217 {
218 typedef const char *compare_type;
219
220 static hashval_t hash (indirect_string_node *);
221 static bool equal (indirect_string_node *, const char *);
222 };
223
224 static GTY (()) hash_table<indirect_string_hasher> *debug_str_hash;
225
226 /* With split_debug_info, both the comp_dir and dwo_name go in the
227 main object file, rather than the dwo, similar to the force_direct
228 parameter elsewhere but with additional complications:
229
230 1) The string is needed in both the main object file and the dwo.
231 That is, the comp_dir and dwo_name will appear in both places.
232
233 2) Strings can use three forms: DW_FORM_string, DW_FORM_strp or
234 DW_FORM_GNU_str_index.
235
236 3) GCC chooses the form to use late, depending on the size and
237 reference count.
238
239 Rather than forcing the all debug string handling functions and
240 callers to deal with these complications, simply use a separate,
241 special-cased string table for any attribute that should go in the
242 main object file. This limits the complexity to just the places
243 that need it. */
244
245 static GTY (()) hash_table<indirect_string_hasher> *skeleton_debug_str_hash;
246
247 static GTY(()) int dw2_string_counter;
248
249 /* True if the compilation unit places functions in more than one section. */
250 static GTY(()) bool have_multiple_function_sections = false;
251
252 /* Whether the default text and cold text sections have been used at all. */
253
254 static GTY(()) bool text_section_used = false;
255 static GTY(()) bool cold_text_section_used = false;
256
257 /* The default cold text section. */
258 static GTY(()) section *cold_text_section;
259
260 /* The DIE for C++14 'auto' in a function return type. */
261 static GTY(()) dw_die_ref auto_die;
262
263 /* The DIE for C++14 'decltype(auto)' in a function return type. */
264 static GTY(()) dw_die_ref decltype_auto_die;
265
266 /* Forward declarations for functions defined in this file. */
267
268 static char *stripattributes (const char *);
269 static void output_call_frame_info (int);
270 static void dwarf2out_note_section_used (void);
271
272 /* Personality decl of current unit. Used only when assembler does not support
273 personality CFI. */
274 static GTY(()) rtx current_unit_personality;
275
276 /* Data and reference forms for relocatable data. */
277 #define DW_FORM_data (DWARF_OFFSET_SIZE == 8 ? DW_FORM_data8 : DW_FORM_data4)
278 #define DW_FORM_ref (DWARF_OFFSET_SIZE == 8 ? DW_FORM_ref8 : DW_FORM_ref4)
279
280 #ifndef DEBUG_FRAME_SECTION
281 #define DEBUG_FRAME_SECTION ".debug_frame"
282 #endif
283
284 #ifndef FUNC_BEGIN_LABEL
285 #define FUNC_BEGIN_LABEL "LFB"
286 #endif
287
288 #ifndef FUNC_END_LABEL
289 #define FUNC_END_LABEL "LFE"
290 #endif
291
292 #ifndef PROLOGUE_END_LABEL
293 #define PROLOGUE_END_LABEL "LPE"
294 #endif
295
296 #ifndef EPILOGUE_BEGIN_LABEL
297 #define EPILOGUE_BEGIN_LABEL "LEB"
298 #endif
299
300 #ifndef FRAME_BEGIN_LABEL
301 #define FRAME_BEGIN_LABEL "Lframe"
302 #endif
303 #define CIE_AFTER_SIZE_LABEL "LSCIE"
304 #define CIE_END_LABEL "LECIE"
305 #define FDE_LABEL "LSFDE"
306 #define FDE_AFTER_SIZE_LABEL "LASFDE"
307 #define FDE_END_LABEL "LEFDE"
308 #define LINE_NUMBER_BEGIN_LABEL "LSLT"
309 #define LINE_NUMBER_END_LABEL "LELT"
310 #define LN_PROLOG_AS_LABEL "LASLTP"
311 #define LN_PROLOG_END_LABEL "LELTP"
312 #define DIE_LABEL_PREFIX "DW"
313 \f
314 /* Match the base name of a file to the base name of a compilation unit. */
315
316 static int
317 matches_main_base (const char *path)
318 {
319 /* Cache the last query. */
320 static const char *last_path = NULL;
321 static int last_match = 0;
322 if (path != last_path)
323 {
324 const char *base;
325 int length = base_of_path (path, &base);
326 last_path = path;
327 last_match = (length == main_input_baselength
328 && memcmp (base, main_input_basename, length) == 0);
329 }
330 return last_match;
331 }
332
333 #ifdef DEBUG_DEBUG_STRUCT
334
335 static int
336 dump_struct_debug (tree type, enum debug_info_usage usage,
337 enum debug_struct_file criterion, int generic,
338 int matches, int result)
339 {
340 /* Find the type name. */
341 tree type_decl = TYPE_STUB_DECL (type);
342 tree t = type_decl;
343 const char *name = 0;
344 if (TREE_CODE (t) == TYPE_DECL)
345 t = DECL_NAME (t);
346 if (t)
347 name = IDENTIFIER_POINTER (t);
348
349 fprintf (stderr, " struct %d %s %s %s %s %d %p %s\n",
350 criterion,
351 DECL_IN_SYSTEM_HEADER (type_decl) ? "sys" : "usr",
352 matches ? "bas" : "hdr",
353 generic ? "gen" : "ord",
354 usage == DINFO_USAGE_DFN ? ";" :
355 usage == DINFO_USAGE_DIR_USE ? "." : "*",
356 result,
357 (void*) type_decl, name);
358 return result;
359 }
360 #define DUMP_GSTRUCT(type, usage, criterion, generic, matches, result) \
361 dump_struct_debug (type, usage, criterion, generic, matches, result)
362
363 #else
364
365 #define DUMP_GSTRUCT(type, usage, criterion, generic, matches, result) \
366 (result)
367
368 #endif
369
370 /* Get the number of HOST_WIDE_INTs needed to represent the precision
371 of the number. Some constants have a large uniform precision, so
372 we get the precision needed for the actual value of the number. */
373
374 static unsigned int
375 get_full_len (const wide_int &op)
376 {
377 int prec = wi::min_precision (op, UNSIGNED);
378 return ((prec + HOST_BITS_PER_WIDE_INT - 1)
379 / HOST_BITS_PER_WIDE_INT);
380 }
381
382 static bool
383 should_emit_struct_debug (tree type, enum debug_info_usage usage)
384 {
385 enum debug_struct_file criterion;
386 tree type_decl;
387 bool generic = lang_hooks.types.generic_p (type);
388
389 if (generic)
390 criterion = debug_struct_generic[usage];
391 else
392 criterion = debug_struct_ordinary[usage];
393
394 if (criterion == DINFO_STRUCT_FILE_NONE)
395 return DUMP_GSTRUCT (type, usage, criterion, generic, false, false);
396 if (criterion == DINFO_STRUCT_FILE_ANY)
397 return DUMP_GSTRUCT (type, usage, criterion, generic, false, true);
398
399 type_decl = TYPE_STUB_DECL (TYPE_MAIN_VARIANT (type));
400
401 if (type_decl != NULL)
402 {
403 if (criterion == DINFO_STRUCT_FILE_SYS && DECL_IN_SYSTEM_HEADER (type_decl))
404 return DUMP_GSTRUCT (type, usage, criterion, generic, false, true);
405
406 if (matches_main_base (DECL_SOURCE_FILE (type_decl)))
407 return DUMP_GSTRUCT (type, usage, criterion, generic, true, true);
408 }
409
410 return DUMP_GSTRUCT (type, usage, criterion, generic, false, false);
411 }
412 \f
413 /* Return a pointer to a copy of the section string name S with all
414 attributes stripped off, and an asterisk prepended (for assemble_name). */
415
416 static inline char *
417 stripattributes (const char *s)
418 {
419 char *stripped = XNEWVEC (char, strlen (s) + 2);
420 char *p = stripped;
421
422 *p++ = '*';
423
424 while (*s && *s != ',')
425 *p++ = *s++;
426
427 *p = '\0';
428 return stripped;
429 }
430
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 return dw_cfi_oprnd_reg_num;
540
541 case DW_CFA_def_cfa_offset:
542 case DW_CFA_GNU_args_size:
543 case DW_CFA_def_cfa_offset_sf:
544 return dw_cfi_oprnd_offset;
545
546 case DW_CFA_def_cfa_expression:
547 return dw_cfi_oprnd_loc;
548
549 default:
550 gcc_unreachable ();
551 }
552 }
553
554 /* Describe for the GTY machinery what parts of dw_cfi_oprnd2 are used. */
555
556 enum dw_cfi_oprnd_type
557 dw_cfi_oprnd2_desc (enum dwarf_call_frame_info cfi)
558 {
559 switch (cfi)
560 {
561 case DW_CFA_def_cfa:
562 case DW_CFA_def_cfa_sf:
563 case DW_CFA_offset:
564 case DW_CFA_offset_extended_sf:
565 case DW_CFA_offset_extended:
566 return dw_cfi_oprnd_offset;
567
568 case DW_CFA_register:
569 return dw_cfi_oprnd_reg_num;
570
571 case DW_CFA_expression:
572 return dw_cfi_oprnd_loc;
573
574 default:
575 return dw_cfi_oprnd_unused;
576 }
577 }
578
579 /* Output one FDE. */
580
581 static void
582 output_fde (dw_fde_ref fde, bool for_eh, bool second,
583 char *section_start_label, int fde_encoding, char *augmentation,
584 bool any_lsda_needed, int lsda_encoding)
585 {
586 const char *begin, *end;
587 static unsigned int j;
588 char l1[20], l2[20];
589
590 targetm.asm_out.emit_unwind_label (asm_out_file, fde->decl, for_eh,
591 /* empty */ 0);
592 targetm.asm_out.internal_label (asm_out_file, FDE_LABEL,
593 for_eh + j);
594 ASM_GENERATE_INTERNAL_LABEL (l1, FDE_AFTER_SIZE_LABEL, for_eh + j);
595 ASM_GENERATE_INTERNAL_LABEL (l2, FDE_END_LABEL, for_eh + j);
596 if (!XCOFF_DEBUGGING_INFO || for_eh)
597 {
598 if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4 && !for_eh)
599 dw2_asm_output_data (4, 0xffffffff, "Initial length escape value"
600 " indicating 64-bit DWARF extension");
601 dw2_asm_output_delta (for_eh ? 4 : DWARF_OFFSET_SIZE, l2, l1,
602 "FDE Length");
603 }
604 ASM_OUTPUT_LABEL (asm_out_file, l1);
605
606 if (for_eh)
607 dw2_asm_output_delta (4, l1, section_start_label, "FDE CIE offset");
608 else
609 dw2_asm_output_offset (DWARF_OFFSET_SIZE, section_start_label,
610 debug_frame_section, "FDE CIE offset");
611
612 begin = second ? fde->dw_fde_second_begin : fde->dw_fde_begin;
613 end = second ? fde->dw_fde_second_end : fde->dw_fde_end;
614
615 if (for_eh)
616 {
617 rtx sym_ref = gen_rtx_SYMBOL_REF (Pmode, begin);
618 SYMBOL_REF_FLAGS (sym_ref) |= SYMBOL_FLAG_LOCAL;
619 dw2_asm_output_encoded_addr_rtx (fde_encoding, sym_ref, false,
620 "FDE initial location");
621 dw2_asm_output_delta (size_of_encoded_value (fde_encoding),
622 end, begin, "FDE address range");
623 }
624 else
625 {
626 dw2_asm_output_addr (DWARF2_ADDR_SIZE, begin, "FDE initial location");
627 dw2_asm_output_delta (DWARF2_ADDR_SIZE, end, begin, "FDE address range");
628 }
629
630 if (augmentation[0])
631 {
632 if (any_lsda_needed)
633 {
634 int size = size_of_encoded_value (lsda_encoding);
635
636 if (lsda_encoding == DW_EH_PE_aligned)
637 {
638 int offset = ( 4 /* Length */
639 + 4 /* CIE offset */
640 + 2 * size_of_encoded_value (fde_encoding)
641 + 1 /* Augmentation size */ );
642 int pad = -offset & (PTR_SIZE - 1);
643
644 size += pad;
645 gcc_assert (size_of_uleb128 (size) == 1);
646 }
647
648 dw2_asm_output_data_uleb128 (size, "Augmentation size");
649
650 if (fde->uses_eh_lsda)
651 {
652 ASM_GENERATE_INTERNAL_LABEL (l1, second ? "LLSDAC" : "LLSDA",
653 fde->funcdef_number);
654 dw2_asm_output_encoded_addr_rtx (lsda_encoding,
655 gen_rtx_SYMBOL_REF (Pmode, l1),
656 false,
657 "Language Specific Data Area");
658 }
659 else
660 {
661 if (lsda_encoding == DW_EH_PE_aligned)
662 ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (PTR_SIZE));
663 dw2_asm_output_data (size_of_encoded_value (lsda_encoding), 0,
664 "Language Specific Data Area (none)");
665 }
666 }
667 else
668 dw2_asm_output_data_uleb128 (0, "Augmentation size");
669 }
670
671 /* Loop through the Call Frame Instructions associated with this FDE. */
672 fde->dw_fde_current_label = begin;
673 {
674 size_t from, until, i;
675
676 from = 0;
677 until = vec_safe_length (fde->dw_fde_cfi);
678
679 if (fde->dw_fde_second_begin == NULL)
680 ;
681 else if (!second)
682 until = fde->dw_fde_switch_cfi_index;
683 else
684 from = fde->dw_fde_switch_cfi_index;
685
686 for (i = from; i < until; i++)
687 output_cfi ((*fde->dw_fde_cfi)[i], fde, for_eh);
688 }
689
690 /* If we are to emit a ref/link from function bodies to their frame tables,
691 do it now. This is typically performed to make sure that tables
692 associated with functions are dragged with them and not discarded in
693 garbage collecting links. We need to do this on a per function basis to
694 cope with -ffunction-sections. */
695
696 #ifdef ASM_OUTPUT_DWARF_TABLE_REF
697 /* Switch to the function section, emit the ref to the tables, and
698 switch *back* into the table section. */
699 switch_to_section (function_section (fde->decl));
700 ASM_OUTPUT_DWARF_TABLE_REF (section_start_label);
701 switch_to_frame_table_section (for_eh, true);
702 #endif
703
704 /* Pad the FDE out to an address sized boundary. */
705 ASM_OUTPUT_ALIGN (asm_out_file,
706 floor_log2 ((for_eh ? PTR_SIZE : DWARF2_ADDR_SIZE)));
707 ASM_OUTPUT_LABEL (asm_out_file, l2);
708
709 j += 2;
710 }
711
712 /* Return true if frame description entry FDE is needed for EH. */
713
714 static bool
715 fde_needed_for_eh_p (dw_fde_ref fde)
716 {
717 if (flag_asynchronous_unwind_tables)
718 return true;
719
720 if (TARGET_USES_WEAK_UNWIND_INFO && DECL_WEAK (fde->decl))
721 return true;
722
723 if (fde->uses_eh_lsda)
724 return true;
725
726 /* If exceptions are enabled, we have collected nothrow info. */
727 if (flag_exceptions && (fde->all_throwers_are_sibcalls || fde->nothrow))
728 return false;
729
730 return true;
731 }
732
733 /* Output the call frame information used to record information
734 that relates to calculating the frame pointer, and records the
735 location of saved registers. */
736
737 static void
738 output_call_frame_info (int for_eh)
739 {
740 unsigned int i;
741 dw_fde_ref fde;
742 dw_cfi_ref cfi;
743 char l1[20], l2[20], section_start_label[20];
744 bool any_lsda_needed = false;
745 char augmentation[6];
746 int augmentation_size;
747 int fde_encoding = DW_EH_PE_absptr;
748 int per_encoding = DW_EH_PE_absptr;
749 int lsda_encoding = DW_EH_PE_absptr;
750 int return_reg;
751 rtx personality = NULL;
752 int dw_cie_version;
753
754 /* Don't emit a CIE if there won't be any FDEs. */
755 if (!fde_vec)
756 return;
757
758 /* Nothing to do if the assembler's doing it all. */
759 if (dwarf2out_do_cfi_asm ())
760 return;
761
762 /* If we don't have any functions we'll want to unwind out of, don't emit
763 any EH unwind information. If we make FDEs linkonce, we may have to
764 emit an empty label for an FDE that wouldn't otherwise be emitted. We
765 want to avoid having an FDE kept around when the function it refers to
766 is discarded. Example where this matters: a primary function template
767 in C++ requires EH information, an explicit specialization doesn't. */
768 if (for_eh)
769 {
770 bool any_eh_needed = false;
771
772 FOR_EACH_VEC_ELT (*fde_vec, i, fde)
773 {
774 if (fde->uses_eh_lsda)
775 any_eh_needed = any_lsda_needed = true;
776 else if (fde_needed_for_eh_p (fde))
777 any_eh_needed = true;
778 else if (TARGET_USES_WEAK_UNWIND_INFO)
779 targetm.asm_out.emit_unwind_label (asm_out_file, fde->decl, 1, 1);
780 }
781
782 if (!any_eh_needed)
783 return;
784 }
785
786 /* We're going to be generating comments, so turn on app. */
787 if (flag_debug_asm)
788 app_enable ();
789
790 /* Switch to the proper frame section, first time. */
791 switch_to_frame_table_section (for_eh, false);
792
793 ASM_GENERATE_INTERNAL_LABEL (section_start_label, FRAME_BEGIN_LABEL, for_eh);
794 ASM_OUTPUT_LABEL (asm_out_file, section_start_label);
795
796 /* Output the CIE. */
797 ASM_GENERATE_INTERNAL_LABEL (l1, CIE_AFTER_SIZE_LABEL, for_eh);
798 ASM_GENERATE_INTERNAL_LABEL (l2, CIE_END_LABEL, for_eh);
799 if (!XCOFF_DEBUGGING_INFO || for_eh)
800 {
801 if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4 && !for_eh)
802 dw2_asm_output_data (4, 0xffffffff,
803 "Initial length escape value indicating 64-bit DWARF extension");
804 dw2_asm_output_delta (for_eh ? 4 : DWARF_OFFSET_SIZE, l2, l1,
805 "Length of Common Information Entry");
806 }
807 ASM_OUTPUT_LABEL (asm_out_file, l1);
808
809 /* Now that the CIE pointer is PC-relative for EH,
810 use 0 to identify the CIE. */
811 dw2_asm_output_data ((for_eh ? 4 : DWARF_OFFSET_SIZE),
812 (for_eh ? 0 : DWARF_CIE_ID),
813 "CIE Identifier Tag");
814
815 /* Use the CIE version 3 for DWARF3; allow DWARF2 to continue to
816 use CIE version 1, unless that would produce incorrect results
817 due to overflowing the return register column. */
818 return_reg = DWARF2_FRAME_REG_OUT (DWARF_FRAME_RETURN_COLUMN, for_eh);
819 dw_cie_version = 1;
820 if (return_reg >= 256 || dwarf_version > 2)
821 dw_cie_version = 3;
822 dw2_asm_output_data (1, dw_cie_version, "CIE Version");
823
824 augmentation[0] = 0;
825 augmentation_size = 0;
826
827 personality = current_unit_personality;
828 if (for_eh)
829 {
830 char *p;
831
832 /* Augmentation:
833 z Indicates that a uleb128 is present to size the
834 augmentation section.
835 L Indicates the encoding (and thus presence) of
836 an LSDA pointer in the FDE augmentation.
837 R Indicates a non-default pointer encoding for
838 FDE code pointers.
839 P Indicates the presence of an encoding + language
840 personality routine in the CIE augmentation. */
841
842 fde_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/1, /*global=*/0);
843 per_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2, /*global=*/1);
844 lsda_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0, /*global=*/0);
845
846 p = augmentation + 1;
847 if (personality)
848 {
849 *p++ = 'P';
850 augmentation_size += 1 + size_of_encoded_value (per_encoding);
851 assemble_external_libcall (personality);
852 }
853 if (any_lsda_needed)
854 {
855 *p++ = 'L';
856 augmentation_size += 1;
857 }
858 if (fde_encoding != DW_EH_PE_absptr)
859 {
860 *p++ = 'R';
861 augmentation_size += 1;
862 }
863 if (p > augmentation + 1)
864 {
865 augmentation[0] = 'z';
866 *p = '\0';
867 }
868
869 /* Ug. Some platforms can't do unaligned dynamic relocations at all. */
870 if (personality && per_encoding == DW_EH_PE_aligned)
871 {
872 int offset = ( 4 /* Length */
873 + 4 /* CIE Id */
874 + 1 /* CIE version */
875 + strlen (augmentation) + 1 /* Augmentation */
876 + size_of_uleb128 (1) /* Code alignment */
877 + size_of_sleb128 (DWARF_CIE_DATA_ALIGNMENT)
878 + 1 /* RA column */
879 + 1 /* Augmentation size */
880 + 1 /* Personality encoding */ );
881 int pad = -offset & (PTR_SIZE - 1);
882
883 augmentation_size += pad;
884
885 /* Augmentations should be small, so there's scarce need to
886 iterate for a solution. Die if we exceed one uleb128 byte. */
887 gcc_assert (size_of_uleb128 (augmentation_size) == 1);
888 }
889 }
890
891 dw2_asm_output_nstring (augmentation, -1, "CIE Augmentation");
892 if (dw_cie_version >= 4)
893 {
894 dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "CIE Address Size");
895 dw2_asm_output_data (1, 0, "CIE Segment Size");
896 }
897 dw2_asm_output_data_uleb128 (1, "CIE Code Alignment Factor");
898 dw2_asm_output_data_sleb128 (DWARF_CIE_DATA_ALIGNMENT,
899 "CIE Data Alignment Factor");
900
901 if (dw_cie_version == 1)
902 dw2_asm_output_data (1, return_reg, "CIE RA Column");
903 else
904 dw2_asm_output_data_uleb128 (return_reg, "CIE RA Column");
905
906 if (augmentation[0])
907 {
908 dw2_asm_output_data_uleb128 (augmentation_size, "Augmentation size");
909 if (personality)
910 {
911 dw2_asm_output_data (1, per_encoding, "Personality (%s)",
912 eh_data_format_name (per_encoding));
913 dw2_asm_output_encoded_addr_rtx (per_encoding,
914 personality,
915 true, NULL);
916 }
917
918 if (any_lsda_needed)
919 dw2_asm_output_data (1, lsda_encoding, "LSDA Encoding (%s)",
920 eh_data_format_name (lsda_encoding));
921
922 if (fde_encoding != DW_EH_PE_absptr)
923 dw2_asm_output_data (1, fde_encoding, "FDE Encoding (%s)",
924 eh_data_format_name (fde_encoding));
925 }
926
927 FOR_EACH_VEC_ELT (*cie_cfi_vec, i, cfi)
928 output_cfi (cfi, NULL, for_eh);
929
930 /* Pad the CIE out to an address sized boundary. */
931 ASM_OUTPUT_ALIGN (asm_out_file,
932 floor_log2 (for_eh ? PTR_SIZE : DWARF2_ADDR_SIZE));
933 ASM_OUTPUT_LABEL (asm_out_file, l2);
934
935 /* Loop through all of the FDE's. */
936 FOR_EACH_VEC_ELT (*fde_vec, i, fde)
937 {
938 unsigned int k;
939
940 /* Don't emit EH unwind info for leaf functions that don't need it. */
941 if (for_eh && !fde_needed_for_eh_p (fde))
942 continue;
943
944 for (k = 0; k < (fde->dw_fde_second_begin ? 2 : 1); k++)
945 output_fde (fde, for_eh, k, section_start_label, fde_encoding,
946 augmentation, any_lsda_needed, lsda_encoding);
947 }
948
949 if (for_eh && targetm.terminate_dw2_eh_frame_info)
950 dw2_asm_output_data (4, 0, "End of Table");
951
952 /* Turn off app to make assembly quicker. */
953 if (flag_debug_asm)
954 app_disable ();
955 }
956
957 /* Emit .cfi_startproc and .cfi_personality/.cfi_lsda if needed. */
958
959 static void
960 dwarf2out_do_cfi_startproc (bool second)
961 {
962 int enc;
963 rtx ref;
964 rtx personality = get_personality_function (current_function_decl);
965
966 fprintf (asm_out_file, "\t.cfi_startproc\n");
967
968 if (personality)
969 {
970 enc = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2, /*global=*/1);
971 ref = personality;
972
973 /* ??? The GAS support isn't entirely consistent. We have to
974 handle indirect support ourselves, but PC-relative is done
975 in the assembler. Further, the assembler can't handle any
976 of the weirder relocation types. */
977 if (enc & DW_EH_PE_indirect)
978 ref = dw2_force_const_mem (ref, true);
979
980 fprintf (asm_out_file, "\t.cfi_personality %#x,", enc);
981 output_addr_const (asm_out_file, ref);
982 fputc ('\n', asm_out_file);
983 }
984
985 if (crtl->uses_eh_lsda)
986 {
987 char lab[20];
988
989 enc = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0, /*global=*/0);
990 ASM_GENERATE_INTERNAL_LABEL (lab, second ? "LLSDAC" : "LLSDA",
991 current_function_funcdef_no);
992 ref = gen_rtx_SYMBOL_REF (Pmode, lab);
993 SYMBOL_REF_FLAGS (ref) = SYMBOL_FLAG_LOCAL;
994
995 if (enc & DW_EH_PE_indirect)
996 ref = dw2_force_const_mem (ref, true);
997
998 fprintf (asm_out_file, "\t.cfi_lsda %#x,", enc);
999 output_addr_const (asm_out_file, ref);
1000 fputc ('\n', asm_out_file);
1001 }
1002 }
1003
1004 /* Allocate CURRENT_FDE. Immediately initialize all we can, noting that
1005 this allocation may be done before pass_final. */
1006
1007 dw_fde_ref
1008 dwarf2out_alloc_current_fde (void)
1009 {
1010 dw_fde_ref fde;
1011
1012 fde = ggc_cleared_alloc<dw_fde_node> ();
1013 fde->decl = current_function_decl;
1014 fde->funcdef_number = current_function_funcdef_no;
1015 fde->fde_index = vec_safe_length (fde_vec);
1016 fde->all_throwers_are_sibcalls = crtl->all_throwers_are_sibcalls;
1017 fde->uses_eh_lsda = crtl->uses_eh_lsda;
1018 fde->nothrow = crtl->nothrow;
1019 fde->drap_reg = INVALID_REGNUM;
1020 fde->vdrap_reg = INVALID_REGNUM;
1021
1022 /* Record the FDE associated with this function. */
1023 cfun->fde = fde;
1024 vec_safe_push (fde_vec, fde);
1025
1026 return fde;
1027 }
1028
1029 /* Output a marker (i.e. a label) for the beginning of a function, before
1030 the prologue. */
1031
1032 void
1033 dwarf2out_begin_prologue (unsigned int line ATTRIBUTE_UNUSED,
1034 const char *file ATTRIBUTE_UNUSED)
1035 {
1036 char label[MAX_ARTIFICIAL_LABEL_BYTES];
1037 char * dup_label;
1038 dw_fde_ref fde;
1039 section *fnsec;
1040 bool do_frame;
1041
1042 current_function_func_begin_label = NULL;
1043
1044 do_frame = dwarf2out_do_frame ();
1045
1046 /* ??? current_function_func_begin_label is also used by except.c for
1047 call-site information. We must emit this label if it might be used. */
1048 if (!do_frame
1049 && (!flag_exceptions
1050 || targetm_common.except_unwind_info (&global_options) == UI_SJLJ))
1051 return;
1052
1053 fnsec = function_section (current_function_decl);
1054 switch_to_section (fnsec);
1055 ASM_GENERATE_INTERNAL_LABEL (label, FUNC_BEGIN_LABEL,
1056 current_function_funcdef_no);
1057 ASM_OUTPUT_DEBUG_LABEL (asm_out_file, FUNC_BEGIN_LABEL,
1058 current_function_funcdef_no);
1059 dup_label = xstrdup (label);
1060 current_function_func_begin_label = dup_label;
1061
1062 /* We can elide the fde allocation if we're not emitting debug info. */
1063 if (!do_frame)
1064 return;
1065
1066 /* Cater to the various TARGET_ASM_OUTPUT_MI_THUNK implementations that
1067 emit insns as rtx but bypass the bulk of rest_of_compilation, which
1068 would include pass_dwarf2_frame. If we've not created the FDE yet,
1069 do so now. */
1070 fde = cfun->fde;
1071 if (fde == NULL)
1072 fde = dwarf2out_alloc_current_fde ();
1073
1074 /* Initialize the bits of CURRENT_FDE that were not available earlier. */
1075 fde->dw_fde_begin = dup_label;
1076 fde->dw_fde_current_label = dup_label;
1077 fde->in_std_section = (fnsec == text_section
1078 || (cold_text_section && fnsec == cold_text_section));
1079
1080 /* We only want to output line number information for the genuine dwarf2
1081 prologue case, not the eh frame case. */
1082 #ifdef DWARF2_DEBUGGING_INFO
1083 if (file)
1084 dwarf2out_source_line (line, file, 0, true);
1085 #endif
1086
1087 if (dwarf2out_do_cfi_asm ())
1088 dwarf2out_do_cfi_startproc (false);
1089 else
1090 {
1091 rtx personality = get_personality_function (current_function_decl);
1092 if (!current_unit_personality)
1093 current_unit_personality = personality;
1094
1095 /* We cannot keep a current personality per function as without CFI
1096 asm, at the point where we emit the CFI data, there is no current
1097 function anymore. */
1098 if (personality && current_unit_personality != personality)
1099 sorry ("multiple EH personalities are supported only with assemblers "
1100 "supporting .cfi_personality directive");
1101 }
1102 }
1103
1104 /* Output a marker (i.e. a label) for the end of the generated code
1105 for a function prologue. This gets called *after* the prologue code has
1106 been generated. */
1107
1108 void
1109 dwarf2out_vms_end_prologue (unsigned int line ATTRIBUTE_UNUSED,
1110 const char *file ATTRIBUTE_UNUSED)
1111 {
1112 char label[MAX_ARTIFICIAL_LABEL_BYTES];
1113
1114 /* Output a label to mark the endpoint of the code generated for this
1115 function. */
1116 ASM_GENERATE_INTERNAL_LABEL (label, PROLOGUE_END_LABEL,
1117 current_function_funcdef_no);
1118 ASM_OUTPUT_DEBUG_LABEL (asm_out_file, PROLOGUE_END_LABEL,
1119 current_function_funcdef_no);
1120 cfun->fde->dw_fde_vms_end_prologue = xstrdup (label);
1121 }
1122
1123 /* Output a marker (i.e. a label) for the beginning of the generated code
1124 for a function epilogue. This gets called *before* the prologue code has
1125 been generated. */
1126
1127 void
1128 dwarf2out_vms_begin_epilogue (unsigned int line ATTRIBUTE_UNUSED,
1129 const char *file ATTRIBUTE_UNUSED)
1130 {
1131 dw_fde_ref fde = cfun->fde;
1132 char label[MAX_ARTIFICIAL_LABEL_BYTES];
1133
1134 if (fde->dw_fde_vms_begin_epilogue)
1135 return;
1136
1137 /* Output a label to mark the endpoint of the code generated for this
1138 function. */
1139 ASM_GENERATE_INTERNAL_LABEL (label, EPILOGUE_BEGIN_LABEL,
1140 current_function_funcdef_no);
1141 ASM_OUTPUT_DEBUG_LABEL (asm_out_file, EPILOGUE_BEGIN_LABEL,
1142 current_function_funcdef_no);
1143 fde->dw_fde_vms_begin_epilogue = xstrdup (label);
1144 }
1145
1146 /* Output a marker (i.e. a label) for the absolute end of the generated code
1147 for a function definition. This gets called *after* the epilogue code has
1148 been generated. */
1149
1150 void
1151 dwarf2out_end_epilogue (unsigned int line ATTRIBUTE_UNUSED,
1152 const char *file ATTRIBUTE_UNUSED)
1153 {
1154 dw_fde_ref fde;
1155 char label[MAX_ARTIFICIAL_LABEL_BYTES];
1156
1157 last_var_location_insn = NULL;
1158 cached_next_real_insn = NULL;
1159
1160 if (dwarf2out_do_cfi_asm ())
1161 fprintf (asm_out_file, "\t.cfi_endproc\n");
1162
1163 /* Output a label to mark the endpoint of the code generated for this
1164 function. */
1165 ASM_GENERATE_INTERNAL_LABEL (label, FUNC_END_LABEL,
1166 current_function_funcdef_no);
1167 ASM_OUTPUT_LABEL (asm_out_file, label);
1168 fde = cfun->fde;
1169 gcc_assert (fde != NULL);
1170 if (fde->dw_fde_second_begin == NULL)
1171 fde->dw_fde_end = xstrdup (label);
1172 }
1173
1174 void
1175 dwarf2out_frame_finish (void)
1176 {
1177 /* Output call frame information. */
1178 if (targetm.debug_unwind_info () == UI_DWARF2)
1179 output_call_frame_info (0);
1180
1181 /* Output another copy for the unwinder. */
1182 if ((flag_unwind_tables || flag_exceptions)
1183 && targetm_common.except_unwind_info (&global_options) == UI_DWARF2)
1184 output_call_frame_info (1);
1185 }
1186
1187 /* Note that the current function section is being used for code. */
1188
1189 static void
1190 dwarf2out_note_section_used (void)
1191 {
1192 section *sec = current_function_section ();
1193 if (sec == text_section)
1194 text_section_used = true;
1195 else if (sec == cold_text_section)
1196 cold_text_section_used = true;
1197 }
1198
1199 static void var_location_switch_text_section (void);
1200 static void set_cur_line_info_table (section *);
1201
1202 void
1203 dwarf2out_switch_text_section (void)
1204 {
1205 section *sect;
1206 dw_fde_ref fde = cfun->fde;
1207
1208 gcc_assert (cfun && fde && fde->dw_fde_second_begin == NULL);
1209
1210 if (!in_cold_section_p)
1211 {
1212 fde->dw_fde_end = crtl->subsections.cold_section_end_label;
1213 fde->dw_fde_second_begin = crtl->subsections.hot_section_label;
1214 fde->dw_fde_second_end = crtl->subsections.hot_section_end_label;
1215 }
1216 else
1217 {
1218 fde->dw_fde_end = crtl->subsections.hot_section_end_label;
1219 fde->dw_fde_second_begin = crtl->subsections.cold_section_label;
1220 fde->dw_fde_second_end = crtl->subsections.cold_section_end_label;
1221 }
1222 have_multiple_function_sections = true;
1223
1224 /* There is no need to mark used sections when not debugging. */
1225 if (cold_text_section != NULL)
1226 dwarf2out_note_section_used ();
1227
1228 if (dwarf2out_do_cfi_asm ())
1229 fprintf (asm_out_file, "\t.cfi_endproc\n");
1230
1231 /* Now do the real section switch. */
1232 sect = current_function_section ();
1233 switch_to_section (sect);
1234
1235 fde->second_in_std_section
1236 = (sect == text_section
1237 || (cold_text_section && sect == cold_text_section));
1238
1239 if (dwarf2out_do_cfi_asm ())
1240 dwarf2out_do_cfi_startproc (true);
1241
1242 var_location_switch_text_section ();
1243
1244 if (cold_text_section != NULL)
1245 set_cur_line_info_table (sect);
1246 }
1247 \f
1248 /* And now, the subset of the debugging information support code necessary
1249 for emitting location expressions. */
1250
1251 /* Data about a single source file. */
1252 struct GTY((for_user)) dwarf_file_data {
1253 const char * filename;
1254 int emitted_number;
1255 };
1256
1257 /* Describe an entry into the .debug_addr section. */
1258
1259 enum ate_kind {
1260 ate_kind_rtx,
1261 ate_kind_rtx_dtprel,
1262 ate_kind_label
1263 };
1264
1265 struct GTY((for_user)) addr_table_entry {
1266 enum ate_kind kind;
1267 unsigned int refcount;
1268 unsigned int index;
1269 union addr_table_entry_struct_union
1270 {
1271 rtx GTY ((tag ("0"))) rtl;
1272 char * GTY ((tag ("1"))) label;
1273 }
1274 GTY ((desc ("%1.kind"))) addr;
1275 };
1276
1277 /* Location lists are ranges + location descriptions for that range,
1278 so you can track variables that are in different places over
1279 their entire life. */
1280 typedef struct GTY(()) dw_loc_list_struct {
1281 dw_loc_list_ref dw_loc_next;
1282 const char *begin; /* Label and addr_entry for start of range */
1283 addr_table_entry *begin_entry;
1284 const char *end; /* Label for end of range */
1285 char *ll_symbol; /* Label for beginning of location list.
1286 Only on head of list */
1287 const char *section; /* Section this loclist is relative to */
1288 dw_loc_descr_ref expr;
1289 hashval_t hash;
1290 /* True if all addresses in this and subsequent lists are known to be
1291 resolved. */
1292 bool resolved_addr;
1293 /* True if this list has been replaced by dw_loc_next. */
1294 bool replaced;
1295 bool emitted;
1296 /* True if the range should be emitted even if begin and end
1297 are the same. */
1298 bool force;
1299 } dw_loc_list_node;
1300
1301 static dw_loc_descr_ref int_loc_descriptor (HOST_WIDE_INT);
1302 static dw_loc_descr_ref uint_loc_descriptor (unsigned HOST_WIDE_INT);
1303
1304 /* Convert a DWARF stack opcode into its string name. */
1305
1306 static const char *
1307 dwarf_stack_op_name (unsigned int op)
1308 {
1309 const char *name = get_DW_OP_name (op);
1310
1311 if (name != NULL)
1312 return name;
1313
1314 return "OP_<unknown>";
1315 }
1316
1317 /* Return a pointer to a newly allocated location description. Location
1318 descriptions are simple expression terms that can be strung
1319 together to form more complicated location (address) descriptions. */
1320
1321 static inline dw_loc_descr_ref
1322 new_loc_descr (enum dwarf_location_atom op, unsigned HOST_WIDE_INT oprnd1,
1323 unsigned HOST_WIDE_INT oprnd2)
1324 {
1325 dw_loc_descr_ref descr = ggc_cleared_alloc<dw_loc_descr_node> ();
1326
1327 descr->dw_loc_opc = op;
1328 #if ENABLE_CHECKING
1329 descr->dw_loc_frame_offset = -1;
1330 #endif
1331 descr->dw_loc_oprnd1.val_class = dw_val_class_unsigned_const;
1332 descr->dw_loc_oprnd1.val_entry = NULL;
1333 descr->dw_loc_oprnd1.v.val_unsigned = oprnd1;
1334 descr->dw_loc_oprnd2.val_class = dw_val_class_unsigned_const;
1335 descr->dw_loc_oprnd2.val_entry = NULL;
1336 descr->dw_loc_oprnd2.v.val_unsigned = oprnd2;
1337
1338 return descr;
1339 }
1340
1341 /* Return a pointer to a newly allocated location description for
1342 REG and OFFSET. */
1343
1344 static inline dw_loc_descr_ref
1345 new_reg_loc_descr (unsigned int reg, unsigned HOST_WIDE_INT offset)
1346 {
1347 if (reg <= 31)
1348 return new_loc_descr ((enum dwarf_location_atom) (DW_OP_breg0 + reg),
1349 offset, 0);
1350 else
1351 return new_loc_descr (DW_OP_bregx, reg, offset);
1352 }
1353
1354 /* Add a location description term to a location description expression. */
1355
1356 static inline void
1357 add_loc_descr (dw_loc_descr_ref *list_head, dw_loc_descr_ref descr)
1358 {
1359 dw_loc_descr_ref *d;
1360
1361 /* Find the end of the chain. */
1362 for (d = list_head; (*d) != NULL; d = &(*d)->dw_loc_next)
1363 ;
1364
1365 *d = descr;
1366 }
1367
1368 /* Compare two location operands for exact equality. */
1369
1370 static bool
1371 dw_val_equal_p (dw_val_node *a, dw_val_node *b)
1372 {
1373 if (a->val_class != b->val_class)
1374 return false;
1375 switch (a->val_class)
1376 {
1377 case dw_val_class_none:
1378 return true;
1379 case dw_val_class_addr:
1380 return rtx_equal_p (a->v.val_addr, b->v.val_addr);
1381
1382 case dw_val_class_offset:
1383 case dw_val_class_unsigned_const:
1384 case dw_val_class_const:
1385 case dw_val_class_range_list:
1386 case dw_val_class_lineptr:
1387 case dw_val_class_macptr:
1388 /* These are all HOST_WIDE_INT, signed or unsigned. */
1389 return a->v.val_unsigned == b->v.val_unsigned;
1390
1391 case dw_val_class_loc:
1392 return a->v.val_loc == b->v.val_loc;
1393 case dw_val_class_loc_list:
1394 return a->v.val_loc_list == b->v.val_loc_list;
1395 case dw_val_class_die_ref:
1396 return a->v.val_die_ref.die == b->v.val_die_ref.die;
1397 case dw_val_class_fde_ref:
1398 return a->v.val_fde_index == b->v.val_fde_index;
1399 case dw_val_class_lbl_id:
1400 case dw_val_class_high_pc:
1401 return strcmp (a->v.val_lbl_id, b->v.val_lbl_id) == 0;
1402 case dw_val_class_str:
1403 return a->v.val_str == b->v.val_str;
1404 case dw_val_class_flag:
1405 return a->v.val_flag == b->v.val_flag;
1406 case dw_val_class_file:
1407 return a->v.val_file == b->v.val_file;
1408 case dw_val_class_decl_ref:
1409 return a->v.val_decl_ref == b->v.val_decl_ref;
1410
1411 case dw_val_class_const_double:
1412 return (a->v.val_double.high == b->v.val_double.high
1413 && a->v.val_double.low == b->v.val_double.low);
1414
1415 case dw_val_class_wide_int:
1416 return *a->v.val_wide == *b->v.val_wide;
1417
1418 case dw_val_class_vec:
1419 {
1420 size_t a_len = a->v.val_vec.elt_size * a->v.val_vec.length;
1421 size_t b_len = b->v.val_vec.elt_size * b->v.val_vec.length;
1422
1423 return (a_len == b_len
1424 && !memcmp (a->v.val_vec.array, b->v.val_vec.array, a_len));
1425 }
1426
1427 case dw_val_class_data8:
1428 return memcmp (a->v.val_data8, b->v.val_data8, 8) == 0;
1429
1430 case dw_val_class_vms_delta:
1431 return (!strcmp (a->v.val_vms_delta.lbl1, b->v.val_vms_delta.lbl1)
1432 && !strcmp (a->v.val_vms_delta.lbl1, b->v.val_vms_delta.lbl1));
1433
1434 case dw_val_class_discr_value:
1435 return (a->v.val_discr_value.pos == b->v.val_discr_value.pos
1436 && a->v.val_discr_value.v.uval == b->v.val_discr_value.v.uval);
1437 case dw_val_class_discr_list:
1438 /* It makes no sense comparing two discriminant value lists. */
1439 return false;
1440 }
1441 gcc_unreachable ();
1442 }
1443
1444 /* Compare two location atoms for exact equality. */
1445
1446 static bool
1447 loc_descr_equal_p_1 (dw_loc_descr_ref a, dw_loc_descr_ref b)
1448 {
1449 if (a->dw_loc_opc != b->dw_loc_opc)
1450 return false;
1451
1452 /* ??? This is only ever set for DW_OP_constNu, for N equal to the
1453 address size, but since we always allocate cleared storage it
1454 should be zero for other types of locations. */
1455 if (a->dtprel != b->dtprel)
1456 return false;
1457
1458 return (dw_val_equal_p (&a->dw_loc_oprnd1, &b->dw_loc_oprnd1)
1459 && dw_val_equal_p (&a->dw_loc_oprnd2, &b->dw_loc_oprnd2));
1460 }
1461
1462 /* Compare two complete location expressions for exact equality. */
1463
1464 bool
1465 loc_descr_equal_p (dw_loc_descr_ref a, dw_loc_descr_ref b)
1466 {
1467 while (1)
1468 {
1469 if (a == b)
1470 return true;
1471 if (a == NULL || b == NULL)
1472 return false;
1473 if (!loc_descr_equal_p_1 (a, b))
1474 return false;
1475
1476 a = a->dw_loc_next;
1477 b = b->dw_loc_next;
1478 }
1479 }
1480
1481
1482 /* Add a constant OFFSET to a location expression. */
1483
1484 static void
1485 loc_descr_plus_const (dw_loc_descr_ref *list_head, HOST_WIDE_INT offset)
1486 {
1487 dw_loc_descr_ref loc;
1488 HOST_WIDE_INT *p;
1489
1490 gcc_assert (*list_head != NULL);
1491
1492 if (!offset)
1493 return;
1494
1495 /* Find the end of the chain. */
1496 for (loc = *list_head; loc->dw_loc_next != NULL; loc = loc->dw_loc_next)
1497 ;
1498
1499 p = NULL;
1500 if (loc->dw_loc_opc == DW_OP_fbreg
1501 || (loc->dw_loc_opc >= DW_OP_breg0 && loc->dw_loc_opc <= DW_OP_breg31))
1502 p = &loc->dw_loc_oprnd1.v.val_int;
1503 else if (loc->dw_loc_opc == DW_OP_bregx)
1504 p = &loc->dw_loc_oprnd2.v.val_int;
1505
1506 /* If the last operation is fbreg, breg{0..31,x}, optimize by adjusting its
1507 offset. Don't optimize if an signed integer overflow would happen. */
1508 if (p != NULL
1509 && ((offset > 0 && *p <= INTTYPE_MAXIMUM (HOST_WIDE_INT) - offset)
1510 || (offset < 0 && *p >= INTTYPE_MINIMUM (HOST_WIDE_INT) - offset)))
1511 *p += offset;
1512
1513 else if (offset > 0)
1514 loc->dw_loc_next = new_loc_descr (DW_OP_plus_uconst, offset, 0);
1515
1516 else
1517 {
1518 loc->dw_loc_next = int_loc_descriptor (-offset);
1519 add_loc_descr (&loc->dw_loc_next, new_loc_descr (DW_OP_minus, 0, 0));
1520 }
1521 }
1522
1523 /* Add a constant OFFSET to a location list. */
1524
1525 static void
1526 loc_list_plus_const (dw_loc_list_ref list_head, HOST_WIDE_INT offset)
1527 {
1528 dw_loc_list_ref d;
1529 for (d = list_head; d != NULL; d = d->dw_loc_next)
1530 loc_descr_plus_const (&d->expr, offset);
1531 }
1532
1533 #define DWARF_REF_SIZE \
1534 (dwarf_version == 2 ? DWARF2_ADDR_SIZE : DWARF_OFFSET_SIZE)
1535
1536 static unsigned long int get_base_type_offset (dw_die_ref);
1537
1538 /* Return the size of a location descriptor. */
1539
1540 static unsigned long
1541 size_of_loc_descr (dw_loc_descr_ref loc)
1542 {
1543 unsigned long size = 1;
1544
1545 switch (loc->dw_loc_opc)
1546 {
1547 case DW_OP_addr:
1548 size += DWARF2_ADDR_SIZE;
1549 break;
1550 case DW_OP_GNU_addr_index:
1551 case DW_OP_GNU_const_index:
1552 gcc_assert (loc->dw_loc_oprnd1.val_entry->index != NO_INDEX_ASSIGNED);
1553 size += size_of_uleb128 (loc->dw_loc_oprnd1.val_entry->index);
1554 break;
1555 case DW_OP_const1u:
1556 case DW_OP_const1s:
1557 size += 1;
1558 break;
1559 case DW_OP_const2u:
1560 case DW_OP_const2s:
1561 size += 2;
1562 break;
1563 case DW_OP_const4u:
1564 case DW_OP_const4s:
1565 size += 4;
1566 break;
1567 case DW_OP_const8u:
1568 case DW_OP_const8s:
1569 size += 8;
1570 break;
1571 case DW_OP_constu:
1572 size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
1573 break;
1574 case DW_OP_consts:
1575 size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
1576 break;
1577 case DW_OP_pick:
1578 size += 1;
1579 break;
1580 case DW_OP_plus_uconst:
1581 size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
1582 break;
1583 case DW_OP_skip:
1584 case DW_OP_bra:
1585 size += 2;
1586 break;
1587 case DW_OP_breg0:
1588 case DW_OP_breg1:
1589 case DW_OP_breg2:
1590 case DW_OP_breg3:
1591 case DW_OP_breg4:
1592 case DW_OP_breg5:
1593 case DW_OP_breg6:
1594 case DW_OP_breg7:
1595 case DW_OP_breg8:
1596 case DW_OP_breg9:
1597 case DW_OP_breg10:
1598 case DW_OP_breg11:
1599 case DW_OP_breg12:
1600 case DW_OP_breg13:
1601 case DW_OP_breg14:
1602 case DW_OP_breg15:
1603 case DW_OP_breg16:
1604 case DW_OP_breg17:
1605 case DW_OP_breg18:
1606 case DW_OP_breg19:
1607 case DW_OP_breg20:
1608 case DW_OP_breg21:
1609 case DW_OP_breg22:
1610 case DW_OP_breg23:
1611 case DW_OP_breg24:
1612 case DW_OP_breg25:
1613 case DW_OP_breg26:
1614 case DW_OP_breg27:
1615 case DW_OP_breg28:
1616 case DW_OP_breg29:
1617 case DW_OP_breg30:
1618 case DW_OP_breg31:
1619 size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
1620 break;
1621 case DW_OP_regx:
1622 size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
1623 break;
1624 case DW_OP_fbreg:
1625 size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
1626 break;
1627 case DW_OP_bregx:
1628 size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
1629 size += size_of_sleb128 (loc->dw_loc_oprnd2.v.val_int);
1630 break;
1631 case DW_OP_piece:
1632 size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
1633 break;
1634 case DW_OP_bit_piece:
1635 size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
1636 size += size_of_uleb128 (loc->dw_loc_oprnd2.v.val_unsigned);
1637 break;
1638 case DW_OP_deref_size:
1639 case DW_OP_xderef_size:
1640 size += 1;
1641 break;
1642 case DW_OP_call2:
1643 size += 2;
1644 break;
1645 case DW_OP_call4:
1646 size += 4;
1647 break;
1648 case DW_OP_call_ref:
1649 size += DWARF_REF_SIZE;
1650 break;
1651 case DW_OP_implicit_value:
1652 size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned)
1653 + loc->dw_loc_oprnd1.v.val_unsigned;
1654 break;
1655 case DW_OP_GNU_implicit_pointer:
1656 size += DWARF_REF_SIZE + size_of_sleb128 (loc->dw_loc_oprnd2.v.val_int);
1657 break;
1658 case DW_OP_GNU_entry_value:
1659 {
1660 unsigned long op_size = size_of_locs (loc->dw_loc_oprnd1.v.val_loc);
1661 size += size_of_uleb128 (op_size) + op_size;
1662 break;
1663 }
1664 case DW_OP_GNU_const_type:
1665 {
1666 unsigned long o
1667 = get_base_type_offset (loc->dw_loc_oprnd1.v.val_die_ref.die);
1668 size += size_of_uleb128 (o) + 1;
1669 switch (loc->dw_loc_oprnd2.val_class)
1670 {
1671 case dw_val_class_vec:
1672 size += loc->dw_loc_oprnd2.v.val_vec.length
1673 * loc->dw_loc_oprnd2.v.val_vec.elt_size;
1674 break;
1675 case dw_val_class_const:
1676 size += HOST_BITS_PER_WIDE_INT / BITS_PER_UNIT;
1677 break;
1678 case dw_val_class_const_double:
1679 size += HOST_BITS_PER_DOUBLE_INT / BITS_PER_UNIT;
1680 break;
1681 case dw_val_class_wide_int:
1682 size += (get_full_len (*loc->dw_loc_oprnd2.v.val_wide)
1683 * HOST_BITS_PER_WIDE_INT / BITS_PER_UNIT);
1684 break;
1685 default:
1686 gcc_unreachable ();
1687 }
1688 break;
1689 }
1690 case DW_OP_GNU_regval_type:
1691 {
1692 unsigned long o
1693 = get_base_type_offset (loc->dw_loc_oprnd2.v.val_die_ref.die);
1694 size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned)
1695 + size_of_uleb128 (o);
1696 }
1697 break;
1698 case DW_OP_GNU_deref_type:
1699 {
1700 unsigned long o
1701 = get_base_type_offset (loc->dw_loc_oprnd2.v.val_die_ref.die);
1702 size += 1 + size_of_uleb128 (o);
1703 }
1704 break;
1705 case DW_OP_GNU_convert:
1706 case DW_OP_GNU_reinterpret:
1707 if (loc->dw_loc_oprnd1.val_class == dw_val_class_unsigned_const)
1708 size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
1709 else
1710 {
1711 unsigned long o
1712 = get_base_type_offset (loc->dw_loc_oprnd1.v.val_die_ref.die);
1713 size += size_of_uleb128 (o);
1714 }
1715 break;
1716 case DW_OP_GNU_parameter_ref:
1717 size += 4;
1718 break;
1719 default:
1720 break;
1721 }
1722
1723 return size;
1724 }
1725
1726 /* Return the size of a series of location descriptors. */
1727
1728 unsigned long
1729 size_of_locs (dw_loc_descr_ref loc)
1730 {
1731 dw_loc_descr_ref l;
1732 unsigned long size;
1733
1734 /* If there are no skip or bra opcodes, don't fill in the dw_loc_addr
1735 field, to avoid writing to a PCH file. */
1736 for (size = 0, l = loc; l != NULL; l = l->dw_loc_next)
1737 {
1738 if (l->dw_loc_opc == DW_OP_skip || l->dw_loc_opc == DW_OP_bra)
1739 break;
1740 size += size_of_loc_descr (l);
1741 }
1742 if (! l)
1743 return size;
1744
1745 for (size = 0, l = loc; l != NULL; l = l->dw_loc_next)
1746 {
1747 l->dw_loc_addr = size;
1748 size += size_of_loc_descr (l);
1749 }
1750
1751 return size;
1752 }
1753
1754 /* Return the size of the value in a DW_AT_discr_value attribute. */
1755
1756 static int
1757 size_of_discr_value (dw_discr_value *discr_value)
1758 {
1759 if (discr_value->pos)
1760 return size_of_uleb128 (discr_value->v.uval);
1761 else
1762 return size_of_sleb128 (discr_value->v.sval);
1763 }
1764
1765 /* Return the size of the value in a DW_discr_list attribute. */
1766
1767 static int
1768 size_of_discr_list (dw_discr_list_ref discr_list)
1769 {
1770 int size = 0;
1771
1772 for (dw_discr_list_ref list = discr_list;
1773 list != NULL;
1774 list = list->dw_discr_next)
1775 {
1776 /* One byte for the discriminant value descriptor, and then one or two
1777 LEB128 numbers, depending on whether it's a single case label or a
1778 range label. */
1779 size += 1;
1780 size += size_of_discr_value (&list->dw_discr_lower_bound);
1781 if (list->dw_discr_range != 0)
1782 size += size_of_discr_value (&list->dw_discr_upper_bound);
1783 }
1784 return size;
1785 }
1786
1787 static HOST_WIDE_INT extract_int (const unsigned char *, unsigned);
1788 static void get_ref_die_offset_label (char *, dw_die_ref);
1789 static unsigned long int get_ref_die_offset (dw_die_ref);
1790
1791 /* Output location description stack opcode's operands (if any).
1792 The for_eh_or_skip parameter controls whether register numbers are
1793 converted using DWARF2_FRAME_REG_OUT, which is needed in the case that
1794 hard reg numbers have been processed via DWARF_FRAME_REGNUM (i.e. for unwind
1795 info). This should be suppressed for the cases that have not been converted
1796 (i.e. symbolic debug info), by setting the parameter < 0. See PR47324. */
1797
1798 static void
1799 output_loc_operands (dw_loc_descr_ref loc, int for_eh_or_skip)
1800 {
1801 dw_val_ref val1 = &loc->dw_loc_oprnd1;
1802 dw_val_ref val2 = &loc->dw_loc_oprnd2;
1803
1804 switch (loc->dw_loc_opc)
1805 {
1806 #ifdef DWARF2_DEBUGGING_INFO
1807 case DW_OP_const2u:
1808 case DW_OP_const2s:
1809 dw2_asm_output_data (2, val1->v.val_int, NULL);
1810 break;
1811 case DW_OP_const4u:
1812 if (loc->dtprel)
1813 {
1814 gcc_assert (targetm.asm_out.output_dwarf_dtprel);
1815 targetm.asm_out.output_dwarf_dtprel (asm_out_file, 4,
1816 val1->v.val_addr);
1817 fputc ('\n', asm_out_file);
1818 break;
1819 }
1820 /* FALLTHRU */
1821 case DW_OP_const4s:
1822 dw2_asm_output_data (4, val1->v.val_int, NULL);
1823 break;
1824 case DW_OP_const8u:
1825 if (loc->dtprel)
1826 {
1827 gcc_assert (targetm.asm_out.output_dwarf_dtprel);
1828 targetm.asm_out.output_dwarf_dtprel (asm_out_file, 8,
1829 val1->v.val_addr);
1830 fputc ('\n', asm_out_file);
1831 break;
1832 }
1833 /* FALLTHRU */
1834 case DW_OP_const8s:
1835 gcc_assert (HOST_BITS_PER_WIDE_INT >= 64);
1836 dw2_asm_output_data (8, val1->v.val_int, NULL);
1837 break;
1838 case DW_OP_skip:
1839 case DW_OP_bra:
1840 {
1841 int offset;
1842
1843 gcc_assert (val1->val_class == dw_val_class_loc);
1844 offset = val1->v.val_loc->dw_loc_addr - (loc->dw_loc_addr + 3);
1845
1846 dw2_asm_output_data (2, offset, NULL);
1847 }
1848 break;
1849 case DW_OP_implicit_value:
1850 dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
1851 switch (val2->val_class)
1852 {
1853 case dw_val_class_const:
1854 dw2_asm_output_data (val1->v.val_unsigned, val2->v.val_int, NULL);
1855 break;
1856 case dw_val_class_vec:
1857 {
1858 unsigned int elt_size = val2->v.val_vec.elt_size;
1859 unsigned int len = val2->v.val_vec.length;
1860 unsigned int i;
1861 unsigned char *p;
1862
1863 if (elt_size > sizeof (HOST_WIDE_INT))
1864 {
1865 elt_size /= 2;
1866 len *= 2;
1867 }
1868 for (i = 0, p = val2->v.val_vec.array;
1869 i < len;
1870 i++, p += elt_size)
1871 dw2_asm_output_data (elt_size, extract_int (p, elt_size),
1872 "fp or vector constant word %u", i);
1873 }
1874 break;
1875 case dw_val_class_const_double:
1876 {
1877 unsigned HOST_WIDE_INT first, second;
1878
1879 if (WORDS_BIG_ENDIAN)
1880 {
1881 first = val2->v.val_double.high;
1882 second = val2->v.val_double.low;
1883 }
1884 else
1885 {
1886 first = val2->v.val_double.low;
1887 second = val2->v.val_double.high;
1888 }
1889 dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR,
1890 first, NULL);
1891 dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR,
1892 second, NULL);
1893 }
1894 break;
1895 case dw_val_class_wide_int:
1896 {
1897 int i;
1898 int len = get_full_len (*val2->v.val_wide);
1899 if (WORDS_BIG_ENDIAN)
1900 for (i = len - 1; i >= 0; --i)
1901 dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR,
1902 val2->v.val_wide->elt (i), NULL);
1903 else
1904 for (i = 0; i < len; ++i)
1905 dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR,
1906 val2->v.val_wide->elt (i), NULL);
1907 }
1908 break;
1909 case dw_val_class_addr:
1910 gcc_assert (val1->v.val_unsigned == DWARF2_ADDR_SIZE);
1911 dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE, val2->v.val_addr, NULL);
1912 break;
1913 default:
1914 gcc_unreachable ();
1915 }
1916 break;
1917 #else
1918 case DW_OP_const2u:
1919 case DW_OP_const2s:
1920 case DW_OP_const4u:
1921 case DW_OP_const4s:
1922 case DW_OP_const8u:
1923 case DW_OP_const8s:
1924 case DW_OP_skip:
1925 case DW_OP_bra:
1926 case DW_OP_implicit_value:
1927 /* We currently don't make any attempt to make sure these are
1928 aligned properly like we do for the main unwind info, so
1929 don't support emitting things larger than a byte if we're
1930 only doing unwinding. */
1931 gcc_unreachable ();
1932 #endif
1933 case DW_OP_const1u:
1934 case DW_OP_const1s:
1935 dw2_asm_output_data (1, val1->v.val_int, NULL);
1936 break;
1937 case DW_OP_constu:
1938 dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
1939 break;
1940 case DW_OP_consts:
1941 dw2_asm_output_data_sleb128 (val1->v.val_int, NULL);
1942 break;
1943 case DW_OP_pick:
1944 dw2_asm_output_data (1, val1->v.val_int, NULL);
1945 break;
1946 case DW_OP_plus_uconst:
1947 dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
1948 break;
1949 case DW_OP_breg0:
1950 case DW_OP_breg1:
1951 case DW_OP_breg2:
1952 case DW_OP_breg3:
1953 case DW_OP_breg4:
1954 case DW_OP_breg5:
1955 case DW_OP_breg6:
1956 case DW_OP_breg7:
1957 case DW_OP_breg8:
1958 case DW_OP_breg9:
1959 case DW_OP_breg10:
1960 case DW_OP_breg11:
1961 case DW_OP_breg12:
1962 case DW_OP_breg13:
1963 case DW_OP_breg14:
1964 case DW_OP_breg15:
1965 case DW_OP_breg16:
1966 case DW_OP_breg17:
1967 case DW_OP_breg18:
1968 case DW_OP_breg19:
1969 case DW_OP_breg20:
1970 case DW_OP_breg21:
1971 case DW_OP_breg22:
1972 case DW_OP_breg23:
1973 case DW_OP_breg24:
1974 case DW_OP_breg25:
1975 case DW_OP_breg26:
1976 case DW_OP_breg27:
1977 case DW_OP_breg28:
1978 case DW_OP_breg29:
1979 case DW_OP_breg30:
1980 case DW_OP_breg31:
1981 dw2_asm_output_data_sleb128 (val1->v.val_int, NULL);
1982 break;
1983 case DW_OP_regx:
1984 {
1985 unsigned r = val1->v.val_unsigned;
1986 if (for_eh_or_skip >= 0)
1987 r = DWARF2_FRAME_REG_OUT (r, for_eh_or_skip);
1988 gcc_assert (size_of_uleb128 (r)
1989 == size_of_uleb128 (val1->v.val_unsigned));
1990 dw2_asm_output_data_uleb128 (r, NULL);
1991 }
1992 break;
1993 case DW_OP_fbreg:
1994 dw2_asm_output_data_sleb128 (val1->v.val_int, NULL);
1995 break;
1996 case DW_OP_bregx:
1997 {
1998 unsigned r = val1->v.val_unsigned;
1999 if (for_eh_or_skip >= 0)
2000 r = DWARF2_FRAME_REG_OUT (r, for_eh_or_skip);
2001 gcc_assert (size_of_uleb128 (r)
2002 == size_of_uleb128 (val1->v.val_unsigned));
2003 dw2_asm_output_data_uleb128 (r, NULL);
2004 dw2_asm_output_data_sleb128 (val2->v.val_int, NULL);
2005 }
2006 break;
2007 case DW_OP_piece:
2008 dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
2009 break;
2010 case DW_OP_bit_piece:
2011 dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
2012 dw2_asm_output_data_uleb128 (val2->v.val_unsigned, NULL);
2013 break;
2014 case DW_OP_deref_size:
2015 case DW_OP_xderef_size:
2016 dw2_asm_output_data (1, val1->v.val_int, NULL);
2017 break;
2018
2019 case DW_OP_addr:
2020 if (loc->dtprel)
2021 {
2022 if (targetm.asm_out.output_dwarf_dtprel)
2023 {
2024 targetm.asm_out.output_dwarf_dtprel (asm_out_file,
2025 DWARF2_ADDR_SIZE,
2026 val1->v.val_addr);
2027 fputc ('\n', asm_out_file);
2028 }
2029 else
2030 gcc_unreachable ();
2031 }
2032 else
2033 {
2034 #ifdef DWARF2_DEBUGGING_INFO
2035 dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE, val1->v.val_addr, NULL);
2036 #else
2037 gcc_unreachable ();
2038 #endif
2039 }
2040 break;
2041
2042 case DW_OP_GNU_addr_index:
2043 case DW_OP_GNU_const_index:
2044 gcc_assert (loc->dw_loc_oprnd1.val_entry->index != NO_INDEX_ASSIGNED);
2045 dw2_asm_output_data_uleb128 (loc->dw_loc_oprnd1.val_entry->index,
2046 "(index into .debug_addr)");
2047 break;
2048
2049 case DW_OP_call2:
2050 case DW_OP_call4:
2051 {
2052 unsigned long die_offset
2053 = get_ref_die_offset (val1->v.val_die_ref.die);
2054 /* Make sure the offset has been computed and that we can encode it as
2055 an operand. */
2056 gcc_assert (die_offset > 0
2057 && die_offset <= (loc->dw_loc_opc == DW_OP_call2)
2058 ? 0xffff
2059 : 0xffffffff);
2060 dw2_asm_output_data ((loc->dw_loc_opc == DW_OP_call2) ? 2 : 4,
2061 die_offset, NULL);
2062 }
2063 break;
2064
2065 case DW_OP_GNU_implicit_pointer:
2066 {
2067 char label[MAX_ARTIFICIAL_LABEL_BYTES
2068 + HOST_BITS_PER_WIDE_INT / 2 + 2];
2069 gcc_assert (val1->val_class == dw_val_class_die_ref);
2070 get_ref_die_offset_label (label, val1->v.val_die_ref.die);
2071 dw2_asm_output_offset (DWARF_REF_SIZE, label, debug_info_section, NULL);
2072 dw2_asm_output_data_sleb128 (val2->v.val_int, NULL);
2073 }
2074 break;
2075
2076 case DW_OP_GNU_entry_value:
2077 dw2_asm_output_data_uleb128 (size_of_locs (val1->v.val_loc), NULL);
2078 output_loc_sequence (val1->v.val_loc, for_eh_or_skip);
2079 break;
2080
2081 case DW_OP_GNU_const_type:
2082 {
2083 unsigned long o = get_base_type_offset (val1->v.val_die_ref.die), l;
2084 gcc_assert (o);
2085 dw2_asm_output_data_uleb128 (o, NULL);
2086 switch (val2->val_class)
2087 {
2088 case dw_val_class_const:
2089 l = HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR;
2090 dw2_asm_output_data (1, l, NULL);
2091 dw2_asm_output_data (l, val2->v.val_int, NULL);
2092 break;
2093 case dw_val_class_vec:
2094 {
2095 unsigned int elt_size = val2->v.val_vec.elt_size;
2096 unsigned int len = val2->v.val_vec.length;
2097 unsigned int i;
2098 unsigned char *p;
2099
2100 l = len * elt_size;
2101 dw2_asm_output_data (1, l, NULL);
2102 if (elt_size > sizeof (HOST_WIDE_INT))
2103 {
2104 elt_size /= 2;
2105 len *= 2;
2106 }
2107 for (i = 0, p = val2->v.val_vec.array;
2108 i < len;
2109 i++, p += elt_size)
2110 dw2_asm_output_data (elt_size, extract_int (p, elt_size),
2111 "fp or vector constant word %u", i);
2112 }
2113 break;
2114 case dw_val_class_const_double:
2115 {
2116 unsigned HOST_WIDE_INT first, second;
2117 l = HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR;
2118
2119 dw2_asm_output_data (1, 2 * l, NULL);
2120 if (WORDS_BIG_ENDIAN)
2121 {
2122 first = val2->v.val_double.high;
2123 second = val2->v.val_double.low;
2124 }
2125 else
2126 {
2127 first = val2->v.val_double.low;
2128 second = val2->v.val_double.high;
2129 }
2130 dw2_asm_output_data (l, first, NULL);
2131 dw2_asm_output_data (l, second, NULL);
2132 }
2133 break;
2134 case dw_val_class_wide_int:
2135 {
2136 int i;
2137 int len = get_full_len (*val2->v.val_wide);
2138 l = HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR;
2139
2140 dw2_asm_output_data (1, len * l, NULL);
2141 if (WORDS_BIG_ENDIAN)
2142 for (i = len - 1; i >= 0; --i)
2143 dw2_asm_output_data (l, val2->v.val_wide->elt (i), NULL);
2144 else
2145 for (i = 0; i < len; ++i)
2146 dw2_asm_output_data (l, val2->v.val_wide->elt (i), NULL);
2147 }
2148 break;
2149 default:
2150 gcc_unreachable ();
2151 }
2152 }
2153 break;
2154 case DW_OP_GNU_regval_type:
2155 {
2156 unsigned r = val1->v.val_unsigned;
2157 unsigned long o = get_base_type_offset (val2->v.val_die_ref.die);
2158 gcc_assert (o);
2159 if (for_eh_or_skip >= 0)
2160 {
2161 r = DWARF2_FRAME_REG_OUT (r, for_eh_or_skip);
2162 gcc_assert (size_of_uleb128 (r)
2163 == size_of_uleb128 (val1->v.val_unsigned));
2164 }
2165 dw2_asm_output_data_uleb128 (r, NULL);
2166 dw2_asm_output_data_uleb128 (o, NULL);
2167 }
2168 break;
2169 case DW_OP_GNU_deref_type:
2170 {
2171 unsigned long o = get_base_type_offset (val2->v.val_die_ref.die);
2172 gcc_assert (o);
2173 dw2_asm_output_data (1, val1->v.val_int, NULL);
2174 dw2_asm_output_data_uleb128 (o, NULL);
2175 }
2176 break;
2177 case DW_OP_GNU_convert:
2178 case DW_OP_GNU_reinterpret:
2179 if (loc->dw_loc_oprnd1.val_class == dw_val_class_unsigned_const)
2180 dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
2181 else
2182 {
2183 unsigned long o = get_base_type_offset (val1->v.val_die_ref.die);
2184 gcc_assert (o);
2185 dw2_asm_output_data_uleb128 (o, NULL);
2186 }
2187 break;
2188
2189 case DW_OP_GNU_parameter_ref:
2190 {
2191 unsigned long o;
2192 gcc_assert (val1->val_class == dw_val_class_die_ref);
2193 o = get_ref_die_offset (val1->v.val_die_ref.die);
2194 dw2_asm_output_data (4, o, NULL);
2195 }
2196 break;
2197
2198 default:
2199 /* Other codes have no operands. */
2200 break;
2201 }
2202 }
2203
2204 /* Output a sequence of location operations.
2205 The for_eh_or_skip parameter controls whether register numbers are
2206 converted using DWARF2_FRAME_REG_OUT, which is needed in the case that
2207 hard reg numbers have been processed via DWARF_FRAME_REGNUM (i.e. for unwind
2208 info). This should be suppressed for the cases that have not been converted
2209 (i.e. symbolic debug info), by setting the parameter < 0. See PR47324. */
2210
2211 void
2212 output_loc_sequence (dw_loc_descr_ref loc, int for_eh_or_skip)
2213 {
2214 for (; loc != NULL; loc = loc->dw_loc_next)
2215 {
2216 enum dwarf_location_atom opc = loc->dw_loc_opc;
2217 /* Output the opcode. */
2218 if (for_eh_or_skip >= 0
2219 && opc >= DW_OP_breg0 && opc <= DW_OP_breg31)
2220 {
2221 unsigned r = (opc - DW_OP_breg0);
2222 r = DWARF2_FRAME_REG_OUT (r, for_eh_or_skip);
2223 gcc_assert (r <= 31);
2224 opc = (enum dwarf_location_atom) (DW_OP_breg0 + r);
2225 }
2226 else if (for_eh_or_skip >= 0
2227 && opc >= DW_OP_reg0 && opc <= DW_OP_reg31)
2228 {
2229 unsigned r = (opc - DW_OP_reg0);
2230 r = DWARF2_FRAME_REG_OUT (r, for_eh_or_skip);
2231 gcc_assert (r <= 31);
2232 opc = (enum dwarf_location_atom) (DW_OP_reg0 + r);
2233 }
2234
2235 dw2_asm_output_data (1, opc,
2236 "%s", dwarf_stack_op_name (opc));
2237
2238 /* Output the operand(s) (if any). */
2239 output_loc_operands (loc, for_eh_or_skip);
2240 }
2241 }
2242
2243 /* Output location description stack opcode's operands (if any).
2244 The output is single bytes on a line, suitable for .cfi_escape. */
2245
2246 static void
2247 output_loc_operands_raw (dw_loc_descr_ref loc)
2248 {
2249 dw_val_ref val1 = &loc->dw_loc_oprnd1;
2250 dw_val_ref val2 = &loc->dw_loc_oprnd2;
2251
2252 switch (loc->dw_loc_opc)
2253 {
2254 case DW_OP_addr:
2255 case DW_OP_GNU_addr_index:
2256 case DW_OP_GNU_const_index:
2257 case DW_OP_implicit_value:
2258 /* We cannot output addresses in .cfi_escape, only bytes. */
2259 gcc_unreachable ();
2260
2261 case DW_OP_const1u:
2262 case DW_OP_const1s:
2263 case DW_OP_pick:
2264 case DW_OP_deref_size:
2265 case DW_OP_xderef_size:
2266 fputc (',', asm_out_file);
2267 dw2_asm_output_data_raw (1, val1->v.val_int);
2268 break;
2269
2270 case DW_OP_const2u:
2271 case DW_OP_const2s:
2272 fputc (',', asm_out_file);
2273 dw2_asm_output_data_raw (2, val1->v.val_int);
2274 break;
2275
2276 case DW_OP_const4u:
2277 case DW_OP_const4s:
2278 fputc (',', asm_out_file);
2279 dw2_asm_output_data_raw (4, val1->v.val_int);
2280 break;
2281
2282 case DW_OP_const8u:
2283 case DW_OP_const8s:
2284 gcc_assert (HOST_BITS_PER_WIDE_INT >= 64);
2285 fputc (',', asm_out_file);
2286 dw2_asm_output_data_raw (8, val1->v.val_int);
2287 break;
2288
2289 case DW_OP_skip:
2290 case DW_OP_bra:
2291 {
2292 int offset;
2293
2294 gcc_assert (val1->val_class == dw_val_class_loc);
2295 offset = val1->v.val_loc->dw_loc_addr - (loc->dw_loc_addr + 3);
2296
2297 fputc (',', asm_out_file);
2298 dw2_asm_output_data_raw (2, offset);
2299 }
2300 break;
2301
2302 case DW_OP_regx:
2303 {
2304 unsigned r = DWARF2_FRAME_REG_OUT (val1->v.val_unsigned, 1);
2305 gcc_assert (size_of_uleb128 (r)
2306 == size_of_uleb128 (val1->v.val_unsigned));
2307 fputc (',', asm_out_file);
2308 dw2_asm_output_data_uleb128_raw (r);
2309 }
2310 break;
2311
2312 case DW_OP_constu:
2313 case DW_OP_plus_uconst:
2314 case DW_OP_piece:
2315 fputc (',', asm_out_file);
2316 dw2_asm_output_data_uleb128_raw (val1->v.val_unsigned);
2317 break;
2318
2319 case DW_OP_bit_piece:
2320 fputc (',', asm_out_file);
2321 dw2_asm_output_data_uleb128_raw (val1->v.val_unsigned);
2322 dw2_asm_output_data_uleb128_raw (val2->v.val_unsigned);
2323 break;
2324
2325 case DW_OP_consts:
2326 case DW_OP_breg0:
2327 case DW_OP_breg1:
2328 case DW_OP_breg2:
2329 case DW_OP_breg3:
2330 case DW_OP_breg4:
2331 case DW_OP_breg5:
2332 case DW_OP_breg6:
2333 case DW_OP_breg7:
2334 case DW_OP_breg8:
2335 case DW_OP_breg9:
2336 case DW_OP_breg10:
2337 case DW_OP_breg11:
2338 case DW_OP_breg12:
2339 case DW_OP_breg13:
2340 case DW_OP_breg14:
2341 case DW_OP_breg15:
2342 case DW_OP_breg16:
2343 case DW_OP_breg17:
2344 case DW_OP_breg18:
2345 case DW_OP_breg19:
2346 case DW_OP_breg20:
2347 case DW_OP_breg21:
2348 case DW_OP_breg22:
2349 case DW_OP_breg23:
2350 case DW_OP_breg24:
2351 case DW_OP_breg25:
2352 case DW_OP_breg26:
2353 case DW_OP_breg27:
2354 case DW_OP_breg28:
2355 case DW_OP_breg29:
2356 case DW_OP_breg30:
2357 case DW_OP_breg31:
2358 case DW_OP_fbreg:
2359 fputc (',', asm_out_file);
2360 dw2_asm_output_data_sleb128_raw (val1->v.val_int);
2361 break;
2362
2363 case DW_OP_bregx:
2364 {
2365 unsigned r = DWARF2_FRAME_REG_OUT (val1->v.val_unsigned, 1);
2366 gcc_assert (size_of_uleb128 (r)
2367 == size_of_uleb128 (val1->v.val_unsigned));
2368 fputc (',', asm_out_file);
2369 dw2_asm_output_data_uleb128_raw (r);
2370 fputc (',', asm_out_file);
2371 dw2_asm_output_data_sleb128_raw (val2->v.val_int);
2372 }
2373 break;
2374
2375 case DW_OP_GNU_implicit_pointer:
2376 case DW_OP_GNU_entry_value:
2377 case DW_OP_GNU_const_type:
2378 case DW_OP_GNU_regval_type:
2379 case DW_OP_GNU_deref_type:
2380 case DW_OP_GNU_convert:
2381 case DW_OP_GNU_reinterpret:
2382 case DW_OP_GNU_parameter_ref:
2383 gcc_unreachable ();
2384 break;
2385
2386 default:
2387 /* Other codes have no operands. */
2388 break;
2389 }
2390 }
2391
2392 void
2393 output_loc_sequence_raw (dw_loc_descr_ref loc)
2394 {
2395 while (1)
2396 {
2397 enum dwarf_location_atom opc = loc->dw_loc_opc;
2398 /* Output the opcode. */
2399 if (opc >= DW_OP_breg0 && opc <= DW_OP_breg31)
2400 {
2401 unsigned r = (opc - DW_OP_breg0);
2402 r = DWARF2_FRAME_REG_OUT (r, 1);
2403 gcc_assert (r <= 31);
2404 opc = (enum dwarf_location_atom) (DW_OP_breg0 + r);
2405 }
2406 else if (opc >= DW_OP_reg0 && opc <= DW_OP_reg31)
2407 {
2408 unsigned r = (opc - DW_OP_reg0);
2409 r = DWARF2_FRAME_REG_OUT (r, 1);
2410 gcc_assert (r <= 31);
2411 opc = (enum dwarf_location_atom) (DW_OP_reg0 + r);
2412 }
2413 /* Output the opcode. */
2414 fprintf (asm_out_file, "%#x", opc);
2415 output_loc_operands_raw (loc);
2416
2417 if (!loc->dw_loc_next)
2418 break;
2419 loc = loc->dw_loc_next;
2420
2421 fputc (',', asm_out_file);
2422 }
2423 }
2424
2425 /* This function builds a dwarf location descriptor sequence from a
2426 dw_cfa_location, adding the given OFFSET to the result of the
2427 expression. */
2428
2429 struct dw_loc_descr_node *
2430 build_cfa_loc (dw_cfa_location *cfa, HOST_WIDE_INT offset)
2431 {
2432 struct dw_loc_descr_node *head, *tmp;
2433
2434 offset += cfa->offset;
2435
2436 if (cfa->indirect)
2437 {
2438 head = new_reg_loc_descr (cfa->reg, cfa->base_offset);
2439 head->dw_loc_oprnd1.val_class = dw_val_class_const;
2440 head->dw_loc_oprnd1.val_entry = NULL;
2441 tmp = new_loc_descr (DW_OP_deref, 0, 0);
2442 add_loc_descr (&head, tmp);
2443 if (offset != 0)
2444 {
2445 tmp = new_loc_descr (DW_OP_plus_uconst, offset, 0);
2446 add_loc_descr (&head, tmp);
2447 }
2448 }
2449 else
2450 head = new_reg_loc_descr (cfa->reg, offset);
2451
2452 return head;
2453 }
2454
2455 /* This function builds a dwarf location descriptor sequence for
2456 the address at OFFSET from the CFA when stack is aligned to
2457 ALIGNMENT byte. */
2458
2459 struct dw_loc_descr_node *
2460 build_cfa_aligned_loc (dw_cfa_location *cfa,
2461 HOST_WIDE_INT offset, HOST_WIDE_INT alignment)
2462 {
2463 struct dw_loc_descr_node *head;
2464 unsigned int dwarf_fp
2465 = DWARF_FRAME_REGNUM (HARD_FRAME_POINTER_REGNUM);
2466
2467 /* When CFA is defined as FP+OFFSET, emulate stack alignment. */
2468 if (cfa->reg == HARD_FRAME_POINTER_REGNUM && cfa->indirect == 0)
2469 {
2470 head = new_reg_loc_descr (dwarf_fp, 0);
2471 add_loc_descr (&head, int_loc_descriptor (alignment));
2472 add_loc_descr (&head, new_loc_descr (DW_OP_and, 0, 0));
2473 loc_descr_plus_const (&head, offset);
2474 }
2475 else
2476 head = new_reg_loc_descr (dwarf_fp, offset);
2477 return head;
2478 }
2479 \f
2480 /* And now, the support for symbolic debugging information. */
2481
2482 /* .debug_str support. */
2483
2484 static void dwarf2out_init (const char *);
2485 static void dwarf2out_finish (const char *);
2486 static void dwarf2out_early_finish (void);
2487 static void dwarf2out_assembly_start (void);
2488 static void dwarf2out_define (unsigned int, const char *);
2489 static void dwarf2out_undef (unsigned int, const char *);
2490 static void dwarf2out_start_source_file (unsigned, const char *);
2491 static void dwarf2out_end_source_file (unsigned);
2492 static void dwarf2out_function_decl (tree);
2493 static void dwarf2out_begin_block (unsigned, unsigned);
2494 static void dwarf2out_end_block (unsigned, unsigned);
2495 static bool dwarf2out_ignore_block (const_tree);
2496 static void dwarf2out_early_global_decl (tree);
2497 static void dwarf2out_late_global_decl (tree);
2498 static void dwarf2out_type_decl (tree, int);
2499 static void dwarf2out_imported_module_or_decl (tree, tree, tree, bool);
2500 static void dwarf2out_imported_module_or_decl_1 (tree, tree, tree,
2501 dw_die_ref);
2502 static void dwarf2out_abstract_function (tree);
2503 static void dwarf2out_var_location (rtx_insn *);
2504 static void dwarf2out_size_function (tree);
2505 static void dwarf2out_begin_function (tree);
2506 static void dwarf2out_end_function (unsigned int);
2507 static void dwarf2out_register_main_translation_unit (tree unit);
2508 static void dwarf2out_set_name (tree, tree);
2509
2510 /* The debug hooks structure. */
2511
2512 const struct gcc_debug_hooks dwarf2_debug_hooks =
2513 {
2514 dwarf2out_init,
2515 dwarf2out_finish,
2516 dwarf2out_early_finish,
2517 dwarf2out_assembly_start,
2518 dwarf2out_define,
2519 dwarf2out_undef,
2520 dwarf2out_start_source_file,
2521 dwarf2out_end_source_file,
2522 dwarf2out_begin_block,
2523 dwarf2out_end_block,
2524 dwarf2out_ignore_block,
2525 dwarf2out_source_line,
2526 dwarf2out_begin_prologue,
2527 #if VMS_DEBUGGING_INFO
2528 dwarf2out_vms_end_prologue,
2529 dwarf2out_vms_begin_epilogue,
2530 #else
2531 debug_nothing_int_charstar,
2532 debug_nothing_int_charstar,
2533 #endif
2534 dwarf2out_end_epilogue,
2535 dwarf2out_begin_function,
2536 dwarf2out_end_function, /* end_function */
2537 dwarf2out_register_main_translation_unit,
2538 dwarf2out_function_decl, /* function_decl */
2539 dwarf2out_early_global_decl,
2540 dwarf2out_late_global_decl,
2541 dwarf2out_type_decl, /* type_decl */
2542 dwarf2out_imported_module_or_decl,
2543 debug_nothing_tree, /* deferred_inline_function */
2544 /* The DWARF 2 backend tries to reduce debugging bloat by not
2545 emitting the abstract description of inline functions until
2546 something tries to reference them. */
2547 dwarf2out_abstract_function, /* outlining_inline_function */
2548 debug_nothing_rtx_code_label, /* label */
2549 debug_nothing_int, /* handle_pch */
2550 dwarf2out_var_location,
2551 dwarf2out_size_function, /* size_function */
2552 dwarf2out_switch_text_section,
2553 dwarf2out_set_name,
2554 1, /* start_end_main_source_file */
2555 TYPE_SYMTAB_IS_DIE /* tree_type_symtab_field */
2556 };
2557
2558 const struct gcc_debug_hooks dwarf2_lineno_debug_hooks =
2559 {
2560 dwarf2out_init,
2561 debug_nothing_charstar,
2562 debug_nothing_void,
2563 debug_nothing_void,
2564 debug_nothing_int_charstar,
2565 debug_nothing_int_charstar,
2566 debug_nothing_int_charstar,
2567 debug_nothing_int,
2568 debug_nothing_int_int, /* begin_block */
2569 debug_nothing_int_int, /* end_block */
2570 debug_true_const_tree, /* ignore_block */
2571 dwarf2out_source_line, /* source_line */
2572 debug_nothing_int_charstar, /* begin_prologue */
2573 debug_nothing_int_charstar, /* end_prologue */
2574 debug_nothing_int_charstar, /* begin_epilogue */
2575 debug_nothing_int_charstar, /* end_epilogue */
2576 debug_nothing_tree, /* begin_function */
2577 debug_nothing_int, /* end_function */
2578 debug_nothing_tree, /* register_main_translation_unit */
2579 debug_nothing_tree, /* function_decl */
2580 debug_nothing_tree, /* early_global_decl */
2581 debug_nothing_tree, /* late_global_decl */
2582 debug_nothing_tree_int, /* type_decl */
2583 debug_nothing_tree_tree_tree_bool, /* imported_module_or_decl */
2584 debug_nothing_tree, /* deferred_inline_function */
2585 debug_nothing_tree, /* outlining_inline_function */
2586 debug_nothing_rtx_code_label, /* label */
2587 debug_nothing_int, /* handle_pch */
2588 debug_nothing_rtx_insn, /* var_location */
2589 debug_nothing_tree, /* size_function */
2590 debug_nothing_void, /* switch_text_section */
2591 debug_nothing_tree_tree, /* set_name */
2592 0, /* start_end_main_source_file */
2593 TYPE_SYMTAB_IS_ADDRESS /* tree_type_symtab_field */
2594 };
2595 \f
2596 /* NOTE: In the comments in this file, many references are made to
2597 "Debugging Information Entries". This term is abbreviated as `DIE'
2598 throughout the remainder of this file. */
2599
2600 /* An internal representation of the DWARF output is built, and then
2601 walked to generate the DWARF debugging info. The walk of the internal
2602 representation is done after the entire program has been compiled.
2603 The types below are used to describe the internal representation. */
2604
2605 /* Whether to put type DIEs into their own section .debug_types instead
2606 of making them part of the .debug_info section. Only supported for
2607 Dwarf V4 or higher and the user didn't disable them through
2608 -fno-debug-types-section. It is more efficient to put them in a
2609 separate comdat sections since the linker will then be able to
2610 remove duplicates. But not all tools support .debug_types sections
2611 yet. */
2612
2613 #define use_debug_types (dwarf_version >= 4 && flag_debug_types_section)
2614
2615 /* Various DIE's use offsets relative to the beginning of the
2616 .debug_info section to refer to each other. */
2617
2618 typedef long int dw_offset;
2619
2620 struct comdat_type_node;
2621
2622 /* The entries in the line_info table more-or-less mirror the opcodes
2623 that are used in the real dwarf line table. Arrays of these entries
2624 are collected per section when DWARF2_ASM_LINE_DEBUG_INFO is not
2625 supported. */
2626
2627 enum dw_line_info_opcode {
2628 /* Emit DW_LNE_set_address; the operand is the label index. */
2629 LI_set_address,
2630
2631 /* Emit a row to the matrix with the given line. This may be done
2632 via any combination of DW_LNS_copy, DW_LNS_advance_line, and
2633 special opcodes. */
2634 LI_set_line,
2635
2636 /* Emit a DW_LNS_set_file. */
2637 LI_set_file,
2638
2639 /* Emit a DW_LNS_set_column. */
2640 LI_set_column,
2641
2642 /* Emit a DW_LNS_negate_stmt; the operand is ignored. */
2643 LI_negate_stmt,
2644
2645 /* Emit a DW_LNS_set_prologue_end/epilogue_begin; the operand is ignored. */
2646 LI_set_prologue_end,
2647 LI_set_epilogue_begin,
2648
2649 /* Emit a DW_LNE_set_discriminator. */
2650 LI_set_discriminator
2651 };
2652
2653 typedef struct GTY(()) dw_line_info_struct {
2654 enum dw_line_info_opcode opcode;
2655 unsigned int val;
2656 } dw_line_info_entry;
2657
2658
2659 struct GTY(()) dw_line_info_table {
2660 /* The label that marks the end of this section. */
2661 const char *end_label;
2662
2663 /* The values for the last row of the matrix, as collected in the table.
2664 These are used to minimize the changes to the next row. */
2665 unsigned int file_num;
2666 unsigned int line_num;
2667 unsigned int column_num;
2668 int discrim_num;
2669 bool is_stmt;
2670 bool in_use;
2671
2672 vec<dw_line_info_entry, va_gc> *entries;
2673 };
2674
2675
2676 /* Each DIE attribute has a field specifying the attribute kind,
2677 a link to the next attribute in the chain, and an attribute value.
2678 Attributes are typically linked below the DIE they modify. */
2679
2680 typedef struct GTY(()) dw_attr_struct {
2681 enum dwarf_attribute dw_attr;
2682 dw_val_node dw_attr_val;
2683 }
2684 dw_attr_node;
2685
2686
2687 /* The Debugging Information Entry (DIE) structure. DIEs form a tree.
2688 The children of each node form a circular list linked by
2689 die_sib. die_child points to the node *before* the "first" child node. */
2690
2691 typedef struct GTY((chain_circular ("%h.die_sib"), for_user)) die_struct {
2692 union die_symbol_or_type_node
2693 {
2694 const char * GTY ((tag ("0"))) die_symbol;
2695 comdat_type_node *GTY ((tag ("1"))) die_type_node;
2696 }
2697 GTY ((desc ("%0.comdat_type_p"))) die_id;
2698 vec<dw_attr_node, va_gc> *die_attr;
2699 dw_die_ref die_parent;
2700 dw_die_ref die_child;
2701 dw_die_ref die_sib;
2702 dw_die_ref die_definition; /* ref from a specification to its definition */
2703 dw_offset die_offset;
2704 unsigned long die_abbrev;
2705 int die_mark;
2706 unsigned int decl_id;
2707 enum dwarf_tag die_tag;
2708 /* Die is used and must not be pruned as unused. */
2709 BOOL_BITFIELD die_perennial_p : 1;
2710 BOOL_BITFIELD comdat_type_p : 1; /* DIE has a type signature */
2711 /* Lots of spare bits. */
2712 }
2713 die_node;
2714
2715 /* Set to TRUE while dwarf2out_early_global_decl is running. */
2716 static bool early_dwarf;
2717 struct set_early_dwarf {
2718 bool saved;
2719 set_early_dwarf () : saved(early_dwarf) { early_dwarf = true; }
2720 ~set_early_dwarf () { early_dwarf = saved; }
2721 };
2722
2723 /* Evaluate 'expr' while 'c' is set to each child of DIE in order. */
2724 #define FOR_EACH_CHILD(die, c, expr) do { \
2725 c = die->die_child; \
2726 if (c) do { \
2727 c = c->die_sib; \
2728 expr; \
2729 } while (c != die->die_child); \
2730 } while (0)
2731
2732 /* The pubname structure */
2733
2734 typedef struct GTY(()) pubname_struct {
2735 dw_die_ref die;
2736 const char *name;
2737 }
2738 pubname_entry;
2739
2740
2741 struct GTY(()) dw_ranges {
2742 /* If this is positive, it's a block number, otherwise it's a
2743 bitwise-negated index into dw_ranges_by_label. */
2744 int num;
2745 };
2746
2747 /* A structure to hold a macinfo entry. */
2748
2749 typedef struct GTY(()) macinfo_struct {
2750 unsigned char code;
2751 unsigned HOST_WIDE_INT lineno;
2752 const char *info;
2753 }
2754 macinfo_entry;
2755
2756
2757 struct GTY(()) dw_ranges_by_label {
2758 const char *begin;
2759 const char *end;
2760 };
2761
2762 /* The comdat type node structure. */
2763 struct GTY(()) comdat_type_node
2764 {
2765 dw_die_ref root_die;
2766 dw_die_ref type_die;
2767 dw_die_ref skeleton_die;
2768 char signature[DWARF_TYPE_SIGNATURE_SIZE];
2769 comdat_type_node *next;
2770 };
2771
2772 /* A list of DIEs for which we can't determine ancestry (parent_die
2773 field) just yet. Later in dwarf2out_finish we will fill in the
2774 missing bits. */
2775 typedef struct GTY(()) limbo_die_struct {
2776 dw_die_ref die;
2777 /* The tree for which this DIE was created. We use this to
2778 determine ancestry later. */
2779 tree created_for;
2780 struct limbo_die_struct *next;
2781 }
2782 limbo_die_node;
2783
2784 typedef struct skeleton_chain_struct
2785 {
2786 dw_die_ref old_die;
2787 dw_die_ref new_die;
2788 struct skeleton_chain_struct *parent;
2789 }
2790 skeleton_chain_node;
2791
2792 /* Define a macro which returns nonzero for a TYPE_DECL which was
2793 implicitly generated for a type.
2794
2795 Note that, unlike the C front-end (which generates a NULL named
2796 TYPE_DECL node for each complete tagged type, each array type,
2797 and each function type node created) the C++ front-end generates
2798 a _named_ TYPE_DECL node for each tagged type node created.
2799 These TYPE_DECLs have DECL_ARTIFICIAL set, so we know not to
2800 generate a DW_TAG_typedef DIE for them. Likewise with the Ada
2801 front-end, but for each type, tagged or not. */
2802
2803 #define TYPE_DECL_IS_STUB(decl) \
2804 (DECL_NAME (decl) == NULL_TREE \
2805 || (DECL_ARTIFICIAL (decl) \
2806 && ((decl == TYPE_STUB_DECL (TREE_TYPE (decl))) \
2807 /* This is necessary for stub decls that \
2808 appear in nested inline functions. */ \
2809 || (DECL_ABSTRACT_ORIGIN (decl) != NULL_TREE \
2810 && (decl_ultimate_origin (decl) \
2811 == TYPE_STUB_DECL (TREE_TYPE (decl)))))))
2812
2813 /* Information concerning the compilation unit's programming
2814 language, and compiler version. */
2815
2816 /* Fixed size portion of the DWARF compilation unit header. */
2817 #define DWARF_COMPILE_UNIT_HEADER_SIZE \
2818 (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 3)
2819
2820 /* Fixed size portion of the DWARF comdat type unit header. */
2821 #define DWARF_COMDAT_TYPE_UNIT_HEADER_SIZE \
2822 (DWARF_COMPILE_UNIT_HEADER_SIZE + DWARF_TYPE_SIGNATURE_SIZE \
2823 + DWARF_OFFSET_SIZE)
2824
2825 /* Fixed size portion of public names info. */
2826 #define DWARF_PUBNAMES_HEADER_SIZE (2 * DWARF_OFFSET_SIZE + 2)
2827
2828 /* Fixed size portion of the address range info. */
2829 #define DWARF_ARANGES_HEADER_SIZE \
2830 (DWARF_ROUND (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 4, \
2831 DWARF2_ADDR_SIZE * 2) \
2832 - DWARF_INITIAL_LENGTH_SIZE)
2833
2834 /* Size of padding portion in the address range info. It must be
2835 aligned to twice the pointer size. */
2836 #define DWARF_ARANGES_PAD_SIZE \
2837 (DWARF_ROUND (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 4, \
2838 DWARF2_ADDR_SIZE * 2) \
2839 - (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 4))
2840
2841 /* Use assembler line directives if available. */
2842 #ifndef DWARF2_ASM_LINE_DEBUG_INFO
2843 #ifdef HAVE_AS_DWARF2_DEBUG_LINE
2844 #define DWARF2_ASM_LINE_DEBUG_INFO 1
2845 #else
2846 #define DWARF2_ASM_LINE_DEBUG_INFO 0
2847 #endif
2848 #endif
2849
2850 /* Minimum line offset in a special line info. opcode.
2851 This value was chosen to give a reasonable range of values. */
2852 #define DWARF_LINE_BASE -10
2853
2854 /* First special line opcode - leave room for the standard opcodes. */
2855 #define DWARF_LINE_OPCODE_BASE ((int)DW_LNS_set_isa + 1)
2856
2857 /* Range of line offsets in a special line info. opcode. */
2858 #define DWARF_LINE_RANGE (254-DWARF_LINE_OPCODE_BASE+1)
2859
2860 /* Flag that indicates the initial value of the is_stmt_start flag.
2861 In the present implementation, we do not mark any lines as
2862 the beginning of a source statement, because that information
2863 is not made available by the GCC front-end. */
2864 #define DWARF_LINE_DEFAULT_IS_STMT_START 1
2865
2866 /* Maximum number of operations per instruction bundle. */
2867 #ifndef DWARF_LINE_DEFAULT_MAX_OPS_PER_INSN
2868 #define DWARF_LINE_DEFAULT_MAX_OPS_PER_INSN 1
2869 #endif
2870
2871 /* This location is used by calc_die_sizes() to keep track
2872 the offset of each DIE within the .debug_info section. */
2873 static unsigned long next_die_offset;
2874
2875 /* Record the root of the DIE's built for the current compilation unit. */
2876 static GTY(()) dw_die_ref single_comp_unit_die;
2877
2878 /* A list of type DIEs that have been separated into comdat sections. */
2879 static GTY(()) comdat_type_node *comdat_type_list;
2880
2881 /* A list of DIEs with a NULL parent waiting to be relocated. */
2882 static GTY(()) limbo_die_node *limbo_die_list;
2883
2884 /* A list of DIEs for which we may have to generate
2885 DW_AT_{,MIPS_}linkage_name once their DECL_ASSEMBLER_NAMEs are set. */
2886 static GTY(()) limbo_die_node *deferred_asm_name;
2887
2888 struct dwarf_file_hasher : ggc_ptr_hash<dwarf_file_data>
2889 {
2890 typedef const char *compare_type;
2891
2892 static hashval_t hash (dwarf_file_data *);
2893 static bool equal (dwarf_file_data *, const char *);
2894 };
2895
2896 /* Filenames referenced by this compilation unit. */
2897 static GTY(()) hash_table<dwarf_file_hasher> *file_table;
2898
2899 struct decl_die_hasher : ggc_ptr_hash<die_node>
2900 {
2901 typedef tree compare_type;
2902
2903 static hashval_t hash (die_node *);
2904 static bool equal (die_node *, tree);
2905 };
2906 /* A hash table of references to DIE's that describe declarations.
2907 The key is a DECL_UID() which is a unique number identifying each decl. */
2908 static GTY (()) hash_table<decl_die_hasher> *decl_die_table;
2909
2910 struct block_die_hasher : ggc_ptr_hash<die_struct>
2911 {
2912 static hashval_t hash (die_struct *);
2913 static bool equal (die_struct *, die_struct *);
2914 };
2915
2916 /* A hash table of references to DIE's that describe COMMON blocks.
2917 The key is DECL_UID() ^ die_parent. */
2918 static GTY (()) hash_table<block_die_hasher> *common_block_die_table;
2919
2920 typedef struct GTY(()) die_arg_entry_struct {
2921 dw_die_ref die;
2922 tree arg;
2923 } die_arg_entry;
2924
2925
2926 /* Node of the variable location list. */
2927 struct GTY ((chain_next ("%h.next"))) var_loc_node {
2928 /* Either NOTE_INSN_VAR_LOCATION, or, for SRA optimized variables,
2929 EXPR_LIST chain. For small bitsizes, bitsize is encoded
2930 in mode of the EXPR_LIST node and first EXPR_LIST operand
2931 is either NOTE_INSN_VAR_LOCATION for a piece with a known
2932 location or NULL for padding. For larger bitsizes,
2933 mode is 0 and first operand is a CONCAT with bitsize
2934 as first CONCAT operand and NOTE_INSN_VAR_LOCATION resp.
2935 NULL as second operand. */
2936 rtx GTY (()) loc;
2937 const char * GTY (()) label;
2938 struct var_loc_node * GTY (()) next;
2939 };
2940
2941 /* Variable location list. */
2942 struct GTY ((for_user)) var_loc_list_def {
2943 struct var_loc_node * GTY (()) first;
2944
2945 /* Pointer to the last but one or last element of the
2946 chained list. If the list is empty, both first and
2947 last are NULL, if the list contains just one node
2948 or the last node certainly is not redundant, it points
2949 to the last node, otherwise points to the last but one.
2950 Do not mark it for GC because it is marked through the chain. */
2951 struct var_loc_node * GTY ((skip ("%h"))) last;
2952
2953 /* Pointer to the last element before section switch,
2954 if NULL, either sections weren't switched or first
2955 is after section switch. */
2956 struct var_loc_node * GTY ((skip ("%h"))) last_before_switch;
2957
2958 /* DECL_UID of the variable decl. */
2959 unsigned int decl_id;
2960 };
2961 typedef struct var_loc_list_def var_loc_list;
2962
2963 /* Call argument location list. */
2964 struct GTY ((chain_next ("%h.next"))) call_arg_loc_node {
2965 rtx GTY (()) call_arg_loc_note;
2966 const char * GTY (()) label;
2967 tree GTY (()) block;
2968 bool tail_call_p;
2969 rtx GTY (()) symbol_ref;
2970 struct call_arg_loc_node * GTY (()) next;
2971 };
2972
2973
2974 struct decl_loc_hasher : ggc_ptr_hash<var_loc_list>
2975 {
2976 typedef const_tree compare_type;
2977
2978 static hashval_t hash (var_loc_list *);
2979 static bool equal (var_loc_list *, const_tree);
2980 };
2981
2982 /* Table of decl location linked lists. */
2983 static GTY (()) hash_table<decl_loc_hasher> *decl_loc_table;
2984
2985 /* Head and tail of call_arg_loc chain. */
2986 static GTY (()) struct call_arg_loc_node *call_arg_locations;
2987 static struct call_arg_loc_node *call_arg_loc_last;
2988
2989 /* Number of call sites in the current function. */
2990 static int call_site_count = -1;
2991 /* Number of tail call sites in the current function. */
2992 static int tail_call_site_count = -1;
2993
2994 /* A cached location list. */
2995 struct GTY ((for_user)) cached_dw_loc_list_def {
2996 /* The DECL_UID of the decl that this entry describes. */
2997 unsigned int decl_id;
2998
2999 /* The cached location list. */
3000 dw_loc_list_ref loc_list;
3001 };
3002 typedef struct cached_dw_loc_list_def cached_dw_loc_list;
3003
3004 struct dw_loc_list_hasher : ggc_ptr_hash<cached_dw_loc_list>
3005 {
3006
3007 typedef const_tree compare_type;
3008
3009 static hashval_t hash (cached_dw_loc_list *);
3010 static bool equal (cached_dw_loc_list *, const_tree);
3011 };
3012
3013 /* Table of cached location lists. */
3014 static GTY (()) hash_table<dw_loc_list_hasher> *cached_dw_loc_list_table;
3015
3016 /* A pointer to the base of a list of references to DIE's that
3017 are uniquely identified by their tag, presence/absence of
3018 children DIE's, and list of attribute/value pairs. */
3019 static GTY((length ("abbrev_die_table_allocated")))
3020 dw_die_ref *abbrev_die_table;
3021
3022 /* Number of elements currently allocated for abbrev_die_table. */
3023 static GTY(()) unsigned abbrev_die_table_allocated;
3024
3025 /* Number of elements in abbrev_die_table currently in use. */
3026 static GTY(()) unsigned abbrev_die_table_in_use;
3027
3028 /* A hash map to remember the stack usage for DWARF procedures. The value
3029 stored is the stack size difference between before the DWARF procedure
3030 invokation and after it returned. In other words, for a DWARF procedure
3031 that consumes N stack slots and that pushes M ones, this stores M - N. */
3032 static hash_map<dw_die_ref, int> *dwarf_proc_stack_usage_map;
3033
3034 /* Size (in elements) of increments by which we may expand the
3035 abbrev_die_table. */
3036 #define ABBREV_DIE_TABLE_INCREMENT 256
3037
3038 /* A global counter for generating labels for line number data. */
3039 static unsigned int line_info_label_num;
3040
3041 /* The current table to which we should emit line number information
3042 for the current function. This will be set up at the beginning of
3043 assembly for the function. */
3044 static dw_line_info_table *cur_line_info_table;
3045
3046 /* The two default tables of line number info. */
3047 static GTY(()) dw_line_info_table *text_section_line_info;
3048 static GTY(()) dw_line_info_table *cold_text_section_line_info;
3049
3050 /* The set of all non-default tables of line number info. */
3051 static GTY(()) vec<dw_line_info_table *, va_gc> *separate_line_info;
3052
3053 /* A flag to tell pubnames/types export if there is an info section to
3054 refer to. */
3055 static bool info_section_emitted;
3056
3057 /* A pointer to the base of a table that contains a list of publicly
3058 accessible names. */
3059 static GTY (()) vec<pubname_entry, va_gc> *pubname_table;
3060
3061 /* A pointer to the base of a table that contains a list of publicly
3062 accessible types. */
3063 static GTY (()) vec<pubname_entry, va_gc> *pubtype_table;
3064
3065 /* A pointer to the base of a table that contains a list of macro
3066 defines/undefines (and file start/end markers). */
3067 static GTY (()) vec<macinfo_entry, va_gc> *macinfo_table;
3068
3069 /* True if .debug_macinfo or .debug_macros section is going to be
3070 emitted. */
3071 #define have_macinfo \
3072 ((!XCOFF_DEBUGGING_INFO || HAVE_XCOFF_DWARF_EXTRAS) \
3073 && debug_info_level >= DINFO_LEVEL_VERBOSE \
3074 && !macinfo_table->is_empty ())
3075
3076 /* Array of dies for which we should generate .debug_ranges info. */
3077 static GTY ((length ("ranges_table_allocated"))) dw_ranges *ranges_table;
3078
3079 /* Number of elements currently allocated for ranges_table. */
3080 static GTY(()) unsigned ranges_table_allocated;
3081
3082 /* Number of elements in ranges_table currently in use. */
3083 static GTY(()) unsigned ranges_table_in_use;
3084
3085 /* Array of pairs of labels referenced in ranges_table. */
3086 static GTY ((length ("ranges_by_label_allocated")))
3087 dw_ranges_by_label *ranges_by_label;
3088
3089 /* Number of elements currently allocated for ranges_by_label. */
3090 static GTY(()) unsigned ranges_by_label_allocated;
3091
3092 /* Number of elements in ranges_by_label currently in use. */
3093 static GTY(()) unsigned ranges_by_label_in_use;
3094
3095 /* Size (in elements) of increments by which we may expand the
3096 ranges_table. */
3097 #define RANGES_TABLE_INCREMENT 64
3098
3099 /* Whether we have location lists that need outputting */
3100 static GTY(()) bool have_location_lists;
3101
3102 /* Unique label counter. */
3103 static GTY(()) unsigned int loclabel_num;
3104
3105 /* Unique label counter for point-of-call tables. */
3106 static GTY(()) unsigned int poc_label_num;
3107
3108 /* The last file entry emitted by maybe_emit_file(). */
3109 static GTY(()) struct dwarf_file_data * last_emitted_file;
3110
3111 /* Number of internal labels generated by gen_internal_sym(). */
3112 static GTY(()) int label_num;
3113
3114 static GTY(()) vec<die_arg_entry, va_gc> *tmpl_value_parm_die_table;
3115
3116 /* Instances of generic types for which we need to generate debug
3117 info that describe their generic parameters and arguments. That
3118 generation needs to happen once all types are properly laid out so
3119 we do it at the end of compilation. */
3120 static GTY(()) vec<tree, va_gc> *generic_type_instances;
3121
3122 /* Offset from the "steady-state frame pointer" to the frame base,
3123 within the current function. */
3124 static HOST_WIDE_INT frame_pointer_fb_offset;
3125 static bool frame_pointer_fb_offset_valid;
3126
3127 static vec<dw_die_ref> base_types;
3128
3129 /* Flags to represent a set of attribute classes for attributes that represent
3130 a scalar value (bounds, pointers, ...). */
3131 enum dw_scalar_form
3132 {
3133 dw_scalar_form_constant = 0x01,
3134 dw_scalar_form_exprloc = 0x02,
3135 dw_scalar_form_reference = 0x04
3136 };
3137
3138 /* Forward declarations for functions defined in this file. */
3139
3140 static int is_pseudo_reg (const_rtx);
3141 static tree type_main_variant (tree);
3142 static int is_tagged_type (const_tree);
3143 static const char *dwarf_tag_name (unsigned);
3144 static const char *dwarf_attr_name (unsigned);
3145 static const char *dwarf_form_name (unsigned);
3146 static tree decl_ultimate_origin (const_tree);
3147 static tree decl_class_context (tree);
3148 static void add_dwarf_attr (dw_die_ref, dw_attr_node *);
3149 static inline enum dw_val_class AT_class (dw_attr_node *);
3150 static inline unsigned int AT_index (dw_attr_node *);
3151 static void add_AT_flag (dw_die_ref, enum dwarf_attribute, unsigned);
3152 static inline unsigned AT_flag (dw_attr_node *);
3153 static void add_AT_int (dw_die_ref, enum dwarf_attribute, HOST_WIDE_INT);
3154 static inline HOST_WIDE_INT AT_int (dw_attr_node *);
3155 static void add_AT_unsigned (dw_die_ref, enum dwarf_attribute, unsigned HOST_WIDE_INT);
3156 static inline unsigned HOST_WIDE_INT AT_unsigned (dw_attr_node *);
3157 static void add_AT_double (dw_die_ref, enum dwarf_attribute,
3158 HOST_WIDE_INT, unsigned HOST_WIDE_INT);
3159 static inline void add_AT_vec (dw_die_ref, enum dwarf_attribute, unsigned int,
3160 unsigned int, unsigned char *);
3161 static void add_AT_data8 (dw_die_ref, enum dwarf_attribute, unsigned char *);
3162 static void add_AT_string (dw_die_ref, enum dwarf_attribute, const char *);
3163 static inline const char *AT_string (dw_attr_node *);
3164 static enum dwarf_form AT_string_form (dw_attr_node *);
3165 static void add_AT_die_ref (dw_die_ref, enum dwarf_attribute, dw_die_ref);
3166 static void add_AT_specification (dw_die_ref, dw_die_ref);
3167 static inline dw_die_ref AT_ref (dw_attr_node *);
3168 static inline int AT_ref_external (dw_attr_node *);
3169 static inline void set_AT_ref_external (dw_attr_node *, int);
3170 static void add_AT_fde_ref (dw_die_ref, enum dwarf_attribute, unsigned);
3171 static void add_AT_loc (dw_die_ref, enum dwarf_attribute, dw_loc_descr_ref);
3172 static inline dw_loc_descr_ref AT_loc (dw_attr_node *);
3173 static void add_AT_loc_list (dw_die_ref, enum dwarf_attribute,
3174 dw_loc_list_ref);
3175 static inline dw_loc_list_ref AT_loc_list (dw_attr_node *);
3176 static addr_table_entry *add_addr_table_entry (void *, enum ate_kind);
3177 static void remove_addr_table_entry (addr_table_entry *);
3178 static void add_AT_addr (dw_die_ref, enum dwarf_attribute, rtx, bool);
3179 static inline rtx AT_addr (dw_attr_node *);
3180 static void add_AT_lbl_id (dw_die_ref, enum dwarf_attribute, const char *);
3181 static void add_AT_lineptr (dw_die_ref, enum dwarf_attribute, const char *);
3182 static void add_AT_macptr (dw_die_ref, enum dwarf_attribute, const char *);
3183 static void add_AT_offset (dw_die_ref, enum dwarf_attribute,
3184 unsigned HOST_WIDE_INT);
3185 static void add_AT_range_list (dw_die_ref, enum dwarf_attribute,
3186 unsigned long, bool);
3187 static inline const char *AT_lbl (dw_attr_node *);
3188 static dw_attr_node *get_AT (dw_die_ref, enum dwarf_attribute);
3189 static const char *get_AT_low_pc (dw_die_ref);
3190 static const char *get_AT_hi_pc (dw_die_ref);
3191 static const char *get_AT_string (dw_die_ref, enum dwarf_attribute);
3192 static int get_AT_flag (dw_die_ref, enum dwarf_attribute);
3193 static unsigned get_AT_unsigned (dw_die_ref, enum dwarf_attribute);
3194 static inline dw_die_ref get_AT_ref (dw_die_ref, enum dwarf_attribute);
3195 static bool is_cxx (void);
3196 static bool is_fortran (void);
3197 static bool is_ada (void);
3198 static bool remove_AT (dw_die_ref, enum dwarf_attribute);
3199 static void remove_child_TAG (dw_die_ref, enum dwarf_tag);
3200 static void add_child_die (dw_die_ref, dw_die_ref);
3201 static dw_die_ref new_die (enum dwarf_tag, dw_die_ref, tree);
3202 static dw_die_ref lookup_type_die (tree);
3203 static dw_die_ref strip_naming_typedef (tree, dw_die_ref);
3204 static dw_die_ref lookup_type_die_strip_naming_typedef (tree);
3205 static void equate_type_number_to_die (tree, dw_die_ref);
3206 static dw_die_ref lookup_decl_die (tree);
3207 static var_loc_list *lookup_decl_loc (const_tree);
3208 static void equate_decl_number_to_die (tree, dw_die_ref);
3209 static struct var_loc_node *add_var_loc_to_decl (tree, rtx, const char *);
3210 static void print_spaces (FILE *);
3211 static void print_die (dw_die_ref, FILE *);
3212 static dw_die_ref push_new_compile_unit (dw_die_ref, dw_die_ref);
3213 static dw_die_ref pop_compile_unit (dw_die_ref);
3214 static void loc_checksum (dw_loc_descr_ref, struct md5_ctx *);
3215 static void attr_checksum (dw_attr_node *, struct md5_ctx *, int *);
3216 static void die_checksum (dw_die_ref, struct md5_ctx *, int *);
3217 static void checksum_sleb128 (HOST_WIDE_INT, struct md5_ctx *);
3218 static void checksum_uleb128 (unsigned HOST_WIDE_INT, struct md5_ctx *);
3219 static void loc_checksum_ordered (dw_loc_descr_ref, struct md5_ctx *);
3220 static void attr_checksum_ordered (enum dwarf_tag, dw_attr_node *,
3221 struct md5_ctx *, int *);
3222 struct checksum_attributes;
3223 static void collect_checksum_attributes (struct checksum_attributes *, dw_die_ref);
3224 static void die_checksum_ordered (dw_die_ref, struct md5_ctx *, int *);
3225 static void checksum_die_context (dw_die_ref, struct md5_ctx *);
3226 static void generate_type_signature (dw_die_ref, comdat_type_node *);
3227 static int same_loc_p (dw_loc_descr_ref, dw_loc_descr_ref, int *);
3228 static int same_dw_val_p (const dw_val_node *, const dw_val_node *, int *);
3229 static int same_attr_p (dw_attr_node *, dw_attr_node *, int *);
3230 static int same_die_p (dw_die_ref, dw_die_ref, int *);
3231 static int same_die_p_wrap (dw_die_ref, dw_die_ref);
3232 static void compute_section_prefix (dw_die_ref);
3233 static int is_type_die (dw_die_ref);
3234 static int is_comdat_die (dw_die_ref);
3235 static int is_symbol_die (dw_die_ref);
3236 static inline bool is_template_instantiation (dw_die_ref);
3237 static void assign_symbol_names (dw_die_ref);
3238 static void break_out_includes (dw_die_ref);
3239 static int is_declaration_die (dw_die_ref);
3240 static int should_move_die_to_comdat (dw_die_ref);
3241 static dw_die_ref clone_as_declaration (dw_die_ref);
3242 static dw_die_ref clone_die (dw_die_ref);
3243 static dw_die_ref clone_tree (dw_die_ref);
3244 static dw_die_ref copy_declaration_context (dw_die_ref, dw_die_ref);
3245 static void generate_skeleton_ancestor_tree (skeleton_chain_node *);
3246 static void generate_skeleton_bottom_up (skeleton_chain_node *);
3247 static dw_die_ref generate_skeleton (dw_die_ref);
3248 static dw_die_ref remove_child_or_replace_with_skeleton (dw_die_ref,
3249 dw_die_ref,
3250 dw_die_ref);
3251 static void break_out_comdat_types (dw_die_ref);
3252 static void copy_decls_for_unworthy_types (dw_die_ref);
3253
3254 static void add_sibling_attributes (dw_die_ref);
3255 static void output_location_lists (dw_die_ref);
3256 static int constant_size (unsigned HOST_WIDE_INT);
3257 static unsigned long size_of_die (dw_die_ref);
3258 static void calc_die_sizes (dw_die_ref);
3259 static void calc_base_type_die_sizes (void);
3260 static void mark_dies (dw_die_ref);
3261 static void unmark_dies (dw_die_ref);
3262 static void unmark_all_dies (dw_die_ref);
3263 static unsigned long size_of_pubnames (vec<pubname_entry, va_gc> *);
3264 static unsigned long size_of_aranges (void);
3265 static enum dwarf_form value_format (dw_attr_node *);
3266 static void output_value_format (dw_attr_node *);
3267 static void output_abbrev_section (void);
3268 static void output_die_abbrevs (unsigned long, dw_die_ref);
3269 static void output_die_symbol (dw_die_ref);
3270 static void output_die (dw_die_ref);
3271 static void output_compilation_unit_header (void);
3272 static void output_comp_unit (dw_die_ref, int);
3273 static void output_comdat_type_unit (comdat_type_node *);
3274 static const char *dwarf2_name (tree, int);
3275 static void add_pubname (tree, dw_die_ref);
3276 static void add_enumerator_pubname (const char *, dw_die_ref);
3277 static void add_pubname_string (const char *, dw_die_ref);
3278 static void add_pubtype (tree, dw_die_ref);
3279 static void output_pubnames (vec<pubname_entry, va_gc> *);
3280 static void output_aranges (void);
3281 static unsigned int add_ranges_num (int);
3282 static unsigned int add_ranges (const_tree);
3283 static void add_ranges_by_labels (dw_die_ref, const char *, const char *,
3284 bool *, bool);
3285 static void output_ranges (void);
3286 static dw_line_info_table *new_line_info_table (void);
3287 static void output_line_info (bool);
3288 static void output_file_names (void);
3289 static dw_die_ref base_type_die (tree);
3290 static int is_base_type (tree);
3291 static dw_die_ref subrange_type_die (tree, tree, tree, tree, dw_die_ref);
3292 static int decl_quals (const_tree);
3293 static dw_die_ref modified_type_die (tree, int, dw_die_ref);
3294 static dw_die_ref generic_parameter_die (tree, tree, bool, dw_die_ref);
3295 static dw_die_ref template_parameter_pack_die (tree, tree, dw_die_ref);
3296 static int type_is_enum (const_tree);
3297 static unsigned int dbx_reg_number (const_rtx);
3298 static void add_loc_descr_op_piece (dw_loc_descr_ref *, int);
3299 static dw_loc_descr_ref reg_loc_descriptor (rtx, enum var_init_status);
3300 static dw_loc_descr_ref one_reg_loc_descriptor (unsigned int,
3301 enum var_init_status);
3302 static dw_loc_descr_ref multiple_reg_loc_descriptor (rtx, rtx,
3303 enum var_init_status);
3304 static dw_loc_descr_ref based_loc_descr (rtx, HOST_WIDE_INT,
3305 enum var_init_status);
3306 static int is_based_loc (const_rtx);
3307 static bool resolve_one_addr (rtx *);
3308 static dw_loc_descr_ref concat_loc_descriptor (rtx, rtx,
3309 enum var_init_status);
3310 static dw_loc_descr_ref loc_descriptor (rtx, machine_mode mode,
3311 enum var_init_status);
3312 struct loc_descr_context;
3313 static void add_loc_descr_to_each (dw_loc_list_ref list, dw_loc_descr_ref ref);
3314 static void add_loc_list (dw_loc_list_ref *ret, dw_loc_list_ref list);
3315 static dw_loc_list_ref loc_list_from_tree (tree, int,
3316 const struct loc_descr_context *);
3317 static dw_loc_descr_ref loc_descriptor_from_tree (tree, int,
3318 const struct loc_descr_context *);
3319 static HOST_WIDE_INT ceiling (HOST_WIDE_INT, unsigned int);
3320 static tree field_type (const_tree);
3321 static unsigned int simple_type_align_in_bits (const_tree);
3322 static unsigned int simple_decl_align_in_bits (const_tree);
3323 static unsigned HOST_WIDE_INT simple_type_size_in_bits (const_tree);
3324 struct vlr_context;
3325 static dw_loc_descr_ref field_byte_offset (const_tree, struct vlr_context *,
3326 HOST_WIDE_INT *);
3327 static void add_AT_location_description (dw_die_ref, enum dwarf_attribute,
3328 dw_loc_list_ref);
3329 static void add_data_member_location_attribute (dw_die_ref, tree,
3330 struct vlr_context *);
3331 static bool add_const_value_attribute (dw_die_ref, rtx);
3332 static void insert_int (HOST_WIDE_INT, unsigned, unsigned char *);
3333 static void insert_wide_int (const wide_int &, unsigned char *, int);
3334 static void insert_float (const_rtx, unsigned char *);
3335 static rtx rtl_for_decl_location (tree);
3336 static bool add_location_or_const_value_attribute (dw_die_ref, tree, bool);
3337 static bool tree_add_const_value_attribute (dw_die_ref, tree);
3338 static bool tree_add_const_value_attribute_for_decl (dw_die_ref, tree);
3339 static void add_name_attribute (dw_die_ref, const char *);
3340 static void add_gnat_descriptive_type_attribute (dw_die_ref, tree, dw_die_ref);
3341 static void add_comp_dir_attribute (dw_die_ref);
3342 static void add_scalar_info (dw_die_ref, enum dwarf_attribute, tree, int,
3343 const struct loc_descr_context *);
3344 static void add_bound_info (dw_die_ref, enum dwarf_attribute, tree,
3345 const struct loc_descr_context *);
3346 static void add_subscript_info (dw_die_ref, tree, bool);
3347 static void add_byte_size_attribute (dw_die_ref, tree);
3348 static inline void add_bit_offset_attribute (dw_die_ref, tree,
3349 struct vlr_context *);
3350 static void add_bit_size_attribute (dw_die_ref, tree);
3351 static void add_prototyped_attribute (dw_die_ref, tree);
3352 static dw_die_ref add_abstract_origin_attribute (dw_die_ref, tree);
3353 static void add_pure_or_virtual_attribute (dw_die_ref, tree);
3354 static void add_src_coords_attributes (dw_die_ref, tree);
3355 static void add_name_and_src_coords_attributes (dw_die_ref, tree);
3356 static void add_discr_value (dw_die_ref, dw_discr_value *);
3357 static void add_discr_list (dw_die_ref, dw_discr_list_ref);
3358 static inline dw_discr_list_ref AT_discr_list (dw_attr_node *);
3359 static void push_decl_scope (tree);
3360 static void pop_decl_scope (void);
3361 static dw_die_ref scope_die_for (tree, dw_die_ref);
3362 static inline int local_scope_p (dw_die_ref);
3363 static inline int class_scope_p (dw_die_ref);
3364 static inline int class_or_namespace_scope_p (dw_die_ref);
3365 static void add_type_attribute (dw_die_ref, tree, int, dw_die_ref);
3366 static void add_calling_convention_attribute (dw_die_ref, tree);
3367 static const char *type_tag (const_tree);
3368 static tree member_declared_type (const_tree);
3369 #if 0
3370 static const char *decl_start_label (tree);
3371 #endif
3372 static void gen_array_type_die (tree, dw_die_ref);
3373 static void gen_descr_array_type_die (tree, struct array_descr_info *, dw_die_ref);
3374 #if 0
3375 static void gen_entry_point_die (tree, dw_die_ref);
3376 #endif
3377 static dw_die_ref gen_enumeration_type_die (tree, dw_die_ref);
3378 static dw_die_ref gen_formal_parameter_die (tree, tree, bool, dw_die_ref);
3379 static dw_die_ref gen_formal_parameter_pack_die (tree, tree, dw_die_ref, tree*);
3380 static void gen_unspecified_parameters_die (tree, dw_die_ref);
3381 static void gen_formal_types_die (tree, dw_die_ref);
3382 static void gen_subprogram_die (tree, dw_die_ref);
3383 static void gen_variable_die (tree, tree, dw_die_ref);
3384 static void gen_const_die (tree, dw_die_ref);
3385 static void gen_label_die (tree, dw_die_ref);
3386 static void gen_lexical_block_die (tree, dw_die_ref);
3387 static void gen_inlined_subroutine_die (tree, dw_die_ref);
3388 static void gen_field_die (tree, struct vlr_context *, dw_die_ref);
3389 static void gen_ptr_to_mbr_type_die (tree, dw_die_ref);
3390 static dw_die_ref gen_compile_unit_die (const char *);
3391 static void gen_inheritance_die (tree, tree, tree, dw_die_ref);
3392 static void gen_member_die (tree, dw_die_ref);
3393 static void gen_struct_or_union_type_die (tree, dw_die_ref,
3394 enum debug_info_usage);
3395 static void gen_subroutine_type_die (tree, dw_die_ref);
3396 static void gen_typedef_die (tree, dw_die_ref);
3397 static void gen_type_die (tree, dw_die_ref);
3398 static void gen_block_die (tree, dw_die_ref);
3399 static void decls_for_scope (tree, dw_die_ref);
3400 static bool is_naming_typedef_decl (const_tree);
3401 static inline dw_die_ref get_context_die (tree);
3402 static void gen_namespace_die (tree, dw_die_ref);
3403 static dw_die_ref gen_namelist_decl (tree, dw_die_ref, tree);
3404 static dw_die_ref gen_decl_die (tree, tree, struct vlr_context *, dw_die_ref);
3405 static dw_die_ref force_decl_die (tree);
3406 static dw_die_ref force_type_die (tree);
3407 static dw_die_ref setup_namespace_context (tree, dw_die_ref);
3408 static dw_die_ref declare_in_namespace (tree, dw_die_ref);
3409 static struct dwarf_file_data * lookup_filename (const char *);
3410 static void retry_incomplete_types (void);
3411 static void gen_type_die_for_member (tree, tree, dw_die_ref);
3412 static void gen_generic_params_dies (tree);
3413 static void gen_tagged_type_die (tree, dw_die_ref, enum debug_info_usage);
3414 static void gen_type_die_with_usage (tree, dw_die_ref, enum debug_info_usage);
3415 static void splice_child_die (dw_die_ref, dw_die_ref);
3416 static int file_info_cmp (const void *, const void *);
3417 static dw_loc_list_ref new_loc_list (dw_loc_descr_ref, const char *,
3418 const char *, const char *);
3419 static void output_loc_list (dw_loc_list_ref);
3420 static char *gen_internal_sym (const char *);
3421 static bool want_pubnames (void);
3422
3423 static void prune_unmark_dies (dw_die_ref);
3424 static void prune_unused_types_mark_generic_parms_dies (dw_die_ref);
3425 static void prune_unused_types_mark (dw_die_ref, int);
3426 static void prune_unused_types_walk (dw_die_ref);
3427 static void prune_unused_types_walk_attribs (dw_die_ref);
3428 static void prune_unused_types_prune (dw_die_ref);
3429 static void prune_unused_types (void);
3430 static int maybe_emit_file (struct dwarf_file_data *fd);
3431 static inline const char *AT_vms_delta1 (dw_attr_node *);
3432 static inline const char *AT_vms_delta2 (dw_attr_node *);
3433 static inline void add_AT_vms_delta (dw_die_ref, enum dwarf_attribute,
3434 const char *, const char *);
3435 static void append_entry_to_tmpl_value_parm_die_table (dw_die_ref, tree);
3436 static void gen_remaining_tmpl_value_param_die_attribute (void);
3437 static bool generic_type_p (tree);
3438 static void schedule_generic_params_dies_gen (tree t);
3439 static void gen_scheduled_generic_parms_dies (void);
3440
3441 static const char *comp_dir_string (void);
3442
3443 static void hash_loc_operands (dw_loc_descr_ref, inchash::hash &);
3444
3445 /* enum for tracking thread-local variables whose address is really an offset
3446 relative to the TLS pointer, which will need link-time relocation, but will
3447 not need relocation by the DWARF consumer. */
3448
3449 enum dtprel_bool
3450 {
3451 dtprel_false = 0,
3452 dtprel_true = 1
3453 };
3454
3455 /* Return the operator to use for an address of a variable. For dtprel_true, we
3456 use DW_OP_const*. For regular variables, which need both link-time
3457 relocation and consumer-level relocation (e.g., to account for shared objects
3458 loaded at a random address), we use DW_OP_addr*. */
3459
3460 static inline enum dwarf_location_atom
3461 dw_addr_op (enum dtprel_bool dtprel)
3462 {
3463 if (dtprel == dtprel_true)
3464 return (dwarf_split_debug_info ? DW_OP_GNU_const_index
3465 : (DWARF2_ADDR_SIZE == 4 ? DW_OP_const4u : DW_OP_const8u));
3466 else
3467 return dwarf_split_debug_info ? DW_OP_GNU_addr_index : DW_OP_addr;
3468 }
3469
3470 /* Return a pointer to a newly allocated address location description. If
3471 dwarf_split_debug_info is true, then record the address with the appropriate
3472 relocation. */
3473 static inline dw_loc_descr_ref
3474 new_addr_loc_descr (rtx addr, enum dtprel_bool dtprel)
3475 {
3476 dw_loc_descr_ref ref = new_loc_descr (dw_addr_op (dtprel), 0, 0);
3477
3478 ref->dw_loc_oprnd1.val_class = dw_val_class_addr;
3479 ref->dw_loc_oprnd1.v.val_addr = addr;
3480 ref->dtprel = dtprel;
3481 if (dwarf_split_debug_info)
3482 ref->dw_loc_oprnd1.val_entry
3483 = add_addr_table_entry (addr,
3484 dtprel ? ate_kind_rtx_dtprel : ate_kind_rtx);
3485 else
3486 ref->dw_loc_oprnd1.val_entry = NULL;
3487
3488 return ref;
3489 }
3490
3491 /* Section names used to hold DWARF debugging information. */
3492
3493 #ifndef DEBUG_INFO_SECTION
3494 #define DEBUG_INFO_SECTION ".debug_info"
3495 #endif
3496 #ifndef DEBUG_DWO_INFO_SECTION
3497 #define DEBUG_DWO_INFO_SECTION ".debug_info.dwo"
3498 #endif
3499 #ifndef DEBUG_ABBREV_SECTION
3500 #define DEBUG_ABBREV_SECTION ".debug_abbrev"
3501 #endif
3502 #ifndef DEBUG_DWO_ABBREV_SECTION
3503 #define DEBUG_DWO_ABBREV_SECTION ".debug_abbrev.dwo"
3504 #endif
3505 #ifndef DEBUG_ARANGES_SECTION
3506 #define DEBUG_ARANGES_SECTION ".debug_aranges"
3507 #endif
3508 #ifndef DEBUG_ADDR_SECTION
3509 #define DEBUG_ADDR_SECTION ".debug_addr"
3510 #endif
3511 #ifndef DEBUG_NORM_MACINFO_SECTION
3512 #define DEBUG_NORM_MACINFO_SECTION ".debug_macinfo"
3513 #endif
3514 #ifndef DEBUG_DWO_MACINFO_SECTION
3515 #define DEBUG_DWO_MACINFO_SECTION ".debug_macinfo.dwo"
3516 #endif
3517 #ifndef DEBUG_MACINFO_SECTION
3518 #define DEBUG_MACINFO_SECTION \
3519 (!dwarf_split_debug_info \
3520 ? (DEBUG_NORM_MACINFO_SECTION) : (DEBUG_DWO_MACINFO_SECTION))
3521 #endif
3522 #ifndef DEBUG_NORM_MACRO_SECTION
3523 #define DEBUG_NORM_MACRO_SECTION ".debug_macro"
3524 #endif
3525 #ifndef DEBUG_DWO_MACRO_SECTION
3526 #define DEBUG_DWO_MACRO_SECTION ".debug_macro.dwo"
3527 #endif
3528 #ifndef DEBUG_MACRO_SECTION
3529 #define DEBUG_MACRO_SECTION \
3530 (!dwarf_split_debug_info \
3531 ? (DEBUG_NORM_MACRO_SECTION) : (DEBUG_DWO_MACRO_SECTION))
3532 #endif
3533 #ifndef DEBUG_LINE_SECTION
3534 #define DEBUG_LINE_SECTION ".debug_line"
3535 #endif
3536 #ifndef DEBUG_DWO_LINE_SECTION
3537 #define DEBUG_DWO_LINE_SECTION ".debug_line.dwo"
3538 #endif
3539 #ifndef DEBUG_LOC_SECTION
3540 #define DEBUG_LOC_SECTION ".debug_loc"
3541 #endif
3542 #ifndef DEBUG_DWO_LOC_SECTION
3543 #define DEBUG_DWO_LOC_SECTION ".debug_loc.dwo"
3544 #endif
3545 #ifndef DEBUG_PUBNAMES_SECTION
3546 #define DEBUG_PUBNAMES_SECTION \
3547 ((debug_generate_pub_sections == 2) \
3548 ? ".debug_gnu_pubnames" : ".debug_pubnames")
3549 #endif
3550 #ifndef DEBUG_PUBTYPES_SECTION
3551 #define DEBUG_PUBTYPES_SECTION \
3552 ((debug_generate_pub_sections == 2) \
3553 ? ".debug_gnu_pubtypes" : ".debug_pubtypes")
3554 #endif
3555 #define DEBUG_NORM_STR_OFFSETS_SECTION ".debug_str_offsets"
3556 #define DEBUG_DWO_STR_OFFSETS_SECTION ".debug_str_offsets.dwo"
3557 #ifndef DEBUG_STR_OFFSETS_SECTION
3558 #define DEBUG_STR_OFFSETS_SECTION \
3559 (!dwarf_split_debug_info \
3560 ? (DEBUG_NORM_STR_OFFSETS_SECTION) : (DEBUG_DWO_STR_OFFSETS_SECTION))
3561 #endif
3562 #ifndef DEBUG_STR_DWO_SECTION
3563 #define DEBUG_STR_DWO_SECTION ".debug_str.dwo"
3564 #endif
3565 #ifndef DEBUG_STR_SECTION
3566 #define DEBUG_STR_SECTION ".debug_str"
3567 #endif
3568 #ifndef DEBUG_RANGES_SECTION
3569 #define DEBUG_RANGES_SECTION ".debug_ranges"
3570 #endif
3571
3572 /* Standard ELF section names for compiled code and data. */
3573 #ifndef TEXT_SECTION_NAME
3574 #define TEXT_SECTION_NAME ".text"
3575 #endif
3576
3577 /* Section flags for .debug_macinfo/.debug_macro section. */
3578 #define DEBUG_MACRO_SECTION_FLAGS \
3579 (dwarf_split_debug_info ? SECTION_DEBUG | SECTION_EXCLUDE : SECTION_DEBUG)
3580
3581 /* Section flags for .debug_str section. */
3582 #define DEBUG_STR_SECTION_FLAGS \
3583 (HAVE_GAS_SHF_MERGE && flag_merge_debug_strings \
3584 ? SECTION_DEBUG | SECTION_MERGE | SECTION_STRINGS | 1 \
3585 : SECTION_DEBUG)
3586
3587 /* Section flags for .debug_str.dwo section. */
3588 #define DEBUG_STR_DWO_SECTION_FLAGS (SECTION_DEBUG | SECTION_EXCLUDE)
3589
3590 /* Labels we insert at beginning sections we can reference instead of
3591 the section names themselves. */
3592
3593 #ifndef TEXT_SECTION_LABEL
3594 #define TEXT_SECTION_LABEL "Ltext"
3595 #endif
3596 #ifndef COLD_TEXT_SECTION_LABEL
3597 #define COLD_TEXT_SECTION_LABEL "Ltext_cold"
3598 #endif
3599 #ifndef DEBUG_LINE_SECTION_LABEL
3600 #define DEBUG_LINE_SECTION_LABEL "Ldebug_line"
3601 #endif
3602 #ifndef DEBUG_SKELETON_LINE_SECTION_LABEL
3603 #define DEBUG_SKELETON_LINE_SECTION_LABEL "Lskeleton_debug_line"
3604 #endif
3605 #ifndef DEBUG_INFO_SECTION_LABEL
3606 #define DEBUG_INFO_SECTION_LABEL "Ldebug_info"
3607 #endif
3608 #ifndef DEBUG_SKELETON_INFO_SECTION_LABEL
3609 #define DEBUG_SKELETON_INFO_SECTION_LABEL "Lskeleton_debug_info"
3610 #endif
3611 #ifndef DEBUG_ABBREV_SECTION_LABEL
3612 #define DEBUG_ABBREV_SECTION_LABEL "Ldebug_abbrev"
3613 #endif
3614 #ifndef DEBUG_SKELETON_ABBREV_SECTION_LABEL
3615 #define DEBUG_SKELETON_ABBREV_SECTION_LABEL "Lskeleton_debug_abbrev"
3616 #endif
3617 #ifndef DEBUG_ADDR_SECTION_LABEL
3618 #define DEBUG_ADDR_SECTION_LABEL "Ldebug_addr"
3619 #endif
3620 #ifndef DEBUG_LOC_SECTION_LABEL
3621 #define DEBUG_LOC_SECTION_LABEL "Ldebug_loc"
3622 #endif
3623 #ifndef DEBUG_RANGES_SECTION_LABEL
3624 #define DEBUG_RANGES_SECTION_LABEL "Ldebug_ranges"
3625 #endif
3626 #ifndef DEBUG_MACINFO_SECTION_LABEL
3627 #define DEBUG_MACINFO_SECTION_LABEL "Ldebug_macinfo"
3628 #endif
3629 #ifndef DEBUG_MACRO_SECTION_LABEL
3630 #define DEBUG_MACRO_SECTION_LABEL "Ldebug_macro"
3631 #endif
3632 #define SKELETON_COMP_DIE_ABBREV 1
3633 #define SKELETON_TYPE_DIE_ABBREV 2
3634
3635 /* Definitions of defaults for formats and names of various special
3636 (artificial) labels which may be generated within this file (when the -g
3637 options is used and DWARF2_DEBUGGING_INFO is in effect.
3638 If necessary, these may be overridden from within the tm.h file, but
3639 typically, overriding these defaults is unnecessary. */
3640
3641 static char text_end_label[MAX_ARTIFICIAL_LABEL_BYTES];
3642 static char text_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3643 static char cold_text_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3644 static char cold_end_label[MAX_ARTIFICIAL_LABEL_BYTES];
3645 static char abbrev_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3646 static char debug_info_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3647 static char debug_skeleton_info_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3648 static char debug_skeleton_abbrev_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3649 static char debug_line_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3650 static char debug_addr_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3651 static char debug_skeleton_line_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3652 static char macinfo_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3653 static char loc_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3654 static char ranges_section_label[2 * MAX_ARTIFICIAL_LABEL_BYTES];
3655
3656 #ifndef TEXT_END_LABEL
3657 #define TEXT_END_LABEL "Letext"
3658 #endif
3659 #ifndef COLD_END_LABEL
3660 #define COLD_END_LABEL "Letext_cold"
3661 #endif
3662 #ifndef BLOCK_BEGIN_LABEL
3663 #define BLOCK_BEGIN_LABEL "LBB"
3664 #endif
3665 #ifndef BLOCK_END_LABEL
3666 #define BLOCK_END_LABEL "LBE"
3667 #endif
3668 #ifndef LINE_CODE_LABEL
3669 #define LINE_CODE_LABEL "LM"
3670 #endif
3671
3672 \f
3673 /* Return the root of the DIE's built for the current compilation unit. */
3674 static dw_die_ref
3675 comp_unit_die (void)
3676 {
3677 if (!single_comp_unit_die)
3678 single_comp_unit_die = gen_compile_unit_die (NULL);
3679 return single_comp_unit_die;
3680 }
3681
3682 /* We allow a language front-end to designate a function that is to be
3683 called to "demangle" any name before it is put into a DIE. */
3684
3685 static const char *(*demangle_name_func) (const char *);
3686
3687 void
3688 dwarf2out_set_demangle_name_func (const char *(*func) (const char *))
3689 {
3690 demangle_name_func = func;
3691 }
3692
3693 /* Test if rtl node points to a pseudo register. */
3694
3695 static inline int
3696 is_pseudo_reg (const_rtx rtl)
3697 {
3698 return ((REG_P (rtl) && REGNO (rtl) >= FIRST_PSEUDO_REGISTER)
3699 || (GET_CODE (rtl) == SUBREG
3700 && REGNO (SUBREG_REG (rtl)) >= FIRST_PSEUDO_REGISTER));
3701 }
3702
3703 /* Return a reference to a type, with its const and volatile qualifiers
3704 removed. */
3705
3706 static inline tree
3707 type_main_variant (tree type)
3708 {
3709 type = TYPE_MAIN_VARIANT (type);
3710
3711 /* ??? There really should be only one main variant among any group of
3712 variants of a given type (and all of the MAIN_VARIANT values for all
3713 members of the group should point to that one type) but sometimes the C
3714 front-end messes this up for array types, so we work around that bug
3715 here. */
3716 if (TREE_CODE (type) == ARRAY_TYPE)
3717 while (type != TYPE_MAIN_VARIANT (type))
3718 type = TYPE_MAIN_VARIANT (type);
3719
3720 return type;
3721 }
3722
3723 /* Return nonzero if the given type node represents a tagged type. */
3724
3725 static inline int
3726 is_tagged_type (const_tree type)
3727 {
3728 enum tree_code code = TREE_CODE (type);
3729
3730 return (code == RECORD_TYPE || code == UNION_TYPE
3731 || code == QUAL_UNION_TYPE || code == ENUMERAL_TYPE);
3732 }
3733
3734 /* Set label to debug_info_section_label + die_offset of a DIE reference. */
3735
3736 static void
3737 get_ref_die_offset_label (char *label, dw_die_ref ref)
3738 {
3739 sprintf (label, "%s+%ld", debug_info_section_label, ref->die_offset);
3740 }
3741
3742 /* Return die_offset of a DIE reference to a base type. */
3743
3744 static unsigned long int
3745 get_base_type_offset (dw_die_ref ref)
3746 {
3747 if (ref->die_offset)
3748 return ref->die_offset;
3749 if (comp_unit_die ()->die_abbrev)
3750 {
3751 calc_base_type_die_sizes ();
3752 gcc_assert (ref->die_offset);
3753 }
3754 return ref->die_offset;
3755 }
3756
3757 /* Return die_offset of a DIE reference other than base type. */
3758
3759 static unsigned long int
3760 get_ref_die_offset (dw_die_ref ref)
3761 {
3762 gcc_assert (ref->die_offset);
3763 return ref->die_offset;
3764 }
3765
3766 /* Convert a DIE tag into its string name. */
3767
3768 static const char *
3769 dwarf_tag_name (unsigned int tag)
3770 {
3771 const char *name = get_DW_TAG_name (tag);
3772
3773 if (name != NULL)
3774 return name;
3775
3776 return "DW_TAG_<unknown>";
3777 }
3778
3779 /* Convert a DWARF attribute code into its string name. */
3780
3781 static const char *
3782 dwarf_attr_name (unsigned int attr)
3783 {
3784 const char *name;
3785
3786 switch (attr)
3787 {
3788 #if VMS_DEBUGGING_INFO
3789 case DW_AT_HP_prologue:
3790 return "DW_AT_HP_prologue";
3791 #else
3792 case DW_AT_MIPS_loop_unroll_factor:
3793 return "DW_AT_MIPS_loop_unroll_factor";
3794 #endif
3795
3796 #if VMS_DEBUGGING_INFO
3797 case DW_AT_HP_epilogue:
3798 return "DW_AT_HP_epilogue";
3799 #else
3800 case DW_AT_MIPS_stride:
3801 return "DW_AT_MIPS_stride";
3802 #endif
3803 }
3804
3805 name = get_DW_AT_name (attr);
3806
3807 if (name != NULL)
3808 return name;
3809
3810 return "DW_AT_<unknown>";
3811 }
3812
3813 /* Convert a DWARF value form code into its string name. */
3814
3815 static const char *
3816 dwarf_form_name (unsigned int form)
3817 {
3818 const char *name = get_DW_FORM_name (form);
3819
3820 if (name != NULL)
3821 return name;
3822
3823 return "DW_FORM_<unknown>";
3824 }
3825 \f
3826 /* Determine the "ultimate origin" of a decl. The decl may be an inlined
3827 instance of an inlined instance of a decl which is local to an inline
3828 function, so we have to trace all of the way back through the origin chain
3829 to find out what sort of node actually served as the original seed for the
3830 given block. */
3831
3832 static tree
3833 decl_ultimate_origin (const_tree decl)
3834 {
3835 if (!CODE_CONTAINS_STRUCT (TREE_CODE (decl), TS_DECL_COMMON))
3836 return NULL_TREE;
3837
3838 /* DECL_ABSTRACT_ORIGIN can point to itself; ignore that if
3839 we're trying to output the abstract instance of this function. */
3840 if (DECL_ABSTRACT_P (decl) && DECL_ABSTRACT_ORIGIN (decl) == decl)
3841 return NULL_TREE;
3842
3843 /* Since the DECL_ABSTRACT_ORIGIN for a DECL is supposed to be the
3844 most distant ancestor, this should never happen. */
3845 gcc_assert (!DECL_FROM_INLINE (DECL_ORIGIN (decl)));
3846
3847 return DECL_ABSTRACT_ORIGIN (decl);
3848 }
3849
3850 /* Get the class to which DECL belongs, if any. In g++, the DECL_CONTEXT
3851 of a virtual function may refer to a base class, so we check the 'this'
3852 parameter. */
3853
3854 static tree
3855 decl_class_context (tree decl)
3856 {
3857 tree context = NULL_TREE;
3858
3859 if (TREE_CODE (decl) != FUNCTION_DECL || ! DECL_VINDEX (decl))
3860 context = DECL_CONTEXT (decl);
3861 else
3862 context = TYPE_MAIN_VARIANT
3863 (TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (decl)))));
3864
3865 if (context && !TYPE_P (context))
3866 context = NULL_TREE;
3867
3868 return context;
3869 }
3870 \f
3871 /* Add an attribute/value pair to a DIE. */
3872
3873 static inline void
3874 add_dwarf_attr (dw_die_ref die, dw_attr_node *attr)
3875 {
3876 /* Maybe this should be an assert? */
3877 if (die == NULL)
3878 return;
3879
3880 vec_safe_reserve (die->die_attr, 1);
3881 vec_safe_push (die->die_attr, *attr);
3882 }
3883
3884 static inline enum dw_val_class
3885 AT_class (dw_attr_node *a)
3886 {
3887 return a->dw_attr_val.val_class;
3888 }
3889
3890 /* Return the index for any attribute that will be referenced with a
3891 DW_FORM_GNU_addr_index or DW_FORM_GNU_str_index. String indices
3892 are stored in dw_attr_val.v.val_str for reference counting
3893 pruning. */
3894
3895 static inline unsigned int
3896 AT_index (dw_attr_node *a)
3897 {
3898 if (AT_class (a) == dw_val_class_str)
3899 return a->dw_attr_val.v.val_str->index;
3900 else if (a->dw_attr_val.val_entry != NULL)
3901 return a->dw_attr_val.val_entry->index;
3902 return NOT_INDEXED;
3903 }
3904
3905 /* Add a flag value attribute to a DIE. */
3906
3907 static inline void
3908 add_AT_flag (dw_die_ref die, enum dwarf_attribute attr_kind, unsigned int flag)
3909 {
3910 dw_attr_node attr;
3911
3912 attr.dw_attr = attr_kind;
3913 attr.dw_attr_val.val_class = dw_val_class_flag;
3914 attr.dw_attr_val.val_entry = NULL;
3915 attr.dw_attr_val.v.val_flag = flag;
3916 add_dwarf_attr (die, &attr);
3917 }
3918
3919 static inline unsigned
3920 AT_flag (dw_attr_node *a)
3921 {
3922 gcc_assert (a && AT_class (a) == dw_val_class_flag);
3923 return a->dw_attr_val.v.val_flag;
3924 }
3925
3926 /* Add a signed integer attribute value to a DIE. */
3927
3928 static inline void
3929 add_AT_int (dw_die_ref die, enum dwarf_attribute attr_kind, HOST_WIDE_INT int_val)
3930 {
3931 dw_attr_node attr;
3932
3933 attr.dw_attr = attr_kind;
3934 attr.dw_attr_val.val_class = dw_val_class_const;
3935 attr.dw_attr_val.val_entry = NULL;
3936 attr.dw_attr_val.v.val_int = int_val;
3937 add_dwarf_attr (die, &attr);
3938 }
3939
3940 static inline HOST_WIDE_INT
3941 AT_int (dw_attr_node *a)
3942 {
3943 gcc_assert (a && AT_class (a) == dw_val_class_const);
3944 return a->dw_attr_val.v.val_int;
3945 }
3946
3947 /* Add an unsigned integer attribute value to a DIE. */
3948
3949 static inline void
3950 add_AT_unsigned (dw_die_ref die, enum dwarf_attribute attr_kind,
3951 unsigned HOST_WIDE_INT unsigned_val)
3952 {
3953 dw_attr_node attr;
3954
3955 attr.dw_attr = attr_kind;
3956 attr.dw_attr_val.val_class = dw_val_class_unsigned_const;
3957 attr.dw_attr_val.val_entry = NULL;
3958 attr.dw_attr_val.v.val_unsigned = unsigned_val;
3959 add_dwarf_attr (die, &attr);
3960 }
3961
3962 static inline unsigned HOST_WIDE_INT
3963 AT_unsigned (dw_attr_node *a)
3964 {
3965 gcc_assert (a && AT_class (a) == dw_val_class_unsigned_const);
3966 return a->dw_attr_val.v.val_unsigned;
3967 }
3968
3969 /* Add an unsigned wide integer attribute value to a DIE. */
3970
3971 static inline void
3972 add_AT_wide (dw_die_ref die, enum dwarf_attribute attr_kind,
3973 const wide_int& w)
3974 {
3975 dw_attr_node attr;
3976
3977 attr.dw_attr = attr_kind;
3978 attr.dw_attr_val.val_class = dw_val_class_wide_int;
3979 attr.dw_attr_val.val_entry = NULL;
3980 attr.dw_attr_val.v.val_wide = ggc_alloc<wide_int> ();
3981 *attr.dw_attr_val.v.val_wide = w;
3982 add_dwarf_attr (die, &attr);
3983 }
3984
3985 /* Add an unsigned double integer attribute value to a DIE. */
3986
3987 static inline void
3988 add_AT_double (dw_die_ref die, enum dwarf_attribute attr_kind,
3989 HOST_WIDE_INT high, unsigned HOST_WIDE_INT low)
3990 {
3991 dw_attr_node attr;
3992
3993 attr.dw_attr = attr_kind;
3994 attr.dw_attr_val.val_class = dw_val_class_const_double;
3995 attr.dw_attr_val.val_entry = NULL;
3996 attr.dw_attr_val.v.val_double.high = high;
3997 attr.dw_attr_val.v.val_double.low = low;
3998 add_dwarf_attr (die, &attr);
3999 }
4000
4001 /* Add a floating point attribute value to a DIE and return it. */
4002
4003 static inline void
4004 add_AT_vec (dw_die_ref die, enum dwarf_attribute attr_kind,
4005 unsigned int length, unsigned int elt_size, unsigned char *array)
4006 {
4007 dw_attr_node attr;
4008
4009 attr.dw_attr = attr_kind;
4010 attr.dw_attr_val.val_class = dw_val_class_vec;
4011 attr.dw_attr_val.val_entry = NULL;
4012 attr.dw_attr_val.v.val_vec.length = length;
4013 attr.dw_attr_val.v.val_vec.elt_size = elt_size;
4014 attr.dw_attr_val.v.val_vec.array = array;
4015 add_dwarf_attr (die, &attr);
4016 }
4017
4018 /* Add an 8-byte data attribute value to a DIE. */
4019
4020 static inline void
4021 add_AT_data8 (dw_die_ref die, enum dwarf_attribute attr_kind,
4022 unsigned char data8[8])
4023 {
4024 dw_attr_node attr;
4025
4026 attr.dw_attr = attr_kind;
4027 attr.dw_attr_val.val_class = dw_val_class_data8;
4028 attr.dw_attr_val.val_entry = NULL;
4029 memcpy (attr.dw_attr_val.v.val_data8, data8, 8);
4030 add_dwarf_attr (die, &attr);
4031 }
4032
4033 /* Add DW_AT_low_pc and DW_AT_high_pc to a DIE. When using
4034 dwarf_split_debug_info, address attributes in dies destined for the
4035 final executable have force_direct set to avoid using indexed
4036 references. */
4037
4038 static inline void
4039 add_AT_low_high_pc (dw_die_ref die, const char *lbl_low, const char *lbl_high,
4040 bool force_direct)
4041 {
4042 dw_attr_node attr;
4043 char * lbl_id;
4044
4045 lbl_id = xstrdup (lbl_low);
4046 attr.dw_attr = DW_AT_low_pc;
4047 attr.dw_attr_val.val_class = dw_val_class_lbl_id;
4048 attr.dw_attr_val.v.val_lbl_id = lbl_id;
4049 if (dwarf_split_debug_info && !force_direct)
4050 attr.dw_attr_val.val_entry
4051 = add_addr_table_entry (lbl_id, ate_kind_label);
4052 else
4053 attr.dw_attr_val.val_entry = NULL;
4054 add_dwarf_attr (die, &attr);
4055
4056 attr.dw_attr = DW_AT_high_pc;
4057 if (dwarf_version < 4)
4058 attr.dw_attr_val.val_class = dw_val_class_lbl_id;
4059 else
4060 attr.dw_attr_val.val_class = dw_val_class_high_pc;
4061 lbl_id = xstrdup (lbl_high);
4062 attr.dw_attr_val.v.val_lbl_id = lbl_id;
4063 if (attr.dw_attr_val.val_class == dw_val_class_lbl_id
4064 && dwarf_split_debug_info && !force_direct)
4065 attr.dw_attr_val.val_entry
4066 = add_addr_table_entry (lbl_id, ate_kind_label);
4067 else
4068 attr.dw_attr_val.val_entry = NULL;
4069 add_dwarf_attr (die, &attr);
4070 }
4071
4072 /* Hash and equality functions for debug_str_hash. */
4073
4074 hashval_t
4075 indirect_string_hasher::hash (indirect_string_node *x)
4076 {
4077 return htab_hash_string (x->str);
4078 }
4079
4080 bool
4081 indirect_string_hasher::equal (indirect_string_node *x1, const char *x2)
4082 {
4083 return strcmp (x1->str, x2) == 0;
4084 }
4085
4086 /* Add STR to the given string hash table. */
4087
4088 static struct indirect_string_node *
4089 find_AT_string_in_table (const char *str,
4090 hash_table<indirect_string_hasher> *table)
4091 {
4092 struct indirect_string_node *node;
4093
4094 indirect_string_node **slot
4095 = table->find_slot_with_hash (str, htab_hash_string (str), INSERT);
4096 if (*slot == NULL)
4097 {
4098 node = ggc_cleared_alloc<indirect_string_node> ();
4099 node->str = ggc_strdup (str);
4100 *slot = node;
4101 }
4102 else
4103 node = *slot;
4104
4105 node->refcount++;
4106 return node;
4107 }
4108
4109 /* Add STR to the indirect string hash table. */
4110
4111 static struct indirect_string_node *
4112 find_AT_string (const char *str)
4113 {
4114 if (! debug_str_hash)
4115 debug_str_hash = hash_table<indirect_string_hasher>::create_ggc (10);
4116
4117 return find_AT_string_in_table (str, debug_str_hash);
4118 }
4119
4120 /* Add a string attribute value to a DIE. */
4121
4122 static inline void
4123 add_AT_string (dw_die_ref die, enum dwarf_attribute attr_kind, const char *str)
4124 {
4125 dw_attr_node attr;
4126 struct indirect_string_node *node;
4127
4128 node = find_AT_string (str);
4129
4130 attr.dw_attr = attr_kind;
4131 attr.dw_attr_val.val_class = dw_val_class_str;
4132 attr.dw_attr_val.val_entry = NULL;
4133 attr.dw_attr_val.v.val_str = node;
4134 add_dwarf_attr (die, &attr);
4135 }
4136
4137 static inline const char *
4138 AT_string (dw_attr_node *a)
4139 {
4140 gcc_assert (a && AT_class (a) == dw_val_class_str);
4141 return a->dw_attr_val.v.val_str->str;
4142 }
4143
4144 /* Call this function directly to bypass AT_string_form's logic to put
4145 the string inline in the die. */
4146
4147 static void
4148 set_indirect_string (struct indirect_string_node *node)
4149 {
4150 char label[32];
4151 /* Already indirect is a no op. */
4152 if (node->form == DW_FORM_strp || node->form == DW_FORM_GNU_str_index)
4153 {
4154 gcc_assert (node->label);
4155 return;
4156 }
4157 ASM_GENERATE_INTERNAL_LABEL (label, "LASF", dw2_string_counter);
4158 ++dw2_string_counter;
4159 node->label = xstrdup (label);
4160
4161 if (!dwarf_split_debug_info)
4162 {
4163 node->form = DW_FORM_strp;
4164 node->index = NOT_INDEXED;
4165 }
4166 else
4167 {
4168 node->form = DW_FORM_GNU_str_index;
4169 node->index = NO_INDEX_ASSIGNED;
4170 }
4171 }
4172
4173 /* Find out whether a string should be output inline in DIE
4174 or out-of-line in .debug_str section. */
4175
4176 static enum dwarf_form
4177 find_string_form (struct indirect_string_node *node)
4178 {
4179 unsigned int len;
4180
4181 if (node->form)
4182 return node->form;
4183
4184 len = strlen (node->str) + 1;
4185
4186 /* If the string is shorter or equal to the size of the reference, it is
4187 always better to put it inline. */
4188 if (len <= DWARF_OFFSET_SIZE || node->refcount == 0)
4189 return node->form = DW_FORM_string;
4190
4191 /* If we cannot expect the linker to merge strings in .debug_str
4192 section, only put it into .debug_str if it is worth even in this
4193 single module. */
4194 if (DWARF2_INDIRECT_STRING_SUPPORT_MISSING_ON_TARGET
4195 || ((debug_str_section->common.flags & SECTION_MERGE) == 0
4196 && (len - DWARF_OFFSET_SIZE) * node->refcount <= len))
4197 return node->form = DW_FORM_string;
4198
4199 set_indirect_string (node);
4200
4201 return node->form;
4202 }
4203
4204 /* Find out whether the string referenced from the attribute should be
4205 output inline in DIE or out-of-line in .debug_str section. */
4206
4207 static enum dwarf_form
4208 AT_string_form (dw_attr_node *a)
4209 {
4210 gcc_assert (a && AT_class (a) == dw_val_class_str);
4211 return find_string_form (a->dw_attr_val.v.val_str);
4212 }
4213
4214 /* Add a DIE reference attribute value to a DIE. */
4215
4216 static inline void
4217 add_AT_die_ref (dw_die_ref die, enum dwarf_attribute attr_kind, dw_die_ref targ_die)
4218 {
4219 dw_attr_node attr;
4220 gcc_checking_assert (targ_die != NULL);
4221
4222 /* With LTO we can end up trying to reference something we didn't create
4223 a DIE for. Avoid crashing later on a NULL referenced DIE. */
4224 if (targ_die == NULL)
4225 return;
4226
4227 attr.dw_attr = attr_kind;
4228 attr.dw_attr_val.val_class = dw_val_class_die_ref;
4229 attr.dw_attr_val.val_entry = NULL;
4230 attr.dw_attr_val.v.val_die_ref.die = targ_die;
4231 attr.dw_attr_val.v.val_die_ref.external = 0;
4232 add_dwarf_attr (die, &attr);
4233 }
4234
4235 /* Change DIE reference REF to point to NEW_DIE instead. */
4236
4237 static inline void
4238 change_AT_die_ref (dw_attr_node *ref, dw_die_ref new_die)
4239 {
4240 gcc_assert (ref->dw_attr_val.val_class == dw_val_class_die_ref);
4241 ref->dw_attr_val.v.val_die_ref.die = new_die;
4242 ref->dw_attr_val.v.val_die_ref.external = 0;
4243 }
4244
4245 /* Add an AT_specification attribute to a DIE, and also make the back
4246 pointer from the specification to the definition. */
4247
4248 static inline void
4249 add_AT_specification (dw_die_ref die, dw_die_ref targ_die)
4250 {
4251 add_AT_die_ref (die, DW_AT_specification, targ_die);
4252 gcc_assert (!targ_die->die_definition);
4253 targ_die->die_definition = die;
4254 }
4255
4256 static inline dw_die_ref
4257 AT_ref (dw_attr_node *a)
4258 {
4259 gcc_assert (a && AT_class (a) == dw_val_class_die_ref);
4260 return a->dw_attr_val.v.val_die_ref.die;
4261 }
4262
4263 static inline int
4264 AT_ref_external (dw_attr_node *a)
4265 {
4266 if (a && AT_class (a) == dw_val_class_die_ref)
4267 return a->dw_attr_val.v.val_die_ref.external;
4268
4269 return 0;
4270 }
4271
4272 static inline void
4273 set_AT_ref_external (dw_attr_node *a, int i)
4274 {
4275 gcc_assert (a && AT_class (a) == dw_val_class_die_ref);
4276 a->dw_attr_val.v.val_die_ref.external = i;
4277 }
4278
4279 /* Add an FDE reference attribute value to a DIE. */
4280
4281 static inline void
4282 add_AT_fde_ref (dw_die_ref die, enum dwarf_attribute attr_kind, unsigned int targ_fde)
4283 {
4284 dw_attr_node attr;
4285
4286 attr.dw_attr = attr_kind;
4287 attr.dw_attr_val.val_class = dw_val_class_fde_ref;
4288 attr.dw_attr_val.val_entry = NULL;
4289 attr.dw_attr_val.v.val_fde_index = targ_fde;
4290 add_dwarf_attr (die, &attr);
4291 }
4292
4293 /* Add a location description attribute value to a DIE. */
4294
4295 static inline void
4296 add_AT_loc (dw_die_ref die, enum dwarf_attribute attr_kind, dw_loc_descr_ref loc)
4297 {
4298 dw_attr_node attr;
4299
4300 attr.dw_attr = attr_kind;
4301 attr.dw_attr_val.val_class = dw_val_class_loc;
4302 attr.dw_attr_val.val_entry = NULL;
4303 attr.dw_attr_val.v.val_loc = loc;
4304 add_dwarf_attr (die, &attr);
4305 }
4306
4307 static inline dw_loc_descr_ref
4308 AT_loc (dw_attr_node *a)
4309 {
4310 gcc_assert (a && AT_class (a) == dw_val_class_loc);
4311 return a->dw_attr_val.v.val_loc;
4312 }
4313
4314 static inline void
4315 add_AT_loc_list (dw_die_ref die, enum dwarf_attribute attr_kind, dw_loc_list_ref loc_list)
4316 {
4317 dw_attr_node attr;
4318
4319 if (XCOFF_DEBUGGING_INFO && !HAVE_XCOFF_DWARF_EXTRAS)
4320 return;
4321
4322 attr.dw_attr = attr_kind;
4323 attr.dw_attr_val.val_class = dw_val_class_loc_list;
4324 attr.dw_attr_val.val_entry = NULL;
4325 attr.dw_attr_val.v.val_loc_list = loc_list;
4326 add_dwarf_attr (die, &attr);
4327 have_location_lists = true;
4328 }
4329
4330 static inline dw_loc_list_ref
4331 AT_loc_list (dw_attr_node *a)
4332 {
4333 gcc_assert (a && AT_class (a) == dw_val_class_loc_list);
4334 return a->dw_attr_val.v.val_loc_list;
4335 }
4336
4337 static inline dw_loc_list_ref *
4338 AT_loc_list_ptr (dw_attr_node *a)
4339 {
4340 gcc_assert (a && AT_class (a) == dw_val_class_loc_list);
4341 return &a->dw_attr_val.v.val_loc_list;
4342 }
4343
4344 struct addr_hasher : ggc_ptr_hash<addr_table_entry>
4345 {
4346 static hashval_t hash (addr_table_entry *);
4347 static bool equal (addr_table_entry *, addr_table_entry *);
4348 };
4349
4350 /* Table of entries into the .debug_addr section. */
4351
4352 static GTY (()) hash_table<addr_hasher> *addr_index_table;
4353
4354 /* Hash an address_table_entry. */
4355
4356 hashval_t
4357 addr_hasher::hash (addr_table_entry *a)
4358 {
4359 inchash::hash hstate;
4360 switch (a->kind)
4361 {
4362 case ate_kind_rtx:
4363 hstate.add_int (0);
4364 break;
4365 case ate_kind_rtx_dtprel:
4366 hstate.add_int (1);
4367 break;
4368 case ate_kind_label:
4369 return htab_hash_string (a->addr.label);
4370 default:
4371 gcc_unreachable ();
4372 }
4373 inchash::add_rtx (a->addr.rtl, hstate);
4374 return hstate.end ();
4375 }
4376
4377 /* Determine equality for two address_table_entries. */
4378
4379 bool
4380 addr_hasher::equal (addr_table_entry *a1, addr_table_entry *a2)
4381 {
4382 if (a1->kind != a2->kind)
4383 return 0;
4384 switch (a1->kind)
4385 {
4386 case ate_kind_rtx:
4387 case ate_kind_rtx_dtprel:
4388 return rtx_equal_p (a1->addr.rtl, a2->addr.rtl);
4389 case ate_kind_label:
4390 return strcmp (a1->addr.label, a2->addr.label) == 0;
4391 default:
4392 gcc_unreachable ();
4393 }
4394 }
4395
4396 /* Initialize an addr_table_entry. */
4397
4398 void
4399 init_addr_table_entry (addr_table_entry *e, enum ate_kind kind, void *addr)
4400 {
4401 e->kind = kind;
4402 switch (kind)
4403 {
4404 case ate_kind_rtx:
4405 case ate_kind_rtx_dtprel:
4406 e->addr.rtl = (rtx) addr;
4407 break;
4408 case ate_kind_label:
4409 e->addr.label = (char *) addr;
4410 break;
4411 }
4412 e->refcount = 0;
4413 e->index = NO_INDEX_ASSIGNED;
4414 }
4415
4416 /* Add attr to the address table entry to the table. Defer setting an
4417 index until output time. */
4418
4419 static addr_table_entry *
4420 add_addr_table_entry (void *addr, enum ate_kind kind)
4421 {
4422 addr_table_entry *node;
4423 addr_table_entry finder;
4424
4425 gcc_assert (dwarf_split_debug_info);
4426 if (! addr_index_table)
4427 addr_index_table = hash_table<addr_hasher>::create_ggc (10);
4428 init_addr_table_entry (&finder, kind, addr);
4429 addr_table_entry **slot = addr_index_table->find_slot (&finder, INSERT);
4430
4431 if (*slot == HTAB_EMPTY_ENTRY)
4432 {
4433 node = ggc_cleared_alloc<addr_table_entry> ();
4434 init_addr_table_entry (node, kind, addr);
4435 *slot = node;
4436 }
4437 else
4438 node = *slot;
4439
4440 node->refcount++;
4441 return node;
4442 }
4443
4444 /* Remove an entry from the addr table by decrementing its refcount.
4445 Strictly, decrementing the refcount would be enough, but the
4446 assertion that the entry is actually in the table has found
4447 bugs. */
4448
4449 static void
4450 remove_addr_table_entry (addr_table_entry *entry)
4451 {
4452 gcc_assert (dwarf_split_debug_info && addr_index_table);
4453 /* After an index is assigned, the table is frozen. */
4454 gcc_assert (entry->refcount > 0 && entry->index == NO_INDEX_ASSIGNED);
4455 entry->refcount--;
4456 }
4457
4458 /* Given a location list, remove all addresses it refers to from the
4459 address_table. */
4460
4461 static void
4462 remove_loc_list_addr_table_entries (dw_loc_descr_ref descr)
4463 {
4464 for (; descr; descr = descr->dw_loc_next)
4465 if (descr->dw_loc_oprnd1.val_entry != NULL)
4466 {
4467 gcc_assert (descr->dw_loc_oprnd1.val_entry->index == NO_INDEX_ASSIGNED);
4468 remove_addr_table_entry (descr->dw_loc_oprnd1.val_entry);
4469 }
4470 }
4471
4472 /* A helper function for dwarf2out_finish called through
4473 htab_traverse. Assign an addr_table_entry its index. All entries
4474 must be collected into the table when this function is called,
4475 because the indexing code relies on htab_traverse to traverse nodes
4476 in the same order for each run. */
4477
4478 int
4479 index_addr_table_entry (addr_table_entry **h, unsigned int *index)
4480 {
4481 addr_table_entry *node = *h;
4482
4483 /* Don't index unreferenced nodes. */
4484 if (node->refcount == 0)
4485 return 1;
4486
4487 gcc_assert (node->index == NO_INDEX_ASSIGNED);
4488 node->index = *index;
4489 *index += 1;
4490
4491 return 1;
4492 }
4493
4494 /* Add an address constant attribute value to a DIE. When using
4495 dwarf_split_debug_info, address attributes in dies destined for the
4496 final executable should be direct references--setting the parameter
4497 force_direct ensures this behavior. */
4498
4499 static inline void
4500 add_AT_addr (dw_die_ref die, enum dwarf_attribute attr_kind, rtx addr,
4501 bool force_direct)
4502 {
4503 dw_attr_node attr;
4504
4505 attr.dw_attr = attr_kind;
4506 attr.dw_attr_val.val_class = dw_val_class_addr;
4507 attr.dw_attr_val.v.val_addr = addr;
4508 if (dwarf_split_debug_info && !force_direct)
4509 attr.dw_attr_val.val_entry = add_addr_table_entry (addr, ate_kind_rtx);
4510 else
4511 attr.dw_attr_val.val_entry = NULL;
4512 add_dwarf_attr (die, &attr);
4513 }
4514
4515 /* Get the RTX from to an address DIE attribute. */
4516
4517 static inline rtx
4518 AT_addr (dw_attr_node *a)
4519 {
4520 gcc_assert (a && AT_class (a) == dw_val_class_addr);
4521 return a->dw_attr_val.v.val_addr;
4522 }
4523
4524 /* Add a file attribute value to a DIE. */
4525
4526 static inline void
4527 add_AT_file (dw_die_ref die, enum dwarf_attribute attr_kind,
4528 struct dwarf_file_data *fd)
4529 {
4530 dw_attr_node attr;
4531
4532 attr.dw_attr = attr_kind;
4533 attr.dw_attr_val.val_class = dw_val_class_file;
4534 attr.dw_attr_val.val_entry = NULL;
4535 attr.dw_attr_val.v.val_file = fd;
4536 add_dwarf_attr (die, &attr);
4537 }
4538
4539 /* Get the dwarf_file_data from a file DIE attribute. */
4540
4541 static inline struct dwarf_file_data *
4542 AT_file (dw_attr_node *a)
4543 {
4544 gcc_assert (a && AT_class (a) == dw_val_class_file);
4545 return a->dw_attr_val.v.val_file;
4546 }
4547
4548 /* Add a vms delta attribute value to a DIE. */
4549
4550 static inline void
4551 add_AT_vms_delta (dw_die_ref die, enum dwarf_attribute attr_kind,
4552 const char *lbl1, const char *lbl2)
4553 {
4554 dw_attr_node attr;
4555
4556 attr.dw_attr = attr_kind;
4557 attr.dw_attr_val.val_class = dw_val_class_vms_delta;
4558 attr.dw_attr_val.val_entry = NULL;
4559 attr.dw_attr_val.v.val_vms_delta.lbl1 = xstrdup (lbl1);
4560 attr.dw_attr_val.v.val_vms_delta.lbl2 = xstrdup (lbl2);
4561 add_dwarf_attr (die, &attr);
4562 }
4563
4564 /* Add a label identifier attribute value to a DIE. */
4565
4566 static inline void
4567 add_AT_lbl_id (dw_die_ref die, enum dwarf_attribute attr_kind,
4568 const char *lbl_id)
4569 {
4570 dw_attr_node attr;
4571
4572 attr.dw_attr = attr_kind;
4573 attr.dw_attr_val.val_class = dw_val_class_lbl_id;
4574 attr.dw_attr_val.val_entry = NULL;
4575 attr.dw_attr_val.v.val_lbl_id = xstrdup (lbl_id);
4576 if (dwarf_split_debug_info)
4577 attr.dw_attr_val.val_entry
4578 = add_addr_table_entry (attr.dw_attr_val.v.val_lbl_id,
4579 ate_kind_label);
4580 add_dwarf_attr (die, &attr);
4581 }
4582
4583 /* Add a section offset attribute value to a DIE, an offset into the
4584 debug_line section. */
4585
4586 static inline void
4587 add_AT_lineptr (dw_die_ref die, enum dwarf_attribute attr_kind,
4588 const char *label)
4589 {
4590 dw_attr_node attr;
4591
4592 attr.dw_attr = attr_kind;
4593 attr.dw_attr_val.val_class = dw_val_class_lineptr;
4594 attr.dw_attr_val.val_entry = NULL;
4595 attr.dw_attr_val.v.val_lbl_id = xstrdup (label);
4596 add_dwarf_attr (die, &attr);
4597 }
4598
4599 /* Add a section offset attribute value to a DIE, an offset into the
4600 debug_macinfo section. */
4601
4602 static inline void
4603 add_AT_macptr (dw_die_ref die, enum dwarf_attribute attr_kind,
4604 const char *label)
4605 {
4606 dw_attr_node attr;
4607
4608 attr.dw_attr = attr_kind;
4609 attr.dw_attr_val.val_class = dw_val_class_macptr;
4610 attr.dw_attr_val.val_entry = NULL;
4611 attr.dw_attr_val.v.val_lbl_id = xstrdup (label);
4612 add_dwarf_attr (die, &attr);
4613 }
4614
4615 /* Add an offset attribute value to a DIE. */
4616
4617 static inline void
4618 add_AT_offset (dw_die_ref die, enum dwarf_attribute attr_kind,
4619 unsigned HOST_WIDE_INT offset)
4620 {
4621 dw_attr_node attr;
4622
4623 attr.dw_attr = attr_kind;
4624 attr.dw_attr_val.val_class = dw_val_class_offset;
4625 attr.dw_attr_val.val_entry = NULL;
4626 attr.dw_attr_val.v.val_offset = offset;
4627 add_dwarf_attr (die, &attr);
4628 }
4629
4630 /* Add a range_list attribute value to a DIE. When using
4631 dwarf_split_debug_info, address attributes in dies destined for the
4632 final executable should be direct references--setting the parameter
4633 force_direct ensures this behavior. */
4634
4635 #define UNRELOCATED_OFFSET ((addr_table_entry *) 1)
4636 #define RELOCATED_OFFSET (NULL)
4637
4638 static void
4639 add_AT_range_list (dw_die_ref die, enum dwarf_attribute attr_kind,
4640 long unsigned int offset, bool force_direct)
4641 {
4642 dw_attr_node attr;
4643
4644 attr.dw_attr = attr_kind;
4645 attr.dw_attr_val.val_class = dw_val_class_range_list;
4646 /* For the range_list attribute, use val_entry to store whether the
4647 offset should follow split-debug-info or normal semantics. This
4648 value is read in output_range_list_offset. */
4649 if (dwarf_split_debug_info && !force_direct)
4650 attr.dw_attr_val.val_entry = UNRELOCATED_OFFSET;
4651 else
4652 attr.dw_attr_val.val_entry = RELOCATED_OFFSET;
4653 attr.dw_attr_val.v.val_offset = offset;
4654 add_dwarf_attr (die, &attr);
4655 }
4656
4657 /* Return the start label of a delta attribute. */
4658
4659 static inline const char *
4660 AT_vms_delta1 (dw_attr_node *a)
4661 {
4662 gcc_assert (a && (AT_class (a) == dw_val_class_vms_delta));
4663 return a->dw_attr_val.v.val_vms_delta.lbl1;
4664 }
4665
4666 /* Return the end label of a delta attribute. */
4667
4668 static inline const char *
4669 AT_vms_delta2 (dw_attr_node *a)
4670 {
4671 gcc_assert (a && (AT_class (a) == dw_val_class_vms_delta));
4672 return a->dw_attr_val.v.val_vms_delta.lbl2;
4673 }
4674
4675 static inline const char *
4676 AT_lbl (dw_attr_node *a)
4677 {
4678 gcc_assert (a && (AT_class (a) == dw_val_class_lbl_id
4679 || AT_class (a) == dw_val_class_lineptr
4680 || AT_class (a) == dw_val_class_macptr
4681 || AT_class (a) == dw_val_class_high_pc));
4682 return a->dw_attr_val.v.val_lbl_id;
4683 }
4684
4685 /* Get the attribute of type attr_kind. */
4686
4687 static dw_attr_node *
4688 get_AT (dw_die_ref die, enum dwarf_attribute attr_kind)
4689 {
4690 dw_attr_node *a;
4691 unsigned ix;
4692 dw_die_ref spec = NULL;
4693
4694 if (! die)
4695 return NULL;
4696
4697 FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
4698 if (a->dw_attr == attr_kind)
4699 return a;
4700 else if (a->dw_attr == DW_AT_specification
4701 || a->dw_attr == DW_AT_abstract_origin)
4702 spec = AT_ref (a);
4703
4704 if (spec)
4705 return get_AT (spec, attr_kind);
4706
4707 return NULL;
4708 }
4709
4710 /* Returns the parent of the declaration of DIE. */
4711
4712 static dw_die_ref
4713 get_die_parent (dw_die_ref die)
4714 {
4715 dw_die_ref t;
4716
4717 if (!die)
4718 return NULL;
4719
4720 if ((t = get_AT_ref (die, DW_AT_abstract_origin))
4721 || (t = get_AT_ref (die, DW_AT_specification)))
4722 die = t;
4723
4724 return die->die_parent;
4725 }
4726
4727 /* Return the "low pc" attribute value, typically associated with a subprogram
4728 DIE. Return null if the "low pc" attribute is either not present, or if it
4729 cannot be represented as an assembler label identifier. */
4730
4731 static inline const char *
4732 get_AT_low_pc (dw_die_ref die)
4733 {
4734 dw_attr_node *a = get_AT (die, DW_AT_low_pc);
4735
4736 return a ? AT_lbl (a) : NULL;
4737 }
4738
4739 /* Return the "high pc" attribute value, typically associated with a subprogram
4740 DIE. Return null if the "high pc" attribute is either not present, or if it
4741 cannot be represented as an assembler label identifier. */
4742
4743 static inline const char *
4744 get_AT_hi_pc (dw_die_ref die)
4745 {
4746 dw_attr_node *a = get_AT (die, DW_AT_high_pc);
4747
4748 return a ? AT_lbl (a) : NULL;
4749 }
4750
4751 /* Return the value of the string attribute designated by ATTR_KIND, or
4752 NULL if it is not present. */
4753
4754 static inline const char *
4755 get_AT_string (dw_die_ref die, enum dwarf_attribute attr_kind)
4756 {
4757 dw_attr_node *a = get_AT (die, attr_kind);
4758
4759 return a ? AT_string (a) : NULL;
4760 }
4761
4762 /* Return the value of the flag attribute designated by ATTR_KIND, or -1
4763 if it is not present. */
4764
4765 static inline int
4766 get_AT_flag (dw_die_ref die, enum dwarf_attribute attr_kind)
4767 {
4768 dw_attr_node *a = get_AT (die, attr_kind);
4769
4770 return a ? AT_flag (a) : 0;
4771 }
4772
4773 /* Return the value of the unsigned attribute designated by ATTR_KIND, or 0
4774 if it is not present. */
4775
4776 static inline unsigned
4777 get_AT_unsigned (dw_die_ref die, enum dwarf_attribute attr_kind)
4778 {
4779 dw_attr_node *a = get_AT (die, attr_kind);
4780
4781 return a ? AT_unsigned (a) : 0;
4782 }
4783
4784 static inline dw_die_ref
4785 get_AT_ref (dw_die_ref die, enum dwarf_attribute attr_kind)
4786 {
4787 dw_attr_node *a = get_AT (die, attr_kind);
4788
4789 return a ? AT_ref (a) : NULL;
4790 }
4791
4792 static inline struct dwarf_file_data *
4793 get_AT_file (dw_die_ref die, enum dwarf_attribute attr_kind)
4794 {
4795 dw_attr_node *a = get_AT (die, attr_kind);
4796
4797 return a ? AT_file (a) : NULL;
4798 }
4799
4800 /* Return TRUE if the language is C++. */
4801
4802 static inline bool
4803 is_cxx (void)
4804 {
4805 unsigned int lang = get_AT_unsigned (comp_unit_die (), DW_AT_language);
4806
4807 return (lang == DW_LANG_C_plus_plus || lang == DW_LANG_ObjC_plus_plus
4808 || lang == DW_LANG_C_plus_plus_11 || lang == DW_LANG_C_plus_plus_14);
4809 }
4810
4811 /* Return TRUE if the language is Java. */
4812
4813 static inline bool
4814 is_java (void)
4815 {
4816 unsigned int lang = get_AT_unsigned (comp_unit_die (), DW_AT_language);
4817
4818 return lang == DW_LANG_Java;
4819 }
4820
4821 /* Return TRUE if the language is Fortran. */
4822
4823 static inline bool
4824 is_fortran (void)
4825 {
4826 unsigned int lang = get_AT_unsigned (comp_unit_die (), DW_AT_language);
4827
4828 return (lang == DW_LANG_Fortran77
4829 || lang == DW_LANG_Fortran90
4830 || lang == DW_LANG_Fortran95
4831 || lang == DW_LANG_Fortran03
4832 || lang == DW_LANG_Fortran08);
4833 }
4834
4835 /* Return TRUE if the language is Ada. */
4836
4837 static inline bool
4838 is_ada (void)
4839 {
4840 unsigned int lang = get_AT_unsigned (comp_unit_die (), DW_AT_language);
4841
4842 return lang == DW_LANG_Ada95 || lang == DW_LANG_Ada83;
4843 }
4844
4845 /* Remove the specified attribute if present. Return TRUE if removal
4846 was successful. */
4847
4848 static bool
4849 remove_AT (dw_die_ref die, enum dwarf_attribute attr_kind)
4850 {
4851 dw_attr_node *a;
4852 unsigned ix;
4853
4854 if (! die)
4855 return false;
4856
4857 FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
4858 if (a->dw_attr == attr_kind)
4859 {
4860 if (AT_class (a) == dw_val_class_str)
4861 if (a->dw_attr_val.v.val_str->refcount)
4862 a->dw_attr_val.v.val_str->refcount--;
4863
4864 /* vec::ordered_remove should help reduce the number of abbrevs
4865 that are needed. */
4866 die->die_attr->ordered_remove (ix);
4867 return true;
4868 }
4869 return false;
4870 }
4871
4872 /* Remove CHILD from its parent. PREV must have the property that
4873 PREV->DIE_SIB == CHILD. Does not alter CHILD. */
4874
4875 static void
4876 remove_child_with_prev (dw_die_ref child, dw_die_ref prev)
4877 {
4878 gcc_assert (child->die_parent == prev->die_parent);
4879 gcc_assert (prev->die_sib == child);
4880 if (prev == child)
4881 {
4882 gcc_assert (child->die_parent->die_child == child);
4883 prev = NULL;
4884 }
4885 else
4886 prev->die_sib = child->die_sib;
4887 if (child->die_parent->die_child == child)
4888 child->die_parent->die_child = prev;
4889 }
4890
4891 /* Replace OLD_CHILD with NEW_CHILD. PREV must have the property that
4892 PREV->DIE_SIB == OLD_CHILD. Does not alter OLD_CHILD. */
4893
4894 static void
4895 replace_child (dw_die_ref old_child, dw_die_ref new_child, dw_die_ref prev)
4896 {
4897 dw_die_ref parent = old_child->die_parent;
4898
4899 gcc_assert (parent == prev->die_parent);
4900 gcc_assert (prev->die_sib == old_child);
4901
4902 new_child->die_parent = parent;
4903 if (prev == old_child)
4904 {
4905 gcc_assert (parent->die_child == old_child);
4906 new_child->die_sib = new_child;
4907 }
4908 else
4909 {
4910 prev->die_sib = new_child;
4911 new_child->die_sib = old_child->die_sib;
4912 }
4913 if (old_child->die_parent->die_child == old_child)
4914 old_child->die_parent->die_child = new_child;
4915 }
4916
4917 /* Move all children from OLD_PARENT to NEW_PARENT. */
4918
4919 static void
4920 move_all_children (dw_die_ref old_parent, dw_die_ref new_parent)
4921 {
4922 dw_die_ref c;
4923 new_parent->die_child = old_parent->die_child;
4924 old_parent->die_child = NULL;
4925 FOR_EACH_CHILD (new_parent, c, c->die_parent = new_parent);
4926 }
4927
4928 /* Remove child DIE whose die_tag is TAG. Do nothing if no child
4929 matches TAG. */
4930
4931 static void
4932 remove_child_TAG (dw_die_ref die, enum dwarf_tag tag)
4933 {
4934 dw_die_ref c;
4935
4936 c = die->die_child;
4937 if (c) do {
4938 dw_die_ref prev = c;
4939 c = c->die_sib;
4940 while (c->die_tag == tag)
4941 {
4942 remove_child_with_prev (c, prev);
4943 c->die_parent = NULL;
4944 /* Might have removed every child. */
4945 if (c == c->die_sib)
4946 return;
4947 c = c->die_sib;
4948 }
4949 } while (c != die->die_child);
4950 }
4951
4952 /* Add a CHILD_DIE as the last child of DIE. */
4953
4954 static void
4955 add_child_die (dw_die_ref die, dw_die_ref child_die)
4956 {
4957 /* FIXME this should probably be an assert. */
4958 if (! die || ! child_die)
4959 return;
4960 gcc_assert (die != child_die);
4961
4962 child_die->die_parent = die;
4963 if (die->die_child)
4964 {
4965 child_die->die_sib = die->die_child->die_sib;
4966 die->die_child->die_sib = child_die;
4967 }
4968 else
4969 child_die->die_sib = child_die;
4970 die->die_child = child_die;
4971 }
4972
4973 /* Unassociate CHILD from its parent, and make its parent be
4974 NEW_PARENT. */
4975
4976 static void
4977 reparent_child (dw_die_ref child, dw_die_ref new_parent)
4978 {
4979 for (dw_die_ref p = child->die_parent->die_child; ; p = p->die_sib)
4980 if (p->die_sib == child)
4981 {
4982 remove_child_with_prev (child, p);
4983 break;
4984 }
4985 add_child_die (new_parent, child);
4986 }
4987
4988 /* Move CHILD, which must be a child of PARENT or the DIE for which PARENT
4989 is the specification, to the end of PARENT's list of children.
4990 This is done by removing and re-adding it. */
4991
4992 static void
4993 splice_child_die (dw_die_ref parent, dw_die_ref child)
4994 {
4995 /* We want the declaration DIE from inside the class, not the
4996 specification DIE at toplevel. */
4997 if (child->die_parent != parent)
4998 {
4999 dw_die_ref tmp = get_AT_ref (child, DW_AT_specification);
5000
5001 if (tmp)
5002 child = tmp;
5003 }
5004
5005 gcc_assert (child->die_parent == parent
5006 || (child->die_parent
5007 == get_AT_ref (parent, DW_AT_specification)));
5008
5009 reparent_child (child, parent);
5010 }
5011
5012 /* Create and return a new die with a parent of PARENT_DIE. If
5013 PARENT_DIE is NULL, the new DIE is placed in limbo and an
5014 associated tree T must be supplied to determine parenthood
5015 later. */
5016
5017 static inline dw_die_ref
5018 new_die (enum dwarf_tag tag_value, dw_die_ref parent_die, tree t)
5019 {
5020 dw_die_ref die = ggc_cleared_alloc<die_node> ();
5021
5022 die->die_tag = tag_value;
5023
5024 if (parent_die != NULL)
5025 add_child_die (parent_die, die);
5026 else
5027 {
5028 limbo_die_node *limbo_node;
5029
5030 /* No DIEs created after early dwarf should end up in limbo,
5031 because the limbo list should not persist past LTO
5032 streaming. */
5033 if (tag_value != DW_TAG_compile_unit
5034 /* These are allowed because they're generated while
5035 breaking out COMDAT units late. */
5036 && tag_value != DW_TAG_type_unit
5037 && !early_dwarf
5038 /* Allow nested functions to live in limbo because they will
5039 only temporarily live there, as decls_for_scope will fix
5040 them up. */
5041 && (TREE_CODE (t) != FUNCTION_DECL
5042 || !decl_function_context (t))
5043 /* Same as nested functions above but for types. Types that
5044 are local to a function will be fixed in
5045 decls_for_scope. */
5046 && (!RECORD_OR_UNION_TYPE_P (t)
5047 || !TYPE_CONTEXT (t)
5048 || TREE_CODE (TYPE_CONTEXT (t)) != FUNCTION_DECL)
5049 /* FIXME debug-early: Allow late limbo DIE creation for LTO,
5050 especially in the ltrans stage, but once we implement LTO
5051 dwarf streaming, we should remove this exception. */
5052 && !in_lto_p)
5053 {
5054 fprintf (stderr, "symbol ended up in limbo too late:");
5055 debug_generic_stmt (t);
5056 gcc_unreachable ();
5057 }
5058
5059 limbo_node = ggc_cleared_alloc<limbo_die_node> ();
5060 limbo_node->die = die;
5061 limbo_node->created_for = t;
5062 limbo_node->next = limbo_die_list;
5063 limbo_die_list = limbo_node;
5064 }
5065
5066 return die;
5067 }
5068
5069 /* Return the DIE associated with the given type specifier. */
5070
5071 static inline dw_die_ref
5072 lookup_type_die (tree type)
5073 {
5074 return TYPE_SYMTAB_DIE (type);
5075 }
5076
5077 /* Given a TYPE_DIE representing the type TYPE, if TYPE is an
5078 anonymous type named by the typedef TYPE_DIE, return the DIE of the
5079 anonymous type instead the one of the naming typedef. */
5080
5081 static inline dw_die_ref
5082 strip_naming_typedef (tree type, dw_die_ref type_die)
5083 {
5084 if (type
5085 && TREE_CODE (type) == RECORD_TYPE
5086 && type_die
5087 && type_die->die_tag == DW_TAG_typedef
5088 && is_naming_typedef_decl (TYPE_NAME (type)))
5089 type_die = get_AT_ref (type_die, DW_AT_type);
5090 return type_die;
5091 }
5092
5093 /* Like lookup_type_die, but if type is an anonymous type named by a
5094 typedef[1], return the DIE of the anonymous type instead the one of
5095 the naming typedef. This is because in gen_typedef_die, we did
5096 equate the anonymous struct named by the typedef with the DIE of
5097 the naming typedef. So by default, lookup_type_die on an anonymous
5098 struct yields the DIE of the naming typedef.
5099
5100 [1]: Read the comment of is_naming_typedef_decl to learn about what
5101 a naming typedef is. */
5102
5103 static inline dw_die_ref
5104 lookup_type_die_strip_naming_typedef (tree type)
5105 {
5106 dw_die_ref die = lookup_type_die (type);
5107 return strip_naming_typedef (type, die);
5108 }
5109
5110 /* Equate a DIE to a given type specifier. */
5111
5112 static inline void
5113 equate_type_number_to_die (tree type, dw_die_ref type_die)
5114 {
5115 TYPE_SYMTAB_DIE (type) = type_die;
5116 }
5117
5118 /* Returns a hash value for X (which really is a die_struct). */
5119
5120 inline hashval_t
5121 decl_die_hasher::hash (die_node *x)
5122 {
5123 return (hashval_t) x->decl_id;
5124 }
5125
5126 /* Return nonzero if decl_id of die_struct X is the same as UID of decl *Y. */
5127
5128 inline bool
5129 decl_die_hasher::equal (die_node *x, tree y)
5130 {
5131 return (x->decl_id == DECL_UID (y));
5132 }
5133
5134 /* Return the DIE associated with a given declaration. */
5135
5136 static inline dw_die_ref
5137 lookup_decl_die (tree decl)
5138 {
5139 return decl_die_table->find_with_hash (decl, DECL_UID (decl));
5140 }
5141
5142 /* Returns a hash value for X (which really is a var_loc_list). */
5143
5144 inline hashval_t
5145 decl_loc_hasher::hash (var_loc_list *x)
5146 {
5147 return (hashval_t) x->decl_id;
5148 }
5149
5150 /* Return nonzero if decl_id of var_loc_list X is the same as
5151 UID of decl *Y. */
5152
5153 inline bool
5154 decl_loc_hasher::equal (var_loc_list *x, const_tree y)
5155 {
5156 return (x->decl_id == DECL_UID (y));
5157 }
5158
5159 /* Return the var_loc list associated with a given declaration. */
5160
5161 static inline var_loc_list *
5162 lookup_decl_loc (const_tree decl)
5163 {
5164 if (!decl_loc_table)
5165 return NULL;
5166 return decl_loc_table->find_with_hash (decl, DECL_UID (decl));
5167 }
5168
5169 /* Returns a hash value for X (which really is a cached_dw_loc_list_list). */
5170
5171 inline hashval_t
5172 dw_loc_list_hasher::hash (cached_dw_loc_list *x)
5173 {
5174 return (hashval_t) x->decl_id;
5175 }
5176
5177 /* Return nonzero if decl_id of cached_dw_loc_list X is the same as
5178 UID of decl *Y. */
5179
5180 inline bool
5181 dw_loc_list_hasher::equal (cached_dw_loc_list *x, const_tree y)
5182 {
5183 return (x->decl_id == DECL_UID (y));
5184 }
5185
5186 /* Equate a DIE to a particular declaration. */
5187
5188 static void
5189 equate_decl_number_to_die (tree decl, dw_die_ref decl_die)
5190 {
5191 unsigned int decl_id = DECL_UID (decl);
5192
5193 *decl_die_table->find_slot_with_hash (decl, decl_id, INSERT) = decl_die;
5194 decl_die->decl_id = decl_id;
5195 }
5196
5197 /* Return how many bits covers PIECE EXPR_LIST. */
5198
5199 static HOST_WIDE_INT
5200 decl_piece_bitsize (rtx piece)
5201 {
5202 int ret = (int) GET_MODE (piece);
5203 if (ret)
5204 return ret;
5205 gcc_assert (GET_CODE (XEXP (piece, 0)) == CONCAT
5206 && CONST_INT_P (XEXP (XEXP (piece, 0), 0)));
5207 return INTVAL (XEXP (XEXP (piece, 0), 0));
5208 }
5209
5210 /* Return pointer to the location of location note in PIECE EXPR_LIST. */
5211
5212 static rtx *
5213 decl_piece_varloc_ptr (rtx piece)
5214 {
5215 if ((int) GET_MODE (piece))
5216 return &XEXP (piece, 0);
5217 else
5218 return &XEXP (XEXP (piece, 0), 1);
5219 }
5220
5221 /* Create an EXPR_LIST for location note LOC_NOTE covering BITSIZE bits.
5222 Next is the chain of following piece nodes. */
5223
5224 static rtx_expr_list *
5225 decl_piece_node (rtx loc_note, HOST_WIDE_INT bitsize, rtx next)
5226 {
5227 if (bitsize > 0 && bitsize <= (int) MAX_MACHINE_MODE)
5228 return alloc_EXPR_LIST (bitsize, loc_note, next);
5229 else
5230 return alloc_EXPR_LIST (0, gen_rtx_CONCAT (VOIDmode,
5231 GEN_INT (bitsize),
5232 loc_note), next);
5233 }
5234
5235 /* Return rtx that should be stored into loc field for
5236 LOC_NOTE and BITPOS/BITSIZE. */
5237
5238 static rtx
5239 construct_piece_list (rtx loc_note, HOST_WIDE_INT bitpos,
5240 HOST_WIDE_INT bitsize)
5241 {
5242 if (bitsize != -1)
5243 {
5244 loc_note = decl_piece_node (loc_note, bitsize, NULL_RTX);
5245 if (bitpos != 0)
5246 loc_note = decl_piece_node (NULL_RTX, bitpos, loc_note);
5247 }
5248 return loc_note;
5249 }
5250
5251 /* This function either modifies location piece list *DEST in
5252 place (if SRC and INNER is NULL), or copies location piece list
5253 *SRC to *DEST while modifying it. Location BITPOS is modified
5254 to contain LOC_NOTE, any pieces overlapping it are removed resp.
5255 not copied and if needed some padding around it is added.
5256 When modifying in place, DEST should point to EXPR_LIST where
5257 earlier pieces cover PIECE_BITPOS bits, when copying SRC points
5258 to the start of the whole list and INNER points to the EXPR_LIST
5259 where earlier pieces cover PIECE_BITPOS bits. */
5260
5261 static void
5262 adjust_piece_list (rtx *dest, rtx *src, rtx *inner,
5263 HOST_WIDE_INT bitpos, HOST_WIDE_INT piece_bitpos,
5264 HOST_WIDE_INT bitsize, rtx loc_note)
5265 {
5266 HOST_WIDE_INT diff;
5267 bool copy = inner != NULL;
5268
5269 if (copy)
5270 {
5271 /* First copy all nodes preceding the current bitpos. */
5272 while (src != inner)
5273 {
5274 *dest = decl_piece_node (*decl_piece_varloc_ptr (*src),
5275 decl_piece_bitsize (*src), NULL_RTX);
5276 dest = &XEXP (*dest, 1);
5277 src = &XEXP (*src, 1);
5278 }
5279 }
5280 /* Add padding if needed. */
5281 if (bitpos != piece_bitpos)
5282 {
5283 *dest = decl_piece_node (NULL_RTX, bitpos - piece_bitpos,
5284 copy ? NULL_RTX : *dest);
5285 dest = &XEXP (*dest, 1);
5286 }
5287 else if (*dest && decl_piece_bitsize (*dest) == bitsize)
5288 {
5289 gcc_assert (!copy);
5290 /* A piece with correct bitpos and bitsize already exist,
5291 just update the location for it and return. */
5292 *decl_piece_varloc_ptr (*dest) = loc_note;
5293 return;
5294 }
5295 /* Add the piece that changed. */
5296 *dest = decl_piece_node (loc_note, bitsize, copy ? NULL_RTX : *dest);
5297 dest = &XEXP (*dest, 1);
5298 /* Skip over pieces that overlap it. */
5299 diff = bitpos - piece_bitpos + bitsize;
5300 if (!copy)
5301 src = dest;
5302 while (diff > 0 && *src)
5303 {
5304 rtx piece = *src;
5305 diff -= decl_piece_bitsize (piece);
5306 if (copy)
5307 src = &XEXP (piece, 1);
5308 else
5309 {
5310 *src = XEXP (piece, 1);
5311 free_EXPR_LIST_node (piece);
5312 }
5313 }
5314 /* Add padding if needed. */
5315 if (diff < 0 && *src)
5316 {
5317 if (!copy)
5318 dest = src;
5319 *dest = decl_piece_node (NULL_RTX, -diff, copy ? NULL_RTX : *dest);
5320 dest = &XEXP (*dest, 1);
5321 }
5322 if (!copy)
5323 return;
5324 /* Finally copy all nodes following it. */
5325 while (*src)
5326 {
5327 *dest = decl_piece_node (*decl_piece_varloc_ptr (*src),
5328 decl_piece_bitsize (*src), NULL_RTX);
5329 dest = &XEXP (*dest, 1);
5330 src = &XEXP (*src, 1);
5331 }
5332 }
5333
5334 /* Add a variable location node to the linked list for DECL. */
5335
5336 static struct var_loc_node *
5337 add_var_loc_to_decl (tree decl, rtx loc_note, const char *label)
5338 {
5339 unsigned int decl_id;
5340 var_loc_list *temp;
5341 struct var_loc_node *loc = NULL;
5342 HOST_WIDE_INT bitsize = -1, bitpos = -1;
5343
5344 if (TREE_CODE (decl) == VAR_DECL
5345 && DECL_HAS_DEBUG_EXPR_P (decl))
5346 {
5347 tree realdecl = DECL_DEBUG_EXPR (decl);
5348 if (handled_component_p (realdecl)
5349 || (TREE_CODE (realdecl) == MEM_REF
5350 && TREE_CODE (TREE_OPERAND (realdecl, 0)) == ADDR_EXPR))
5351 {
5352 HOST_WIDE_INT maxsize;
5353 bool reverse;
5354 tree innerdecl
5355 = get_ref_base_and_extent (realdecl, &bitpos, &bitsize, &maxsize,
5356 &reverse);
5357 if (!DECL_P (innerdecl)
5358 || DECL_IGNORED_P (innerdecl)
5359 || TREE_STATIC (innerdecl)
5360 || bitsize <= 0
5361 || bitpos + bitsize > 256
5362 || bitsize != maxsize)
5363 return NULL;
5364 decl = innerdecl;
5365 }
5366 }
5367
5368 decl_id = DECL_UID (decl);
5369 var_loc_list **slot
5370 = decl_loc_table->find_slot_with_hash (decl, decl_id, INSERT);
5371 if (*slot == NULL)
5372 {
5373 temp = ggc_cleared_alloc<var_loc_list> ();
5374 temp->decl_id = decl_id;
5375 *slot = temp;
5376 }
5377 else
5378 temp = *slot;
5379
5380 /* For PARM_DECLs try to keep around the original incoming value,
5381 even if that means we'll emit a zero-range .debug_loc entry. */
5382 if (temp->last
5383 && temp->first == temp->last
5384 && TREE_CODE (decl) == PARM_DECL
5385 && NOTE_P (temp->first->loc)
5386 && NOTE_VAR_LOCATION_DECL (temp->first->loc) == decl
5387 && DECL_INCOMING_RTL (decl)
5388 && NOTE_VAR_LOCATION_LOC (temp->first->loc)
5389 && GET_CODE (NOTE_VAR_LOCATION_LOC (temp->first->loc))
5390 == GET_CODE (DECL_INCOMING_RTL (decl))
5391 && prev_real_insn (temp->first->loc) == NULL_RTX
5392 && (bitsize != -1
5393 || !rtx_equal_p (NOTE_VAR_LOCATION_LOC (temp->first->loc),
5394 NOTE_VAR_LOCATION_LOC (loc_note))
5395 || (NOTE_VAR_LOCATION_STATUS (temp->first->loc)
5396 != NOTE_VAR_LOCATION_STATUS (loc_note))))
5397 {
5398 loc = ggc_cleared_alloc<var_loc_node> ();
5399 temp->first->next = loc;
5400 temp->last = loc;
5401 loc->loc = construct_piece_list (loc_note, bitpos, bitsize);
5402 }
5403 else if (temp->last)
5404 {
5405 struct var_loc_node *last = temp->last, *unused = NULL;
5406 rtx *piece_loc = NULL, last_loc_note;
5407 HOST_WIDE_INT piece_bitpos = 0;
5408 if (last->next)
5409 {
5410 last = last->next;
5411 gcc_assert (last->next == NULL);
5412 }
5413 if (bitsize != -1 && GET_CODE (last->loc) == EXPR_LIST)
5414 {
5415 piece_loc = &last->loc;
5416 do
5417 {
5418 HOST_WIDE_INT cur_bitsize = decl_piece_bitsize (*piece_loc);
5419 if (piece_bitpos + cur_bitsize > bitpos)
5420 break;
5421 piece_bitpos += cur_bitsize;
5422 piece_loc = &XEXP (*piece_loc, 1);
5423 }
5424 while (*piece_loc);
5425 }
5426 /* TEMP->LAST here is either pointer to the last but one or
5427 last element in the chained list, LAST is pointer to the
5428 last element. */
5429 if (label && strcmp (last->label, label) == 0)
5430 {
5431 /* For SRA optimized variables if there weren't any real
5432 insns since last note, just modify the last node. */
5433 if (piece_loc != NULL)
5434 {
5435 adjust_piece_list (piece_loc, NULL, NULL,
5436 bitpos, piece_bitpos, bitsize, loc_note);
5437 return NULL;
5438 }
5439 /* If the last note doesn't cover any instructions, remove it. */
5440 if (temp->last != last)
5441 {
5442 temp->last->next = NULL;
5443 unused = last;
5444 last = temp->last;
5445 gcc_assert (strcmp (last->label, label) != 0);
5446 }
5447 else
5448 {
5449 gcc_assert (temp->first == temp->last
5450 || (temp->first->next == temp->last
5451 && TREE_CODE (decl) == PARM_DECL));
5452 memset (temp->last, '\0', sizeof (*temp->last));
5453 temp->last->loc = construct_piece_list (loc_note, bitpos, bitsize);
5454 return temp->last;
5455 }
5456 }
5457 if (bitsize == -1 && NOTE_P (last->loc))
5458 last_loc_note = last->loc;
5459 else if (piece_loc != NULL
5460 && *piece_loc != NULL_RTX
5461 && piece_bitpos == bitpos
5462 && decl_piece_bitsize (*piece_loc) == bitsize)
5463 last_loc_note = *decl_piece_varloc_ptr (*piece_loc);
5464 else
5465 last_loc_note = NULL_RTX;
5466 /* If the current location is the same as the end of the list,
5467 and either both or neither of the locations is uninitialized,
5468 we have nothing to do. */
5469 if (last_loc_note == NULL_RTX
5470 || (!rtx_equal_p (NOTE_VAR_LOCATION_LOC (last_loc_note),
5471 NOTE_VAR_LOCATION_LOC (loc_note)))
5472 || ((NOTE_VAR_LOCATION_STATUS (last_loc_note)
5473 != NOTE_VAR_LOCATION_STATUS (loc_note))
5474 && ((NOTE_VAR_LOCATION_STATUS (last_loc_note)
5475 == VAR_INIT_STATUS_UNINITIALIZED)
5476 || (NOTE_VAR_LOCATION_STATUS (loc_note)
5477 == VAR_INIT_STATUS_UNINITIALIZED))))
5478 {
5479 /* Add LOC to the end of list and update LAST. If the last
5480 element of the list has been removed above, reuse its
5481 memory for the new node, otherwise allocate a new one. */
5482 if (unused)
5483 {
5484 loc = unused;
5485 memset (loc, '\0', sizeof (*loc));
5486 }
5487 else
5488 loc = ggc_cleared_alloc<var_loc_node> ();
5489 if (bitsize == -1 || piece_loc == NULL)
5490 loc->loc = construct_piece_list (loc_note, bitpos, bitsize);
5491 else
5492 adjust_piece_list (&loc->loc, &last->loc, piece_loc,
5493 bitpos, piece_bitpos, bitsize, loc_note);
5494 last->next = loc;
5495 /* Ensure TEMP->LAST will point either to the new last but one
5496 element of the chain, or to the last element in it. */
5497 if (last != temp->last)
5498 temp->last = last;
5499 }
5500 else if (unused)
5501 ggc_free (unused);
5502 }
5503 else
5504 {
5505 loc = ggc_cleared_alloc<var_loc_node> ();
5506 temp->first = loc;
5507 temp->last = loc;
5508 loc->loc = construct_piece_list (loc_note, bitpos, bitsize);
5509 }
5510 return loc;
5511 }
5512 \f
5513 /* Keep track of the number of spaces used to indent the
5514 output of the debugging routines that print the structure of
5515 the DIE internal representation. */
5516 static int print_indent;
5517
5518 /* Indent the line the number of spaces given by print_indent. */
5519
5520 static inline void
5521 print_spaces (FILE *outfile)
5522 {
5523 fprintf (outfile, "%*s", print_indent, "");
5524 }
5525
5526 /* Print a type signature in hex. */
5527
5528 static inline void
5529 print_signature (FILE *outfile, char *sig)
5530 {
5531 int i;
5532
5533 for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++)
5534 fprintf (outfile, "%02x", sig[i] & 0xff);
5535 }
5536
5537 static inline void
5538 print_discr_value (FILE *outfile, dw_discr_value *discr_value)
5539 {
5540 if (discr_value->pos)
5541 fprintf (outfile, HOST_WIDE_INT_PRINT_UNSIGNED, discr_value->v.sval);
5542 else
5543 fprintf (outfile, HOST_WIDE_INT_PRINT_DEC, discr_value->v.uval);
5544 }
5545
5546 static void print_loc_descr (dw_loc_descr_ref, FILE *);
5547
5548 /* Print the value associated to the VAL DWARF value node to OUTFILE. If
5549 RECURSE, output location descriptor operations. */
5550
5551 static void
5552 print_dw_val (dw_val_node *val, bool recurse, FILE *outfile)
5553 {
5554 switch (val->val_class)
5555 {
5556 case dw_val_class_addr:
5557 fprintf (outfile, "address");
5558 break;
5559 case dw_val_class_offset:
5560 fprintf (outfile, "offset");
5561 break;
5562 case dw_val_class_loc:
5563 fprintf (outfile, "location descriptor");
5564 if (val->v.val_loc == NULL)
5565 fprintf (outfile, " -> <null>\n");
5566 else if (recurse)
5567 {
5568 fprintf (outfile, ":\n");
5569 print_indent += 4;
5570 print_loc_descr (val->v.val_loc, outfile);
5571 print_indent -= 4;
5572 }
5573 else
5574 fprintf (outfile, " (%p)\n", (void *) val->v.val_loc);
5575 break;
5576 case dw_val_class_loc_list:
5577 fprintf (outfile, "location list -> label:%s",
5578 val->v.val_loc_list->ll_symbol);
5579 break;
5580 case dw_val_class_range_list:
5581 fprintf (outfile, "range list");
5582 break;
5583 case dw_val_class_const:
5584 fprintf (outfile, HOST_WIDE_INT_PRINT_DEC, val->v.val_int);
5585 break;
5586 case dw_val_class_unsigned_const:
5587 fprintf (outfile, HOST_WIDE_INT_PRINT_UNSIGNED, val->v.val_unsigned);
5588 break;
5589 case dw_val_class_const_double:
5590 fprintf (outfile, "constant (" HOST_WIDE_INT_PRINT_DEC","\
5591 HOST_WIDE_INT_PRINT_UNSIGNED")",
5592 val->v.val_double.high,
5593 val->v.val_double.low);
5594 break;
5595 case dw_val_class_wide_int:
5596 {
5597 int i = val->v.val_wide->get_len ();
5598 fprintf (outfile, "constant (");
5599 gcc_assert (i > 0);
5600 if (val->v.val_wide->elt (i - 1) == 0)
5601 fprintf (outfile, "0x");
5602 fprintf (outfile, HOST_WIDE_INT_PRINT_HEX,
5603 val->v.val_wide->elt (--i));
5604 while (--i >= 0)
5605 fprintf (outfile, HOST_WIDE_INT_PRINT_PADDED_HEX,
5606 val->v.val_wide->elt (i));
5607 fprintf (outfile, ")");
5608 break;
5609 }
5610 case dw_val_class_vec:
5611 fprintf (outfile, "floating-point or vector constant");
5612 break;
5613 case dw_val_class_flag:
5614 fprintf (outfile, "%u", val->v.val_flag);
5615 break;
5616 case dw_val_class_die_ref:
5617 if (val->v.val_die_ref.die != NULL)
5618 {
5619 dw_die_ref die = val->v.val_die_ref.die;
5620
5621 if (die->comdat_type_p)
5622 {
5623 fprintf (outfile, "die -> signature: ");
5624 print_signature (outfile,
5625 die->die_id.die_type_node->signature);
5626 }
5627 else if (die->die_id.die_symbol)
5628 fprintf (outfile, "die -> label: %s", die->die_id.die_symbol);
5629 else
5630 fprintf (outfile, "die -> %ld", die->die_offset);
5631 fprintf (outfile, " (%p)", (void *) die);
5632 }
5633 else
5634 fprintf (outfile, "die -> <null>");
5635 break;
5636 case dw_val_class_vms_delta:
5637 fprintf (outfile, "delta: @slotcount(%s-%s)",
5638 val->v.val_vms_delta.lbl2, val->v.val_vms_delta.lbl1);
5639 break;
5640 case dw_val_class_lbl_id:
5641 case dw_val_class_lineptr:
5642 case dw_val_class_macptr:
5643 case dw_val_class_high_pc:
5644 fprintf (outfile, "label: %s", val->v.val_lbl_id);
5645 break;
5646 case dw_val_class_str:
5647 if (val->v.val_str->str != NULL)
5648 fprintf (outfile, "\"%s\"", val->v.val_str->str);
5649 else
5650 fprintf (outfile, "<null>");
5651 break;
5652 case dw_val_class_file:
5653 fprintf (outfile, "\"%s\" (%d)", val->v.val_file->filename,
5654 val->v.val_file->emitted_number);
5655 break;
5656 case dw_val_class_data8:
5657 {
5658 int i;
5659
5660 for (i = 0; i < 8; i++)
5661 fprintf (outfile, "%02x", val->v.val_data8[i]);
5662 break;
5663 }
5664 case dw_val_class_discr_value:
5665 print_discr_value (outfile, &val->v.val_discr_value);
5666 break;
5667 case dw_val_class_discr_list:
5668 for (dw_discr_list_ref node = val->v.val_discr_list;
5669 node != NULL;
5670 node = node->dw_discr_next)
5671 {
5672 if (node->dw_discr_range)
5673 {
5674 fprintf (outfile, " .. ");
5675 print_discr_value (outfile, &node->dw_discr_lower_bound);
5676 print_discr_value (outfile, &node->dw_discr_upper_bound);
5677 }
5678 else
5679 print_discr_value (outfile, &node->dw_discr_lower_bound);
5680
5681 if (node->dw_discr_next != NULL)
5682 fprintf (outfile, " | ");
5683 }
5684 default:
5685 break;
5686 }
5687 }
5688
5689 /* Likewise, for a DIE attribute. */
5690
5691 static void
5692 print_attribute (dw_attr_node *a, bool recurse, FILE *outfile)
5693 {
5694 print_dw_val (&a->dw_attr_val, recurse, outfile);
5695 }
5696
5697
5698 /* Print the list of operands in the LOC location description to OUTFILE. This
5699 routine is a debugging aid only. */
5700
5701 static void
5702 print_loc_descr (dw_loc_descr_ref loc, FILE *outfile)
5703 {
5704 dw_loc_descr_ref l = loc;
5705
5706 if (loc == NULL)
5707 {
5708 print_spaces (outfile);
5709 fprintf (outfile, "<null>\n");
5710 return;
5711 }
5712
5713 for (l = loc; l != NULL; l = l->dw_loc_next)
5714 {
5715 print_spaces (outfile);
5716 fprintf (outfile, "(%p) %s",
5717 (void *) l,
5718 dwarf_stack_op_name (l->dw_loc_opc));
5719 if (l->dw_loc_oprnd1.val_class != dw_val_class_none)
5720 {
5721 fprintf (outfile, " ");
5722 print_dw_val (&l->dw_loc_oprnd1, false, outfile);
5723 }
5724 if (l->dw_loc_oprnd2.val_class != dw_val_class_none)
5725 {
5726 fprintf (outfile, ", ");
5727 print_dw_val (&l->dw_loc_oprnd2, false, outfile);
5728 }
5729 fprintf (outfile, "\n");
5730 }
5731 }
5732
5733 /* Print the information associated with a given DIE, and its children.
5734 This routine is a debugging aid only. */
5735
5736 static void
5737 print_die (dw_die_ref die, FILE *outfile)
5738 {
5739 dw_attr_node *a;
5740 dw_die_ref c;
5741 unsigned ix;
5742
5743 print_spaces (outfile);
5744 fprintf (outfile, "DIE %4ld: %s (%p)\n",
5745 die->die_offset, dwarf_tag_name (die->die_tag),
5746 (void*) die);
5747 print_spaces (outfile);
5748 fprintf (outfile, " abbrev id: %lu", die->die_abbrev);
5749 fprintf (outfile, " offset: %ld", die->die_offset);
5750 fprintf (outfile, " mark: %d\n", die->die_mark);
5751
5752 if (die->comdat_type_p)
5753 {
5754 print_spaces (outfile);
5755 fprintf (outfile, " signature: ");
5756 print_signature (outfile, die->die_id.die_type_node->signature);
5757 fprintf (outfile, "\n");
5758 }
5759
5760 FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
5761 {
5762 print_spaces (outfile);
5763 fprintf (outfile, " %s: ", dwarf_attr_name (a->dw_attr));
5764
5765 print_attribute (a, true, outfile);
5766 fprintf (outfile, "\n");
5767 }
5768
5769 if (die->die_child != NULL)
5770 {
5771 print_indent += 4;
5772 FOR_EACH_CHILD (die, c, print_die (c, outfile));
5773 print_indent -= 4;
5774 }
5775 if (print_indent == 0)
5776 fprintf (outfile, "\n");
5777 }
5778
5779 /* Print the list of operations in the LOC location description. */
5780
5781 DEBUG_FUNCTION void
5782 debug_dwarf_loc_descr (dw_loc_descr_ref loc)
5783 {
5784 print_loc_descr (loc, stderr);
5785 }
5786
5787 /* Print the information collected for a given DIE. */
5788
5789 DEBUG_FUNCTION void
5790 debug_dwarf_die (dw_die_ref die)
5791 {
5792 print_die (die, stderr);
5793 }
5794
5795 DEBUG_FUNCTION void
5796 debug (die_struct &ref)
5797 {
5798 print_die (&ref, stderr);
5799 }
5800
5801 DEBUG_FUNCTION void
5802 debug (die_struct *ptr)
5803 {
5804 if (ptr)
5805 debug (*ptr);
5806 else
5807 fprintf (stderr, "<nil>\n");
5808 }
5809
5810
5811 /* Print all DWARF information collected for the compilation unit.
5812 This routine is a debugging aid only. */
5813
5814 DEBUG_FUNCTION void
5815 debug_dwarf (void)
5816 {
5817 print_indent = 0;
5818 print_die (comp_unit_die (), stderr);
5819 }
5820
5821 /* Sanity checks on DIEs. */
5822
5823 static void
5824 check_die (dw_die_ref die)
5825 {
5826 unsigned ix;
5827 dw_attr_node *a;
5828 bool inline_found = false;
5829 int n_location = 0, n_low_pc = 0, n_high_pc = 0, n_artificial = 0;
5830 int n_decl_line = 0, n_decl_file = 0;
5831 FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
5832 {
5833 switch (a->dw_attr)
5834 {
5835 case DW_AT_inline:
5836 if (a->dw_attr_val.v.val_unsigned)
5837 inline_found = true;
5838 break;
5839 case DW_AT_location:
5840 ++n_location;
5841 break;
5842 case DW_AT_low_pc:
5843 ++n_low_pc;
5844 break;
5845 case DW_AT_high_pc:
5846 ++n_high_pc;
5847 break;
5848 case DW_AT_artificial:
5849 ++n_artificial;
5850 break;
5851 case DW_AT_decl_line:
5852 ++n_decl_line;
5853 break;
5854 case DW_AT_decl_file:
5855 ++n_decl_file;
5856 break;
5857 default:
5858 break;
5859 }
5860 }
5861 if (n_location > 1 || n_low_pc > 1 || n_high_pc > 1 || n_artificial > 1
5862 || n_decl_line > 1 || n_decl_file > 1)
5863 {
5864 fprintf (stderr, "Duplicate attributes in DIE:\n");
5865 debug_dwarf_die (die);
5866 gcc_unreachable ();
5867 }
5868 if (inline_found)
5869 {
5870 /* A debugging information entry that is a member of an abstract
5871 instance tree [that has DW_AT_inline] should not contain any
5872 attributes which describe aspects of the subroutine which vary
5873 between distinct inlined expansions or distinct out-of-line
5874 expansions. */
5875 FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
5876 gcc_assert (a->dw_attr != DW_AT_low_pc
5877 && a->dw_attr != DW_AT_high_pc
5878 && a->dw_attr != DW_AT_location
5879 && a->dw_attr != DW_AT_frame_base
5880 && a->dw_attr != DW_AT_GNU_all_call_sites);
5881 }
5882 }
5883 \f
5884 /* Start a new compilation unit DIE for an include file. OLD_UNIT is the CU
5885 for the enclosing include file, if any. BINCL_DIE is the DW_TAG_GNU_BINCL
5886 DIE that marks the start of the DIEs for this include file. */
5887
5888 static dw_die_ref
5889 push_new_compile_unit (dw_die_ref old_unit, dw_die_ref bincl_die)
5890 {
5891 const char *filename = get_AT_string (bincl_die, DW_AT_name);
5892 dw_die_ref new_unit = gen_compile_unit_die (filename);
5893
5894 new_unit->die_sib = old_unit;
5895 return new_unit;
5896 }
5897
5898 /* Close an include-file CU and reopen the enclosing one. */
5899
5900 static dw_die_ref
5901 pop_compile_unit (dw_die_ref old_unit)
5902 {
5903 dw_die_ref new_unit = old_unit->die_sib;
5904
5905 old_unit->die_sib = NULL;
5906 return new_unit;
5907 }
5908
5909 #define CHECKSUM(FOO) md5_process_bytes (&(FOO), sizeof (FOO), ctx)
5910 #define CHECKSUM_BLOCK(FOO, SIZE) md5_process_bytes ((FOO), (SIZE), ctx)
5911 #define CHECKSUM_STRING(FOO) md5_process_bytes ((FOO), strlen (FOO), ctx)
5912
5913 /* Calculate the checksum of a location expression. */
5914
5915 static inline void
5916 loc_checksum (dw_loc_descr_ref loc, struct md5_ctx *ctx)
5917 {
5918 int tem;
5919 inchash::hash hstate;
5920 hashval_t hash;
5921
5922 tem = (loc->dtprel << 8) | ((unsigned int) loc->dw_loc_opc);
5923 CHECKSUM (tem);
5924 hash_loc_operands (loc, hstate);
5925 hash = hstate.end();
5926 CHECKSUM (hash);
5927 }
5928
5929 /* Calculate the checksum of an attribute. */
5930
5931 static void
5932 attr_checksum (dw_attr_node *at, struct md5_ctx *ctx, int *mark)
5933 {
5934 dw_loc_descr_ref loc;
5935 rtx r;
5936
5937 CHECKSUM (at->dw_attr);
5938
5939 /* We don't care that this was compiled with a different compiler
5940 snapshot; if the output is the same, that's what matters. */
5941 if (at->dw_attr == DW_AT_producer)
5942 return;
5943
5944 switch (AT_class (at))
5945 {
5946 case dw_val_class_const:
5947 CHECKSUM (at->dw_attr_val.v.val_int);
5948 break;
5949 case dw_val_class_unsigned_const:
5950 CHECKSUM (at->dw_attr_val.v.val_unsigned);
5951 break;
5952 case dw_val_class_const_double:
5953 CHECKSUM (at->dw_attr_val.v.val_double);
5954 break;
5955 case dw_val_class_wide_int:
5956 CHECKSUM_BLOCK (at->dw_attr_val.v.val_wide->get_val (),
5957 get_full_len (*at->dw_attr_val.v.val_wide)
5958 * HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR);
5959 break;
5960 case dw_val_class_vec:
5961 CHECKSUM_BLOCK (at->dw_attr_val.v.val_vec.array,
5962 (at->dw_attr_val.v.val_vec.length
5963 * at->dw_attr_val.v.val_vec.elt_size));
5964 break;
5965 case dw_val_class_flag:
5966 CHECKSUM (at->dw_attr_val.v.val_flag);
5967 break;
5968 case dw_val_class_str:
5969 CHECKSUM_STRING (AT_string (at));
5970 break;
5971
5972 case dw_val_class_addr:
5973 r = AT_addr (at);
5974 gcc_assert (GET_CODE (r) == SYMBOL_REF);
5975 CHECKSUM_STRING (XSTR (r, 0));
5976 break;
5977
5978 case dw_val_class_offset:
5979 CHECKSUM (at->dw_attr_val.v.val_offset);
5980 break;
5981
5982 case dw_val_class_loc:
5983 for (loc = AT_loc (at); loc; loc = loc->dw_loc_next)
5984 loc_checksum (loc, ctx);
5985 break;
5986
5987 case dw_val_class_die_ref:
5988 die_checksum (AT_ref (at), ctx, mark);
5989 break;
5990
5991 case dw_val_class_fde_ref:
5992 case dw_val_class_vms_delta:
5993 case dw_val_class_lbl_id:
5994 case dw_val_class_lineptr:
5995 case dw_val_class_macptr:
5996 case dw_val_class_high_pc:
5997 break;
5998
5999 case dw_val_class_file:
6000 CHECKSUM_STRING (AT_file (at)->filename);
6001 break;
6002
6003 case dw_val_class_data8:
6004 CHECKSUM (at->dw_attr_val.v.val_data8);
6005 break;
6006
6007 default:
6008 break;
6009 }
6010 }
6011
6012 /* Calculate the checksum of a DIE. */
6013
6014 static void
6015 die_checksum (dw_die_ref die, struct md5_ctx *ctx, int *mark)
6016 {
6017 dw_die_ref c;
6018 dw_attr_node *a;
6019 unsigned ix;
6020
6021 /* To avoid infinite recursion. */
6022 if (die->die_mark)
6023 {
6024 CHECKSUM (die->die_mark);
6025 return;
6026 }
6027 die->die_mark = ++(*mark);
6028
6029 CHECKSUM (die->die_tag);
6030
6031 FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
6032 attr_checksum (a, ctx, mark);
6033
6034 FOR_EACH_CHILD (die, c, die_checksum (c, ctx, mark));
6035 }
6036
6037 #undef CHECKSUM
6038 #undef CHECKSUM_BLOCK
6039 #undef CHECKSUM_STRING
6040
6041 /* For DWARF-4 types, include the trailing NULL when checksumming strings. */
6042 #define CHECKSUM(FOO) md5_process_bytes (&(FOO), sizeof (FOO), ctx)
6043 #define CHECKSUM_BLOCK(FOO, SIZE) md5_process_bytes ((FOO), (SIZE), ctx)
6044 #define CHECKSUM_STRING(FOO) md5_process_bytes ((FOO), strlen (FOO) + 1, ctx)
6045 #define CHECKSUM_SLEB128(FOO) checksum_sleb128 ((FOO), ctx)
6046 #define CHECKSUM_ULEB128(FOO) checksum_uleb128 ((FOO), ctx)
6047 #define CHECKSUM_ATTR(FOO) \
6048 if (FOO) attr_checksum_ordered (die->die_tag, (FOO), ctx, mark)
6049
6050 /* Calculate the checksum of a number in signed LEB128 format. */
6051
6052 static void
6053 checksum_sleb128 (HOST_WIDE_INT value, struct md5_ctx *ctx)
6054 {
6055 unsigned char byte;
6056 bool more;
6057
6058 while (1)
6059 {
6060 byte = (value & 0x7f);
6061 value >>= 7;
6062 more = !((value == 0 && (byte & 0x40) == 0)
6063 || (value == -1 && (byte & 0x40) != 0));
6064 if (more)
6065 byte |= 0x80;
6066 CHECKSUM (byte);
6067 if (!more)
6068 break;
6069 }
6070 }
6071
6072 /* Calculate the checksum of a number in unsigned LEB128 format. */
6073
6074 static void
6075 checksum_uleb128 (unsigned HOST_WIDE_INT value, struct md5_ctx *ctx)
6076 {
6077 while (1)
6078 {
6079 unsigned char byte = (value & 0x7f);
6080 value >>= 7;
6081 if (value != 0)
6082 /* More bytes to follow. */
6083 byte |= 0x80;
6084 CHECKSUM (byte);
6085 if (value == 0)
6086 break;
6087 }
6088 }
6089
6090 /* Checksum the context of the DIE. This adds the names of any
6091 surrounding namespaces or structures to the checksum. */
6092
6093 static void
6094 checksum_die_context (dw_die_ref die, struct md5_ctx *ctx)
6095 {
6096 const char *name;
6097 dw_die_ref spec;
6098 int tag = die->die_tag;
6099
6100 if (tag != DW_TAG_namespace
6101 && tag != DW_TAG_structure_type
6102 && tag != DW_TAG_class_type)
6103 return;
6104
6105 name = get_AT_string (die, DW_AT_name);
6106
6107 spec = get_AT_ref (die, DW_AT_specification);
6108 if (spec != NULL)
6109 die = spec;
6110
6111 if (die->die_parent != NULL)
6112 checksum_die_context (die->die_parent, ctx);
6113
6114 CHECKSUM_ULEB128 ('C');
6115 CHECKSUM_ULEB128 (tag);
6116 if (name != NULL)
6117 CHECKSUM_STRING (name);
6118 }
6119
6120 /* Calculate the checksum of a location expression. */
6121
6122 static inline void
6123 loc_checksum_ordered (dw_loc_descr_ref loc, struct md5_ctx *ctx)
6124 {
6125 /* Special case for lone DW_OP_plus_uconst: checksum as if the location
6126 were emitted as a DW_FORM_sdata instead of a location expression. */
6127 if (loc->dw_loc_opc == DW_OP_plus_uconst && loc->dw_loc_next == NULL)
6128 {
6129 CHECKSUM_ULEB128 (DW_FORM_sdata);
6130 CHECKSUM_SLEB128 ((HOST_WIDE_INT) loc->dw_loc_oprnd1.v.val_unsigned);
6131 return;
6132 }
6133
6134 /* Otherwise, just checksum the raw location expression. */
6135 while (loc != NULL)
6136 {
6137 inchash::hash hstate;
6138 hashval_t hash;
6139
6140 CHECKSUM_ULEB128 (loc->dtprel);
6141 CHECKSUM_ULEB128 (loc->dw_loc_opc);
6142 hash_loc_operands (loc, hstate);
6143 hash = hstate.end ();
6144 CHECKSUM (hash);
6145 loc = loc->dw_loc_next;
6146 }
6147 }
6148
6149 /* Calculate the checksum of an attribute. */
6150
6151 static void
6152 attr_checksum_ordered (enum dwarf_tag tag, dw_attr_node *at,
6153 struct md5_ctx *ctx, int *mark)
6154 {
6155 dw_loc_descr_ref loc;
6156 rtx r;
6157
6158 if (AT_class (at) == dw_val_class_die_ref)
6159 {
6160 dw_die_ref target_die = AT_ref (at);
6161
6162 /* For pointer and reference types, we checksum only the (qualified)
6163 name of the target type (if there is a name). For friend entries,
6164 we checksum only the (qualified) name of the target type or function.
6165 This allows the checksum to remain the same whether the target type
6166 is complete or not. */
6167 if ((at->dw_attr == DW_AT_type
6168 && (tag == DW_TAG_pointer_type
6169 || tag == DW_TAG_reference_type
6170 || tag == DW_TAG_rvalue_reference_type
6171 || tag == DW_TAG_ptr_to_member_type))
6172 || (at->dw_attr == DW_AT_friend
6173 && tag == DW_TAG_friend))
6174 {
6175 dw_attr_node *name_attr = get_AT (target_die, DW_AT_name);
6176
6177 if (name_attr != NULL)
6178 {
6179 dw_die_ref decl = get_AT_ref (target_die, DW_AT_specification);
6180
6181 if (decl == NULL)
6182 decl = target_die;
6183 CHECKSUM_ULEB128 ('N');
6184 CHECKSUM_ULEB128 (at->dw_attr);
6185 if (decl->die_parent != NULL)
6186 checksum_die_context (decl->die_parent, ctx);
6187 CHECKSUM_ULEB128 ('E');
6188 CHECKSUM_STRING (AT_string (name_attr));
6189 return;
6190 }
6191 }
6192
6193 /* For all other references to another DIE, we check to see if the
6194 target DIE has already been visited. If it has, we emit a
6195 backward reference; if not, we descend recursively. */
6196 if (target_die->die_mark > 0)
6197 {
6198 CHECKSUM_ULEB128 ('R');
6199 CHECKSUM_ULEB128 (at->dw_attr);
6200 CHECKSUM_ULEB128 (target_die->die_mark);
6201 }
6202 else
6203 {
6204 dw_die_ref decl = get_AT_ref (target_die, DW_AT_specification);
6205
6206 if (decl == NULL)
6207 decl = target_die;
6208 target_die->die_mark = ++(*mark);
6209 CHECKSUM_ULEB128 ('T');
6210 CHECKSUM_ULEB128 (at->dw_attr);
6211 if (decl->die_parent != NULL)
6212 checksum_die_context (decl->die_parent, ctx);
6213 die_checksum_ordered (target_die, ctx, mark);
6214 }
6215 return;
6216 }
6217
6218 CHECKSUM_ULEB128 ('A');
6219 CHECKSUM_ULEB128 (at->dw_attr);
6220
6221 switch (AT_class (at))
6222 {
6223 case dw_val_class_const:
6224 CHECKSUM_ULEB128 (DW_FORM_sdata);
6225 CHECKSUM_SLEB128 (at->dw_attr_val.v.val_int);
6226 break;
6227
6228 case dw_val_class_unsigned_const:
6229 CHECKSUM_ULEB128 (DW_FORM_sdata);
6230 CHECKSUM_SLEB128 ((int) at->dw_attr_val.v.val_unsigned);
6231 break;
6232
6233 case dw_val_class_const_double:
6234 CHECKSUM_ULEB128 (DW_FORM_block);
6235 CHECKSUM_ULEB128 (sizeof (at->dw_attr_val.v.val_double));
6236 CHECKSUM (at->dw_attr_val.v.val_double);
6237 break;
6238
6239 case dw_val_class_wide_int:
6240 CHECKSUM_ULEB128 (DW_FORM_block);
6241 CHECKSUM_ULEB128 (get_full_len (*at->dw_attr_val.v.val_wide)
6242 * HOST_BITS_PER_WIDE_INT / BITS_PER_UNIT);
6243 CHECKSUM_BLOCK (at->dw_attr_val.v.val_wide->get_val (),
6244 get_full_len (*at->dw_attr_val.v.val_wide)
6245 * HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR);
6246 break;
6247
6248 case dw_val_class_vec:
6249 CHECKSUM_ULEB128 (DW_FORM_block);
6250 CHECKSUM_ULEB128 (at->dw_attr_val.v.val_vec.length
6251 * at->dw_attr_val.v.val_vec.elt_size);
6252 CHECKSUM_BLOCK (at->dw_attr_val.v.val_vec.array,
6253 (at->dw_attr_val.v.val_vec.length
6254 * at->dw_attr_val.v.val_vec.elt_size));
6255 break;
6256
6257 case dw_val_class_flag:
6258 CHECKSUM_ULEB128 (DW_FORM_flag);
6259 CHECKSUM_ULEB128 (at->dw_attr_val.v.val_flag ? 1 : 0);
6260 break;
6261
6262 case dw_val_class_str:
6263 CHECKSUM_ULEB128 (DW_FORM_string);
6264 CHECKSUM_STRING (AT_string (at));
6265 break;
6266
6267 case dw_val_class_addr:
6268 r = AT_addr (at);
6269 gcc_assert (GET_CODE (r) == SYMBOL_REF);
6270 CHECKSUM_ULEB128 (DW_FORM_string);
6271 CHECKSUM_STRING (XSTR (r, 0));
6272 break;
6273
6274 case dw_val_class_offset:
6275 CHECKSUM_ULEB128 (DW_FORM_sdata);
6276 CHECKSUM_ULEB128 (at->dw_attr_val.v.val_offset);
6277 break;
6278
6279 case dw_val_class_loc:
6280 for (loc = AT_loc (at); loc; loc = loc->dw_loc_next)
6281 loc_checksum_ordered (loc, ctx);
6282 break;
6283
6284 case dw_val_class_fde_ref:
6285 case dw_val_class_lbl_id:
6286 case dw_val_class_lineptr:
6287 case dw_val_class_macptr:
6288 case dw_val_class_high_pc:
6289 break;
6290
6291 case dw_val_class_file:
6292 CHECKSUM_ULEB128 (DW_FORM_string);
6293 CHECKSUM_STRING (AT_file (at)->filename);
6294 break;
6295
6296 case dw_val_class_data8:
6297 CHECKSUM (at->dw_attr_val.v.val_data8);
6298 break;
6299
6300 default:
6301 break;
6302 }
6303 }
6304
6305 struct checksum_attributes
6306 {
6307 dw_attr_node *at_name;
6308 dw_attr_node *at_type;
6309 dw_attr_node *at_friend;
6310 dw_attr_node *at_accessibility;
6311 dw_attr_node *at_address_class;
6312 dw_attr_node *at_allocated;
6313 dw_attr_node *at_artificial;
6314 dw_attr_node *at_associated;
6315 dw_attr_node *at_binary_scale;
6316 dw_attr_node *at_bit_offset;
6317 dw_attr_node *at_bit_size;
6318 dw_attr_node *at_bit_stride;
6319 dw_attr_node *at_byte_size;
6320 dw_attr_node *at_byte_stride;
6321 dw_attr_node *at_const_value;
6322 dw_attr_node *at_containing_type;
6323 dw_attr_node *at_count;
6324 dw_attr_node *at_data_location;
6325 dw_attr_node *at_data_member_location;
6326 dw_attr_node *at_decimal_scale;
6327 dw_attr_node *at_decimal_sign;
6328 dw_attr_node *at_default_value;
6329 dw_attr_node *at_digit_count;
6330 dw_attr_node *at_discr;
6331 dw_attr_node *at_discr_list;
6332 dw_attr_node *at_discr_value;
6333 dw_attr_node *at_encoding;
6334 dw_attr_node *at_endianity;
6335 dw_attr_node *at_explicit;
6336 dw_attr_node *at_is_optional;
6337 dw_attr_node *at_location;
6338 dw_attr_node *at_lower_bound;
6339 dw_attr_node *at_mutable;
6340 dw_attr_node *at_ordering;
6341 dw_attr_node *at_picture_string;
6342 dw_attr_node *at_prototyped;
6343 dw_attr_node *at_small;
6344 dw_attr_node *at_segment;
6345 dw_attr_node *at_string_length;
6346 dw_attr_node *at_threads_scaled;
6347 dw_attr_node *at_upper_bound;
6348 dw_attr_node *at_use_location;
6349 dw_attr_node *at_use_UTF8;
6350 dw_attr_node *at_variable_parameter;
6351 dw_attr_node *at_virtuality;
6352 dw_attr_node *at_visibility;
6353 dw_attr_node *at_vtable_elem_location;
6354 };
6355
6356 /* Collect the attributes that we will want to use for the checksum. */
6357
6358 static void
6359 collect_checksum_attributes (struct checksum_attributes *attrs, dw_die_ref die)
6360 {
6361 dw_attr_node *a;
6362 unsigned ix;
6363
6364 FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
6365 {
6366 switch (a->dw_attr)
6367 {
6368 case DW_AT_name:
6369 attrs->at_name = a;
6370 break;
6371 case DW_AT_type:
6372 attrs->at_type = a;
6373 break;
6374 case DW_AT_friend:
6375 attrs->at_friend = a;
6376 break;
6377 case DW_AT_accessibility:
6378 attrs->at_accessibility = a;
6379 break;
6380 case DW_AT_address_class:
6381 attrs->at_address_class = a;
6382 break;
6383 case DW_AT_allocated:
6384 attrs->at_allocated = a;
6385 break;
6386 case DW_AT_artificial:
6387 attrs->at_artificial = a;
6388 break;
6389 case DW_AT_associated:
6390 attrs->at_associated = a;
6391 break;
6392 case DW_AT_binary_scale:
6393 attrs->at_binary_scale = a;
6394 break;
6395 case DW_AT_bit_offset:
6396 attrs->at_bit_offset = a;
6397 break;
6398 case DW_AT_bit_size:
6399 attrs->at_bit_size = a;
6400 break;
6401 case DW_AT_bit_stride:
6402 attrs->at_bit_stride = a;
6403 break;
6404 case DW_AT_byte_size:
6405 attrs->at_byte_size = a;
6406 break;
6407 case DW_AT_byte_stride:
6408 attrs->at_byte_stride = a;
6409 break;
6410 case DW_AT_const_value:
6411 attrs->at_const_value = a;
6412 break;
6413 case DW_AT_containing_type:
6414 attrs->at_containing_type = a;
6415 break;
6416 case DW_AT_count:
6417 attrs->at_count = a;
6418 break;
6419 case DW_AT_data_location:
6420 attrs->at_data_location = a;
6421 break;
6422 case DW_AT_data_member_location:
6423 attrs->at_data_member_location = a;
6424 break;
6425 case DW_AT_decimal_scale:
6426 attrs->at_decimal_scale = a;
6427 break;
6428 case DW_AT_decimal_sign:
6429 attrs->at_decimal_sign = a;
6430 break;
6431 case DW_AT_default_value:
6432 attrs->at_default_value = a;
6433 break;
6434 case DW_AT_digit_count:
6435 attrs->at_digit_count = a;
6436 break;
6437 case DW_AT_discr:
6438 attrs->at_discr = a;
6439 break;
6440 case DW_AT_discr_list:
6441 attrs->at_discr_list = a;
6442 break;
6443 case DW_AT_discr_value:
6444 attrs->at_discr_value = a;
6445 break;
6446 case DW_AT_encoding:
6447 attrs->at_encoding = a;
6448 break;
6449 case DW_AT_endianity:
6450 attrs->at_endianity = a;
6451 break;
6452 case DW_AT_explicit:
6453 attrs->at_explicit = a;
6454 break;
6455 case DW_AT_is_optional:
6456 attrs->at_is_optional = a;
6457 break;
6458 case DW_AT_location:
6459 attrs->at_location = a;
6460 break;
6461 case DW_AT_lower_bound:
6462 attrs->at_lower_bound = a;
6463 break;
6464 case DW_AT_mutable:
6465 attrs->at_mutable = a;
6466 break;
6467 case DW_AT_ordering:
6468 attrs->at_ordering = a;
6469 break;
6470 case DW_AT_picture_string:
6471 attrs->at_picture_string = a;
6472 break;
6473 case DW_AT_prototyped:
6474 attrs->at_prototyped = a;
6475 break;
6476 case DW_AT_small:
6477 attrs->at_small = a;
6478 break;
6479 case DW_AT_segment:
6480 attrs->at_segment = a;
6481 break;
6482 case DW_AT_string_length:
6483 attrs->at_string_length = a;
6484 break;
6485 case DW_AT_threads_scaled:
6486 attrs->at_threads_scaled = a;
6487 break;
6488 case DW_AT_upper_bound:
6489 attrs->at_upper_bound = a;
6490 break;
6491 case DW_AT_use_location:
6492 attrs->at_use_location = a;
6493 break;
6494 case DW_AT_use_UTF8:
6495 attrs->at_use_UTF8 = a;
6496 break;
6497 case DW_AT_variable_parameter:
6498 attrs->at_variable_parameter = a;
6499 break;
6500 case DW_AT_virtuality:
6501 attrs->at_virtuality = a;
6502 break;
6503 case DW_AT_visibility:
6504 attrs->at_visibility = a;
6505 break;
6506 case DW_AT_vtable_elem_location:
6507 attrs->at_vtable_elem_location = a;
6508 break;
6509 default:
6510 break;
6511 }
6512 }
6513 }
6514
6515 /* Calculate the checksum of a DIE, using an ordered subset of attributes. */
6516
6517 static void
6518 die_checksum_ordered (dw_die_ref die, struct md5_ctx *ctx, int *mark)
6519 {
6520 dw_die_ref c;
6521 dw_die_ref decl;
6522 struct checksum_attributes attrs;
6523
6524 CHECKSUM_ULEB128 ('D');
6525 CHECKSUM_ULEB128 (die->die_tag);
6526
6527 memset (&attrs, 0, sizeof (attrs));
6528
6529 decl = get_AT_ref (die, DW_AT_specification);
6530 if (decl != NULL)
6531 collect_checksum_attributes (&attrs, decl);
6532 collect_checksum_attributes (&attrs, die);
6533
6534 CHECKSUM_ATTR (attrs.at_name);
6535 CHECKSUM_ATTR (attrs.at_accessibility);
6536 CHECKSUM_ATTR (attrs.at_address_class);
6537 CHECKSUM_ATTR (attrs.at_allocated);
6538 CHECKSUM_ATTR (attrs.at_artificial);
6539 CHECKSUM_ATTR (attrs.at_associated);
6540 CHECKSUM_ATTR (attrs.at_binary_scale);
6541 CHECKSUM_ATTR (attrs.at_bit_offset);
6542 CHECKSUM_ATTR (attrs.at_bit_size);
6543 CHECKSUM_ATTR (attrs.at_bit_stride);
6544 CHECKSUM_ATTR (attrs.at_byte_size);
6545 CHECKSUM_ATTR (attrs.at_byte_stride);
6546 CHECKSUM_ATTR (attrs.at_const_value);
6547 CHECKSUM_ATTR (attrs.at_containing_type);
6548 CHECKSUM_ATTR (attrs.at_count);
6549 CHECKSUM_ATTR (attrs.at_data_location);
6550 CHECKSUM_ATTR (attrs.at_data_member_location);
6551 CHECKSUM_ATTR (attrs.at_decimal_scale);
6552 CHECKSUM_ATTR (attrs.at_decimal_sign);
6553 CHECKSUM_ATTR (attrs.at_default_value);
6554 CHECKSUM_ATTR (attrs.at_digit_count);
6555 CHECKSUM_ATTR (attrs.at_discr);
6556 CHECKSUM_ATTR (attrs.at_discr_list);
6557 CHECKSUM_ATTR (attrs.at_discr_value);
6558 CHECKSUM_ATTR (attrs.at_encoding);
6559 CHECKSUM_ATTR (attrs.at_endianity);
6560 CHECKSUM_ATTR (attrs.at_explicit);
6561 CHECKSUM_ATTR (attrs.at_is_optional);
6562 CHECKSUM_ATTR (attrs.at_location);
6563 CHECKSUM_ATTR (attrs.at_lower_bound);
6564 CHECKSUM_ATTR (attrs.at_mutable);
6565 CHECKSUM_ATTR (attrs.at_ordering);
6566 CHECKSUM_ATTR (attrs.at_picture_string);
6567 CHECKSUM_ATTR (attrs.at_prototyped);
6568 CHECKSUM_ATTR (attrs.at_small);
6569 CHECKSUM_ATTR (attrs.at_segment);
6570 CHECKSUM_ATTR (attrs.at_string_length);
6571 CHECKSUM_ATTR (attrs.at_threads_scaled);
6572 CHECKSUM_ATTR (attrs.at_upper_bound);
6573 CHECKSUM_ATTR (attrs.at_use_location);
6574 CHECKSUM_ATTR (attrs.at_use_UTF8);
6575 CHECKSUM_ATTR (attrs.at_variable_parameter);
6576 CHECKSUM_ATTR (attrs.at_virtuality);
6577 CHECKSUM_ATTR (attrs.at_visibility);
6578 CHECKSUM_ATTR (attrs.at_vtable_elem_location);
6579 CHECKSUM_ATTR (attrs.at_type);
6580 CHECKSUM_ATTR (attrs.at_friend);
6581
6582 /* Checksum the child DIEs. */
6583 c = die->die_child;
6584 if (c) do {
6585 dw_attr_node *name_attr;
6586
6587 c = c->die_sib;
6588 name_attr = get_AT (c, DW_AT_name);
6589 if (is_template_instantiation (c))
6590 {
6591 /* Ignore instantiations of member type and function templates. */
6592 }
6593 else if (name_attr != NULL
6594 && (is_type_die (c) || c->die_tag == DW_TAG_subprogram))
6595 {
6596 /* Use a shallow checksum for named nested types and member
6597 functions. */
6598 CHECKSUM_ULEB128 ('S');
6599 CHECKSUM_ULEB128 (c->die_tag);
6600 CHECKSUM_STRING (AT_string (name_attr));
6601 }
6602 else
6603 {
6604 /* Use a deep checksum for other children. */
6605 /* Mark this DIE so it gets processed when unmarking. */
6606 if (c->die_mark == 0)
6607 c->die_mark = -1;
6608 die_checksum_ordered (c, ctx, mark);
6609 }
6610 } while (c != die->die_child);
6611
6612 CHECKSUM_ULEB128 (0);
6613 }
6614
6615 /* Add a type name and tag to a hash. */
6616 static void
6617 die_odr_checksum (int tag, const char *name, md5_ctx *ctx)
6618 {
6619 CHECKSUM_ULEB128 (tag);
6620 CHECKSUM_STRING (name);
6621 }
6622
6623 #undef CHECKSUM
6624 #undef CHECKSUM_STRING
6625 #undef CHECKSUM_ATTR
6626 #undef CHECKSUM_LEB128
6627 #undef CHECKSUM_ULEB128
6628
6629 /* Generate the type signature for DIE. This is computed by generating an
6630 MD5 checksum over the DIE's tag, its relevant attributes, and its
6631 children. Attributes that are references to other DIEs are processed
6632 by recursion, using the MARK field to prevent infinite recursion.
6633 If the DIE is nested inside a namespace or another type, we also
6634 need to include that context in the signature. The lower 64 bits
6635 of the resulting MD5 checksum comprise the signature. */
6636
6637 static void
6638 generate_type_signature (dw_die_ref die, comdat_type_node *type_node)
6639 {
6640 int mark;
6641 const char *name;
6642 unsigned char checksum[16];
6643 struct md5_ctx ctx;
6644 dw_die_ref decl;
6645 dw_die_ref parent;
6646
6647 name = get_AT_string (die, DW_AT_name);
6648 decl = get_AT_ref (die, DW_AT_specification);
6649 parent = get_die_parent (die);
6650
6651 /* First, compute a signature for just the type name (and its surrounding
6652 context, if any. This is stored in the type unit DIE for link-time
6653 ODR (one-definition rule) checking. */
6654
6655 if (is_cxx () && name != NULL)
6656 {
6657 md5_init_ctx (&ctx);
6658
6659 /* Checksum the names of surrounding namespaces and structures. */
6660 if (parent != NULL)
6661 checksum_die_context (parent, &ctx);
6662
6663 /* Checksum the current DIE. */
6664 die_odr_checksum (die->die_tag, name, &ctx);
6665 md5_finish_ctx (&ctx, checksum);
6666
6667 add_AT_data8 (type_node->root_die, DW_AT_GNU_odr_signature, &checksum[8]);
6668 }
6669
6670 /* Next, compute the complete type signature. */
6671
6672 md5_init_ctx (&ctx);
6673 mark = 1;
6674 die->die_mark = mark;
6675
6676 /* Checksum the names of surrounding namespaces and structures. */
6677 if (parent != NULL)
6678 checksum_die_context (parent, &ctx);
6679
6680 /* Checksum the DIE and its children. */
6681 die_checksum_ordered (die, &ctx, &mark);
6682 unmark_all_dies (die);
6683 md5_finish_ctx (&ctx, checksum);
6684
6685 /* Store the signature in the type node and link the type DIE and the
6686 type node together. */
6687 memcpy (type_node->signature, &checksum[16 - DWARF_TYPE_SIGNATURE_SIZE],
6688 DWARF_TYPE_SIGNATURE_SIZE);
6689 die->comdat_type_p = true;
6690 die->die_id.die_type_node = type_node;
6691 type_node->type_die = die;
6692
6693 /* If the DIE is a specification, link its declaration to the type node
6694 as well. */
6695 if (decl != NULL)
6696 {
6697 decl->comdat_type_p = true;
6698 decl->die_id.die_type_node = type_node;
6699 }
6700 }
6701
6702 /* Do the location expressions look same? */
6703 static inline int
6704 same_loc_p (dw_loc_descr_ref loc1, dw_loc_descr_ref loc2, int *mark)
6705 {
6706 return loc1->dw_loc_opc == loc2->dw_loc_opc
6707 && same_dw_val_p (&loc1->dw_loc_oprnd1, &loc2->dw_loc_oprnd1, mark)
6708 && same_dw_val_p (&loc1->dw_loc_oprnd2, &loc2->dw_loc_oprnd2, mark);
6709 }
6710
6711 /* Do the values look the same? */
6712 static int
6713 same_dw_val_p (const dw_val_node *v1, const dw_val_node *v2, int *mark)
6714 {
6715 dw_loc_descr_ref loc1, loc2;
6716 rtx r1, r2;
6717
6718 if (v1->val_class != v2->val_class)
6719 return 0;
6720
6721 switch (v1->val_class)
6722 {
6723 case dw_val_class_const:
6724 return v1->v.val_int == v2->v.val_int;
6725 case dw_val_class_unsigned_const:
6726 return v1->v.val_unsigned == v2->v.val_unsigned;
6727 case dw_val_class_const_double:
6728 return v1->v.val_double.high == v2->v.val_double.high
6729 && v1->v.val_double.low == v2->v.val_double.low;
6730 case dw_val_class_wide_int:
6731 return *v1->v.val_wide == *v2->v.val_wide;
6732 case dw_val_class_vec:
6733 if (v1->v.val_vec.length != v2->v.val_vec.length
6734 || v1->v.val_vec.elt_size != v2->v.val_vec.elt_size)
6735 return 0;
6736 if (memcmp (v1->v.val_vec.array, v2->v.val_vec.array,
6737 v1->v.val_vec.length * v1->v.val_vec.elt_size))
6738 return 0;
6739 return 1;
6740 case dw_val_class_flag:
6741 return v1->v.val_flag == v2->v.val_flag;
6742 case dw_val_class_str:
6743 return !strcmp (v1->v.val_str->str, v2->v.val_str->str);
6744
6745 case dw_val_class_addr:
6746 r1 = v1->v.val_addr;
6747 r2 = v2->v.val_addr;
6748 if (GET_CODE (r1) != GET_CODE (r2))
6749 return 0;
6750 return !rtx_equal_p (r1, r2);
6751
6752 case dw_val_class_offset:
6753 return v1->v.val_offset == v2->v.val_offset;
6754
6755 case dw_val_class_loc:
6756 for (loc1 = v1->v.val_loc, loc2 = v2->v.val_loc;
6757 loc1 && loc2;
6758 loc1 = loc1->dw_loc_next, loc2 = loc2->dw_loc_next)
6759 if (!same_loc_p (loc1, loc2, mark))
6760 return 0;
6761 return !loc1 && !loc2;
6762
6763 case dw_val_class_die_ref:
6764 return same_die_p (v1->v.val_die_ref.die, v2->v.val_die_ref.die, mark);
6765
6766 case dw_val_class_fde_ref:
6767 case dw_val_class_vms_delta:
6768 case dw_val_class_lbl_id:
6769 case dw_val_class_lineptr:
6770 case dw_val_class_macptr:
6771 case dw_val_class_high_pc:
6772 return 1;
6773
6774 case dw_val_class_file:
6775 return v1->v.val_file == v2->v.val_file;
6776
6777 case dw_val_class_data8:
6778 return !memcmp (v1->v.val_data8, v2->v.val_data8, 8);
6779
6780 default:
6781 return 1;
6782 }
6783 }
6784
6785 /* Do the attributes look the same? */
6786
6787 static int
6788 same_attr_p (dw_attr_node *at1, dw_attr_node *at2, int *mark)
6789 {
6790 if (at1->dw_attr != at2->dw_attr)
6791 return 0;
6792
6793 /* We don't care that this was compiled with a different compiler
6794 snapshot; if the output is the same, that's what matters. */
6795 if (at1->dw_attr == DW_AT_producer)
6796 return 1;
6797
6798 return same_dw_val_p (&at1->dw_attr_val, &at2->dw_attr_val, mark);
6799 }
6800
6801 /* Do the dies look the same? */
6802
6803 static int
6804 same_die_p (dw_die_ref die1, dw_die_ref die2, int *mark)
6805 {
6806 dw_die_ref c1, c2;
6807 dw_attr_node *a1;
6808 unsigned ix;
6809
6810 /* To avoid infinite recursion. */
6811 if (die1->die_mark)
6812 return die1->die_mark == die2->die_mark;
6813 die1->die_mark = die2->die_mark = ++(*mark);
6814
6815 if (die1->die_tag != die2->die_tag)
6816 return 0;
6817
6818 if (vec_safe_length (die1->die_attr) != vec_safe_length (die2->die_attr))
6819 return 0;
6820
6821 FOR_EACH_VEC_SAFE_ELT (die1->die_attr, ix, a1)
6822 if (!same_attr_p (a1, &(*die2->die_attr)[ix], mark))
6823 return 0;
6824
6825 c1 = die1->die_child;
6826 c2 = die2->die_child;
6827 if (! c1)
6828 {
6829 if (c2)
6830 return 0;
6831 }
6832 else
6833 for (;;)
6834 {
6835 if (!same_die_p (c1, c2, mark))
6836 return 0;
6837 c1 = c1->die_sib;
6838 c2 = c2->die_sib;
6839 if (c1 == die1->die_child)
6840 {
6841 if (c2 == die2->die_child)
6842 break;
6843 else
6844 return 0;
6845 }
6846 }
6847
6848 return 1;
6849 }
6850
6851 /* Do the dies look the same? Wrapper around same_die_p. */
6852
6853 static int
6854 same_die_p_wrap (dw_die_ref die1, dw_die_ref die2)
6855 {
6856 int mark = 0;
6857 int ret = same_die_p (die1, die2, &mark);
6858
6859 unmark_all_dies (die1);
6860 unmark_all_dies (die2);
6861
6862 return ret;
6863 }
6864
6865 /* The prefix to attach to symbols on DIEs in the current comdat debug
6866 info section. */
6867 static const char *comdat_symbol_id;
6868
6869 /* The index of the current symbol within the current comdat CU. */
6870 static unsigned int comdat_symbol_number;
6871
6872 /* Calculate the MD5 checksum of the compilation unit DIE UNIT_DIE and its
6873 children, and set comdat_symbol_id accordingly. */
6874
6875 static void
6876 compute_section_prefix (dw_die_ref unit_die)
6877 {
6878 const char *die_name = get_AT_string (unit_die, DW_AT_name);
6879 const char *base = die_name ? lbasename (die_name) : "anonymous";
6880 char *name = XALLOCAVEC (char, strlen (base) + 64);
6881 char *p;
6882 int i, mark;
6883 unsigned char checksum[16];
6884 struct md5_ctx ctx;
6885
6886 /* Compute the checksum of the DIE, then append part of it as hex digits to
6887 the name filename of the unit. */
6888
6889 md5_init_ctx (&ctx);
6890 mark = 0;
6891 die_checksum (unit_die, &ctx, &mark);
6892 unmark_all_dies (unit_die);
6893 md5_finish_ctx (&ctx, checksum);
6894
6895 sprintf (name, "%s.", base);
6896 clean_symbol_name (name);
6897
6898 p = name + strlen (name);
6899 for (i = 0; i < 4; i++)
6900 {
6901 sprintf (p, "%.2x", checksum[i]);
6902 p += 2;
6903 }
6904
6905 comdat_symbol_id = unit_die->die_id.die_symbol = xstrdup (name);
6906 comdat_symbol_number = 0;
6907 }
6908
6909 /* Returns nonzero if DIE represents a type, in the sense of TYPE_P. */
6910
6911 static int
6912 is_type_die (dw_die_ref die)
6913 {
6914 switch (die->die_tag)
6915 {
6916 case DW_TAG_array_type:
6917 case DW_TAG_class_type:
6918 case DW_TAG_interface_type:
6919 case DW_TAG_enumeration_type:
6920 case DW_TAG_pointer_type:
6921 case DW_TAG_reference_type:
6922 case DW_TAG_rvalue_reference_type:
6923 case DW_TAG_string_type:
6924 case DW_TAG_structure_type:
6925 case DW_TAG_subroutine_type:
6926 case DW_TAG_union_type:
6927 case DW_TAG_ptr_to_member_type:
6928 case DW_TAG_set_type:
6929 case DW_TAG_subrange_type:
6930 case DW_TAG_base_type:
6931 case DW_TAG_const_type:
6932 case DW_TAG_file_type:
6933 case DW_TAG_packed_type:
6934 case DW_TAG_volatile_type:
6935 case DW_TAG_typedef:
6936 return 1;
6937 default:
6938 return 0;
6939 }
6940 }
6941
6942 /* Returns 1 iff C is the sort of DIE that should go into a COMDAT CU.
6943 Basically, we want to choose the bits that are likely to be shared between
6944 compilations (types) and leave out the bits that are specific to individual
6945 compilations (functions). */
6946
6947 static int
6948 is_comdat_die (dw_die_ref c)
6949 {
6950 /* I think we want to leave base types and __vtbl_ptr_type in the main CU, as
6951 we do for stabs. The advantage is a greater likelihood of sharing between
6952 objects that don't include headers in the same order (and therefore would
6953 put the base types in a different comdat). jason 8/28/00 */
6954
6955 if (c->die_tag == DW_TAG_base_type)
6956 return 0;
6957
6958 if (c->die_tag == DW_TAG_pointer_type
6959 || c->die_tag == DW_TAG_reference_type
6960 || c->die_tag == DW_TAG_rvalue_reference_type
6961 || c->die_tag == DW_TAG_const_type
6962 || c->die_tag == DW_TAG_volatile_type)
6963 {
6964 dw_die_ref t = get_AT_ref (c, DW_AT_type);
6965
6966 return t ? is_comdat_die (t) : 0;
6967 }
6968
6969 return is_type_die (c);
6970 }
6971
6972 /* Returns 1 iff C is the sort of DIE that might be referred to from another
6973 compilation unit. */
6974
6975 static int
6976 is_symbol_die (dw_die_ref c)
6977 {
6978 return (is_type_die (c)
6979 || is_declaration_die (c)
6980 || c->die_tag == DW_TAG_namespace
6981 || c->die_tag == DW_TAG_module);
6982 }
6983
6984 /* Returns true iff C is a compile-unit DIE. */
6985
6986 static inline bool
6987 is_cu_die (dw_die_ref c)
6988 {
6989 return c && c->die_tag == DW_TAG_compile_unit;
6990 }
6991
6992 /* Returns true iff C is a unit DIE of some sort. */
6993
6994 static inline bool
6995 is_unit_die (dw_die_ref c)
6996 {
6997 return c && (c->die_tag == DW_TAG_compile_unit
6998 || c->die_tag == DW_TAG_partial_unit
6999 || c->die_tag == DW_TAG_type_unit);
7000 }
7001
7002 /* Returns true iff C is a namespace DIE. */
7003
7004 static inline bool
7005 is_namespace_die (dw_die_ref c)
7006 {
7007 return c && c->die_tag == DW_TAG_namespace;
7008 }
7009
7010 /* Returns true iff C is a class or structure DIE. */
7011
7012 static inline bool
7013 is_class_die (dw_die_ref c)
7014 {
7015 return c && (c->die_tag == DW_TAG_class_type
7016 || c->die_tag == DW_TAG_structure_type);
7017 }
7018
7019 /* Return non-zero if this DIE is a template parameter. */
7020
7021 static inline bool
7022 is_template_parameter (dw_die_ref die)
7023 {
7024 switch (die->die_tag)
7025 {
7026 case DW_TAG_template_type_param:
7027 case DW_TAG_template_value_param:
7028 case DW_TAG_GNU_template_template_param:
7029 case DW_TAG_GNU_template_parameter_pack:
7030 return true;
7031 default:
7032 return false;
7033 }
7034 }
7035
7036 /* Return non-zero if this DIE represents a template instantiation. */
7037
7038 static inline bool
7039 is_template_instantiation (dw_die_ref die)
7040 {
7041 dw_die_ref c;
7042
7043 if (!is_type_die (die) && die->die_tag != DW_TAG_subprogram)
7044 return false;
7045 FOR_EACH_CHILD (die, c, if (is_template_parameter (c)) return true);
7046 return false;
7047 }
7048
7049 static char *
7050 gen_internal_sym (const char *prefix)
7051 {
7052 char buf[256];
7053
7054 ASM_GENERATE_INTERNAL_LABEL (buf, prefix, label_num++);
7055 return xstrdup (buf);
7056 }
7057
7058 /* Assign symbols to all worthy DIEs under DIE. */
7059
7060 static void
7061 assign_symbol_names (dw_die_ref die)
7062 {
7063 dw_die_ref c;
7064
7065 if (is_symbol_die (die) && !die->comdat_type_p)
7066 {
7067 if (comdat_symbol_id)
7068 {
7069 char *p = XALLOCAVEC (char, strlen (comdat_symbol_id) + 64);
7070
7071 sprintf (p, "%s.%s.%x", DIE_LABEL_PREFIX,
7072 comdat_symbol_id, comdat_symbol_number++);
7073 die->die_id.die_symbol = xstrdup (p);
7074 }
7075 else
7076 die->die_id.die_symbol = gen_internal_sym ("LDIE");
7077 }
7078
7079 FOR_EACH_CHILD (die, c, assign_symbol_names (c));
7080 }
7081
7082 struct cu_hash_table_entry
7083 {
7084 dw_die_ref cu;
7085 unsigned min_comdat_num, max_comdat_num;
7086 struct cu_hash_table_entry *next;
7087 };
7088
7089 /* Helpers to manipulate hash table of CUs. */
7090
7091 struct cu_hash_table_entry_hasher : pointer_hash <cu_hash_table_entry>
7092 {
7093 typedef die_struct *compare_type;
7094 static inline hashval_t hash (const cu_hash_table_entry *);
7095 static inline bool equal (const cu_hash_table_entry *, const die_struct *);
7096 static inline void remove (cu_hash_table_entry *);
7097 };
7098
7099 inline hashval_t
7100 cu_hash_table_entry_hasher::hash (const cu_hash_table_entry *entry)
7101 {
7102 return htab_hash_string (entry->cu->die_id.die_symbol);
7103 }
7104
7105 inline bool
7106 cu_hash_table_entry_hasher::equal (const cu_hash_table_entry *entry1,
7107 const die_struct *entry2)
7108 {
7109 return !strcmp (entry1->cu->die_id.die_symbol, entry2->die_id.die_symbol);
7110 }
7111
7112 inline void
7113 cu_hash_table_entry_hasher::remove (cu_hash_table_entry *entry)
7114 {
7115 struct cu_hash_table_entry *next;
7116
7117 while (entry)
7118 {
7119 next = entry->next;
7120 free (entry);
7121 entry = next;
7122 }
7123 }
7124
7125 typedef hash_table<cu_hash_table_entry_hasher> cu_hash_type;
7126
7127 /* Check whether we have already seen this CU and set up SYM_NUM
7128 accordingly. */
7129 static int
7130 check_duplicate_cu (dw_die_ref cu, cu_hash_type *htable, unsigned int *sym_num)
7131 {
7132 struct cu_hash_table_entry dummy;
7133 struct cu_hash_table_entry **slot, *entry, *last = &dummy;
7134
7135 dummy.max_comdat_num = 0;
7136
7137 slot = htable->find_slot_with_hash (cu,
7138 htab_hash_string (cu->die_id.die_symbol),
7139 INSERT);
7140 entry = *slot;
7141
7142 for (; entry; last = entry, entry = entry->next)
7143 {
7144 if (same_die_p_wrap (cu, entry->cu))
7145 break;
7146 }
7147
7148 if (entry)
7149 {
7150 *sym_num = entry->min_comdat_num;
7151 return 1;
7152 }
7153
7154 entry = XCNEW (struct cu_hash_table_entry);
7155 entry->cu = cu;
7156 entry->min_comdat_num = *sym_num = last->max_comdat_num;
7157 entry->next = *slot;
7158 *slot = entry;
7159
7160 return 0;
7161 }
7162
7163 /* Record SYM_NUM to record of CU in HTABLE. */
7164 static void
7165 record_comdat_symbol_number (dw_die_ref cu, cu_hash_type *htable,
7166 unsigned int sym_num)
7167 {
7168 struct cu_hash_table_entry **slot, *entry;
7169
7170 slot = htable->find_slot_with_hash (cu,
7171 htab_hash_string (cu->die_id.die_symbol),
7172 NO_INSERT);
7173 entry = *slot;
7174
7175 entry->max_comdat_num = sym_num;
7176 }
7177
7178 /* Traverse the DIE (which is always comp_unit_die), and set up
7179 additional compilation units for each of the include files we see
7180 bracketed by BINCL/EINCL. */
7181
7182 static void
7183 break_out_includes (dw_die_ref die)
7184 {
7185 dw_die_ref c;
7186 dw_die_ref unit = NULL;
7187 limbo_die_node *node, **pnode;
7188
7189 c = die->die_child;
7190 if (c) do {
7191 dw_die_ref prev = c;
7192 c = c->die_sib;
7193 while (c->die_tag == DW_TAG_GNU_BINCL || c->die_tag == DW_TAG_GNU_EINCL
7194 || (unit && is_comdat_die (c)))
7195 {
7196 dw_die_ref next = c->die_sib;
7197
7198 /* This DIE is for a secondary CU; remove it from the main one. */
7199 remove_child_with_prev (c, prev);
7200
7201 if (c->die_tag == DW_TAG_GNU_BINCL)
7202 unit = push_new_compile_unit (unit, c);
7203 else if (c->die_tag == DW_TAG_GNU_EINCL)
7204 unit = pop_compile_unit (unit);
7205 else
7206 add_child_die (unit, c);
7207 c = next;
7208 if (c == die->die_child)
7209 break;
7210 }
7211 } while (c != die->die_child);
7212
7213 #if 0
7214 /* We can only use this in debugging, since the frontend doesn't check
7215 to make sure that we leave every include file we enter. */
7216 gcc_assert (!unit);
7217 #endif
7218
7219 assign_symbol_names (die);
7220 cu_hash_type cu_hash_table (10);
7221 for (node = limbo_die_list, pnode = &limbo_die_list;
7222 node;
7223 node = node->next)
7224 {
7225 int is_dupl;
7226
7227 compute_section_prefix (node->die);
7228 is_dupl = check_duplicate_cu (node->die, &cu_hash_table,
7229 &comdat_symbol_number);
7230 assign_symbol_names (node->die);
7231 if (is_dupl)
7232 *pnode = node->next;
7233 else
7234 {
7235 pnode = &node->next;
7236 record_comdat_symbol_number (node->die, &cu_hash_table,
7237 comdat_symbol_number);
7238 }
7239 }
7240 }
7241
7242 /* Return non-zero if this DIE is a declaration. */
7243
7244 static int
7245 is_declaration_die (dw_die_ref die)
7246 {
7247 dw_attr_node *a;
7248 unsigned ix;
7249
7250 FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
7251 if (a->dw_attr == DW_AT_declaration)
7252 return 1;
7253
7254 return 0;
7255 }
7256
7257 /* Return non-zero if this DIE is nested inside a subprogram. */
7258
7259 static int
7260 is_nested_in_subprogram (dw_die_ref die)
7261 {
7262 dw_die_ref decl = get_AT_ref (die, DW_AT_specification);
7263
7264 if (decl == NULL)
7265 decl = die;
7266 return local_scope_p (decl);
7267 }
7268
7269 /* Return non-zero if this DIE contains a defining declaration of a
7270 subprogram. */
7271
7272 static int
7273 contains_subprogram_definition (dw_die_ref die)
7274 {
7275 dw_die_ref c;
7276
7277 if (die->die_tag == DW_TAG_subprogram && ! is_declaration_die (die))
7278 return 1;
7279 FOR_EACH_CHILD (die, c, if (contains_subprogram_definition (c)) return 1);
7280 return 0;
7281 }
7282
7283 /* Return non-zero if this is a type DIE that should be moved to a
7284 COMDAT .debug_types section. */
7285
7286 static int
7287 should_move_die_to_comdat (dw_die_ref die)
7288 {
7289 switch (die->die_tag)
7290 {
7291 case DW_TAG_class_type:
7292 case DW_TAG_structure_type:
7293 case DW_TAG_enumeration_type:
7294 case DW_TAG_union_type:
7295 /* Don't move declarations, inlined instances, types nested in a
7296 subprogram, or types that contain subprogram definitions. */
7297 if (is_declaration_die (die)
7298 || get_AT (die, DW_AT_abstract_origin)
7299 || is_nested_in_subprogram (die)
7300 || contains_subprogram_definition (die))
7301 return 0;
7302 return 1;
7303 case DW_TAG_array_type:
7304 case DW_TAG_interface_type:
7305 case DW_TAG_pointer_type:
7306 case DW_TAG_reference_type:
7307 case DW_TAG_rvalue_reference_type:
7308 case DW_TAG_string_type:
7309 case DW_TAG_subroutine_type:
7310 case DW_TAG_ptr_to_member_type:
7311 case DW_TAG_set_type:
7312 case DW_TAG_subrange_type:
7313 case DW_TAG_base_type:
7314 case DW_TAG_const_type:
7315 case DW_TAG_file_type:
7316 case DW_TAG_packed_type:
7317 case DW_TAG_volatile_type:
7318 case DW_TAG_typedef:
7319 default:
7320 return 0;
7321 }
7322 }
7323
7324 /* Make a clone of DIE. */
7325
7326 static dw_die_ref
7327 clone_die (dw_die_ref die)
7328 {
7329 dw_die_ref clone;
7330 dw_attr_node *a;
7331 unsigned ix;
7332
7333 clone = ggc_cleared_alloc<die_node> ();
7334 clone->die_tag = die->die_tag;
7335
7336 FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
7337 add_dwarf_attr (clone, a);
7338
7339 return clone;
7340 }
7341
7342 /* Make a clone of the tree rooted at DIE. */
7343
7344 static dw_die_ref
7345 clone_tree (dw_die_ref die)
7346 {
7347 dw_die_ref c;
7348 dw_die_ref clone = clone_die (die);
7349
7350 FOR_EACH_CHILD (die, c, add_child_die (clone, clone_tree (c)));
7351
7352 return clone;
7353 }
7354
7355 /* Make a clone of DIE as a declaration. */
7356
7357 static dw_die_ref
7358 clone_as_declaration (dw_die_ref die)
7359 {
7360 dw_die_ref clone;
7361 dw_die_ref decl;
7362 dw_attr_node *a;
7363 unsigned ix;
7364
7365 /* If the DIE is already a declaration, just clone it. */
7366 if (is_declaration_die (die))
7367 return clone_die (die);
7368
7369 /* If the DIE is a specification, just clone its declaration DIE. */
7370 decl = get_AT_ref (die, DW_AT_specification);
7371 if (decl != NULL)
7372 {
7373 clone = clone_die (decl);
7374 if (die->comdat_type_p)
7375 add_AT_die_ref (clone, DW_AT_signature, die);
7376 return clone;
7377 }
7378
7379 clone = ggc_cleared_alloc<die_node> ();
7380 clone->die_tag = die->die_tag;
7381
7382 FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
7383 {
7384 /* We don't want to copy over all attributes.
7385 For example we don't want DW_AT_byte_size because otherwise we will no
7386 longer have a declaration and GDB will treat it as a definition. */
7387
7388 switch (a->dw_attr)
7389 {
7390 case DW_AT_abstract_origin:
7391 case DW_AT_artificial:
7392 case DW_AT_containing_type:
7393 case DW_AT_external:
7394 case DW_AT_name:
7395 case DW_AT_type:
7396 case DW_AT_virtuality:
7397 case DW_AT_linkage_name:
7398 case DW_AT_MIPS_linkage_name:
7399 add_dwarf_attr (clone, a);
7400 break;
7401 case DW_AT_byte_size:
7402 default:
7403 break;
7404 }
7405 }
7406
7407 if (die->comdat_type_p)
7408 add_AT_die_ref (clone, DW_AT_signature, die);
7409
7410 add_AT_flag (clone, DW_AT_declaration, 1);
7411 return clone;
7412 }
7413
7414
7415 /* Structure to map a DIE in one CU to its copy in a comdat type unit. */
7416
7417 struct decl_table_entry
7418 {
7419 dw_die_ref orig;
7420 dw_die_ref copy;
7421 };
7422
7423 /* Helpers to manipulate hash table of copied declarations. */
7424
7425 /* Hashtable helpers. */
7426
7427 struct decl_table_entry_hasher : free_ptr_hash <decl_table_entry>
7428 {
7429 typedef die_struct *compare_type;
7430 static inline hashval_t hash (const decl_table_entry *);
7431 static inline bool equal (const decl_table_entry *, const die_struct *);
7432 };
7433
7434 inline hashval_t
7435 decl_table_entry_hasher::hash (const decl_table_entry *entry)
7436 {
7437 return htab_hash_pointer (entry->orig);
7438 }
7439
7440 inline bool
7441 decl_table_entry_hasher::equal (const decl_table_entry *entry1,
7442 const die_struct *entry2)
7443 {
7444 return entry1->orig == entry2;
7445 }
7446
7447 typedef hash_table<decl_table_entry_hasher> decl_hash_type;
7448
7449 /* Copy DIE and its ancestors, up to, but not including, the compile unit
7450 or type unit entry, to a new tree. Adds the new tree to UNIT and returns
7451 a pointer to the copy of DIE. If DECL_TABLE is provided, it is used
7452 to check if the ancestor has already been copied into UNIT. */
7453
7454 static dw_die_ref
7455 copy_ancestor_tree (dw_die_ref unit, dw_die_ref die,
7456 decl_hash_type *decl_table)
7457 {
7458 dw_die_ref parent = die->die_parent;
7459 dw_die_ref new_parent = unit;
7460 dw_die_ref copy;
7461 decl_table_entry **slot = NULL;
7462 struct decl_table_entry *entry = NULL;
7463
7464 if (decl_table)
7465 {
7466 /* Check if the entry has already been copied to UNIT. */
7467 slot = decl_table->find_slot_with_hash (die, htab_hash_pointer (die),
7468 INSERT);
7469 if (*slot != HTAB_EMPTY_ENTRY)
7470 {
7471 entry = *slot;
7472 return entry->copy;
7473 }
7474
7475 /* Record in DECL_TABLE that DIE has been copied to UNIT. */
7476 entry = XCNEW (struct decl_table_entry);
7477 entry->orig = die;
7478 entry->copy = NULL;
7479 *slot = entry;
7480 }
7481
7482 if (parent != NULL)
7483 {
7484 dw_die_ref spec = get_AT_ref (parent, DW_AT_specification);
7485 if (spec != NULL)
7486 parent = spec;
7487 if (!is_unit_die (parent))
7488 new_parent = copy_ancestor_tree (unit, parent, decl_table);
7489 }
7490
7491 copy = clone_as_declaration (die);
7492 add_child_die (new_parent, copy);
7493
7494 if (decl_table)
7495 {
7496 /* Record the pointer to the copy. */
7497 entry->copy = copy;
7498 }
7499
7500 return copy;
7501 }
7502 /* Copy the declaration context to the new type unit DIE. This includes
7503 any surrounding namespace or type declarations. If the DIE has an
7504 AT_specification attribute, it also includes attributes and children
7505 attached to the specification, and returns a pointer to the original
7506 parent of the declaration DIE. Returns NULL otherwise. */
7507
7508 static dw_die_ref
7509 copy_declaration_context (dw_die_ref unit, dw_die_ref die)
7510 {
7511 dw_die_ref decl;
7512 dw_die_ref new_decl;
7513 dw_die_ref orig_parent = NULL;
7514
7515 decl = get_AT_ref (die, DW_AT_specification);
7516 if (decl == NULL)
7517 decl = die;
7518 else
7519 {
7520 unsigned ix;
7521 dw_die_ref c;
7522 dw_attr_node *a;
7523
7524 /* The original DIE will be changed to a declaration, and must
7525 be moved to be a child of the original declaration DIE. */
7526 orig_parent = decl->die_parent;
7527
7528 /* Copy the type node pointer from the new DIE to the original
7529 declaration DIE so we can forward references later. */
7530 decl->comdat_type_p = true;
7531 decl->die_id.die_type_node = die->die_id.die_type_node;
7532
7533 remove_AT (die, DW_AT_specification);
7534
7535 FOR_EACH_VEC_SAFE_ELT (decl->die_attr, ix, a)
7536 {
7537 if (a->dw_attr != DW_AT_name
7538 && a->dw_attr != DW_AT_declaration
7539 && a->dw_attr != DW_AT_external)
7540 add_dwarf_attr (die, a);
7541 }
7542
7543 FOR_EACH_CHILD (decl, c, add_child_die (die, clone_tree (c)));
7544 }
7545
7546 if (decl->die_parent != NULL
7547 && !is_unit_die (decl->die_parent))
7548 {
7549 new_decl = copy_ancestor_tree (unit, decl, NULL);
7550 if (new_decl != NULL)
7551 {
7552 remove_AT (new_decl, DW_AT_signature);
7553 add_AT_specification (die, new_decl);
7554 }
7555 }
7556
7557 return orig_parent;
7558 }
7559
7560 /* Generate the skeleton ancestor tree for the given NODE, then clone
7561 the DIE and add the clone into the tree. */
7562
7563 static void
7564 generate_skeleton_ancestor_tree (skeleton_chain_node *node)
7565 {
7566 if (node->new_die != NULL)
7567 return;
7568
7569 node->new_die = clone_as_declaration (node->old_die);
7570
7571 if (node->parent != NULL)
7572 {
7573 generate_skeleton_ancestor_tree (node->parent);
7574 add_child_die (node->parent->new_die, node->new_die);
7575 }
7576 }
7577
7578 /* Generate a skeleton tree of DIEs containing any declarations that are
7579 found in the original tree. We traverse the tree looking for declaration
7580 DIEs, and construct the skeleton from the bottom up whenever we find one. */
7581
7582 static void
7583 generate_skeleton_bottom_up (skeleton_chain_node *parent)
7584 {
7585 skeleton_chain_node node;
7586 dw_die_ref c;
7587 dw_die_ref first;
7588 dw_die_ref prev = NULL;
7589 dw_die_ref next = NULL;
7590
7591 node.parent = parent;
7592
7593 first = c = parent->old_die->die_child;
7594 if (c)
7595 next = c->die_sib;
7596 if (c) do {
7597 if (prev == NULL || prev->die_sib == c)
7598 prev = c;
7599 c = next;
7600 next = (c == first ? NULL : c->die_sib);
7601 node.old_die = c;
7602 node.new_die = NULL;
7603 if (is_declaration_die (c))
7604 {
7605 if (is_template_instantiation (c))
7606 {
7607 /* Instantiated templates do not need to be cloned into the
7608 type unit. Just move the DIE and its children back to
7609 the skeleton tree (in the main CU). */
7610 remove_child_with_prev (c, prev);
7611 add_child_die (parent->new_die, c);
7612 c = prev;
7613 }
7614 else
7615 {
7616 /* Clone the existing DIE, move the original to the skeleton
7617 tree (which is in the main CU), and put the clone, with
7618 all the original's children, where the original came from
7619 (which is about to be moved to the type unit). */
7620 dw_die_ref clone = clone_die (c);
7621 move_all_children (c, clone);
7622
7623 /* If the original has a DW_AT_object_pointer attribute,
7624 it would now point to a child DIE just moved to the
7625 cloned tree, so we need to remove that attribute from
7626 the original. */
7627 remove_AT (c, DW_AT_object_pointer);
7628
7629 replace_child (c, clone, prev);
7630 generate_skeleton_ancestor_tree (parent);
7631 add_child_die (parent->new_die, c);
7632 node.new_die = c;
7633 c = clone;
7634 }
7635 }
7636 generate_skeleton_bottom_up (&node);
7637 } while (next != NULL);
7638 }
7639
7640 /* Wrapper function for generate_skeleton_bottom_up. */
7641
7642 static dw_die_ref
7643 generate_skeleton (dw_die_ref die)
7644 {
7645 skeleton_chain_node node;
7646
7647 node.old_die = die;
7648 node.new_die = NULL;
7649 node.parent = NULL;
7650
7651 /* If this type definition is nested inside another type,
7652 and is not an instantiation of a template, always leave
7653 at least a declaration in its place. */
7654 if (die->die_parent != NULL
7655 && is_type_die (die->die_parent)
7656 && !is_template_instantiation (die))
7657 node.new_die = clone_as_declaration (die);
7658
7659 generate_skeleton_bottom_up (&node);
7660 return node.new_die;
7661 }
7662
7663 /* Remove the CHILD DIE from its parent, possibly replacing it with a cloned
7664 declaration. The original DIE is moved to a new compile unit so that
7665 existing references to it follow it to the new location. If any of the
7666 original DIE's descendants is a declaration, we need to replace the
7667 original DIE with a skeleton tree and move the declarations back into the
7668 skeleton tree. */
7669
7670 static dw_die_ref
7671 remove_child_or_replace_with_skeleton (dw_die_ref unit, dw_die_ref child,
7672 dw_die_ref prev)
7673 {
7674 dw_die_ref skeleton, orig_parent;
7675
7676 /* Copy the declaration context to the type unit DIE. If the returned
7677 ORIG_PARENT is not NULL, the skeleton needs to be added as a child of
7678 that DIE. */
7679 orig_parent = copy_declaration_context (unit, child);
7680
7681 skeleton = generate_skeleton (child);
7682 if (skeleton == NULL)
7683 remove_child_with_prev (child, prev);
7684 else
7685 {
7686 skeleton->comdat_type_p = true;
7687 skeleton->die_id.die_type_node = child->die_id.die_type_node;
7688
7689 /* If the original DIE was a specification, we need to put
7690 the skeleton under the parent DIE of the declaration.
7691 This leaves the original declaration in the tree, but
7692 it will be pruned later since there are no longer any
7693 references to it. */
7694 if (orig_parent != NULL)
7695 {
7696 remove_child_with_prev (child, prev);
7697 add_child_die (orig_parent, skeleton);
7698 }
7699 else
7700 replace_child (child, skeleton, prev);
7701 }
7702
7703 return skeleton;
7704 }
7705
7706 static void
7707 copy_dwarf_procs_ref_in_attrs (dw_die_ref die,
7708 comdat_type_node *type_node,
7709 hash_map<dw_die_ref, dw_die_ref> &copied_dwarf_procs);
7710
7711 /* Helper for copy_dwarf_procs_ref_in_dies. Make a copy of the DIE DWARF
7712 procedure, put it under TYPE_NODE and return the copy. Continue looking for
7713 DWARF procedure references in the DW_AT_location attribute. */
7714
7715 static dw_die_ref
7716 copy_dwarf_procedure (dw_die_ref die,
7717 comdat_type_node *type_node,
7718 hash_map<dw_die_ref, dw_die_ref> &copied_dwarf_procs)
7719 {
7720 /* We do this for COMDAT section, which is DWARFv4 specific, so
7721 DWARF procedure are always DW_TAG_dwarf_procedure DIEs (unlike
7722 DW_TAG_variable in DWARFv3). */
7723 gcc_assert (die->die_tag == DW_TAG_dwarf_procedure);
7724
7725 /* DWARF procedures are not supposed to have children... */
7726 gcc_assert (die->die_child == NULL);
7727
7728 /* ... and they are supposed to have only one attribute: DW_AT_location. */
7729 gcc_assert (vec_safe_length (die->die_attr) == 1
7730 && ((*die->die_attr)[0].dw_attr == DW_AT_location));
7731
7732 /* Do not copy more than once DWARF procedures. */
7733 bool existed;
7734 dw_die_ref &die_copy = copied_dwarf_procs.get_or_insert (die, &existed);
7735 if (existed)
7736 return die_copy;
7737
7738 die_copy = clone_die (die);
7739 add_child_die (type_node->root_die, die_copy);
7740 copy_dwarf_procs_ref_in_attrs (die_copy, type_node, copied_dwarf_procs);
7741 return die_copy;
7742 }
7743
7744 /* Helper for copy_dwarf_procs_ref_in_dies. Look for references to DWARF
7745 procedures in DIE's attributes. */
7746
7747 static void
7748 copy_dwarf_procs_ref_in_attrs (dw_die_ref die,
7749 comdat_type_node *type_node,
7750 hash_map<dw_die_ref, dw_die_ref> &copied_dwarf_procs)
7751 {
7752 dw_attr_node *a;
7753 unsigned i;
7754
7755 FOR_EACH_VEC_SAFE_ELT (die->die_attr, i, a)
7756 {
7757 dw_loc_descr_ref loc;
7758
7759 if (a->dw_attr_val.val_class != dw_val_class_loc)
7760 continue;
7761
7762 for (loc = a->dw_attr_val.v.val_loc; loc != NULL; loc = loc->dw_loc_next)
7763 {
7764 switch (loc->dw_loc_opc)
7765 {
7766 case DW_OP_call2:
7767 case DW_OP_call4:
7768 case DW_OP_call_ref:
7769 gcc_assert (loc->dw_loc_oprnd1.val_class
7770 == dw_val_class_die_ref);
7771 loc->dw_loc_oprnd1.v.val_die_ref.die
7772 = copy_dwarf_procedure (loc->dw_loc_oprnd1.v.val_die_ref.die,
7773 type_node,
7774 copied_dwarf_procs);
7775
7776 default:
7777 break;
7778 }
7779 }
7780 }
7781 }
7782
7783 /* Copy DWARF procedures that are referenced by the DIE tree to TREE_NODE and
7784 rewrite references to point to the copies.
7785
7786 References are looked for in DIE's attributes and recursively in all its
7787 children attributes that are location descriptions. COPIED_DWARF_PROCS is a
7788 mapping from old DWARF procedures to their copy. It is used not to copy
7789 twice the same DWARF procedure under TYPE_NODE. */
7790
7791 static void
7792 copy_dwarf_procs_ref_in_dies (dw_die_ref die,
7793 comdat_type_node *type_node,
7794 hash_map<dw_die_ref, dw_die_ref> &copied_dwarf_procs)
7795 {
7796 dw_die_ref c;
7797
7798 copy_dwarf_procs_ref_in_attrs (die, type_node, copied_dwarf_procs);
7799 FOR_EACH_CHILD (die, c, copy_dwarf_procs_ref_in_dies (c,
7800 type_node,
7801 copied_dwarf_procs));
7802 }
7803
7804 /* Traverse the DIE and set up additional .debug_types sections for each
7805 type worthy of being placed in a COMDAT section. */
7806
7807 static void
7808 break_out_comdat_types (dw_die_ref die)
7809 {
7810 dw_die_ref c;
7811 dw_die_ref first;
7812 dw_die_ref prev = NULL;
7813 dw_die_ref next = NULL;
7814 dw_die_ref unit = NULL;
7815
7816 first = c = die->die_child;
7817 if (c)
7818 next = c->die_sib;
7819 if (c) do {
7820 if (prev == NULL || prev->die_sib == c)
7821 prev = c;
7822 c = next;
7823 next = (c == first ? NULL : c->die_sib);
7824 if (should_move_die_to_comdat (c))
7825 {
7826 dw_die_ref replacement;
7827 comdat_type_node *type_node;
7828
7829 /* Break out nested types into their own type units. */
7830 break_out_comdat_types (c);
7831
7832 /* Create a new type unit DIE as the root for the new tree, and
7833 add it to the list of comdat types. */
7834 unit = new_die (DW_TAG_type_unit, NULL, NULL);
7835 add_AT_unsigned (unit, DW_AT_language,
7836 get_AT_unsigned (comp_unit_die (), DW_AT_language));
7837 type_node = ggc_cleared_alloc<comdat_type_node> ();
7838 type_node->root_die = unit;
7839 type_node->next = comdat_type_list;
7840 comdat_type_list = type_node;
7841
7842 /* Generate the type signature. */
7843 generate_type_signature (c, type_node);
7844
7845 /* Copy the declaration context, attributes, and children of the
7846 declaration into the new type unit DIE, then remove this DIE
7847 from the main CU (or replace it with a skeleton if necessary). */
7848 replacement = remove_child_or_replace_with_skeleton (unit, c, prev);
7849 type_node->skeleton_die = replacement;
7850
7851 /* Add the DIE to the new compunit. */
7852 add_child_die (unit, c);
7853
7854 /* Types can reference DWARF procedures for type size or data location
7855 expressions. Calls in DWARF expressions cannot target procedures
7856 that are not in the same section. So we must copy DWARF procedures
7857 along with this type and then rewrite references to them. */
7858 hash_map<dw_die_ref, dw_die_ref> copied_dwarf_procs;
7859 copy_dwarf_procs_ref_in_dies (c, type_node, copied_dwarf_procs);
7860
7861 if (replacement != NULL)
7862 c = replacement;
7863 }
7864 else if (c->die_tag == DW_TAG_namespace
7865 || c->die_tag == DW_TAG_class_type
7866 || c->die_tag == DW_TAG_structure_type
7867 || c->die_tag == DW_TAG_union_type)
7868 {
7869 /* Look for nested types that can be broken out. */
7870 break_out_comdat_types (c);
7871 }
7872 } while (next != NULL);
7873 }
7874
7875 /* Like clone_tree, but copy DW_TAG_subprogram DIEs as declarations.
7876 Enter all the cloned children into the hash table decl_table. */
7877
7878 static dw_die_ref
7879 clone_tree_partial (dw_die_ref die, decl_hash_type *decl_table)
7880 {
7881 dw_die_ref c;
7882 dw_die_ref clone;
7883 struct decl_table_entry *entry;
7884 decl_table_entry **slot;
7885
7886 if (die->die_tag == DW_TAG_subprogram)
7887 clone = clone_as_declaration (die);
7888 else
7889 clone = clone_die (die);
7890
7891 slot = decl_table->find_slot_with_hash (die,
7892 htab_hash_pointer (die), INSERT);
7893
7894 /* Assert that DIE isn't in the hash table yet. If it would be there
7895 before, the ancestors would be necessarily there as well, therefore
7896 clone_tree_partial wouldn't be called. */
7897 gcc_assert (*slot == HTAB_EMPTY_ENTRY);
7898
7899 entry = XCNEW (struct decl_table_entry);
7900 entry->orig = die;
7901 entry->copy = clone;
7902 *slot = entry;
7903
7904 if (die->die_tag != DW_TAG_subprogram)
7905 FOR_EACH_CHILD (die, c,
7906 add_child_die (clone, clone_tree_partial (c, decl_table)));
7907
7908 return clone;
7909 }
7910
7911 /* Walk the DIE and its children, looking for references to incomplete
7912 or trivial types that are unmarked (i.e., that are not in the current
7913 type_unit). */
7914
7915 static void
7916 copy_decls_walk (dw_die_ref unit, dw_die_ref die, decl_hash_type *decl_table)
7917 {
7918 dw_die_ref c;
7919 dw_attr_node *a;
7920 unsigned ix;
7921
7922 FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
7923 {
7924 if (AT_class (a) == dw_val_class_die_ref)
7925 {
7926 dw_die_ref targ = AT_ref (a);
7927 decl_table_entry **slot;
7928 struct decl_table_entry *entry;
7929
7930 if (targ->die_mark != 0 || targ->comdat_type_p)
7931 continue;
7932
7933 slot = decl_table->find_slot_with_hash (targ,
7934 htab_hash_pointer (targ),
7935 INSERT);
7936
7937 if (*slot != HTAB_EMPTY_ENTRY)
7938 {
7939 /* TARG has already been copied, so we just need to
7940 modify the reference to point to the copy. */
7941 entry = *slot;
7942 a->dw_attr_val.v.val_die_ref.die = entry->copy;
7943 }
7944 else
7945 {
7946 dw_die_ref parent = unit;
7947 dw_die_ref copy = clone_die (targ);
7948
7949 /* Record in DECL_TABLE that TARG has been copied.
7950 Need to do this now, before the recursive call,
7951 because DECL_TABLE may be expanded and SLOT
7952 would no longer be a valid pointer. */
7953 entry = XCNEW (struct decl_table_entry);
7954 entry->orig = targ;
7955 entry->copy = copy;
7956 *slot = entry;
7957
7958 /* If TARG is not a declaration DIE, we need to copy its
7959 children. */
7960 if (!is_declaration_die (targ))
7961 {
7962 FOR_EACH_CHILD (
7963 targ, c,
7964 add_child_die (copy,
7965 clone_tree_partial (c, decl_table)));
7966 }
7967
7968 /* Make sure the cloned tree is marked as part of the
7969 type unit. */
7970 mark_dies (copy);
7971
7972 /* If TARG has surrounding context, copy its ancestor tree
7973 into the new type unit. */
7974 if (targ->die_parent != NULL
7975 && !is_unit_die (targ->die_parent))
7976 parent = copy_ancestor_tree (unit, targ->die_parent,
7977 decl_table);
7978
7979 add_child_die (parent, copy);
7980 a->dw_attr_val.v.val_die_ref.die = copy;
7981
7982 /* Make sure the newly-copied DIE is walked. If it was
7983 installed in a previously-added context, it won't
7984 get visited otherwise. */
7985 if (parent != unit)
7986 {
7987 /* Find the highest point of the newly-added tree,
7988 mark each node along the way, and walk from there. */
7989 parent->die_mark = 1;
7990 while (parent->die_parent
7991 && parent->die_parent->die_mark == 0)
7992 {
7993 parent = parent->die_parent;
7994 parent->die_mark = 1;
7995 }
7996 copy_decls_walk (unit, parent, decl_table);
7997 }
7998 }
7999 }
8000 }
8001
8002 FOR_EACH_CHILD (die, c, copy_decls_walk (unit, c, decl_table));
8003 }
8004
8005 /* Copy declarations for "unworthy" types into the new comdat section.
8006 Incomplete types, modified types, and certain other types aren't broken
8007 out into comdat sections of their own, so they don't have a signature,
8008 and we need to copy the declaration into the same section so that we
8009 don't have an external reference. */
8010
8011 static void
8012 copy_decls_for_unworthy_types (dw_die_ref unit)
8013 {
8014 mark_dies (unit);
8015 decl_hash_type decl_table (10);
8016 copy_decls_walk (unit, unit, &decl_table);
8017 unmark_dies (unit);
8018 }
8019
8020 /* Traverse the DIE and add a sibling attribute if it may have the
8021 effect of speeding up access to siblings. To save some space,
8022 avoid generating sibling attributes for DIE's without children. */
8023
8024 static void
8025 add_sibling_attributes (dw_die_ref die)
8026 {
8027 dw_die_ref c;
8028
8029 if (! die->die_child)
8030 return;
8031
8032 if (die->die_parent && die != die->die_parent->die_child)
8033 add_AT_die_ref (die, DW_AT_sibling, die->die_sib);
8034
8035 FOR_EACH_CHILD (die, c, add_sibling_attributes (c));
8036 }
8037
8038 /* Output all location lists for the DIE and its children. */
8039
8040 static void
8041 output_location_lists (dw_die_ref die)
8042 {
8043 dw_die_ref c;
8044 dw_attr_node *a;
8045 unsigned ix;
8046
8047 FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
8048 if (AT_class (a) == dw_val_class_loc_list)
8049 output_loc_list (AT_loc_list (a));
8050
8051 FOR_EACH_CHILD (die, c, output_location_lists (c));
8052 }
8053
8054 /* We want to limit the number of external references, because they are
8055 larger than local references: a relocation takes multiple words, and
8056 even a sig8 reference is always eight bytes, whereas a local reference
8057 can be as small as one byte (though DW_FORM_ref is usually 4 in GCC).
8058 So if we encounter multiple external references to the same type DIE, we
8059 make a local typedef stub for it and redirect all references there.
8060
8061 This is the element of the hash table for keeping track of these
8062 references. */
8063
8064 struct external_ref
8065 {
8066 dw_die_ref type;
8067 dw_die_ref stub;
8068 unsigned n_refs;
8069 };
8070
8071 /* Hashtable helpers. */
8072
8073 struct external_ref_hasher : free_ptr_hash <external_ref>
8074 {
8075 static inline hashval_t hash (const external_ref *);
8076 static inline bool equal (const external_ref *, const external_ref *);
8077 };
8078
8079 inline hashval_t
8080 external_ref_hasher::hash (const external_ref *r)
8081 {
8082 dw_die_ref die = r->type;
8083 hashval_t h = 0;
8084
8085 /* We can't use the address of the DIE for hashing, because
8086 that will make the order of the stub DIEs non-deterministic. */
8087 if (! die->comdat_type_p)
8088 /* We have a symbol; use it to compute a hash. */
8089 h = htab_hash_string (die->die_id.die_symbol);
8090 else
8091 {
8092 /* We have a type signature; use a subset of the bits as the hash.
8093 The 8-byte signature is at least as large as hashval_t. */
8094 comdat_type_node *type_node = die->die_id.die_type_node;
8095 memcpy (&h, type_node->signature, sizeof (h));
8096 }
8097 return h;
8098 }
8099
8100 inline bool
8101 external_ref_hasher::equal (const external_ref *r1, const external_ref *r2)
8102 {
8103 return r1->type == r2->type;
8104 }
8105
8106 typedef hash_table<external_ref_hasher> external_ref_hash_type;
8107
8108 /* Return a pointer to the external_ref for references to DIE. */
8109
8110 static struct external_ref *
8111 lookup_external_ref (external_ref_hash_type *map, dw_die_ref die)
8112 {
8113 struct external_ref ref, *ref_p;
8114 external_ref **slot;
8115
8116 ref.type = die;
8117 slot = map->find_slot (&ref, INSERT);
8118 if (*slot != HTAB_EMPTY_ENTRY)
8119 return *slot;
8120
8121 ref_p = XCNEW (struct external_ref);
8122 ref_p->type = die;
8123 *slot = ref_p;
8124 return ref_p;
8125 }
8126
8127 /* Subroutine of optimize_external_refs, below.
8128
8129 If we see a type skeleton, record it as our stub. If we see external
8130 references, remember how many we've seen. */
8131
8132 static void
8133 optimize_external_refs_1 (dw_die_ref die, external_ref_hash_type *map)
8134 {
8135 dw_die_ref c;
8136 dw_attr_node *a;
8137 unsigned ix;
8138 struct external_ref *ref_p;
8139
8140 if (is_type_die (die)
8141 && (c = get_AT_ref (die, DW_AT_signature)))
8142 {
8143 /* This is a local skeleton; use it for local references. */
8144 ref_p = lookup_external_ref (map, c);
8145 ref_p->stub = die;
8146 }
8147
8148 /* Scan the DIE references, and remember any that refer to DIEs from
8149 other CUs (i.e. those which are not marked). */
8150 FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
8151 if (AT_class (a) == dw_val_class_die_ref
8152 && (c = AT_ref (a))->die_mark == 0
8153 && is_type_die (c))
8154 {
8155 ref_p = lookup_external_ref (map, c);
8156 ref_p->n_refs++;
8157 }
8158
8159 FOR_EACH_CHILD (die, c, optimize_external_refs_1 (c, map));
8160 }
8161
8162 /* htab_traverse callback function for optimize_external_refs, below. SLOT
8163 points to an external_ref, DATA is the CU we're processing. If we don't
8164 already have a local stub, and we have multiple refs, build a stub. */
8165
8166 int
8167 dwarf2_build_local_stub (external_ref **slot, dw_die_ref data)
8168 {
8169 struct external_ref *ref_p = *slot;
8170
8171 if (ref_p->stub == NULL && ref_p->n_refs > 1 && !dwarf_strict)
8172 {
8173 /* We have multiple references to this type, so build a small stub.
8174 Both of these forms are a bit dodgy from the perspective of the
8175 DWARF standard, since technically they should have names. */
8176 dw_die_ref cu = data;
8177 dw_die_ref type = ref_p->type;
8178 dw_die_ref stub = NULL;
8179
8180 if (type->comdat_type_p)
8181 {
8182 /* If we refer to this type via sig8, use AT_signature. */
8183 stub = new_die (type->die_tag, cu, NULL_TREE);
8184 add_AT_die_ref (stub, DW_AT_signature, type);
8185 }
8186 else
8187 {
8188 /* Otherwise, use a typedef with no name. */
8189 stub = new_die (DW_TAG_typedef, cu, NULL_TREE);
8190 add_AT_die_ref (stub, DW_AT_type, type);
8191 }
8192
8193 stub->die_mark++;
8194 ref_p->stub = stub;
8195 }
8196 return 1;
8197 }
8198
8199 /* DIE is a unit; look through all the DIE references to see if there are
8200 any external references to types, and if so, create local stubs for
8201 them which will be applied in build_abbrev_table. This is useful because
8202 references to local DIEs are smaller. */
8203
8204 static external_ref_hash_type *
8205 optimize_external_refs (dw_die_ref die)
8206 {
8207 external_ref_hash_type *map = new external_ref_hash_type (10);
8208 optimize_external_refs_1 (die, map);
8209 map->traverse <dw_die_ref, dwarf2_build_local_stub> (die);
8210 return map;
8211 }
8212
8213 /* The format of each DIE (and its attribute value pairs) is encoded in an
8214 abbreviation table. This routine builds the abbreviation table and assigns
8215 a unique abbreviation id for each abbreviation entry. The children of each
8216 die are visited recursively. */
8217
8218 static void
8219 build_abbrev_table (dw_die_ref die, external_ref_hash_type *extern_map)
8220 {
8221 unsigned long abbrev_id;
8222 unsigned int n_alloc;
8223 dw_die_ref c;
8224 dw_attr_node *a;
8225 unsigned ix;
8226
8227 /* Scan the DIE references, and replace any that refer to
8228 DIEs from other CUs (i.e. those which are not marked) with
8229 the local stubs we built in optimize_external_refs. */
8230 FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
8231 if (AT_class (a) == dw_val_class_die_ref
8232 && (c = AT_ref (a))->die_mark == 0)
8233 {
8234 struct external_ref *ref_p;
8235 gcc_assert (AT_ref (a)->comdat_type_p || AT_ref (a)->die_id.die_symbol);
8236
8237 ref_p = lookup_external_ref (extern_map, c);
8238 if (ref_p->stub && ref_p->stub != die)
8239 change_AT_die_ref (a, ref_p->stub);
8240 else
8241 /* We aren't changing this reference, so mark it external. */
8242 set_AT_ref_external (a, 1);
8243 }
8244
8245 for (abbrev_id = 1; abbrev_id < abbrev_die_table_in_use; ++abbrev_id)
8246 {
8247 dw_die_ref abbrev = abbrev_die_table[abbrev_id];
8248 dw_attr_node *die_a, *abbrev_a;
8249 unsigned ix;
8250 bool ok = true;
8251
8252 if (abbrev->die_tag != die->die_tag)
8253 continue;
8254 if ((abbrev->die_child != NULL) != (die->die_child != NULL))
8255 continue;
8256
8257 if (vec_safe_length (abbrev->die_attr) != vec_safe_length (die->die_attr))
8258 continue;
8259
8260 FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, die_a)
8261 {
8262 abbrev_a = &(*abbrev->die_attr)[ix];
8263 if ((abbrev_a->dw_attr != die_a->dw_attr)
8264 || (value_format (abbrev_a) != value_format (die_a)))
8265 {
8266 ok = false;
8267 break;
8268 }
8269 }
8270 if (ok)
8271 break;
8272 }
8273
8274 if (abbrev_id >= abbrev_die_table_in_use)
8275 {
8276 if (abbrev_die_table_in_use >= abbrev_die_table_allocated)
8277 {
8278 n_alloc = abbrev_die_table_allocated + ABBREV_DIE_TABLE_INCREMENT;
8279 abbrev_die_table = GGC_RESIZEVEC (dw_die_ref, abbrev_die_table,
8280 n_alloc);
8281
8282 memset (&abbrev_die_table[abbrev_die_table_allocated], 0,
8283 (n_alloc - abbrev_die_table_allocated) * sizeof (dw_die_ref));
8284 abbrev_die_table_allocated = n_alloc;
8285 }
8286
8287 ++abbrev_die_table_in_use;
8288 abbrev_die_table[abbrev_id] = die;
8289 }
8290
8291 die->die_abbrev = abbrev_id;
8292 FOR_EACH_CHILD (die, c, build_abbrev_table (c, extern_map));
8293 }
8294 \f
8295 /* Return the power-of-two number of bytes necessary to represent VALUE. */
8296
8297 static int
8298 constant_size (unsigned HOST_WIDE_INT value)
8299 {
8300 int log;
8301
8302 if (value == 0)
8303 log = 0;
8304 else
8305 log = floor_log2 (value);
8306
8307 log = log / 8;
8308 log = 1 << (floor_log2 (log) + 1);
8309
8310 return log;
8311 }
8312
8313 /* Return the size of a DIE as it is represented in the
8314 .debug_info section. */
8315
8316 static unsigned long
8317 size_of_die (dw_die_ref die)
8318 {
8319 unsigned long size = 0;
8320 dw_attr_node *a;
8321 unsigned ix;
8322 enum dwarf_form form;
8323
8324 size += size_of_uleb128 (die->die_abbrev);
8325 FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
8326 {
8327 switch (AT_class (a))
8328 {
8329 case dw_val_class_addr:
8330 if (dwarf_split_debug_info && AT_index (a) != NOT_INDEXED)
8331 {
8332 gcc_assert (AT_index (a) != NO_INDEX_ASSIGNED);
8333 size += size_of_uleb128 (AT_index (a));
8334 }
8335 else
8336 size += DWARF2_ADDR_SIZE;
8337 break;
8338 case dw_val_class_offset:
8339 size += DWARF_OFFSET_SIZE;
8340 break;
8341 case dw_val_class_loc:
8342 {
8343 unsigned long lsize = size_of_locs (AT_loc (a));
8344
8345 /* Block length. */
8346 if (dwarf_version >= 4)
8347 size += size_of_uleb128 (lsize);
8348 else
8349 size += constant_size (lsize);
8350 size += lsize;
8351 }
8352 break;
8353 case dw_val_class_loc_list:
8354 if (dwarf_split_debug_info && AT_index (a) != NOT_INDEXED)
8355 {
8356 gcc_assert (AT_index (a) != NO_INDEX_ASSIGNED);
8357 size += size_of_uleb128 (AT_index (a));
8358 }
8359 else
8360 size += DWARF_OFFSET_SIZE;
8361 break;
8362 case dw_val_class_range_list:
8363 size += DWARF_OFFSET_SIZE;
8364 break;
8365 case dw_val_class_const:
8366 size += size_of_sleb128 (AT_int (a));
8367 break;
8368 case dw_val_class_unsigned_const:
8369 {
8370 int csize = constant_size (AT_unsigned (a));
8371 if (dwarf_version == 3
8372 && a->dw_attr == DW_AT_data_member_location
8373 && csize >= 4)
8374 size += size_of_uleb128 (AT_unsigned (a));
8375 else
8376 size += csize;
8377 }
8378 break;
8379 case dw_val_class_const_double:
8380 size += HOST_BITS_PER_DOUBLE_INT / HOST_BITS_PER_CHAR;
8381 if (HOST_BITS_PER_WIDE_INT >= 64)
8382 size++; /* block */
8383 break;
8384 case dw_val_class_wide_int:
8385 size += (get_full_len (*a->dw_attr_val.v.val_wide)
8386 * HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR);
8387 if (get_full_len (*a->dw_attr_val.v.val_wide) * HOST_BITS_PER_WIDE_INT
8388 > 64)
8389 size++; /* block */
8390 break;
8391 case dw_val_class_vec:
8392 size += constant_size (a->dw_attr_val.v.val_vec.length
8393 * a->dw_attr_val.v.val_vec.elt_size)
8394 + a->dw_attr_val.v.val_vec.length
8395 * a->dw_attr_val.v.val_vec.elt_size; /* block */
8396 break;
8397 case dw_val_class_flag:
8398 if (dwarf_version >= 4)
8399 /* Currently all add_AT_flag calls pass in 1 as last argument,
8400 so DW_FORM_flag_present can be used. If that ever changes,
8401 we'll need to use DW_FORM_flag and have some optimization
8402 in build_abbrev_table that will change those to
8403 DW_FORM_flag_present if it is set to 1 in all DIEs using
8404 the same abbrev entry. */
8405 gcc_assert (a->dw_attr_val.v.val_flag == 1);
8406 else
8407 size += 1;
8408 break;
8409 case dw_val_class_die_ref:
8410 if (AT_ref_external (a))
8411 {
8412 /* In DWARF4, we use DW_FORM_ref_sig8; for earlier versions
8413 we use DW_FORM_ref_addr. In DWARF2, DW_FORM_ref_addr
8414 is sized by target address length, whereas in DWARF3
8415 it's always sized as an offset. */
8416 if (use_debug_types)
8417 size += DWARF_TYPE_SIGNATURE_SIZE;
8418 else if (dwarf_version == 2)
8419 size += DWARF2_ADDR_SIZE;
8420 else
8421 size += DWARF_OFFSET_SIZE;
8422 }
8423 else
8424 size += DWARF_OFFSET_SIZE;
8425 break;
8426 case dw_val_class_fde_ref:
8427 size += DWARF_OFFSET_SIZE;
8428 break;
8429 case dw_val_class_lbl_id:
8430 if (dwarf_split_debug_info && AT_index (a) != NOT_INDEXED)
8431 {
8432 gcc_assert (AT_index (a) != NO_INDEX_ASSIGNED);
8433 size += size_of_uleb128 (AT_index (a));
8434 }
8435 else
8436 size += DWARF2_ADDR_SIZE;
8437 break;
8438 case dw_val_class_lineptr:
8439 case dw_val_class_macptr:
8440 size += DWARF_OFFSET_SIZE;
8441 break;
8442 case dw_val_class_str:
8443 form = AT_string_form (a);
8444 if (form == DW_FORM_strp)
8445 size += DWARF_OFFSET_SIZE;
8446 else if (form == DW_FORM_GNU_str_index)
8447 size += size_of_uleb128 (AT_index (a));
8448 else
8449 size += strlen (a->dw_attr_val.v.val_str->str) + 1;
8450 break;
8451 case dw_val_class_file:
8452 size += constant_size (maybe_emit_file (a->dw_attr_val.v.val_file));
8453 break;
8454 case dw_val_class_data8:
8455 size += 8;
8456 break;
8457 case dw_val_class_vms_delta:
8458 size += DWARF_OFFSET_SIZE;
8459 break;
8460 case dw_val_class_high_pc:
8461 size += DWARF2_ADDR_SIZE;
8462 break;
8463 case dw_val_class_discr_value:
8464 size += size_of_discr_value (&a->dw_attr_val.v.val_discr_value);
8465 break;
8466 case dw_val_class_discr_list:
8467 {
8468 unsigned block_size = size_of_discr_list (AT_discr_list (a));
8469
8470 /* This is a block, so we have the block length and then its
8471 data. */
8472 size += constant_size (block_size) + block_size;
8473 }
8474 break;
8475 default:
8476 gcc_unreachable ();
8477 }
8478 }
8479
8480 return size;
8481 }
8482
8483 /* Size the debugging information associated with a given DIE. Visits the
8484 DIE's children recursively. Updates the global variable next_die_offset, on
8485 each time through. Uses the current value of next_die_offset to update the
8486 die_offset field in each DIE. */
8487
8488 static void
8489 calc_die_sizes (dw_die_ref die)
8490 {
8491 dw_die_ref c;
8492
8493 gcc_assert (die->die_offset == 0
8494 || (unsigned long int) die->die_offset == next_die_offset);
8495 die->die_offset = next_die_offset;
8496 next_die_offset += size_of_die (die);
8497
8498 FOR_EACH_CHILD (die, c, calc_die_sizes (c));
8499
8500 if (die->die_child != NULL)
8501 /* Count the null byte used to terminate sibling lists. */
8502 next_die_offset += 1;
8503 }
8504
8505 /* Size just the base type children at the start of the CU.
8506 This is needed because build_abbrev needs to size locs
8507 and sizing of type based stack ops needs to know die_offset
8508 values for the base types. */
8509
8510 static void
8511 calc_base_type_die_sizes (void)
8512 {
8513 unsigned long die_offset = DWARF_COMPILE_UNIT_HEADER_SIZE;
8514 unsigned int i;
8515 dw_die_ref base_type;
8516 #if ENABLE_ASSERT_CHECKING
8517 dw_die_ref prev = comp_unit_die ()->die_child;
8518 #endif
8519
8520 die_offset += size_of_die (comp_unit_die ());
8521 for (i = 0; base_types.iterate (i, &base_type); i++)
8522 {
8523 #if ENABLE_ASSERT_CHECKING
8524 gcc_assert (base_type->die_offset == 0
8525 && prev->die_sib == base_type
8526 && base_type->die_child == NULL
8527 && base_type->die_abbrev);
8528 prev = base_type;
8529 #endif
8530 base_type->die_offset = die_offset;
8531 die_offset += size_of_die (base_type);
8532 }
8533 }
8534
8535 /* Set the marks for a die and its children. We do this so
8536 that we know whether or not a reference needs to use FORM_ref_addr; only
8537 DIEs in the same CU will be marked. We used to clear out the offset
8538 and use that as the flag, but ran into ordering problems. */
8539
8540 static void
8541 mark_dies (dw_die_ref die)
8542 {
8543 dw_die_ref c;
8544
8545 gcc_assert (!die->die_mark);
8546
8547 die->die_mark = 1;
8548 FOR_EACH_CHILD (die, c, mark_dies (c));
8549 }
8550
8551 /* Clear the marks for a die and its children. */
8552
8553 static void
8554 unmark_dies (dw_die_ref die)
8555 {
8556 dw_die_ref c;
8557
8558 if (! use_debug_types)
8559 gcc_assert (die->die_mark);
8560
8561 die->die_mark = 0;
8562 FOR_EACH_CHILD (die, c, unmark_dies (c));
8563 }
8564
8565 /* Clear the marks for a die, its children and referred dies. */
8566
8567 static void
8568 unmark_all_dies (dw_die_ref die)
8569 {
8570 dw_die_ref c;
8571 dw_attr_node *a;
8572 unsigned ix;
8573
8574 if (!die->die_mark)
8575 return;
8576 die->die_mark = 0;
8577
8578 FOR_EACH_CHILD (die, c, unmark_all_dies (c));
8579
8580 FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
8581 if (AT_class (a) == dw_val_class_die_ref)
8582 unmark_all_dies (AT_ref (a));
8583 }
8584
8585 /* Calculate if the entry should appear in the final output file. It may be
8586 from a pruned a type. */
8587
8588 static bool
8589 include_pubname_in_output (vec<pubname_entry, va_gc> *table, pubname_entry *p)
8590 {
8591 /* By limiting gnu pubnames to definitions only, gold can generate a
8592 gdb index without entries for declarations, which don't include
8593 enough information to be useful. */
8594 if (debug_generate_pub_sections == 2 && is_declaration_die (p->die))
8595 return false;
8596
8597 if (table == pubname_table)
8598 {
8599 /* Enumerator names are part of the pubname table, but the
8600 parent DW_TAG_enumeration_type die may have been pruned.
8601 Don't output them if that is the case. */
8602 if (p->die->die_tag == DW_TAG_enumerator &&
8603 (p->die->die_parent == NULL
8604 || !p->die->die_parent->die_perennial_p))
8605 return false;
8606
8607 /* Everything else in the pubname table is included. */
8608 return true;
8609 }
8610
8611 /* The pubtypes table shouldn't include types that have been
8612 pruned. */
8613 return (p->die->die_offset != 0
8614 || !flag_eliminate_unused_debug_types);
8615 }
8616
8617 /* Return the size of the .debug_pubnames or .debug_pubtypes table
8618 generated for the compilation unit. */
8619
8620 static unsigned long
8621 size_of_pubnames (vec<pubname_entry, va_gc> *names)
8622 {
8623 unsigned long size;
8624 unsigned i;
8625 pubname_entry *p;
8626 int space_for_flags = (debug_generate_pub_sections == 2) ? 1 : 0;
8627
8628 size = DWARF_PUBNAMES_HEADER_SIZE;
8629 FOR_EACH_VEC_ELT (*names, i, p)
8630 if (include_pubname_in_output (names, p))
8631 size += strlen (p->name) + DWARF_OFFSET_SIZE + 1 + space_for_flags;
8632
8633 size += DWARF_OFFSET_SIZE;
8634 return size;
8635 }
8636
8637 /* Return the size of the information in the .debug_aranges section. */
8638
8639 static unsigned long
8640 size_of_aranges (void)
8641 {
8642 unsigned long size;
8643
8644 size = DWARF_ARANGES_HEADER_SIZE;
8645
8646 /* Count the address/length pair for this compilation unit. */
8647 if (text_section_used)
8648 size += 2 * DWARF2_ADDR_SIZE;
8649 if (cold_text_section_used)
8650 size += 2 * DWARF2_ADDR_SIZE;
8651 if (have_multiple_function_sections)
8652 {
8653 unsigned fde_idx;
8654 dw_fde_ref fde;
8655
8656 FOR_EACH_VEC_ELT (*fde_vec, fde_idx, fde)
8657 {
8658 if (DECL_IGNORED_P (fde->decl))
8659 continue;
8660 if (!fde->in_std_section)
8661 size += 2 * DWARF2_ADDR_SIZE;
8662 if (fde->dw_fde_second_begin && !fde->second_in_std_section)
8663 size += 2 * DWARF2_ADDR_SIZE;
8664 }
8665 }
8666
8667 /* Count the two zero words used to terminated the address range table. */
8668 size += 2 * DWARF2_ADDR_SIZE;
8669 return size;
8670 }
8671 \f
8672 /* Select the encoding of an attribute value. */
8673
8674 static enum dwarf_form
8675 value_format (dw_attr_node *a)
8676 {
8677 switch (AT_class (a))
8678 {
8679 case dw_val_class_addr:
8680 /* Only very few attributes allow DW_FORM_addr. */
8681 switch (a->dw_attr)
8682 {
8683 case DW_AT_low_pc:
8684 case DW_AT_high_pc:
8685 case DW_AT_entry_pc:
8686 case DW_AT_trampoline:
8687 return (AT_index (a) == NOT_INDEXED
8688 ? DW_FORM_addr : DW_FORM_GNU_addr_index);
8689 default:
8690 break;
8691 }
8692 switch (DWARF2_ADDR_SIZE)
8693 {
8694 case 1:
8695 return DW_FORM_data1;
8696 case 2:
8697 return DW_FORM_data2;
8698 case 4:
8699 return DW_FORM_data4;
8700 case 8:
8701 return DW_FORM_data8;
8702 default:
8703 gcc_unreachable ();
8704 }
8705 case dw_val_class_range_list:
8706 case dw_val_class_loc_list:
8707 if (dwarf_version >= 4)
8708 return DW_FORM_sec_offset;
8709 /* FALLTHRU */
8710 case dw_val_class_vms_delta:
8711 case dw_val_class_offset:
8712 switch (DWARF_OFFSET_SIZE)
8713 {
8714 case 4:
8715 return DW_FORM_data4;
8716 case 8:
8717 return DW_FORM_data8;
8718 default:
8719 gcc_unreachable ();
8720 }
8721 case dw_val_class_loc:
8722 if (dwarf_version >= 4)
8723 return DW_FORM_exprloc;
8724 switch (constant_size (size_of_locs (AT_loc (a))))
8725 {
8726 case 1:
8727 return DW_FORM_block1;
8728 case 2:
8729 return DW_FORM_block2;
8730 case 4:
8731 return DW_FORM_block4;
8732 default:
8733 gcc_unreachable ();
8734 }
8735 case dw_val_class_const:
8736 return DW_FORM_sdata;
8737 case dw_val_class_unsigned_const:
8738 switch (constant_size (AT_unsigned (a)))
8739 {
8740 case 1:
8741 return DW_FORM_data1;
8742 case 2:
8743 return DW_FORM_data2;
8744 case 4:
8745 /* In DWARF3 DW_AT_data_member_location with
8746 DW_FORM_data4 or DW_FORM_data8 is a loclistptr, not
8747 constant, so we need to use DW_FORM_udata if we need
8748 a large constant. */
8749 if (dwarf_version == 3 && a->dw_attr == DW_AT_data_member_location)
8750 return DW_FORM_udata;
8751 return DW_FORM_data4;
8752 case 8:
8753 if (dwarf_version == 3 && a->dw_attr == DW_AT_data_member_location)
8754 return DW_FORM_udata;
8755 return DW_FORM_data8;
8756 default:
8757 gcc_unreachable ();
8758 }
8759 case dw_val_class_const_double:
8760 switch (HOST_BITS_PER_WIDE_INT)
8761 {
8762 case 8:
8763 return DW_FORM_data2;
8764 case 16:
8765 return DW_FORM_data4;
8766 case 32:
8767 return DW_FORM_data8;
8768 case 64:
8769 default:
8770 return DW_FORM_block1;
8771 }
8772 case dw_val_class_wide_int:
8773 switch (get_full_len (*a->dw_attr_val.v.val_wide) * HOST_BITS_PER_WIDE_INT)
8774 {
8775 case 8:
8776 return DW_FORM_data1;
8777 case 16:
8778 return DW_FORM_data2;
8779 case 32:
8780 return DW_FORM_data4;
8781 case 64:
8782 return DW_FORM_data8;
8783 default:
8784 return DW_FORM_block1;
8785 }
8786 case dw_val_class_vec:
8787 switch (constant_size (a->dw_attr_val.v.val_vec.length
8788 * a->dw_attr_val.v.val_vec.elt_size))
8789 {
8790 case 1:
8791 return DW_FORM_block1;
8792 case 2:
8793 return DW_FORM_block2;
8794 case 4:
8795 return DW_FORM_block4;
8796 default:
8797 gcc_unreachable ();
8798 }
8799 case dw_val_class_flag:
8800 if (dwarf_version >= 4)
8801 {
8802 /* Currently all add_AT_flag calls pass in 1 as last argument,
8803 so DW_FORM_flag_present can be used. If that ever changes,
8804 we'll need to use DW_FORM_flag and have some optimization
8805 in build_abbrev_table that will change those to
8806 DW_FORM_flag_present if it is set to 1 in all DIEs using
8807 the same abbrev entry. */
8808 gcc_assert (a->dw_attr_val.v.val_flag == 1);
8809 return DW_FORM_flag_present;
8810 }
8811 return DW_FORM_flag;
8812 case dw_val_class_die_ref:
8813 if (AT_ref_external (a))
8814 return use_debug_types ? DW_FORM_ref_sig8 : DW_FORM_ref_addr;
8815 else
8816 return DW_FORM_ref;
8817 case dw_val_class_fde_ref:
8818 return DW_FORM_data;
8819 case dw_val_class_lbl_id:
8820 return (AT_index (a) == NOT_INDEXED
8821 ? DW_FORM_addr : DW_FORM_GNU_addr_index);
8822 case dw_val_class_lineptr:
8823 case dw_val_class_macptr:
8824 return dwarf_version >= 4 ? DW_FORM_sec_offset : DW_FORM_data;
8825 case dw_val_class_str:
8826 return AT_string_form (a);
8827 case dw_val_class_file:
8828 switch (constant_size (maybe_emit_file (a->dw_attr_val.v.val_file)))
8829 {
8830 case 1:
8831 return DW_FORM_data1;
8832 case 2:
8833 return DW_FORM_data2;
8834 case 4:
8835 return DW_FORM_data4;
8836 default:
8837 gcc_unreachable ();
8838 }
8839
8840 case dw_val_class_data8:
8841 return DW_FORM_data8;
8842
8843 case dw_val_class_high_pc:
8844 switch (DWARF2_ADDR_SIZE)
8845 {
8846 case 1:
8847 return DW_FORM_data1;
8848 case 2:
8849 return DW_FORM_data2;
8850 case 4:
8851 return DW_FORM_data4;
8852 case 8:
8853 return DW_FORM_data8;
8854 default:
8855 gcc_unreachable ();
8856 }
8857
8858 case dw_val_class_discr_value:
8859 return (a->dw_attr_val.v.val_discr_value.pos
8860 ? DW_FORM_udata
8861 : DW_FORM_sdata);
8862 case dw_val_class_discr_list:
8863 switch (constant_size (size_of_discr_list (AT_discr_list (a))))
8864 {
8865 case 1:
8866 return DW_FORM_block1;
8867 case 2:
8868 return DW_FORM_block2;
8869 case 4:
8870 return DW_FORM_block4;
8871 default:
8872 gcc_unreachable ();
8873 }
8874
8875 default:
8876 gcc_unreachable ();
8877 }
8878 }
8879
8880 /* Output the encoding of an attribute value. */
8881
8882 static void
8883 output_value_format (dw_attr_node *a)
8884 {
8885 enum dwarf_form form = value_format (a);
8886
8887 dw2_asm_output_data_uleb128 (form, "(%s)", dwarf_form_name (form));
8888 }
8889
8890 /* Given a die and id, produce the appropriate abbreviations. */
8891
8892 static void
8893 output_die_abbrevs (unsigned long abbrev_id, dw_die_ref abbrev)
8894 {
8895 unsigned ix;
8896 dw_attr_node *a_attr;
8897
8898 dw2_asm_output_data_uleb128 (abbrev_id, "(abbrev code)");
8899 dw2_asm_output_data_uleb128 (abbrev->die_tag, "(TAG: %s)",
8900 dwarf_tag_name (abbrev->die_tag));
8901
8902 if (abbrev->die_child != NULL)
8903 dw2_asm_output_data (1, DW_children_yes, "DW_children_yes");
8904 else
8905 dw2_asm_output_data (1, DW_children_no, "DW_children_no");
8906
8907 for (ix = 0; vec_safe_iterate (abbrev->die_attr, ix, &a_attr); ix++)
8908 {
8909 dw2_asm_output_data_uleb128 (a_attr->dw_attr, "(%s)",
8910 dwarf_attr_name (a_attr->dw_attr));
8911 output_value_format (a_attr);
8912 }
8913
8914 dw2_asm_output_data (1, 0, NULL);
8915 dw2_asm_output_data (1, 0, NULL);
8916 }
8917
8918
8919 /* Output the .debug_abbrev section which defines the DIE abbreviation
8920 table. */
8921
8922 static void
8923 output_abbrev_section (void)
8924 {
8925 unsigned long abbrev_id;
8926
8927 for (abbrev_id = 1; abbrev_id < abbrev_die_table_in_use; ++abbrev_id)
8928 output_die_abbrevs (abbrev_id, abbrev_die_table[abbrev_id]);
8929
8930 /* Terminate the table. */
8931 dw2_asm_output_data (1, 0, NULL);
8932 }
8933
8934 /* Output a symbol we can use to refer to this DIE from another CU. */
8935
8936 static inline void
8937 output_die_symbol (dw_die_ref die)
8938 {
8939 const char *sym = die->die_id.die_symbol;
8940
8941 gcc_assert (!die->comdat_type_p);
8942
8943 if (sym == 0)
8944 return;
8945
8946 if (strncmp (sym, DIE_LABEL_PREFIX, sizeof (DIE_LABEL_PREFIX) - 1) == 0)
8947 /* We make these global, not weak; if the target doesn't support
8948 .linkonce, it doesn't support combining the sections, so debugging
8949 will break. */
8950 targetm.asm_out.globalize_label (asm_out_file, sym);
8951
8952 ASM_OUTPUT_LABEL (asm_out_file, sym);
8953 }
8954
8955 /* Return a new location list, given the begin and end range, and the
8956 expression. */
8957
8958 static inline dw_loc_list_ref
8959 new_loc_list (dw_loc_descr_ref expr, const char *begin, const char *end,
8960 const char *section)
8961 {
8962 dw_loc_list_ref retlist = ggc_cleared_alloc<dw_loc_list_node> ();
8963
8964 retlist->begin = begin;
8965 retlist->begin_entry = NULL;
8966 retlist->end = end;
8967 retlist->expr = expr;
8968 retlist->section = section;
8969
8970 return retlist;
8971 }
8972
8973 /* Generate a new internal symbol for this location list node, if it
8974 hasn't got one yet. */
8975
8976 static inline void
8977 gen_llsym (dw_loc_list_ref list)
8978 {
8979 gcc_assert (!list->ll_symbol);
8980 list->ll_symbol = gen_internal_sym ("LLST");
8981 }
8982
8983 /* Output the location list given to us. */
8984
8985 static void
8986 output_loc_list (dw_loc_list_ref list_head)
8987 {
8988 dw_loc_list_ref curr = list_head;
8989
8990 if (list_head->emitted)
8991 return;
8992 list_head->emitted = true;
8993
8994 ASM_OUTPUT_LABEL (asm_out_file, list_head->ll_symbol);
8995
8996 /* Walk the location list, and output each range + expression. */
8997 for (curr = list_head; curr != NULL; curr = curr->dw_loc_next)
8998 {
8999 unsigned long size;
9000 /* Don't output an entry that starts and ends at the same address. */
9001 if (strcmp (curr->begin, curr->end) == 0 && !curr->force)
9002 continue;
9003 size = size_of_locs (curr->expr);
9004 /* If the expression is too large, drop it on the floor. We could
9005 perhaps put it into DW_TAG_dwarf_procedure and refer to that
9006 in the expression, but >= 64KB expressions for a single value
9007 in a single range are unlikely very useful. */
9008 if (size > 0xffff)
9009 continue;
9010 if (dwarf_split_debug_info)
9011 {
9012 dw2_asm_output_data (1, DW_LLE_GNU_start_length_entry,
9013 "Location list start/length entry (%s)",
9014 list_head->ll_symbol);
9015 dw2_asm_output_data_uleb128 (curr->begin_entry->index,
9016 "Location list range start index (%s)",
9017 curr->begin);
9018 /* The length field is 4 bytes. If we ever need to support
9019 an 8-byte length, we can add a new DW_LLE code or fall back
9020 to DW_LLE_GNU_start_end_entry. */
9021 dw2_asm_output_delta (4, curr->end, curr->begin,
9022 "Location list range length (%s)",
9023 list_head->ll_symbol);
9024 }
9025 else if (!have_multiple_function_sections)
9026 {
9027 dw2_asm_output_delta (DWARF2_ADDR_SIZE, curr->begin, curr->section,
9028 "Location list begin address (%s)",
9029 list_head->ll_symbol);
9030 dw2_asm_output_delta (DWARF2_ADDR_SIZE, curr->end, curr->section,
9031 "Location list end address (%s)",
9032 list_head->ll_symbol);
9033 }
9034 else
9035 {
9036 dw2_asm_output_addr (DWARF2_ADDR_SIZE, curr->begin,
9037 "Location list begin address (%s)",
9038 list_head->ll_symbol);
9039 dw2_asm_output_addr (DWARF2_ADDR_SIZE, curr->end,
9040 "Location list end address (%s)",
9041 list_head->ll_symbol);
9042 }
9043
9044 /* Output the block length for this list of location operations. */
9045 gcc_assert (size <= 0xffff);
9046 dw2_asm_output_data (2, size, "%s", "Location expression size");
9047
9048 output_loc_sequence (curr->expr, -1);
9049 }
9050
9051 if (dwarf_split_debug_info)
9052 dw2_asm_output_data (1, DW_LLE_GNU_end_of_list_entry,
9053 "Location list terminator (%s)",
9054 list_head->ll_symbol);
9055 else
9056 {
9057 dw2_asm_output_data (DWARF2_ADDR_SIZE, 0,
9058 "Location list terminator begin (%s)",
9059 list_head->ll_symbol);
9060 dw2_asm_output_data (DWARF2_ADDR_SIZE, 0,
9061 "Location list terminator end (%s)",
9062 list_head->ll_symbol);
9063 }
9064 }
9065
9066 /* Output a range_list offset into the debug_range section. Emit a
9067 relocated reference if val_entry is NULL, otherwise, emit an
9068 indirect reference. */
9069
9070 static void
9071 output_range_list_offset (dw_attr_node *a)
9072 {
9073 const char *name = dwarf_attr_name (a->dw_attr);
9074
9075 if (a->dw_attr_val.val_entry == RELOCATED_OFFSET)
9076 {
9077 char *p = strchr (ranges_section_label, '\0');
9078 sprintf (p, "+" HOST_WIDE_INT_PRINT_HEX, a->dw_attr_val.v.val_offset);
9079 dw2_asm_output_offset (DWARF_OFFSET_SIZE, ranges_section_label,
9080 debug_ranges_section, "%s", name);
9081 *p = '\0';
9082 }
9083 else
9084 dw2_asm_output_data (DWARF_OFFSET_SIZE, a->dw_attr_val.v.val_offset,
9085 "%s (offset from %s)", name, ranges_section_label);
9086 }
9087
9088 /* Output the offset into the debug_loc section. */
9089
9090 static void
9091 output_loc_list_offset (dw_attr_node *a)
9092 {
9093 char *sym = AT_loc_list (a)->ll_symbol;
9094
9095 gcc_assert (sym);
9096 if (dwarf_split_debug_info)
9097 dw2_asm_output_delta (DWARF_OFFSET_SIZE, sym, loc_section_label,
9098 "%s", dwarf_attr_name (a->dw_attr));
9099 else
9100 dw2_asm_output_offset (DWARF_OFFSET_SIZE, sym, debug_loc_section,
9101 "%s", dwarf_attr_name (a->dw_attr));
9102 }
9103
9104 /* Output an attribute's index or value appropriately. */
9105
9106 static void
9107 output_attr_index_or_value (dw_attr_node *a)
9108 {
9109 const char *name = dwarf_attr_name (a->dw_attr);
9110
9111 if (dwarf_split_debug_info && AT_index (a) != NOT_INDEXED)
9112 {
9113 dw2_asm_output_data_uleb128 (AT_index (a), "%s", name);
9114 return;
9115 }
9116 switch (AT_class (a))
9117 {
9118 case dw_val_class_addr:
9119 dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE, AT_addr (a), "%s", name);
9120 break;
9121 case dw_val_class_high_pc:
9122 case dw_val_class_lbl_id:
9123 dw2_asm_output_addr (DWARF2_ADDR_SIZE, AT_lbl (a), "%s", name);
9124 break;
9125 case dw_val_class_loc_list:
9126 output_loc_list_offset (a);
9127 break;
9128 default:
9129 gcc_unreachable ();
9130 }
9131 }
9132
9133 /* Output a type signature. */
9134
9135 static inline void
9136 output_signature (const char *sig, const char *name)
9137 {
9138 int i;
9139
9140 for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++)
9141 dw2_asm_output_data (1, sig[i], i == 0 ? "%s" : NULL, name);
9142 }
9143
9144 /* Output a discriminant value. */
9145
9146 static inline void
9147 output_discr_value (dw_discr_value *discr_value, const char *name)
9148 {
9149 if (discr_value->pos)
9150 dw2_asm_output_data_uleb128 (discr_value->v.uval, "%s", name);
9151 else
9152 dw2_asm_output_data_sleb128 (discr_value->v.sval, "%s", name);
9153 }
9154
9155 /* Output the DIE and its attributes. Called recursively to generate
9156 the definitions of each child DIE. */
9157
9158 static void
9159 output_die (dw_die_ref die)
9160 {
9161 dw_attr_node *a;
9162 dw_die_ref c;
9163 unsigned long size;
9164 unsigned ix;
9165
9166 /* If someone in another CU might refer to us, set up a symbol for
9167 them to point to. */
9168 if (! die->comdat_type_p && die->die_id.die_symbol)
9169 output_die_symbol (die);
9170
9171 dw2_asm_output_data_uleb128 (die->die_abbrev, "(DIE (%#lx) %s)",
9172 (unsigned long)die->die_offset,
9173 dwarf_tag_name (die->die_tag));
9174
9175 FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
9176 {
9177 const char *name = dwarf_attr_name (a->dw_attr);
9178
9179 switch (AT_class (a))
9180 {
9181 case dw_val_class_addr:
9182 output_attr_index_or_value (a);
9183 break;
9184
9185 case dw_val_class_offset:
9186 dw2_asm_output_data (DWARF_OFFSET_SIZE, a->dw_attr_val.v.val_offset,
9187 "%s", name);
9188 break;
9189
9190 case dw_val_class_range_list:
9191 output_range_list_offset (a);
9192 break;
9193
9194 case dw_val_class_loc:
9195 size = size_of_locs (AT_loc (a));
9196
9197 /* Output the block length for this list of location operations. */
9198 if (dwarf_version >= 4)
9199 dw2_asm_output_data_uleb128 (size, "%s", name);
9200 else
9201 dw2_asm_output_data (constant_size (size), size, "%s", name);
9202
9203 output_loc_sequence (AT_loc (a), -1);
9204 break;
9205
9206 case dw_val_class_const:
9207 /* ??? It would be slightly more efficient to use a scheme like is
9208 used for unsigned constants below, but gdb 4.x does not sign
9209 extend. Gdb 5.x does sign extend. */
9210 dw2_asm_output_data_sleb128 (AT_int (a), "%s", name);
9211 break;
9212
9213 case dw_val_class_unsigned_const:
9214 {
9215 int csize = constant_size (AT_unsigned (a));
9216 if (dwarf_version == 3
9217 && a->dw_attr == DW_AT_data_member_location
9218 && csize >= 4)
9219 dw2_asm_output_data_uleb128 (AT_unsigned (a), "%s", name);
9220 else
9221 dw2_asm_output_data (csize, AT_unsigned (a), "%s", name);
9222 }
9223 break;
9224
9225 case dw_val_class_const_double:
9226 {
9227 unsigned HOST_WIDE_INT first, second;
9228
9229 if (HOST_BITS_PER_WIDE_INT >= 64)
9230 dw2_asm_output_data (1,
9231 HOST_BITS_PER_DOUBLE_INT
9232 / HOST_BITS_PER_CHAR,
9233 NULL);
9234
9235 if (WORDS_BIG_ENDIAN)
9236 {
9237 first = a->dw_attr_val.v.val_double.high;
9238 second = a->dw_attr_val.v.val_double.low;
9239 }
9240 else
9241 {
9242 first = a->dw_attr_val.v.val_double.low;
9243 second = a->dw_attr_val.v.val_double.high;
9244 }
9245
9246 dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR,
9247 first, "%s", name);
9248 dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR,
9249 second, NULL);
9250 }
9251 break;
9252
9253 case dw_val_class_wide_int:
9254 {
9255 int i;
9256 int len = get_full_len (*a->dw_attr_val.v.val_wide);
9257 int l = HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR;
9258 if (len * HOST_BITS_PER_WIDE_INT > 64)
9259 dw2_asm_output_data (1, get_full_len (*a->dw_attr_val.v.val_wide) * l,
9260 NULL);
9261
9262 if (WORDS_BIG_ENDIAN)
9263 for (i = len - 1; i >= 0; --i)
9264 {
9265 dw2_asm_output_data (l, a->dw_attr_val.v.val_wide->elt (i),
9266 "%s", name);
9267 name = "";
9268 }
9269 else
9270 for (i = 0; i < len; ++i)
9271 {
9272 dw2_asm_output_data (l, a->dw_attr_val.v.val_wide->elt (i),
9273 "%s", name);
9274 name = "";
9275 }
9276 }
9277 break;
9278
9279 case dw_val_class_vec:
9280 {
9281 unsigned int elt_size = a->dw_attr_val.v.val_vec.elt_size;
9282 unsigned int len = a->dw_attr_val.v.val_vec.length;
9283 unsigned int i;
9284 unsigned char *p;
9285
9286 dw2_asm_output_data (constant_size (len * elt_size),
9287 len * elt_size, "%s", name);
9288 if (elt_size > sizeof (HOST_WIDE_INT))
9289 {
9290 elt_size /= 2;
9291 len *= 2;
9292 }
9293 for (i = 0, p = a->dw_attr_val.v.val_vec.array;
9294 i < len;
9295 i++, p += elt_size)
9296 dw2_asm_output_data (elt_size, extract_int (p, elt_size),
9297 "fp or vector constant word %u", i);
9298 break;
9299 }
9300
9301 case dw_val_class_flag:
9302 if (dwarf_version >= 4)
9303 {
9304 /* Currently all add_AT_flag calls pass in 1 as last argument,
9305 so DW_FORM_flag_present can be used. If that ever changes,
9306 we'll need to use DW_FORM_flag and have some optimization
9307 in build_abbrev_table that will change those to
9308 DW_FORM_flag_present if it is set to 1 in all DIEs using
9309 the same abbrev entry. */
9310 gcc_assert (AT_flag (a) == 1);
9311 if (flag_debug_asm)
9312 fprintf (asm_out_file, "\t\t\t%s %s\n",
9313 ASM_COMMENT_START, name);
9314 break;
9315 }
9316 dw2_asm_output_data (1, AT_flag (a), "%s", name);
9317 break;
9318
9319 case dw_val_class_loc_list:
9320 output_attr_index_or_value (a);
9321 break;
9322
9323 case dw_val_class_die_ref:
9324 if (AT_ref_external (a))
9325 {
9326 if (AT_ref (a)->comdat_type_p)
9327 {
9328 comdat_type_node *type_node =
9329 AT_ref (a)->die_id.die_type_node;
9330
9331 gcc_assert (type_node);
9332 output_signature (type_node->signature, name);
9333 }
9334 else
9335 {
9336 const char *sym = AT_ref (a)->die_id.die_symbol;
9337 int size;
9338
9339 gcc_assert (sym);
9340 /* In DWARF2, DW_FORM_ref_addr is sized by target address
9341 length, whereas in DWARF3 it's always sized as an
9342 offset. */
9343 if (dwarf_version == 2)
9344 size = DWARF2_ADDR_SIZE;
9345 else
9346 size = DWARF_OFFSET_SIZE;
9347 dw2_asm_output_offset (size, sym, debug_info_section, "%s",
9348 name);
9349 }
9350 }
9351 else
9352 {
9353 gcc_assert (AT_ref (a)->die_offset);
9354 dw2_asm_output_data (DWARF_OFFSET_SIZE, AT_ref (a)->die_offset,
9355 "%s", name);
9356 }
9357 break;
9358
9359 case dw_val_class_fde_ref:
9360 {
9361 char l1[20];
9362
9363 ASM_GENERATE_INTERNAL_LABEL (l1, FDE_LABEL,
9364 a->dw_attr_val.v.val_fde_index * 2);
9365 dw2_asm_output_offset (DWARF_OFFSET_SIZE, l1, debug_frame_section,
9366 "%s", name);
9367 }
9368 break;
9369
9370 case dw_val_class_vms_delta:
9371 #ifdef ASM_OUTPUT_DWARF_VMS_DELTA
9372 dw2_asm_output_vms_delta (DWARF_OFFSET_SIZE,
9373 AT_vms_delta2 (a), AT_vms_delta1 (a),
9374 "%s", name);
9375 #else
9376 dw2_asm_output_delta (DWARF_OFFSET_SIZE,
9377 AT_vms_delta2 (a), AT_vms_delta1 (a),
9378 "%s", name);
9379 #endif
9380 break;
9381
9382 case dw_val_class_lbl_id:
9383 output_attr_index_or_value (a);
9384 break;
9385
9386 case dw_val_class_lineptr:
9387 dw2_asm_output_offset (DWARF_OFFSET_SIZE, AT_lbl (a),
9388 debug_line_section, "%s", name);
9389 break;
9390
9391 case dw_val_class_macptr:
9392 dw2_asm_output_offset (DWARF_OFFSET_SIZE, AT_lbl (a),
9393 debug_macinfo_section, "%s", name);
9394 break;
9395
9396 case dw_val_class_str:
9397 if (a->dw_attr_val.v.val_str->form == DW_FORM_strp)
9398 dw2_asm_output_offset (DWARF_OFFSET_SIZE,
9399 a->dw_attr_val.v.val_str->label,
9400 debug_str_section,
9401 "%s: \"%s\"", name, AT_string (a));
9402 else if (a->dw_attr_val.v.val_str->form == DW_FORM_GNU_str_index)
9403 dw2_asm_output_data_uleb128 (AT_index (a),
9404 "%s: \"%s\"", name, AT_string (a));
9405 else
9406 dw2_asm_output_nstring (AT_string (a), -1, "%s", name);
9407 break;
9408
9409 case dw_val_class_file:
9410 {
9411 int f = maybe_emit_file (a->dw_attr_val.v.val_file);
9412
9413 dw2_asm_output_data (constant_size (f), f, "%s (%s)", name,
9414 a->dw_attr_val.v.val_file->filename);
9415 break;
9416 }
9417
9418 case dw_val_class_data8:
9419 {
9420 int i;
9421
9422 for (i = 0; i < 8; i++)
9423 dw2_asm_output_data (1, a->dw_attr_val.v.val_data8[i],
9424 i == 0 ? "%s" : NULL, name);
9425 break;
9426 }
9427
9428 case dw_val_class_high_pc:
9429 dw2_asm_output_delta (DWARF2_ADDR_SIZE, AT_lbl (a),
9430 get_AT_low_pc (die), "DW_AT_high_pc");
9431 break;
9432
9433 case dw_val_class_discr_value:
9434 output_discr_value (&a->dw_attr_val.v.val_discr_value, name);
9435 break;
9436
9437 case dw_val_class_discr_list:
9438 {
9439 dw_discr_list_ref list = AT_discr_list (a);
9440 const int size = size_of_discr_list (list);
9441
9442 /* This is a block, so output its length first. */
9443 dw2_asm_output_data (constant_size (size), size,
9444 "%s: block size", name);
9445
9446 for (; list != NULL; list = list->dw_discr_next)
9447 {
9448 /* One byte for the discriminant value descriptor, and then as
9449 many LEB128 numbers as required. */
9450 if (list->dw_discr_range)
9451 dw2_asm_output_data (1, DW_DSC_range,
9452 "%s: DW_DSC_range", name);
9453 else
9454 dw2_asm_output_data (1, DW_DSC_label,
9455 "%s: DW_DSC_label", name);
9456
9457 output_discr_value (&list->dw_discr_lower_bound, name);
9458 if (list->dw_discr_range)
9459 output_discr_value (&list->dw_discr_upper_bound, name);
9460 }
9461 break;
9462 }
9463
9464 default:
9465 gcc_unreachable ();
9466 }
9467 }
9468
9469 FOR_EACH_CHILD (die, c, output_die (c));
9470
9471 /* Add null byte to terminate sibling list. */
9472 if (die->die_child != NULL)
9473 dw2_asm_output_data (1, 0, "end of children of DIE %#lx",
9474 (unsigned long) die->die_offset);
9475 }
9476
9477 /* Output the compilation unit that appears at the beginning of the
9478 .debug_info section, and precedes the DIE descriptions. */
9479
9480 static void
9481 output_compilation_unit_header (void)
9482 {
9483 /* We don't support actual DWARFv5 units yet, we just use some
9484 DWARFv5 draft DIE tags in DWARFv4 format. */
9485 int ver = dwarf_version < 5 ? dwarf_version : 4;
9486
9487 if (!XCOFF_DEBUGGING_INFO)
9488 {
9489 if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
9490 dw2_asm_output_data (4, 0xffffffff,
9491 "Initial length escape value indicating 64-bit DWARF extension");
9492 dw2_asm_output_data (DWARF_OFFSET_SIZE,
9493 next_die_offset - DWARF_INITIAL_LENGTH_SIZE,
9494 "Length of Compilation Unit Info");
9495 }
9496
9497 dw2_asm_output_data (2, ver, "DWARF version number");
9498 dw2_asm_output_offset (DWARF_OFFSET_SIZE, abbrev_section_label,
9499 debug_abbrev_section,
9500 "Offset Into Abbrev. Section");
9501 dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Pointer Size (in bytes)");
9502 }
9503
9504 /* Output the compilation unit DIE and its children. */
9505
9506 static void
9507 output_comp_unit (dw_die_ref die, int output_if_empty)
9508 {
9509 const char *secname, *oldsym;
9510 char *tmp;
9511
9512 /* Unless we are outputting main CU, we may throw away empty ones. */
9513 if (!output_if_empty && die->die_child == NULL)
9514 return;
9515
9516 /* Even if there are no children of this DIE, we must output the information
9517 about the compilation unit. Otherwise, on an empty translation unit, we
9518 will generate a present, but empty, .debug_info section. IRIX 6.5 `nm'
9519 will then complain when examining the file. First mark all the DIEs in
9520 this CU so we know which get local refs. */
9521 mark_dies (die);
9522
9523 external_ref_hash_type *extern_map = optimize_external_refs (die);
9524
9525 build_abbrev_table (die, extern_map);
9526
9527 delete extern_map;
9528
9529 /* Initialize the beginning DIE offset - and calculate sizes/offsets. */
9530 next_die_offset = DWARF_COMPILE_UNIT_HEADER_SIZE;
9531 calc_die_sizes (die);
9532
9533 oldsym = die->die_id.die_symbol;
9534 if (oldsym)
9535 {
9536 tmp = XALLOCAVEC (char, strlen (oldsym) + 24);
9537
9538 sprintf (tmp, ".gnu.linkonce.wi.%s", oldsym);
9539 secname = tmp;
9540 die->die_id.die_symbol = NULL;
9541 switch_to_section (get_section (secname, SECTION_DEBUG, NULL));
9542 }
9543 else
9544 {
9545 switch_to_section (debug_info_section);
9546 ASM_OUTPUT_LABEL (asm_out_file, debug_info_section_label);
9547 info_section_emitted = true;
9548 }
9549
9550 /* Output debugging information. */
9551 output_compilation_unit_header ();
9552 output_die (die);
9553
9554 /* Leave the marks on the main CU, so we can check them in
9555 output_pubnames. */
9556 if (oldsym)
9557 {
9558 unmark_dies (die);
9559 die->die_id.die_symbol = oldsym;
9560 }
9561 }
9562
9563 /* Whether to generate the DWARF accelerator tables in .debug_pubnames
9564 and .debug_pubtypes. This is configured per-target, but can be
9565 overridden by the -gpubnames or -gno-pubnames options. */
9566
9567 static inline bool
9568 want_pubnames (void)
9569 {
9570 if (debug_info_level <= DINFO_LEVEL_TERSE)
9571 return false;
9572 if (debug_generate_pub_sections != -1)
9573 return debug_generate_pub_sections;
9574 return targetm.want_debug_pub_sections;
9575 }
9576
9577 /* Add the DW_AT_GNU_pubnames and DW_AT_GNU_pubtypes attributes. */
9578
9579 static void
9580 add_AT_pubnames (dw_die_ref die)
9581 {
9582 if (want_pubnames ())
9583 add_AT_flag (die, DW_AT_GNU_pubnames, 1);
9584 }
9585
9586 /* Add a string attribute value to a skeleton DIE. */
9587
9588 static inline void
9589 add_skeleton_AT_string (dw_die_ref die, enum dwarf_attribute attr_kind,
9590 const char *str)
9591 {
9592 dw_attr_node attr;
9593 struct indirect_string_node *node;
9594
9595 if (! skeleton_debug_str_hash)
9596 skeleton_debug_str_hash
9597 = hash_table<indirect_string_hasher>::create_ggc (10);
9598
9599 node = find_AT_string_in_table (str, skeleton_debug_str_hash);
9600 find_string_form (node);
9601 if (node->form == DW_FORM_GNU_str_index)
9602 node->form = DW_FORM_strp;
9603
9604 attr.dw_attr = attr_kind;
9605 attr.dw_attr_val.val_class = dw_val_class_str;
9606 attr.dw_attr_val.val_entry = NULL;
9607 attr.dw_attr_val.v.val_str = node;
9608 add_dwarf_attr (die, &attr);
9609 }
9610
9611 /* Helper function to generate top-level dies for skeleton debug_info and
9612 debug_types. */
9613
9614 static void
9615 add_top_level_skeleton_die_attrs (dw_die_ref die)
9616 {
9617 const char *dwo_file_name = concat (aux_base_name, ".dwo", NULL);
9618 const char *comp_dir = comp_dir_string ();
9619
9620 add_skeleton_AT_string (die, DW_AT_GNU_dwo_name, dwo_file_name);
9621 if (comp_dir != NULL)
9622 add_skeleton_AT_string (die, DW_AT_comp_dir, comp_dir);
9623 add_AT_pubnames (die);
9624 add_AT_lineptr (die, DW_AT_GNU_addr_base, debug_addr_section_label);
9625 }
9626
9627 /* Output skeleton debug sections that point to the dwo file. */
9628
9629 static void
9630 output_skeleton_debug_sections (dw_die_ref comp_unit)
9631 {
9632 /* We don't support actual DWARFv5 units yet, we just use some
9633 DWARFv5 draft DIE tags in DWARFv4 format. */
9634 int ver = dwarf_version < 5 ? dwarf_version : 4;
9635
9636 /* These attributes will be found in the full debug_info section. */
9637 remove_AT (comp_unit, DW_AT_producer);
9638 remove_AT (comp_unit, DW_AT_language);
9639
9640 switch_to_section (debug_skeleton_info_section);
9641 ASM_OUTPUT_LABEL (asm_out_file, debug_skeleton_info_section_label);
9642
9643 /* Produce the skeleton compilation-unit header. This one differs enough from
9644 a normal CU header that it's better not to call output_compilation_unit
9645 header. */
9646 if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
9647 dw2_asm_output_data (4, 0xffffffff,
9648 "Initial length escape value indicating 64-bit DWARF extension");
9649
9650 dw2_asm_output_data (DWARF_OFFSET_SIZE,
9651 DWARF_COMPILE_UNIT_HEADER_SIZE
9652 - DWARF_INITIAL_LENGTH_SIZE
9653 + size_of_die (comp_unit),
9654 "Length of Compilation Unit Info");
9655 dw2_asm_output_data (2, ver, "DWARF version number");
9656 dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_skeleton_abbrev_section_label,
9657 debug_abbrev_section,
9658 "Offset Into Abbrev. Section");
9659 dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Pointer Size (in bytes)");
9660
9661 comp_unit->die_abbrev = SKELETON_COMP_DIE_ABBREV;
9662 output_die (comp_unit);
9663
9664 /* Build the skeleton debug_abbrev section. */
9665 switch_to_section (debug_skeleton_abbrev_section);
9666 ASM_OUTPUT_LABEL (asm_out_file, debug_skeleton_abbrev_section_label);
9667
9668 output_die_abbrevs (SKELETON_COMP_DIE_ABBREV, comp_unit);
9669
9670 dw2_asm_output_data (1, 0, "end of skeleton .debug_abbrev");
9671 }
9672
9673 /* Output a comdat type unit DIE and its children. */
9674
9675 static void
9676 output_comdat_type_unit (comdat_type_node *node)
9677 {
9678 const char *secname;
9679 char *tmp;
9680 int i;
9681 #if defined (OBJECT_FORMAT_ELF)
9682 tree comdat_key;
9683 #endif
9684
9685 /* First mark all the DIEs in this CU so we know which get local refs. */
9686 mark_dies (node->root_die);
9687
9688 external_ref_hash_type *extern_map = optimize_external_refs (node->root_die);
9689
9690 build_abbrev_table (node->root_die, extern_map);
9691
9692 delete extern_map;
9693 extern_map = NULL;
9694
9695 /* Initialize the beginning DIE offset - and calculate sizes/offsets. */
9696 next_die_offset = DWARF_COMDAT_TYPE_UNIT_HEADER_SIZE;
9697 calc_die_sizes (node->root_die);
9698
9699 #if defined (OBJECT_FORMAT_ELF)
9700 if (!dwarf_split_debug_info)
9701 secname = ".debug_types";
9702 else
9703 secname = ".debug_types.dwo";
9704
9705 tmp = XALLOCAVEC (char, 4 + DWARF_TYPE_SIGNATURE_SIZE * 2);
9706 sprintf (tmp, "wt.");
9707 for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++)
9708 sprintf (tmp + 3 + i * 2, "%02x", node->signature[i] & 0xff);
9709 comdat_key = get_identifier (tmp);
9710 targetm.asm_out.named_section (secname,
9711 SECTION_DEBUG | SECTION_LINKONCE,
9712 comdat_key);
9713 #else
9714 tmp = XALLOCAVEC (char, 18 + DWARF_TYPE_SIGNATURE_SIZE * 2);
9715 sprintf (tmp, ".gnu.linkonce.wt.");
9716 for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++)
9717 sprintf (tmp + 17 + i * 2, "%02x", node->signature[i] & 0xff);
9718 secname = tmp;
9719 switch_to_section (get_section (secname, SECTION_DEBUG, NULL));
9720 #endif
9721
9722 /* Output debugging information. */
9723 output_compilation_unit_header ();
9724 output_signature (node->signature, "Type Signature");
9725 dw2_asm_output_data (DWARF_OFFSET_SIZE, node->type_die->die_offset,
9726 "Offset to Type DIE");
9727 output_die (node->root_die);
9728
9729 unmark_dies (node->root_die);
9730 }
9731
9732 /* Return the DWARF2/3 pubname associated with a decl. */
9733
9734 static const char *
9735 dwarf2_name (tree decl, int scope)
9736 {
9737 if (DECL_NAMELESS (decl))
9738 return NULL;
9739 return lang_hooks.dwarf_name (decl, scope ? 1 : 0);
9740 }
9741
9742 /* Add a new entry to .debug_pubnames if appropriate. */
9743
9744 static void
9745 add_pubname_string (const char *str, dw_die_ref die)
9746 {
9747 pubname_entry e;
9748
9749 e.die = die;
9750 e.name = xstrdup (str);
9751 vec_safe_push (pubname_table, e);
9752 }
9753
9754 static void
9755 add_pubname (tree decl, dw_die_ref die)
9756 {
9757 if (!want_pubnames ())
9758 return;
9759
9760 /* Don't add items to the table when we expect that the consumer will have
9761 just read the enclosing die. For example, if the consumer is looking at a
9762 class_member, it will either be inside the class already, or will have just
9763 looked up the class to find the member. Either way, searching the class is
9764 faster than searching the index. */
9765 if ((TREE_PUBLIC (decl) && !class_scope_p (die->die_parent))
9766 || is_cu_die (die->die_parent) || is_namespace_die (die->die_parent))
9767 {
9768 const char *name = dwarf2_name (decl, 1);
9769
9770 if (name)
9771 add_pubname_string (name, die);
9772 }
9773 }
9774
9775 /* Add an enumerator to the pubnames section. */
9776
9777 static void
9778 add_enumerator_pubname (const char *scope_name, dw_die_ref die)
9779 {
9780 pubname_entry e;
9781
9782 gcc_assert (scope_name);
9783 e.name = concat (scope_name, get_AT_string (die, DW_AT_name), NULL);
9784 e.die = die;
9785 vec_safe_push (pubname_table, e);
9786 }
9787
9788 /* Add a new entry to .debug_pubtypes if appropriate. */
9789
9790 static void
9791 add_pubtype (tree decl, dw_die_ref die)
9792 {
9793 pubname_entry e;
9794
9795 if (!want_pubnames ())
9796 return;
9797
9798 if ((TREE_PUBLIC (decl)
9799 || is_cu_die (die->die_parent) || is_namespace_die (die->die_parent))
9800 && (die->die_tag == DW_TAG_typedef || COMPLETE_TYPE_P (decl)))
9801 {
9802 tree scope = NULL;
9803 const char *scope_name = "";
9804 const char *sep = is_cxx () ? "::" : ".";
9805 const char *name;
9806
9807 scope = TYPE_P (decl) ? TYPE_CONTEXT (decl) : NULL;
9808 if (scope && TREE_CODE (scope) == NAMESPACE_DECL)
9809 {
9810 scope_name = lang_hooks.dwarf_name (scope, 1);
9811 if (scope_name != NULL && scope_name[0] != '\0')
9812 scope_name = concat (scope_name, sep, NULL);
9813 else
9814 scope_name = "";
9815 }
9816
9817 if (TYPE_P (decl))
9818 name = type_tag (decl);
9819 else
9820 name = lang_hooks.dwarf_name (decl, 1);
9821
9822 /* If we don't have a name for the type, there's no point in adding
9823 it to the table. */
9824 if (name != NULL && name[0] != '\0')
9825 {
9826 e.die = die;
9827 e.name = concat (scope_name, name, NULL);
9828 vec_safe_push (pubtype_table, e);
9829 }
9830
9831 /* Although it might be more consistent to add the pubinfo for the
9832 enumerators as their dies are created, they should only be added if the
9833 enum type meets the criteria above. So rather than re-check the parent
9834 enum type whenever an enumerator die is created, just output them all
9835 here. This isn't protected by the name conditional because anonymous
9836 enums don't have names. */
9837 if (die->die_tag == DW_TAG_enumeration_type)
9838 {
9839 dw_die_ref c;
9840
9841 FOR_EACH_CHILD (die, c, add_enumerator_pubname (scope_name, c));
9842 }
9843 }
9844 }
9845
9846 /* Output a single entry in the pubnames table. */
9847
9848 static void
9849 output_pubname (dw_offset die_offset, pubname_entry *entry)
9850 {
9851 dw_die_ref die = entry->die;
9852 int is_static = get_AT_flag (die, DW_AT_external) ? 0 : 1;
9853
9854 dw2_asm_output_data (DWARF_OFFSET_SIZE, die_offset, "DIE offset");
9855
9856 if (debug_generate_pub_sections == 2)
9857 {
9858 /* This logic follows gdb's method for determining the value of the flag
9859 byte. */
9860 uint32_t flags = GDB_INDEX_SYMBOL_KIND_NONE;
9861 switch (die->die_tag)
9862 {
9863 case DW_TAG_typedef:
9864 case DW_TAG_base_type:
9865 case DW_TAG_subrange_type:
9866 GDB_INDEX_SYMBOL_KIND_SET_VALUE(flags, GDB_INDEX_SYMBOL_KIND_TYPE);
9867 GDB_INDEX_SYMBOL_STATIC_SET_VALUE(flags, 1);
9868 break;
9869 case DW_TAG_enumerator:
9870 GDB_INDEX_SYMBOL_KIND_SET_VALUE(flags,
9871 GDB_INDEX_SYMBOL_KIND_VARIABLE);
9872 if (!is_cxx () && !is_java ())
9873 GDB_INDEX_SYMBOL_STATIC_SET_VALUE(flags, 1);
9874 break;
9875 case DW_TAG_subprogram:
9876 GDB_INDEX_SYMBOL_KIND_SET_VALUE(flags,
9877 GDB_INDEX_SYMBOL_KIND_FUNCTION);
9878 if (!is_ada ())
9879 GDB_INDEX_SYMBOL_STATIC_SET_VALUE(flags, is_static);
9880 break;
9881 case DW_TAG_constant:
9882 GDB_INDEX_SYMBOL_KIND_SET_VALUE(flags,
9883 GDB_INDEX_SYMBOL_KIND_VARIABLE);
9884 GDB_INDEX_SYMBOL_STATIC_SET_VALUE(flags, is_static);
9885 break;
9886 case DW_TAG_variable:
9887 GDB_INDEX_SYMBOL_KIND_SET_VALUE(flags,
9888 GDB_INDEX_SYMBOL_KIND_VARIABLE);
9889 GDB_INDEX_SYMBOL_STATIC_SET_VALUE(flags, is_static);
9890 break;
9891 case DW_TAG_namespace:
9892 case DW_TAG_imported_declaration:
9893 GDB_INDEX_SYMBOL_KIND_SET_VALUE(flags, GDB_INDEX_SYMBOL_KIND_TYPE);
9894 break;
9895 case DW_TAG_class_type:
9896 case DW_TAG_interface_type:
9897 case DW_TAG_structure_type:
9898 case DW_TAG_union_type:
9899 case DW_TAG_enumeration_type:
9900 GDB_INDEX_SYMBOL_KIND_SET_VALUE(flags, GDB_INDEX_SYMBOL_KIND_TYPE);
9901 if (!is_cxx () && !is_java ())
9902 GDB_INDEX_SYMBOL_STATIC_SET_VALUE(flags, 1);
9903 break;
9904 default:
9905 /* An unusual tag. Leave the flag-byte empty. */
9906 break;
9907 }
9908 dw2_asm_output_data (1, flags >> GDB_INDEX_CU_BITSIZE,
9909 "GDB-index flags");
9910 }
9911
9912 dw2_asm_output_nstring (entry->name, -1, "external name");
9913 }
9914
9915
9916 /* Output the public names table used to speed up access to externally
9917 visible names; or the public types table used to find type definitions. */
9918
9919 static void
9920 output_pubnames (vec<pubname_entry, va_gc> *names)
9921 {
9922 unsigned i;
9923 unsigned long pubnames_length = size_of_pubnames (names);
9924 pubname_entry *pub;
9925
9926 if (!XCOFF_DEBUGGING_INFO)
9927 {
9928 if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
9929 dw2_asm_output_data (4, 0xffffffff,
9930 "Initial length escape value indicating 64-bit DWARF extension");
9931 dw2_asm_output_data (DWARF_OFFSET_SIZE, pubnames_length,
9932 "Pub Info Length");
9933 }
9934
9935 /* Version number for pubnames/pubtypes is independent of dwarf version. */
9936 dw2_asm_output_data (2, 2, "DWARF Version");
9937
9938 if (dwarf_split_debug_info)
9939 dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_skeleton_info_section_label,
9940 debug_skeleton_info_section,
9941 "Offset of Compilation Unit Info");
9942 else
9943 dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_info_section_label,
9944 debug_info_section,
9945 "Offset of Compilation Unit Info");
9946 dw2_asm_output_data (DWARF_OFFSET_SIZE, next_die_offset,
9947 "Compilation Unit Length");
9948
9949 FOR_EACH_VEC_ELT (*names, i, pub)
9950 {
9951 if (include_pubname_in_output (names, pub))
9952 {
9953 dw_offset die_offset = pub->die->die_offset;
9954
9955 /* We shouldn't see pubnames for DIEs outside of the main CU. */
9956 if (names == pubname_table && pub->die->die_tag != DW_TAG_enumerator)
9957 gcc_assert (pub->die->die_mark);
9958
9959 /* If we're putting types in their own .debug_types sections,
9960 the .debug_pubtypes table will still point to the compile
9961 unit (not the type unit), so we want to use the offset of
9962 the skeleton DIE (if there is one). */
9963 if (pub->die->comdat_type_p && names == pubtype_table)
9964 {
9965 comdat_type_node *type_node = pub->die->die_id.die_type_node;
9966
9967 if (type_node != NULL)
9968 die_offset = (type_node->skeleton_die != NULL
9969 ? type_node->skeleton_die->die_offset
9970 : comp_unit_die ()->die_offset);
9971 }
9972
9973 output_pubname (die_offset, pub);
9974 }
9975 }
9976
9977 dw2_asm_output_data (DWARF_OFFSET_SIZE, 0, NULL);
9978 }
9979
9980 /* Output public names and types tables if necessary. */
9981
9982 static void
9983 output_pubtables (void)
9984 {
9985 if (!want_pubnames () || !info_section_emitted)
9986 return;
9987
9988 switch_to_section (debug_pubnames_section);
9989 output_pubnames (pubname_table);
9990 /* ??? Only defined by DWARF3, but emitted by Darwin for DWARF2.
9991 It shouldn't hurt to emit it always, since pure DWARF2 consumers
9992 simply won't look for the section. */
9993 switch_to_section (debug_pubtypes_section);
9994 output_pubnames (pubtype_table);
9995 }
9996
9997
9998 /* Output the information that goes into the .debug_aranges table.
9999 Namely, define the beginning and ending address range of the
10000 text section generated for this compilation unit. */
10001
10002 static void
10003 output_aranges (void)
10004 {
10005 unsigned i;
10006 unsigned long aranges_length = size_of_aranges ();
10007
10008 if (!XCOFF_DEBUGGING_INFO)
10009 {
10010 if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
10011 dw2_asm_output_data (4, 0xffffffff,
10012 "Initial length escape value indicating 64-bit DWARF extension");
10013 dw2_asm_output_data (DWARF_OFFSET_SIZE, aranges_length,
10014 "Length of Address Ranges Info");
10015 }
10016
10017 /* Version number for aranges is still 2, even up to DWARF5. */
10018 dw2_asm_output_data (2, 2, "DWARF Version");
10019 if (dwarf_split_debug_info)
10020 dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_skeleton_info_section_label,
10021 debug_skeleton_info_section,
10022 "Offset of Compilation Unit Info");
10023 else
10024 dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_info_section_label,
10025 debug_info_section,
10026 "Offset of Compilation Unit Info");
10027 dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Size of Address");
10028 dw2_asm_output_data (1, 0, "Size of Segment Descriptor");
10029
10030 /* We need to align to twice the pointer size here. */
10031 if (DWARF_ARANGES_PAD_SIZE)
10032 {
10033 /* Pad using a 2 byte words so that padding is correct for any
10034 pointer size. */
10035 dw2_asm_output_data (2, 0, "Pad to %d byte boundary",
10036 2 * DWARF2_ADDR_SIZE);
10037 for (i = 2; i < (unsigned) DWARF_ARANGES_PAD_SIZE; i += 2)
10038 dw2_asm_output_data (2, 0, NULL);
10039 }
10040
10041 /* It is necessary not to output these entries if the sections were
10042 not used; if the sections were not used, the length will be 0 and
10043 the address may end up as 0 if the section is discarded by ld
10044 --gc-sections, leaving an invalid (0, 0) entry that can be
10045 confused with the terminator. */
10046 if (text_section_used)
10047 {
10048 dw2_asm_output_addr (DWARF2_ADDR_SIZE, text_section_label, "Address");
10049 dw2_asm_output_delta (DWARF2_ADDR_SIZE, text_end_label,
10050 text_section_label, "Length");
10051 }
10052 if (cold_text_section_used)
10053 {
10054 dw2_asm_output_addr (DWARF2_ADDR_SIZE, cold_text_section_label,
10055 "Address");
10056 dw2_asm_output_delta (DWARF2_ADDR_SIZE, cold_end_label,
10057 cold_text_section_label, "Length");
10058 }
10059
10060 if (have_multiple_function_sections)
10061 {
10062 unsigned fde_idx;
10063 dw_fde_ref fde;
10064
10065 FOR_EACH_VEC_ELT (*fde_vec, fde_idx, fde)
10066 {
10067 if (DECL_IGNORED_P (fde->decl))
10068 continue;
10069 if (!fde->in_std_section)
10070 {
10071 dw2_asm_output_addr (DWARF2_ADDR_SIZE, fde->dw_fde_begin,
10072 "Address");
10073 dw2_asm_output_delta (DWARF2_ADDR_SIZE, fde->dw_fde_end,
10074 fde->dw_fde_begin, "Length");
10075 }
10076 if (fde->dw_fde_second_begin && !fde->second_in_std_section)
10077 {
10078 dw2_asm_output_addr (DWARF2_ADDR_SIZE, fde->dw_fde_second_begin,
10079 "Address");
10080 dw2_asm_output_delta (DWARF2_ADDR_SIZE, fde->dw_fde_second_end,
10081 fde->dw_fde_second_begin, "Length");
10082 }
10083 }
10084 }
10085
10086 /* Output the terminator words. */
10087 dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
10088 dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
10089 }
10090
10091 /* Add a new entry to .debug_ranges. Return the offset at which it
10092 was placed. */
10093
10094 static unsigned int
10095 add_ranges_num (int num)
10096 {
10097 unsigned int in_use = ranges_table_in_use;
10098
10099 if (in_use == ranges_table_allocated)
10100 {
10101 ranges_table_allocated += RANGES_TABLE_INCREMENT;
10102 ranges_table = GGC_RESIZEVEC (dw_ranges, ranges_table,
10103 ranges_table_allocated);
10104 memset (ranges_table + ranges_table_in_use, 0,
10105 RANGES_TABLE_INCREMENT * sizeof (dw_ranges));
10106 }
10107
10108 ranges_table[in_use].num = num;
10109 ranges_table_in_use = in_use + 1;
10110
10111 return in_use * 2 * DWARF2_ADDR_SIZE;
10112 }
10113
10114 /* Add a new entry to .debug_ranges corresponding to a block, or a
10115 range terminator if BLOCK is NULL. */
10116
10117 static unsigned int
10118 add_ranges (const_tree block)
10119 {
10120 return add_ranges_num (block ? BLOCK_NUMBER (block) : 0);
10121 }
10122
10123 /* Add a new entry to .debug_ranges corresponding to a pair of labels.
10124 When using dwarf_split_debug_info, address attributes in dies destined
10125 for the final executable should be direct references--setting the
10126 parameter force_direct ensures this behavior. */
10127
10128 static void
10129 add_ranges_by_labels (dw_die_ref die, const char *begin, const char *end,
10130 bool *added, bool force_direct)
10131 {
10132 unsigned int in_use = ranges_by_label_in_use;
10133 unsigned int offset;
10134
10135 if (in_use == ranges_by_label_allocated)
10136 {
10137 ranges_by_label_allocated += RANGES_TABLE_INCREMENT;
10138 ranges_by_label = GGC_RESIZEVEC (dw_ranges_by_label, ranges_by_label,
10139 ranges_by_label_allocated);
10140 memset (ranges_by_label + ranges_by_label_in_use, 0,
10141 RANGES_TABLE_INCREMENT * sizeof (dw_ranges_by_label));
10142 }
10143
10144 ranges_by_label[in_use].begin = begin;
10145 ranges_by_label[in_use].end = end;
10146 ranges_by_label_in_use = in_use + 1;
10147
10148 offset = add_ranges_num (-(int)in_use - 1);
10149 if (!*added)
10150 {
10151 add_AT_range_list (die, DW_AT_ranges, offset, force_direct);
10152 *added = true;
10153 }
10154 }
10155
10156 static void
10157 output_ranges (void)
10158 {
10159 unsigned i;
10160 static const char *const start_fmt = "Offset %#x";
10161 const char *fmt = start_fmt;
10162
10163 for (i = 0; i < ranges_table_in_use; i++)
10164 {
10165 int block_num = ranges_table[i].num;
10166
10167 if (block_num > 0)
10168 {
10169 char blabel[MAX_ARTIFICIAL_LABEL_BYTES];
10170 char elabel[MAX_ARTIFICIAL_LABEL_BYTES];
10171
10172 ASM_GENERATE_INTERNAL_LABEL (blabel, BLOCK_BEGIN_LABEL, block_num);
10173 ASM_GENERATE_INTERNAL_LABEL (elabel, BLOCK_END_LABEL, block_num);
10174
10175 /* If all code is in the text section, then the compilation
10176 unit base address defaults to DW_AT_low_pc, which is the
10177 base of the text section. */
10178 if (!have_multiple_function_sections)
10179 {
10180 dw2_asm_output_delta (DWARF2_ADDR_SIZE, blabel,
10181 text_section_label,
10182 fmt, i * 2 * DWARF2_ADDR_SIZE);
10183 dw2_asm_output_delta (DWARF2_ADDR_SIZE, elabel,
10184 text_section_label, NULL);
10185 }
10186
10187 /* Otherwise, the compilation unit base address is zero,
10188 which allows us to use absolute addresses, and not worry
10189 about whether the target supports cross-section
10190 arithmetic. */
10191 else
10192 {
10193 dw2_asm_output_addr (DWARF2_ADDR_SIZE, blabel,
10194 fmt, i * 2 * DWARF2_ADDR_SIZE);
10195 dw2_asm_output_addr (DWARF2_ADDR_SIZE, elabel, NULL);
10196 }
10197
10198 fmt = NULL;
10199 }
10200
10201 /* Negative block_num stands for an index into ranges_by_label. */
10202 else if (block_num < 0)
10203 {
10204 int lab_idx = - block_num - 1;
10205
10206 if (!have_multiple_function_sections)
10207 {
10208 gcc_unreachable ();
10209 #if 0
10210 /* If we ever use add_ranges_by_labels () for a single
10211 function section, all we have to do is to take out
10212 the #if 0 above. */
10213 dw2_asm_output_delta (DWARF2_ADDR_SIZE,
10214 ranges_by_label[lab_idx].begin,
10215 text_section_label,
10216 fmt, i * 2 * DWARF2_ADDR_SIZE);
10217 dw2_asm_output_delta (DWARF2_ADDR_SIZE,
10218 ranges_by_label[lab_idx].end,
10219 text_section_label, NULL);
10220 #endif
10221 }
10222 else
10223 {
10224 dw2_asm_output_addr (DWARF2_ADDR_SIZE,
10225 ranges_by_label[lab_idx].begin,
10226 fmt, i * 2 * DWARF2_ADDR_SIZE);
10227 dw2_asm_output_addr (DWARF2_ADDR_SIZE,
10228 ranges_by_label[lab_idx].end,
10229 NULL);
10230 }
10231 }
10232 else
10233 {
10234 dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
10235 dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
10236 fmt = start_fmt;
10237 }
10238 }
10239 }
10240
10241 /* Data structure containing information about input files. */
10242 struct file_info
10243 {
10244 const char *path; /* Complete file name. */
10245 const char *fname; /* File name part. */
10246 int length; /* Length of entire string. */
10247 struct dwarf_file_data * file_idx; /* Index in input file table. */
10248 int dir_idx; /* Index in directory table. */
10249 };
10250
10251 /* Data structure containing information about directories with source
10252 files. */
10253 struct dir_info
10254 {
10255 const char *path; /* Path including directory name. */
10256 int length; /* Path length. */
10257 int prefix; /* Index of directory entry which is a prefix. */
10258 int count; /* Number of files in this directory. */
10259 int dir_idx; /* Index of directory used as base. */
10260 };
10261
10262 /* Callback function for file_info comparison. We sort by looking at
10263 the directories in the path. */
10264
10265 static int
10266 file_info_cmp (const void *p1, const void *p2)
10267 {
10268 const struct file_info *const s1 = (const struct file_info *) p1;
10269 const struct file_info *const s2 = (const struct file_info *) p2;
10270 const unsigned char *cp1;
10271 const unsigned char *cp2;
10272
10273 /* Take care of file names without directories. We need to make sure that
10274 we return consistent values to qsort since some will get confused if
10275 we return the same value when identical operands are passed in opposite
10276 orders. So if neither has a directory, return 0 and otherwise return
10277 1 or -1 depending on which one has the directory. */
10278 if ((s1->path == s1->fname || s2->path == s2->fname))
10279 return (s2->path == s2->fname) - (s1->path == s1->fname);
10280
10281 cp1 = (const unsigned char *) s1->path;
10282 cp2 = (const unsigned char *) s2->path;
10283
10284 while (1)
10285 {
10286 ++cp1;
10287 ++cp2;
10288 /* Reached the end of the first path? If so, handle like above. */
10289 if ((cp1 == (const unsigned char *) s1->fname)
10290 || (cp2 == (const unsigned char *) s2->fname))
10291 return ((cp2 == (const unsigned char *) s2->fname)
10292 - (cp1 == (const unsigned char *) s1->fname));
10293
10294 /* Character of current path component the same? */
10295 else if (*cp1 != *cp2)
10296 return *cp1 - *cp2;
10297 }
10298 }
10299
10300 struct file_name_acquire_data
10301 {
10302 struct file_info *files;
10303 int used_files;
10304 int max_files;
10305 };
10306
10307 /* Traversal function for the hash table. */
10308
10309 int
10310 file_name_acquire (dwarf_file_data **slot, file_name_acquire_data *fnad)
10311 {
10312 struct dwarf_file_data *d = *slot;
10313 struct file_info *fi;
10314 const char *f;
10315
10316 gcc_assert (fnad->max_files >= d->emitted_number);
10317
10318 if (! d->emitted_number)
10319 return 1;
10320
10321 gcc_assert (fnad->max_files != fnad->used_files);
10322
10323 fi = fnad->files + fnad->used_files++;
10324
10325 /* Skip all leading "./". */
10326 f = d->filename;
10327 while (f[0] == '.' && IS_DIR_SEPARATOR (f[1]))
10328 f += 2;
10329
10330 /* Create a new array entry. */
10331 fi->path = f;
10332 fi->length = strlen (f);
10333 fi->file_idx = d;
10334
10335 /* Search for the file name part. */
10336 f = strrchr (f, DIR_SEPARATOR);
10337 #if defined (DIR_SEPARATOR_2)
10338 {
10339 char *g = strrchr (fi->path, DIR_SEPARATOR_2);
10340
10341 if (g != NULL)
10342 {
10343 if (f == NULL || f < g)
10344 f = g;
10345 }
10346 }
10347 #endif
10348
10349 fi->fname = f == NULL ? fi->path : f + 1;
10350 return 1;
10351 }
10352
10353 /* Output the directory table and the file name table. We try to minimize
10354 the total amount of memory needed. A heuristic is used to avoid large
10355 slowdowns with many input files. */
10356
10357 static void
10358 output_file_names (void)
10359 {
10360 struct file_name_acquire_data fnad;
10361 int numfiles;
10362 struct file_info *files;
10363 struct dir_info *dirs;
10364 int *saved;
10365 int *savehere;
10366 int *backmap;
10367 int ndirs;
10368 int idx_offset;
10369 int i;
10370
10371 if (!last_emitted_file)
10372 {
10373 dw2_asm_output_data (1, 0, "End directory table");
10374 dw2_asm_output_data (1, 0, "End file name table");
10375 return;
10376 }
10377
10378 numfiles = last_emitted_file->emitted_number;
10379
10380 /* Allocate the various arrays we need. */
10381 files = XALLOCAVEC (struct file_info, numfiles);
10382 dirs = XALLOCAVEC (struct dir_info, numfiles);
10383
10384 fnad.files = files;
10385 fnad.used_files = 0;
10386 fnad.max_files = numfiles;
10387 file_table->traverse<file_name_acquire_data *, file_name_acquire> (&fnad);
10388 gcc_assert (fnad.used_files == fnad.max_files);
10389
10390 qsort (files, numfiles, sizeof (files[0]), file_info_cmp);
10391
10392 /* Find all the different directories used. */
10393 dirs[0].path = files[0].path;
10394 dirs[0].length = files[0].fname - files[0].path;
10395 dirs[0].prefix = -1;
10396 dirs[0].count = 1;
10397 dirs[0].dir_idx = 0;
10398 files[0].dir_idx = 0;
10399 ndirs = 1;
10400
10401 for (i = 1; i < numfiles; i++)
10402 if (files[i].fname - files[i].path == dirs[ndirs - 1].length
10403 && memcmp (dirs[ndirs - 1].path, files[i].path,
10404 dirs[ndirs - 1].length) == 0)
10405 {
10406 /* Same directory as last entry. */
10407 files[i].dir_idx = ndirs - 1;
10408 ++dirs[ndirs - 1].count;
10409 }
10410 else
10411 {
10412 int j;
10413
10414 /* This is a new directory. */
10415 dirs[ndirs].path = files[i].path;
10416 dirs[ndirs].length = files[i].fname - files[i].path;
10417 dirs[ndirs].count = 1;
10418 dirs[ndirs].dir_idx = ndirs;
10419 files[i].dir_idx = ndirs;
10420
10421 /* Search for a prefix. */
10422 dirs[ndirs].prefix = -1;
10423 for (j = 0; j < ndirs; j++)
10424 if (dirs[j].length < dirs[ndirs].length
10425 && dirs[j].length > 1
10426 && (dirs[ndirs].prefix == -1
10427 || dirs[j].length > dirs[dirs[ndirs].prefix].length)
10428 && memcmp (dirs[j].path, dirs[ndirs].path, dirs[j].length) == 0)
10429 dirs[ndirs].prefix = j;
10430
10431 ++ndirs;
10432 }
10433
10434 /* Now to the actual work. We have to find a subset of the directories which
10435 allow expressing the file name using references to the directory table
10436 with the least amount of characters. We do not do an exhaustive search
10437 where we would have to check out every combination of every single
10438 possible prefix. Instead we use a heuristic which provides nearly optimal
10439 results in most cases and never is much off. */
10440 saved = XALLOCAVEC (int, ndirs);
10441 savehere = XALLOCAVEC (int, ndirs);
10442
10443 memset (saved, '\0', ndirs * sizeof (saved[0]));
10444 for (i = 0; i < ndirs; i++)
10445 {
10446 int j;
10447 int total;
10448
10449 /* We can always save some space for the current directory. But this
10450 does not mean it will be enough to justify adding the directory. */
10451 savehere[i] = dirs[i].length;
10452 total = (savehere[i] - saved[i]) * dirs[i].count;
10453
10454 for (j = i + 1; j < ndirs; j++)
10455 {
10456 savehere[j] = 0;
10457 if (saved[j] < dirs[i].length)
10458 {
10459 /* Determine whether the dirs[i] path is a prefix of the
10460 dirs[j] path. */
10461 int k;
10462
10463 k = dirs[j].prefix;
10464 while (k != -1 && k != (int) i)
10465 k = dirs[k].prefix;
10466
10467 if (k == (int) i)
10468 {
10469 /* Yes it is. We can possibly save some memory by
10470 writing the filenames in dirs[j] relative to
10471 dirs[i]. */
10472 savehere[j] = dirs[i].length;
10473 total += (savehere[j] - saved[j]) * dirs[j].count;
10474 }
10475 }
10476 }
10477
10478 /* Check whether we can save enough to justify adding the dirs[i]
10479 directory. */
10480 if (total > dirs[i].length + 1)
10481 {
10482 /* It's worthwhile adding. */
10483 for (j = i; j < ndirs; j++)
10484 if (savehere[j] > 0)
10485 {
10486 /* Remember how much we saved for this directory so far. */
10487 saved[j] = savehere[j];
10488
10489 /* Remember the prefix directory. */
10490 dirs[j].dir_idx = i;
10491 }
10492 }
10493 }
10494
10495 /* Emit the directory name table. */
10496 idx_offset = dirs[0].length > 0 ? 1 : 0;
10497 for (i = 1 - idx_offset; i < ndirs; i++)
10498 dw2_asm_output_nstring (dirs[i].path,
10499 dirs[i].length
10500 - !DWARF2_DIR_SHOULD_END_WITH_SEPARATOR,
10501 "Directory Entry: %#x", i + idx_offset);
10502
10503 dw2_asm_output_data (1, 0, "End directory table");
10504
10505 /* We have to emit them in the order of emitted_number since that's
10506 used in the debug info generation. To do this efficiently we
10507 generate a back-mapping of the indices first. */
10508 backmap = XALLOCAVEC (int, numfiles);
10509 for (i = 0; i < numfiles; i++)
10510 backmap[files[i].file_idx->emitted_number - 1] = i;
10511
10512 /* Now write all the file names. */
10513 for (i = 0; i < numfiles; i++)
10514 {
10515 int file_idx = backmap[i];
10516 int dir_idx = dirs[files[file_idx].dir_idx].dir_idx;
10517
10518 #ifdef VMS_DEBUGGING_INFO
10519 #define MAX_VMS_VERSION_LEN 6 /* ";32768" */
10520
10521 /* Setting these fields can lead to debugger miscomparisons,
10522 but VMS Debug requires them to be set correctly. */
10523
10524 int ver;
10525 long long cdt;
10526 long siz;
10527 int maxfilelen = strlen (files[file_idx].path)
10528 + dirs[dir_idx].length
10529 + MAX_VMS_VERSION_LEN + 1;
10530 char *filebuf = XALLOCAVEC (char, maxfilelen);
10531
10532 vms_file_stats_name (files[file_idx].path, 0, 0, 0, &ver);
10533 snprintf (filebuf, maxfilelen, "%s;%d",
10534 files[file_idx].path + dirs[dir_idx].length, ver);
10535
10536 dw2_asm_output_nstring
10537 (filebuf, -1, "File Entry: %#x", (unsigned) i + 1);
10538
10539 /* Include directory index. */
10540 dw2_asm_output_data_uleb128 (dir_idx + idx_offset, NULL);
10541
10542 /* Modification time. */
10543 dw2_asm_output_data_uleb128
10544 ((vms_file_stats_name (files[file_idx].path, &cdt, 0, 0, 0) == 0)
10545 ? cdt : 0,
10546 NULL);
10547
10548 /* File length in bytes. */
10549 dw2_asm_output_data_uleb128
10550 ((vms_file_stats_name (files[file_idx].path, 0, &siz, 0, 0) == 0)
10551 ? siz : 0,
10552 NULL);
10553 #else
10554 dw2_asm_output_nstring (files[file_idx].path + dirs[dir_idx].length, -1,
10555 "File Entry: %#x", (unsigned) i + 1);
10556
10557 /* Include directory index. */
10558 dw2_asm_output_data_uleb128 (dir_idx + idx_offset, NULL);
10559
10560 /* Modification time. */
10561 dw2_asm_output_data_uleb128 (0, NULL);
10562
10563 /* File length in bytes. */
10564 dw2_asm_output_data_uleb128 (0, NULL);
10565 #endif /* VMS_DEBUGGING_INFO */
10566 }
10567
10568 dw2_asm_output_data (1, 0, "End file name table");
10569 }
10570
10571
10572 /* Output one line number table into the .debug_line section. */
10573
10574 static void
10575 output_one_line_info_table (dw_line_info_table *table)
10576 {
10577 char line_label[MAX_ARTIFICIAL_LABEL_BYTES];
10578 unsigned int current_line = 1;
10579 bool current_is_stmt = DWARF_LINE_DEFAULT_IS_STMT_START;
10580 dw_line_info_entry *ent;
10581 size_t i;
10582
10583 FOR_EACH_VEC_SAFE_ELT (table->entries, i, ent)
10584 {
10585 switch (ent->opcode)
10586 {
10587 case LI_set_address:
10588 /* ??? Unfortunately, we have little choice here currently, and
10589 must always use the most general form. GCC does not know the
10590 address delta itself, so we can't use DW_LNS_advance_pc. Many
10591 ports do have length attributes which will give an upper bound
10592 on the address range. We could perhaps use length attributes
10593 to determine when it is safe to use DW_LNS_fixed_advance_pc. */
10594 ASM_GENERATE_INTERNAL_LABEL (line_label, LINE_CODE_LABEL, ent->val);
10595
10596 /* This can handle any delta. This takes
10597 4+DWARF2_ADDR_SIZE bytes. */
10598 dw2_asm_output_data (1, 0, "set address %s", line_label);
10599 dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
10600 dw2_asm_output_data (1, DW_LNE_set_address, NULL);
10601 dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
10602 break;
10603
10604 case LI_set_line:
10605 if (ent->val == current_line)
10606 {
10607 /* We still need to start a new row, so output a copy insn. */
10608 dw2_asm_output_data (1, DW_LNS_copy,
10609 "copy line %u", current_line);
10610 }
10611 else
10612 {
10613 int line_offset = ent->val - current_line;
10614 int line_delta = line_offset - DWARF_LINE_BASE;
10615
10616 current_line = ent->val;
10617 if (line_delta >= 0 && line_delta < (DWARF_LINE_RANGE - 1))
10618 {
10619 /* This can handle deltas from -10 to 234, using the current
10620 definitions of DWARF_LINE_BASE and DWARF_LINE_RANGE.
10621 This takes 1 byte. */
10622 dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE + line_delta,
10623 "line %u", current_line);
10624 }
10625 else
10626 {
10627 /* This can handle any delta. This takes at least 4 bytes,
10628 depending on the value being encoded. */
10629 dw2_asm_output_data (1, DW_LNS_advance_line,
10630 "advance to line %u", current_line);
10631 dw2_asm_output_data_sleb128 (line_offset, NULL);
10632 dw2_asm_output_data (1, DW_LNS_copy, NULL);
10633 }
10634 }
10635 break;
10636
10637 case LI_set_file:
10638 dw2_asm_output_data (1, DW_LNS_set_file, "set file %u", ent->val);
10639 dw2_asm_output_data_uleb128 (ent->val, "%u", ent->val);
10640 break;
10641
10642 case LI_set_column:
10643 dw2_asm_output_data (1, DW_LNS_set_column, "column %u", ent->val);
10644 dw2_asm_output_data_uleb128 (ent->val, "%u", ent->val);
10645 break;
10646
10647 case LI_negate_stmt:
10648 current_is_stmt = !current_is_stmt;
10649 dw2_asm_output_data (1, DW_LNS_negate_stmt,
10650 "is_stmt %d", current_is_stmt);
10651 break;
10652
10653 case LI_set_prologue_end:
10654 dw2_asm_output_data (1, DW_LNS_set_prologue_end,
10655 "set prologue end");
10656 break;
10657
10658 case LI_set_epilogue_begin:
10659 dw2_asm_output_data (1, DW_LNS_set_epilogue_begin,
10660 "set epilogue begin");
10661 break;
10662
10663 case LI_set_discriminator:
10664 dw2_asm_output_data (1, 0, "discriminator %u", ent->val);
10665 dw2_asm_output_data_uleb128 (1 + size_of_uleb128 (ent->val), NULL);
10666 dw2_asm_output_data (1, DW_LNE_set_discriminator, NULL);
10667 dw2_asm_output_data_uleb128 (ent->val, NULL);
10668 break;
10669 }
10670 }
10671
10672 /* Emit debug info for the address of the end of the table. */
10673 dw2_asm_output_data (1, 0, "set address %s", table->end_label);
10674 dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
10675 dw2_asm_output_data (1, DW_LNE_set_address, NULL);
10676 dw2_asm_output_addr (DWARF2_ADDR_SIZE, table->end_label, NULL);
10677
10678 dw2_asm_output_data (1, 0, "end sequence");
10679 dw2_asm_output_data_uleb128 (1, NULL);
10680 dw2_asm_output_data (1, DW_LNE_end_sequence, NULL);
10681 }
10682
10683 /* Output the source line number correspondence information. This
10684 information goes into the .debug_line section. */
10685
10686 static void
10687 output_line_info (bool prologue_only)
10688 {
10689 char l1[20], l2[20], p1[20], p2[20];
10690 /* We don't support DWARFv5 line tables yet. */
10691 int ver = dwarf_version < 5 ? dwarf_version : 4;
10692 bool saw_one = false;
10693 int opc;
10694
10695 ASM_GENERATE_INTERNAL_LABEL (l1, LINE_NUMBER_BEGIN_LABEL, 0);
10696 ASM_GENERATE_INTERNAL_LABEL (l2, LINE_NUMBER_END_LABEL, 0);
10697 ASM_GENERATE_INTERNAL_LABEL (p1, LN_PROLOG_AS_LABEL, 0);
10698 ASM_GENERATE_INTERNAL_LABEL (p2, LN_PROLOG_END_LABEL, 0);
10699
10700 if (!XCOFF_DEBUGGING_INFO)
10701 {
10702 if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
10703 dw2_asm_output_data (4, 0xffffffff,
10704 "Initial length escape value indicating 64-bit DWARF extension");
10705 dw2_asm_output_delta (DWARF_OFFSET_SIZE, l2, l1,
10706 "Length of Source Line Info");
10707 }
10708
10709 ASM_OUTPUT_LABEL (asm_out_file, l1);
10710
10711 dw2_asm_output_data (2, ver, "DWARF Version");
10712 dw2_asm_output_delta (DWARF_OFFSET_SIZE, p2, p1, "Prolog Length");
10713 ASM_OUTPUT_LABEL (asm_out_file, p1);
10714
10715 /* Define the architecture-dependent minimum instruction length (in bytes).
10716 In this implementation of DWARF, this field is used for information
10717 purposes only. Since GCC generates assembly language, we have no
10718 a priori knowledge of how many instruction bytes are generated for each
10719 source line, and therefore can use only the DW_LNE_set_address and
10720 DW_LNS_fixed_advance_pc line information commands. Accordingly, we fix
10721 this as '1', which is "correct enough" for all architectures,
10722 and don't let the target override. */
10723 dw2_asm_output_data (1, 1, "Minimum Instruction Length");
10724
10725 if (ver >= 4)
10726 dw2_asm_output_data (1, DWARF_LINE_DEFAULT_MAX_OPS_PER_INSN,
10727 "Maximum Operations Per Instruction");
10728 dw2_asm_output_data (1, DWARF_LINE_DEFAULT_IS_STMT_START,
10729 "Default is_stmt_start flag");
10730 dw2_asm_output_data (1, DWARF_LINE_BASE,
10731 "Line Base Value (Special Opcodes)");
10732 dw2_asm_output_data (1, DWARF_LINE_RANGE,
10733 "Line Range Value (Special Opcodes)");
10734 dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE,
10735 "Special Opcode Base");
10736
10737 for (opc = 1; opc < DWARF_LINE_OPCODE_BASE; opc++)
10738 {
10739 int n_op_args;
10740 switch (opc)
10741 {
10742 case DW_LNS_advance_pc:
10743 case DW_LNS_advance_line:
10744 case DW_LNS_set_file:
10745 case DW_LNS_set_column:
10746 case DW_LNS_fixed_advance_pc:
10747 case DW_LNS_set_isa:
10748 n_op_args = 1;
10749 break;
10750 default:
10751 n_op_args = 0;
10752 break;
10753 }
10754
10755 dw2_asm_output_data (1, n_op_args, "opcode: %#x has %d args",
10756 opc, n_op_args);
10757 }
10758
10759 /* Write out the information about the files we use. */
10760 output_file_names ();
10761 ASM_OUTPUT_LABEL (asm_out_file, p2);
10762 if (prologue_only)
10763 {
10764 /* Output the marker for the end of the line number info. */
10765 ASM_OUTPUT_LABEL (asm_out_file, l2);
10766 return;
10767 }
10768
10769 if (separate_line_info)
10770 {
10771 dw_line_info_table *table;
10772 size_t i;
10773
10774 FOR_EACH_VEC_ELT (*separate_line_info, i, table)
10775 if (table->in_use)
10776 {
10777 output_one_line_info_table (table);
10778 saw_one = true;
10779 }
10780 }
10781 if (cold_text_section_line_info && cold_text_section_line_info->in_use)
10782 {
10783 output_one_line_info_table (cold_text_section_line_info);
10784 saw_one = true;
10785 }
10786
10787 /* ??? Some Darwin linkers crash on a .debug_line section with no
10788 sequences. Further, merely a DW_LNE_end_sequence entry is not
10789 sufficient -- the address column must also be initialized.
10790 Make sure to output at least one set_address/end_sequence pair,
10791 choosing .text since that section is always present. */
10792 if (text_section_line_info->in_use || !saw_one)
10793 output_one_line_info_table (text_section_line_info);
10794
10795 /* Output the marker for the end of the line number info. */
10796 ASM_OUTPUT_LABEL (asm_out_file, l2);
10797 }
10798 \f
10799 /* Given a pointer to a tree node for some base type, return a pointer to
10800 a DIE that describes the given type.
10801
10802 This routine must only be called for GCC type nodes that correspond to
10803 Dwarf base (fundamental) types. */
10804
10805 static dw_die_ref
10806 base_type_die (tree type)
10807 {
10808 dw_die_ref base_type_result;
10809 enum dwarf_type encoding;
10810 bool fpt_used = false;
10811 struct fixed_point_type_info fpt_info;
10812 tree type_bias = NULL_TREE;
10813
10814 if (TREE_CODE (type) == ERROR_MARK || TREE_CODE (type) == VOID_TYPE)
10815 return 0;
10816
10817 /* If this is a subtype that should not be emitted as a subrange type,
10818 use the base type. See subrange_type_for_debug_p. */
10819 if (TREE_CODE (type) == INTEGER_TYPE && TREE_TYPE (type) != NULL_TREE)
10820 type = TREE_TYPE (type);
10821
10822 switch (TREE_CODE (type))
10823 {
10824 case INTEGER_TYPE:
10825 if ((dwarf_version >= 4 || !dwarf_strict)
10826 && TYPE_NAME (type)
10827 && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
10828 && DECL_IS_BUILTIN (TYPE_NAME (type))
10829 && DECL_NAME (TYPE_NAME (type)))
10830 {
10831 const char *name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type)));
10832 if (strcmp (name, "char16_t") == 0
10833 || strcmp (name, "char32_t") == 0)
10834 {
10835 encoding = DW_ATE_UTF;
10836 break;
10837 }
10838 }
10839 if ((dwarf_version >= 3 || !dwarf_strict)
10840 && lang_hooks.types.get_fixed_point_type_info)
10841 {
10842 memset (&fpt_info, 0, sizeof (fpt_info));
10843 if (lang_hooks.types.get_fixed_point_type_info (type, &fpt_info))
10844 {
10845 fpt_used = true;
10846 encoding = ((TYPE_UNSIGNED (type))
10847 ? DW_ATE_unsigned_fixed
10848 : DW_ATE_signed_fixed);
10849 break;
10850 }
10851 }
10852 if (TYPE_STRING_FLAG (type))
10853 {
10854 if (TYPE_UNSIGNED (type))
10855 encoding = DW_ATE_unsigned_char;
10856 else
10857 encoding = DW_ATE_signed_char;
10858 }
10859 else if (TYPE_UNSIGNED (type))
10860 encoding = DW_ATE_unsigned;
10861 else
10862 encoding = DW_ATE_signed;
10863
10864 if (!dwarf_strict
10865 && lang_hooks.types.get_type_bias)
10866 type_bias = lang_hooks.types.get_type_bias (type);
10867 break;
10868
10869 case REAL_TYPE:
10870 if (DECIMAL_FLOAT_MODE_P (TYPE_MODE (type)))
10871 {
10872 if (dwarf_version >= 3 || !dwarf_strict)
10873 encoding = DW_ATE_decimal_float;
10874 else
10875 encoding = DW_ATE_lo_user;
10876 }
10877 else
10878 encoding = DW_ATE_float;
10879 break;
10880
10881 case FIXED_POINT_TYPE:
10882 if (!(dwarf_version >= 3 || !dwarf_strict))
10883 encoding = DW_ATE_lo_user;
10884 else if (TYPE_UNSIGNED (type))
10885 encoding = DW_ATE_unsigned_fixed;
10886 else
10887 encoding = DW_ATE_signed_fixed;
10888 break;
10889
10890 /* Dwarf2 doesn't know anything about complex ints, so use
10891 a user defined type for it. */
10892 case COMPLEX_TYPE:
10893 if (TREE_CODE (TREE_TYPE (type)) == REAL_TYPE)
10894 encoding = DW_ATE_complex_float;
10895 else
10896 encoding = DW_ATE_lo_user;
10897 break;
10898
10899 case BOOLEAN_TYPE:
10900 /* GNU FORTRAN/Ada/C++ BOOLEAN type. */
10901 encoding = DW_ATE_boolean;
10902 break;
10903
10904 default:
10905 /* No other TREE_CODEs are Dwarf fundamental types. */
10906 gcc_unreachable ();
10907 }
10908
10909 base_type_result = new_die (DW_TAG_base_type, comp_unit_die (), type);
10910
10911 add_AT_unsigned (base_type_result, DW_AT_byte_size,
10912 int_size_in_bytes (type));
10913 add_AT_unsigned (base_type_result, DW_AT_encoding, encoding);
10914
10915 if (fpt_used)
10916 {
10917 switch (fpt_info.scale_factor_kind)
10918 {
10919 case fixed_point_scale_factor_binary:
10920 add_AT_int (base_type_result, DW_AT_binary_scale,
10921 fpt_info.scale_factor.binary);
10922 break;
10923
10924 case fixed_point_scale_factor_decimal:
10925 add_AT_int (base_type_result, DW_AT_decimal_scale,
10926 fpt_info.scale_factor.decimal);
10927 break;
10928
10929 case fixed_point_scale_factor_arbitrary:
10930 /* Arbitrary scale factors cannot be described in standard DWARF,
10931 yet. */
10932 if (!dwarf_strict)
10933 {
10934 /* Describe the scale factor as a rational constant. */
10935 const dw_die_ref scale_factor
10936 = new_die (DW_TAG_constant, comp_unit_die (), type);
10937
10938 add_AT_unsigned (scale_factor, DW_AT_GNU_numerator,
10939 fpt_info.scale_factor.arbitrary.numerator);
10940 add_AT_int (scale_factor, DW_AT_GNU_denominator,
10941 fpt_info.scale_factor.arbitrary.denominator);
10942
10943 add_AT_die_ref (base_type_result, DW_AT_small, scale_factor);
10944 }
10945 break;
10946
10947 default:
10948 gcc_unreachable ();
10949 }
10950 }
10951 if (type_bias != NULL)
10952 add_scalar_info (base_type_result, DW_AT_GNU_bias, type_bias,
10953 dw_scalar_form_constant
10954 | dw_scalar_form_exprloc
10955 | dw_scalar_form_reference,
10956 NULL);
10957 add_pubtype (type, base_type_result);
10958
10959 return base_type_result;
10960 }
10961
10962 /* A C++ function with deduced return type can have a TEMPLATE_TYPE_PARM
10963 named 'auto' in its type: return true for it, false otherwise. */
10964
10965 static inline bool
10966 is_cxx_auto (tree type)
10967 {
10968 if (is_cxx ())
10969 {
10970 tree name = TYPE_IDENTIFIER (type);
10971 if (name == get_identifier ("auto")
10972 || name == get_identifier ("decltype(auto)"))
10973 return true;
10974 }
10975 return false;
10976 }
10977
10978 /* Given a pointer to an arbitrary ..._TYPE tree node, return nonzero if the
10979 given input type is a Dwarf "fundamental" type. Otherwise return null. */
10980
10981 static inline int
10982 is_base_type (tree type)
10983 {
10984 switch (TREE_CODE (type))
10985 {
10986 case ERROR_MARK:
10987 case VOID_TYPE:
10988 case INTEGER_TYPE:
10989 case REAL_TYPE:
10990 case FIXED_POINT_TYPE:
10991 case COMPLEX_TYPE:
10992 case BOOLEAN_TYPE:
10993 case POINTER_BOUNDS_TYPE:
10994 return 1;
10995
10996 case ARRAY_TYPE:
10997 case RECORD_TYPE:
10998 case UNION_TYPE:
10999 case QUAL_UNION_TYPE:
11000 case ENUMERAL_TYPE:
11001 case FUNCTION_TYPE:
11002 case METHOD_TYPE:
11003 case POINTER_TYPE:
11004 case REFERENCE_TYPE:
11005 case NULLPTR_TYPE:
11006 case OFFSET_TYPE:
11007 case LANG_TYPE:
11008 case VECTOR_TYPE:
11009 return 0;
11010
11011 default:
11012 if (is_cxx_auto (type))
11013 return 0;
11014 gcc_unreachable ();
11015 }
11016
11017 return 0;
11018 }
11019
11020 /* Given a pointer to a tree node, assumed to be some kind of a ..._TYPE
11021 node, return the size in bits for the type if it is a constant, or else
11022 return the alignment for the type if the type's size is not constant, or
11023 else return BITS_PER_WORD if the type actually turns out to be an
11024 ERROR_MARK node. */
11025
11026 static inline unsigned HOST_WIDE_INT
11027 simple_type_size_in_bits (const_tree type)
11028 {
11029 if (TREE_CODE (type) == ERROR_MARK)
11030 return BITS_PER_WORD;
11031 else if (TYPE_SIZE (type) == NULL_TREE)
11032 return 0;
11033 else if (tree_fits_uhwi_p (TYPE_SIZE (type)))
11034 return tree_to_uhwi (TYPE_SIZE (type));
11035 else
11036 return TYPE_ALIGN (type);
11037 }
11038
11039 /* Similarly, but return an offset_int instead of UHWI. */
11040
11041 static inline offset_int
11042 offset_int_type_size_in_bits (const_tree type)
11043 {
11044 if (TREE_CODE (type) == ERROR_MARK)
11045 return BITS_PER_WORD;
11046 else if (TYPE_SIZE (type) == NULL_TREE)
11047 return 0;
11048 else if (TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST)
11049 return wi::to_offset (TYPE_SIZE (type));
11050 else
11051 return TYPE_ALIGN (type);
11052 }
11053
11054 /* Given a pointer to a tree node for a subrange type, return a pointer
11055 to a DIE that describes the given type. */
11056
11057 static dw_die_ref
11058 subrange_type_die (tree type, tree low, tree high, tree bias,
11059 dw_die_ref context_die)
11060 {
11061 dw_die_ref subrange_die;
11062 const HOST_WIDE_INT size_in_bytes = int_size_in_bytes (type);
11063
11064 if (context_die == NULL)
11065 context_die = comp_unit_die ();
11066
11067 subrange_die = new_die (DW_TAG_subrange_type, context_die, type);
11068
11069 if (int_size_in_bytes (TREE_TYPE (type)) != size_in_bytes)
11070 {
11071 /* The size of the subrange type and its base type do not match,
11072 so we need to generate a size attribute for the subrange type. */
11073 add_AT_unsigned (subrange_die, DW_AT_byte_size, size_in_bytes);
11074 }
11075
11076 if (low)
11077 add_bound_info (subrange_die, DW_AT_lower_bound, low, NULL);
11078 if (high)
11079 add_bound_info (subrange_die, DW_AT_upper_bound, high, NULL);
11080 if (bias && !dwarf_strict)
11081 add_scalar_info (subrange_die, DW_AT_GNU_bias, bias,
11082 dw_scalar_form_constant
11083 | dw_scalar_form_exprloc
11084 | dw_scalar_form_reference,
11085 NULL);
11086
11087 return subrange_die;
11088 }
11089
11090 /* Returns the (const and/or volatile) cv_qualifiers associated with
11091 the decl node. This will normally be augmented with the
11092 cv_qualifiers of the underlying type in add_type_attribute. */
11093
11094 static int
11095 decl_quals (const_tree decl)
11096 {
11097 return ((TREE_READONLY (decl)
11098 ? TYPE_QUAL_CONST : TYPE_UNQUALIFIED)
11099 | (TREE_THIS_VOLATILE (decl)
11100 ? TYPE_QUAL_VOLATILE : TYPE_UNQUALIFIED));
11101 }
11102
11103 /* Determine the TYPE whose qualifiers match the largest strict subset
11104 of the given TYPE_QUALS, and return its qualifiers. Ignore all
11105 qualifiers outside QUAL_MASK. */
11106
11107 static int
11108 get_nearest_type_subqualifiers (tree type, int type_quals, int qual_mask)
11109 {
11110 tree t;
11111 int best_rank = 0, best_qual = 0, max_rank;
11112
11113 type_quals &= qual_mask;
11114 max_rank = popcount_hwi (type_quals) - 1;
11115
11116 for (t = TYPE_MAIN_VARIANT (type); t && best_rank < max_rank;
11117 t = TYPE_NEXT_VARIANT (t))
11118 {
11119 int q = TYPE_QUALS (t) & qual_mask;
11120
11121 if ((q & type_quals) == q && q != type_quals
11122 && check_base_type (t, type))
11123 {
11124 int rank = popcount_hwi (q);
11125
11126 if (rank > best_rank)
11127 {
11128 best_rank = rank;
11129 best_qual = q;
11130 }
11131 }
11132 }
11133
11134 return best_qual;
11135 }
11136
11137 /* Given a pointer to an arbitrary ..._TYPE tree node, return a debugging
11138 entry that chains various modifiers in front of the given type. */
11139
11140 static dw_die_ref
11141 modified_type_die (tree type, int cv_quals, dw_die_ref context_die)
11142 {
11143 enum tree_code code = TREE_CODE (type);
11144 dw_die_ref mod_type_die;
11145 dw_die_ref sub_die = NULL;
11146 tree item_type = NULL;
11147 tree qualified_type;
11148 tree name, low, high;
11149 dw_die_ref mod_scope;
11150 /* Only these cv-qualifiers are currently handled. */
11151 const int cv_qual_mask = (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE
11152 | TYPE_QUAL_RESTRICT | TYPE_QUAL_ATOMIC);
11153
11154 if (code == ERROR_MARK)
11155 return NULL;
11156
11157 if (lang_hooks.types.get_debug_type)
11158 {
11159 tree debug_type = lang_hooks.types.get_debug_type (type);
11160
11161 if (debug_type != NULL_TREE && debug_type != type)
11162 return modified_type_die (debug_type, cv_quals, context_die);
11163 }
11164
11165 cv_quals &= cv_qual_mask;
11166
11167 /* Don't emit DW_TAG_restrict_type for DWARFv2, since it is a type
11168 tag modifier (and not an attribute) old consumers won't be able
11169 to handle it. */
11170 if (dwarf_version < 3)
11171 cv_quals &= ~TYPE_QUAL_RESTRICT;
11172
11173 /* Likewise for DW_TAG_atomic_type for DWARFv5. */
11174 if (dwarf_version < 5)
11175 cv_quals &= ~TYPE_QUAL_ATOMIC;
11176
11177 /* See if we already have the appropriately qualified variant of
11178 this type. */
11179 qualified_type = get_qualified_type (type, cv_quals);
11180
11181 if (qualified_type == sizetype
11182 && TYPE_NAME (qualified_type)
11183 && TREE_CODE (TYPE_NAME (qualified_type)) == TYPE_DECL)
11184 {
11185 tree t = TREE_TYPE (TYPE_NAME (qualified_type));
11186
11187 gcc_checking_assert (TREE_CODE (t) == INTEGER_TYPE
11188 && TYPE_PRECISION (t)
11189 == TYPE_PRECISION (qualified_type)
11190 && TYPE_UNSIGNED (t)
11191 == TYPE_UNSIGNED (qualified_type));
11192 qualified_type = t;
11193 }
11194
11195 /* If we do, then we can just use its DIE, if it exists. */
11196 if (qualified_type)
11197 {
11198 mod_type_die = lookup_type_die (qualified_type);
11199 if (mod_type_die)
11200 return mod_type_die;
11201 }
11202
11203 name = qualified_type ? TYPE_NAME (qualified_type) : NULL;
11204
11205 /* Handle C typedef types. */
11206 if (name && TREE_CODE (name) == TYPE_DECL && DECL_ORIGINAL_TYPE (name)
11207 && !DECL_ARTIFICIAL (name))
11208 {
11209 tree dtype = TREE_TYPE (name);
11210
11211 if (qualified_type == dtype)
11212 {
11213 /* For a named type, use the typedef. */
11214 gen_type_die (qualified_type, context_die);
11215 return lookup_type_die (qualified_type);
11216 }
11217 else
11218 {
11219 int dquals = TYPE_QUALS_NO_ADDR_SPACE (dtype);
11220 dquals &= cv_qual_mask;
11221 if ((dquals & ~cv_quals) != TYPE_UNQUALIFIED
11222 || (cv_quals == dquals && DECL_ORIGINAL_TYPE (name) != type))
11223 /* cv-unqualified version of named type. Just use
11224 the unnamed type to which it refers. */
11225 return modified_type_die (DECL_ORIGINAL_TYPE (name),
11226 cv_quals, context_die);
11227 /* Else cv-qualified version of named type; fall through. */
11228 }
11229 }
11230
11231 mod_scope = scope_die_for (type, context_die);
11232
11233 if (cv_quals)
11234 {
11235 struct qual_info { int q; enum dwarf_tag t; };
11236 static const struct qual_info qual_info[] =
11237 {
11238 { TYPE_QUAL_ATOMIC, DW_TAG_atomic_type },
11239 { TYPE_QUAL_RESTRICT, DW_TAG_restrict_type },
11240 { TYPE_QUAL_VOLATILE, DW_TAG_volatile_type },
11241 { TYPE_QUAL_CONST, DW_TAG_const_type },
11242 };
11243 int sub_quals;
11244 unsigned i;
11245
11246 /* Determine a lesser qualified type that most closely matches
11247 this one. Then generate DW_TAG_* entries for the remaining
11248 qualifiers. */
11249 sub_quals = get_nearest_type_subqualifiers (type, cv_quals,
11250 cv_qual_mask);
11251 mod_type_die = modified_type_die (type, sub_quals, context_die);
11252
11253 for (i = 0; i < sizeof (qual_info) / sizeof (qual_info[0]); i++)
11254 if (qual_info[i].q & cv_quals & ~sub_quals)
11255 {
11256 dw_die_ref d = new_die (qual_info[i].t, mod_scope, type);
11257 if (mod_type_die)
11258 add_AT_die_ref (d, DW_AT_type, mod_type_die);
11259 mod_type_die = d;
11260 }
11261 }
11262 else if (code == POINTER_TYPE || code == REFERENCE_TYPE)
11263 {
11264 dwarf_tag tag = DW_TAG_pointer_type;
11265 if (code == REFERENCE_TYPE)
11266 {
11267 if (TYPE_REF_IS_RVALUE (type) && dwarf_version >= 4)
11268 tag = DW_TAG_rvalue_reference_type;
11269 else
11270 tag = DW_TAG_reference_type;
11271 }
11272 mod_type_die = new_die (tag, mod_scope, type);
11273
11274 add_AT_unsigned (mod_type_die, DW_AT_byte_size,
11275 simple_type_size_in_bits (type) / BITS_PER_UNIT);
11276 item_type = TREE_TYPE (type);
11277
11278 addr_space_t as = TYPE_ADDR_SPACE (item_type);
11279 if (!ADDR_SPACE_GENERIC_P (as))
11280 {
11281 int action = targetm.addr_space.debug (as);
11282 if (action >= 0)
11283 {
11284 /* Positive values indicate an address_class. */
11285 add_AT_unsigned (mod_type_die, DW_AT_address_class, action);
11286 }
11287 else
11288 {
11289 /* Negative values indicate an (inverted) segment base reg. */
11290 dw_loc_descr_ref d
11291 = one_reg_loc_descriptor (~action, VAR_INIT_STATUS_INITIALIZED);
11292 add_AT_loc (mod_type_die, DW_AT_segment, d);
11293 }
11294 }
11295 }
11296 else if (code == INTEGER_TYPE
11297 && TREE_TYPE (type) != NULL_TREE
11298 && subrange_type_for_debug_p (type, &low, &high))
11299 {
11300 tree bias = NULL_TREE;
11301 if (lang_hooks.types.get_type_bias)
11302 bias = lang_hooks.types.get_type_bias (type);
11303 mod_type_die = subrange_type_die (type, low, high, bias, context_die);
11304 item_type = TREE_TYPE (type);
11305 }
11306 else if (is_base_type (type))
11307 mod_type_die = base_type_die (type);
11308 else
11309 {
11310 gen_type_die (type, context_die);
11311
11312 /* We have to get the type_main_variant here (and pass that to the
11313 `lookup_type_die' routine) because the ..._TYPE node we have
11314 might simply be a *copy* of some original type node (where the
11315 copy was created to help us keep track of typedef names) and
11316 that copy might have a different TYPE_UID from the original
11317 ..._TYPE node. */
11318 if (TREE_CODE (type) != VECTOR_TYPE)
11319 return lookup_type_die (type_main_variant (type));
11320 else
11321 /* Vectors have the debugging information in the type,
11322 not the main variant. */
11323 return lookup_type_die (type);
11324 }
11325
11326 /* Builtin types don't have a DECL_ORIGINAL_TYPE. For those,
11327 don't output a DW_TAG_typedef, since there isn't one in the
11328 user's program; just attach a DW_AT_name to the type.
11329 Don't attach a DW_AT_name to DW_TAG_const_type or DW_TAG_volatile_type
11330 if the base type already has the same name. */
11331 if (name
11332 && ((TREE_CODE (name) != TYPE_DECL
11333 && (qualified_type == TYPE_MAIN_VARIANT (type)
11334 || (cv_quals == TYPE_UNQUALIFIED)))
11335 || (TREE_CODE (name) == TYPE_DECL
11336 && TREE_TYPE (name) == qualified_type
11337 && DECL_NAME (name))))
11338 {
11339 if (TREE_CODE (name) == TYPE_DECL)
11340 /* Could just call add_name_and_src_coords_attributes here,
11341 but since this is a builtin type it doesn't have any
11342 useful source coordinates anyway. */
11343 name = DECL_NAME (name);
11344 add_name_attribute (mod_type_die, IDENTIFIER_POINTER (name));
11345 }
11346 /* This probably indicates a bug. */
11347 else if (mod_type_die && mod_type_die->die_tag == DW_TAG_base_type)
11348 {
11349 name = TYPE_IDENTIFIER (type);
11350 add_name_attribute (mod_type_die,
11351 name ? IDENTIFIER_POINTER (name) : "__unknown__");
11352 }
11353
11354 if (qualified_type)
11355 equate_type_number_to_die (qualified_type, mod_type_die);
11356
11357 if (item_type)
11358 /* We must do this after the equate_type_number_to_die call, in case
11359 this is a recursive type. This ensures that the modified_type_die
11360 recursion will terminate even if the type is recursive. Recursive
11361 types are possible in Ada. */
11362 sub_die = modified_type_die (item_type,
11363 TYPE_QUALS_NO_ADDR_SPACE (item_type),
11364 context_die);
11365
11366 if (sub_die != NULL)
11367 add_AT_die_ref (mod_type_die, DW_AT_type, sub_die);
11368
11369 add_gnat_descriptive_type_attribute (mod_type_die, type, context_die);
11370 if (TYPE_ARTIFICIAL (type))
11371 add_AT_flag (mod_type_die, DW_AT_artificial, 1);
11372
11373 return mod_type_die;
11374 }
11375
11376 /* Generate DIEs for the generic parameters of T.
11377 T must be either a generic type or a generic function.
11378 See http://gcc.gnu.org/wiki/TemplateParmsDwarf for more. */
11379
11380 static void
11381 gen_generic_params_dies (tree t)
11382 {
11383 tree parms, args;
11384 int parms_num, i;
11385 dw_die_ref die = NULL;
11386 int non_default;
11387
11388 if (!t || (TYPE_P (t) && !COMPLETE_TYPE_P (t)))
11389 return;
11390
11391 if (TYPE_P (t))
11392 die = lookup_type_die (t);
11393 else if (DECL_P (t))
11394 die = lookup_decl_die (t);
11395
11396 gcc_assert (die);
11397
11398 parms = lang_hooks.get_innermost_generic_parms (t);
11399 if (!parms)
11400 /* T has no generic parameter. It means T is neither a generic type
11401 or function. End of story. */
11402 return;
11403
11404 parms_num = TREE_VEC_LENGTH (parms);
11405 args = lang_hooks.get_innermost_generic_args (t);
11406 if (TREE_CHAIN (args) && TREE_CODE (TREE_CHAIN (args)) == INTEGER_CST)
11407 non_default = int_cst_value (TREE_CHAIN (args));
11408 else
11409 non_default = TREE_VEC_LENGTH (args);
11410 for (i = 0; i < parms_num; i++)
11411 {
11412 tree parm, arg, arg_pack_elems;
11413 dw_die_ref parm_die;
11414
11415 parm = TREE_VEC_ELT (parms, i);
11416 arg = TREE_VEC_ELT (args, i);
11417 arg_pack_elems = lang_hooks.types.get_argument_pack_elems (arg);
11418 gcc_assert (parm && TREE_VALUE (parm) && arg);
11419
11420 if (parm && TREE_VALUE (parm) && arg)
11421 {
11422 /* If PARM represents a template parameter pack,
11423 emit a DW_TAG_GNU_template_parameter_pack DIE, followed
11424 by DW_TAG_template_*_parameter DIEs for the argument
11425 pack elements of ARG. Note that ARG would then be
11426 an argument pack. */
11427 if (arg_pack_elems)
11428 parm_die = template_parameter_pack_die (TREE_VALUE (parm),
11429 arg_pack_elems,
11430 die);
11431 else
11432 parm_die = generic_parameter_die (TREE_VALUE (parm), arg,
11433 true /* emit name */, die);
11434 if (i >= non_default)
11435 add_AT_flag (parm_die, DW_AT_default_value, 1);
11436 }
11437 }
11438 }
11439
11440 /* Create and return a DIE for PARM which should be
11441 the representation of a generic type parameter.
11442 For instance, in the C++ front end, PARM would be a template parameter.
11443 ARG is the argument to PARM.
11444 EMIT_NAME_P if tree, the DIE will have DW_AT_name attribute set to the
11445 name of the PARM.
11446 PARENT_DIE is the parent DIE which the new created DIE should be added to,
11447 as a child node. */
11448
11449 static dw_die_ref
11450 generic_parameter_die (tree parm, tree arg,
11451 bool emit_name_p,
11452 dw_die_ref parent_die)
11453 {
11454 dw_die_ref tmpl_die = NULL;
11455 const char *name = NULL;
11456
11457 if (!parm || !DECL_NAME (parm) || !arg)
11458 return NULL;
11459
11460 /* We support non-type generic parameters and arguments,
11461 type generic parameters and arguments, as well as
11462 generic generic parameters (a.k.a. template template parameters in C++)
11463 and arguments. */
11464 if (TREE_CODE (parm) == PARM_DECL)
11465 /* PARM is a nontype generic parameter */
11466 tmpl_die = new_die (DW_TAG_template_value_param, parent_die, parm);
11467 else if (TREE_CODE (parm) == TYPE_DECL)
11468 /* PARM is a type generic parameter. */
11469 tmpl_die = new_die (DW_TAG_template_type_param, parent_die, parm);
11470 else if (lang_hooks.decls.generic_generic_parameter_decl_p (parm))
11471 /* PARM is a generic generic parameter.
11472 Its DIE is a GNU extension. It shall have a
11473 DW_AT_name attribute to represent the name of the template template
11474 parameter, and a DW_AT_GNU_template_name attribute to represent the
11475 name of the template template argument. */
11476 tmpl_die = new_die (DW_TAG_GNU_template_template_param,
11477 parent_die, parm);
11478 else
11479 gcc_unreachable ();
11480
11481 if (tmpl_die)
11482 {
11483 tree tmpl_type;
11484
11485 /* If PARM is a generic parameter pack, it means we are
11486 emitting debug info for a template argument pack element.
11487 In other terms, ARG is a template argument pack element.
11488 In that case, we don't emit any DW_AT_name attribute for
11489 the die. */
11490 if (emit_name_p)
11491 {
11492 name = IDENTIFIER_POINTER (DECL_NAME (parm));
11493 gcc_assert (name);
11494 add_AT_string (tmpl_die, DW_AT_name, name);
11495 }
11496
11497 if (!lang_hooks.decls.generic_generic_parameter_decl_p (parm))
11498 {
11499 /* DWARF3, 5.6.8 says if PARM is a non-type generic parameter
11500 TMPL_DIE should have a child DW_AT_type attribute that is set
11501 to the type of the argument to PARM, which is ARG.
11502 If PARM is a type generic parameter, TMPL_DIE should have a
11503 child DW_AT_type that is set to ARG. */
11504 tmpl_type = TYPE_P (arg) ? arg : TREE_TYPE (arg);
11505 add_type_attribute (tmpl_die, tmpl_type,
11506 (TREE_THIS_VOLATILE (tmpl_type)
11507 ? TYPE_QUAL_VOLATILE : TYPE_UNQUALIFIED),
11508 parent_die);
11509 }
11510 else
11511 {
11512 /* So TMPL_DIE is a DIE representing a
11513 a generic generic template parameter, a.k.a template template
11514 parameter in C++ and arg is a template. */
11515
11516 /* The DW_AT_GNU_template_name attribute of the DIE must be set
11517 to the name of the argument. */
11518 name = dwarf2_name (TYPE_P (arg) ? TYPE_NAME (arg) : arg, 1);
11519 if (name)
11520 add_AT_string (tmpl_die, DW_AT_GNU_template_name, name);
11521 }
11522
11523 if (TREE_CODE (parm) == PARM_DECL)
11524 /* So PARM is a non-type generic parameter.
11525 DWARF3 5.6.8 says we must set a DW_AT_const_value child
11526 attribute of TMPL_DIE which value represents the value
11527 of ARG.
11528 We must be careful here:
11529 The value of ARG might reference some function decls.
11530 We might currently be emitting debug info for a generic
11531 type and types are emitted before function decls, we don't
11532 know if the function decls referenced by ARG will actually be
11533 emitted after cgraph computations.
11534 So must defer the generation of the DW_AT_const_value to
11535 after cgraph is ready. */
11536 append_entry_to_tmpl_value_parm_die_table (tmpl_die, arg);
11537 }
11538
11539 return tmpl_die;
11540 }
11541
11542 /* Generate and return a DW_TAG_GNU_template_parameter_pack DIE representing.
11543 PARM_PACK must be a template parameter pack. The returned DIE
11544 will be child DIE of PARENT_DIE. */
11545
11546 static dw_die_ref
11547 template_parameter_pack_die (tree parm_pack,
11548 tree parm_pack_args,
11549 dw_die_ref parent_die)
11550 {
11551 dw_die_ref die;
11552 int j;
11553
11554 gcc_assert (parent_die && parm_pack);
11555
11556 die = new_die (DW_TAG_GNU_template_parameter_pack, parent_die, parm_pack);
11557 add_name_and_src_coords_attributes (die, parm_pack);
11558 for (j = 0; j < TREE_VEC_LENGTH (parm_pack_args); j++)
11559 generic_parameter_die (parm_pack,
11560 TREE_VEC_ELT (parm_pack_args, j),
11561 false /* Don't emit DW_AT_name */,
11562 die);
11563 return die;
11564 }
11565
11566 /* Given a pointer to an arbitrary ..._TYPE tree node, return true if it is
11567 an enumerated type. */
11568
11569 static inline int
11570 type_is_enum (const_tree type)
11571 {
11572 return TREE_CODE (type) == ENUMERAL_TYPE;
11573 }
11574
11575 /* Return the DBX register number described by a given RTL node. */
11576
11577 static unsigned int
11578 dbx_reg_number (const_rtx rtl)
11579 {
11580 unsigned regno = REGNO (rtl);
11581
11582 gcc_assert (regno < FIRST_PSEUDO_REGISTER);
11583
11584 #ifdef LEAF_REG_REMAP
11585 if (crtl->uses_only_leaf_regs)
11586 {
11587 int leaf_reg = LEAF_REG_REMAP (regno);
11588 if (leaf_reg != -1)
11589 regno = (unsigned) leaf_reg;
11590 }
11591 #endif
11592
11593 regno = DBX_REGISTER_NUMBER (regno);
11594 gcc_assert (regno != INVALID_REGNUM);
11595 return regno;
11596 }
11597
11598 /* Optionally add a DW_OP_piece term to a location description expression.
11599 DW_OP_piece is only added if the location description expression already
11600 doesn't end with DW_OP_piece. */
11601
11602 static void
11603 add_loc_descr_op_piece (dw_loc_descr_ref *list_head, int size)
11604 {
11605 dw_loc_descr_ref loc;
11606
11607 if (*list_head != NULL)
11608 {
11609 /* Find the end of the chain. */
11610 for (loc = *list_head; loc->dw_loc_next != NULL; loc = loc->dw_loc_next)
11611 ;
11612
11613 if (loc->dw_loc_opc != DW_OP_piece)
11614 loc->dw_loc_next = new_loc_descr (DW_OP_piece, size, 0);
11615 }
11616 }
11617
11618 /* Return a location descriptor that designates a machine register or
11619 zero if there is none. */
11620
11621 static dw_loc_descr_ref
11622 reg_loc_descriptor (rtx rtl, enum var_init_status initialized)
11623 {
11624 rtx regs;
11625
11626 if (REGNO (rtl) >= FIRST_PSEUDO_REGISTER)
11627 return 0;
11628
11629 /* We only use "frame base" when we're sure we're talking about the
11630 post-prologue local stack frame. We do this by *not* running
11631 register elimination until this point, and recognizing the special
11632 argument pointer and soft frame pointer rtx's.
11633 Use DW_OP_fbreg offset DW_OP_stack_value in this case. */
11634 if ((rtl == arg_pointer_rtx || rtl == frame_pointer_rtx)
11635 && eliminate_regs (rtl, VOIDmode, NULL_RTX) != rtl)
11636 {
11637 dw_loc_descr_ref result = NULL;
11638
11639 if (dwarf_version >= 4 || !dwarf_strict)
11640 {
11641 result = mem_loc_descriptor (rtl, GET_MODE (rtl), VOIDmode,
11642 initialized);
11643 if (result)
11644 add_loc_descr (&result,
11645 new_loc_descr (DW_OP_stack_value, 0, 0));
11646 }
11647 return result;
11648 }
11649
11650 regs = targetm.dwarf_register_span (rtl);
11651
11652 if (REG_NREGS (rtl) > 1 || regs)
11653 return multiple_reg_loc_descriptor (rtl, regs, initialized);
11654 else
11655 {
11656 unsigned int dbx_regnum = dbx_reg_number (rtl);
11657 if (dbx_regnum == IGNORED_DWARF_REGNUM)
11658 return 0;
11659 return one_reg_loc_descriptor (dbx_regnum, initialized);
11660 }
11661 }
11662
11663 /* Return a location descriptor that designates a machine register for
11664 a given hard register number. */
11665
11666 static dw_loc_descr_ref
11667 one_reg_loc_descriptor (unsigned int regno, enum var_init_status initialized)
11668 {
11669 dw_loc_descr_ref reg_loc_descr;
11670
11671 if (regno <= 31)
11672 reg_loc_descr
11673 = new_loc_descr ((enum dwarf_location_atom) (DW_OP_reg0 + regno), 0, 0);
11674 else
11675 reg_loc_descr = new_loc_descr (DW_OP_regx, regno, 0);
11676
11677 if (initialized == VAR_INIT_STATUS_UNINITIALIZED)
11678 add_loc_descr (&reg_loc_descr, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
11679
11680 return reg_loc_descr;
11681 }
11682
11683 /* Given an RTL of a register, return a location descriptor that
11684 designates a value that spans more than one register. */
11685
11686 static dw_loc_descr_ref
11687 multiple_reg_loc_descriptor (rtx rtl, rtx regs,
11688 enum var_init_status initialized)
11689 {
11690 int size, i;
11691 dw_loc_descr_ref loc_result = NULL;
11692
11693 /* Simple, contiguous registers. */
11694 if (regs == NULL_RTX)
11695 {
11696 unsigned reg = REGNO (rtl);
11697 int nregs;
11698
11699 #ifdef LEAF_REG_REMAP
11700 if (crtl->uses_only_leaf_regs)
11701 {
11702 int leaf_reg = LEAF_REG_REMAP (reg);
11703 if (leaf_reg != -1)
11704 reg = (unsigned) leaf_reg;
11705 }
11706 #endif
11707
11708 gcc_assert ((unsigned) DBX_REGISTER_NUMBER (reg) == dbx_reg_number (rtl));
11709 nregs = REG_NREGS (rtl);
11710
11711 size = GET_MODE_SIZE (GET_MODE (rtl)) / nregs;
11712
11713 loc_result = NULL;
11714 while (nregs--)
11715 {
11716 dw_loc_descr_ref t;
11717
11718 t = one_reg_loc_descriptor (DBX_REGISTER_NUMBER (reg),
11719 VAR_INIT_STATUS_INITIALIZED);
11720 add_loc_descr (&loc_result, t);
11721 add_loc_descr_op_piece (&loc_result, size);
11722 ++reg;
11723 }
11724 return loc_result;
11725 }
11726
11727 /* Now onto stupid register sets in non contiguous locations. */
11728
11729 gcc_assert (GET_CODE (regs) == PARALLEL);
11730
11731 size = GET_MODE_SIZE (GET_MODE (XVECEXP (regs, 0, 0)));
11732 loc_result = NULL;
11733
11734 for (i = 0; i < XVECLEN (regs, 0); ++i)
11735 {
11736 dw_loc_descr_ref t;
11737
11738 t = one_reg_loc_descriptor (dbx_reg_number (XVECEXP (regs, 0, i)),
11739 VAR_INIT_STATUS_INITIALIZED);
11740 add_loc_descr (&loc_result, t);
11741 add_loc_descr_op_piece (&loc_result, size);
11742 }
11743
11744 if (loc_result && initialized == VAR_INIT_STATUS_UNINITIALIZED)
11745 add_loc_descr (&loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
11746 return loc_result;
11747 }
11748
11749 static unsigned long size_of_int_loc_descriptor (HOST_WIDE_INT);
11750
11751 /* Return a location descriptor that designates a constant i,
11752 as a compound operation from constant (i >> shift), constant shift
11753 and DW_OP_shl. */
11754
11755 static dw_loc_descr_ref
11756 int_shift_loc_descriptor (HOST_WIDE_INT i, int shift)
11757 {
11758 dw_loc_descr_ref ret = int_loc_descriptor (i >> shift);
11759 add_loc_descr (&ret, int_loc_descriptor (shift));
11760 add_loc_descr (&ret, new_loc_descr (DW_OP_shl, 0, 0));
11761 return ret;
11762 }
11763
11764 /* Return a location descriptor that designates a constant. */
11765
11766 static dw_loc_descr_ref
11767 int_loc_descriptor (HOST_WIDE_INT i)
11768 {
11769 enum dwarf_location_atom op;
11770
11771 /* Pick the smallest representation of a constant, rather than just
11772 defaulting to the LEB encoding. */
11773 if (i >= 0)
11774 {
11775 int clz = clz_hwi (i);
11776 int ctz = ctz_hwi (i);
11777 if (i <= 31)
11778 op = (enum dwarf_location_atom) (DW_OP_lit0 + i);
11779 else if (i <= 0xff)
11780 op = DW_OP_const1u;
11781 else if (i <= 0xffff)
11782 op = DW_OP_const2u;
11783 else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 5
11784 && clz + 5 + 255 >= HOST_BITS_PER_WIDE_INT)
11785 /* DW_OP_litX DW_OP_litY DW_OP_shl takes just 3 bytes and
11786 DW_OP_litX DW_OP_const1u Y DW_OP_shl takes just 4 bytes,
11787 while DW_OP_const4u is 5 bytes. */
11788 return int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT - clz - 5);
11789 else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 8
11790 && clz + 8 + 31 >= HOST_BITS_PER_WIDE_INT)
11791 /* DW_OP_const1u X DW_OP_litY DW_OP_shl takes just 4 bytes,
11792 while DW_OP_const4u is 5 bytes. */
11793 return int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT - clz - 8);
11794 else if (HOST_BITS_PER_WIDE_INT == 32 || i <= 0xffffffff)
11795 op = DW_OP_const4u;
11796 else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 8
11797 && clz + 8 + 255 >= HOST_BITS_PER_WIDE_INT)
11798 /* DW_OP_const1u X DW_OP_const1u Y DW_OP_shl takes just 5 bytes,
11799 while DW_OP_constu of constant >= 0x100000000 takes at least
11800 6 bytes. */
11801 return int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT - clz - 8);
11802 else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 16
11803 && clz + 16 + (size_of_uleb128 (i) > 5 ? 255 : 31)
11804 >= HOST_BITS_PER_WIDE_INT)
11805 /* DW_OP_const2u X DW_OP_litY DW_OP_shl takes just 5 bytes,
11806 DW_OP_const2u X DW_OP_const1u Y DW_OP_shl takes 6 bytes,
11807 while DW_OP_constu takes in this case at least 6 bytes. */
11808 return int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT - clz - 16);
11809 else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 32
11810 && clz + 32 + 31 >= HOST_BITS_PER_WIDE_INT
11811 && size_of_uleb128 (i) > 6)
11812 /* DW_OP_const4u X DW_OP_litY DW_OP_shl takes just 7 bytes. */
11813 return int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT - clz - 32);
11814 else
11815 op = DW_OP_constu;
11816 }
11817 else
11818 {
11819 if (i >= -0x80)
11820 op = DW_OP_const1s;
11821 else if (i >= -0x8000)
11822 op = DW_OP_const2s;
11823 else if (HOST_BITS_PER_WIDE_INT == 32 || i >= -0x80000000)
11824 {
11825 if (size_of_int_loc_descriptor (i) < 5)
11826 {
11827 dw_loc_descr_ref ret = int_loc_descriptor (-i);
11828 add_loc_descr (&ret, new_loc_descr (DW_OP_neg, 0, 0));
11829 return ret;
11830 }
11831 op = DW_OP_const4s;
11832 }
11833 else
11834 {
11835 if (size_of_int_loc_descriptor (i)
11836 < (unsigned long) 1 + size_of_sleb128 (i))
11837 {
11838 dw_loc_descr_ref ret = int_loc_descriptor (-i);
11839 add_loc_descr (&ret, new_loc_descr (DW_OP_neg, 0, 0));
11840 return ret;
11841 }
11842 op = DW_OP_consts;
11843 }
11844 }
11845
11846 return new_loc_descr (op, i, 0);
11847 }
11848
11849 /* Likewise, for unsigned constants. */
11850
11851 static dw_loc_descr_ref
11852 uint_loc_descriptor (unsigned HOST_WIDE_INT i)
11853 {
11854 const unsigned HOST_WIDE_INT max_int = INTTYPE_MAXIMUM (HOST_WIDE_INT);
11855 const unsigned HOST_WIDE_INT max_uint
11856 = INTTYPE_MAXIMUM (unsigned HOST_WIDE_INT);
11857
11858 /* If possible, use the clever signed constants handling. */
11859 if (i <= max_int)
11860 return int_loc_descriptor ((HOST_WIDE_INT) i);
11861
11862 /* Here, we are left with positive numbers that cannot be represented as
11863 HOST_WIDE_INT, i.e.:
11864 max (HOST_WIDE_INT) < i <= max (unsigned HOST_WIDE_INT)
11865
11866 Using DW_OP_const4/8/./u operation to encode them consumes a lot of bytes
11867 whereas may be better to output a negative integer: thanks to integer
11868 wrapping, we know that:
11869 x = x - 2 ** DWARF2_ADDR_SIZE
11870 = x - 2 * (max (HOST_WIDE_INT) + 1)
11871 So numbers close to max (unsigned HOST_WIDE_INT) could be represented as
11872 small negative integers. Let's try that in cases it will clearly improve
11873 the encoding: there is no gain turning DW_OP_const4u into
11874 DW_OP_const4s. */
11875 if (DWARF2_ADDR_SIZE * 8 == HOST_BITS_PER_WIDE_INT
11876 && ((DWARF2_ADDR_SIZE == 4 && i > max_uint - 0x8000)
11877 || (DWARF2_ADDR_SIZE == 8 && i > max_uint - 0x80000000)))
11878 {
11879 const unsigned HOST_WIDE_INT first_shift = i - max_int - 1;
11880
11881 /* Now, -1 < first_shift <= max (HOST_WIDE_INT)
11882 i.e. 0 <= first_shift <= max (HOST_WIDE_INT). */
11883 const HOST_WIDE_INT second_shift
11884 = (HOST_WIDE_INT) first_shift - (HOST_WIDE_INT) max_int - 1;
11885
11886 /* So we finally have:
11887 -max (HOST_WIDE_INT) - 1 <= second_shift <= -1.
11888 i.e. min (HOST_WIDE_INT) <= second_shift < 0. */
11889 return int_loc_descriptor (second_shift);
11890 }
11891
11892 /* Last chance: fallback to a simple constant operation. */
11893 return new_loc_descr
11894 ((HOST_BITS_PER_WIDE_INT == 32 || i <= 0xffffffff)
11895 ? DW_OP_const4u
11896 : DW_OP_const8u,
11897 i, 0);
11898 }
11899
11900 /* Generate and return a location description that computes the unsigned
11901 comparison of the two stack top entries (a OP b where b is the top-most
11902 entry and a is the second one). The KIND of comparison can be LT_EXPR,
11903 LE_EXPR, GT_EXPR or GE_EXPR. */
11904
11905 static dw_loc_descr_ref
11906 uint_comparison_loc_list (enum tree_code kind)
11907 {
11908 enum dwarf_location_atom op, flip_op;
11909 dw_loc_descr_ref ret, bra_node, jmp_node, tmp;
11910
11911 switch (kind)
11912 {
11913 case LT_EXPR:
11914 op = DW_OP_lt;
11915 break;
11916 case LE_EXPR:
11917 op = DW_OP_le;
11918 break;
11919 case GT_EXPR:
11920 op = DW_OP_gt;
11921 break;
11922 case GE_EXPR:
11923 op = DW_OP_ge;
11924 break;
11925 default:
11926 gcc_unreachable ();
11927 }
11928
11929 bra_node = new_loc_descr (DW_OP_bra, 0, 0);
11930 jmp_node = new_loc_descr (DW_OP_skip, 0, 0);
11931
11932 /* Until DWARFv4, operations all work on signed integers. It is nevertheless
11933 possible to perform unsigned comparisons: we just have to distinguish
11934 three cases:
11935
11936 1. when a and b have the same sign (as signed integers); then we should
11937 return: a OP(signed) b;
11938
11939 2. when a is a negative signed integer while b is a positive one, then a
11940 is a greater unsigned integer than b; likewise when a and b's roles
11941 are flipped.
11942
11943 So first, compare the sign of the two operands. */
11944 ret = new_loc_descr (DW_OP_over, 0, 0);
11945 add_loc_descr (&ret, new_loc_descr (DW_OP_over, 0, 0));
11946 add_loc_descr (&ret, new_loc_descr (DW_OP_xor, 0, 0));
11947 /* If they have different signs (i.e. they have different sign bits), then
11948 the stack top value has now the sign bit set and thus it's smaller than
11949 zero. */
11950 add_loc_descr (&ret, new_loc_descr (DW_OP_lit0, 0, 0));
11951 add_loc_descr (&ret, new_loc_descr (DW_OP_lt, 0, 0));
11952 add_loc_descr (&ret, bra_node);
11953
11954 /* We are in case 1. At this point, we know both operands have the same
11955 sign, to it's safe to use the built-in signed comparison. */
11956 add_loc_descr (&ret, new_loc_descr (op, 0, 0));
11957 add_loc_descr (&ret, jmp_node);
11958
11959 /* We are in case 2. Here, we know both operands do not have the same sign,
11960 so we have to flip the signed comparison. */
11961 flip_op = (kind == LT_EXPR || kind == LE_EXPR) ? DW_OP_gt : DW_OP_lt;
11962 tmp = new_loc_descr (flip_op, 0, 0);
11963 bra_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
11964 bra_node->dw_loc_oprnd1.v.val_loc = tmp;
11965 add_loc_descr (&ret, tmp);
11966
11967 /* This dummy operation is necessary to make the two branches join. */
11968 tmp = new_loc_descr (DW_OP_nop, 0, 0);
11969 jmp_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
11970 jmp_node->dw_loc_oprnd1.v.val_loc = tmp;
11971 add_loc_descr (&ret, tmp);
11972
11973 return ret;
11974 }
11975
11976 /* Likewise, but takes the location description lists (might be destructive on
11977 them). Return NULL if either is NULL or if concatenation fails. */
11978
11979 static dw_loc_list_ref
11980 loc_list_from_uint_comparison (dw_loc_list_ref left, dw_loc_list_ref right,
11981 enum tree_code kind)
11982 {
11983 if (left == NULL || right == NULL)
11984 return NULL;
11985
11986 add_loc_list (&left, right);
11987 if (left == NULL)
11988 return NULL;
11989
11990 add_loc_descr_to_each (left, uint_comparison_loc_list (kind));
11991 return left;
11992 }
11993
11994 /* Return size_of_locs (int_shift_loc_descriptor (i, shift))
11995 without actually allocating it. */
11996
11997 static unsigned long
11998 size_of_int_shift_loc_descriptor (HOST_WIDE_INT i, int shift)
11999 {
12000 return size_of_int_loc_descriptor (i >> shift)
12001 + size_of_int_loc_descriptor (shift)
12002 + 1;
12003 }
12004
12005 /* Return size_of_locs (int_loc_descriptor (i)) without
12006 actually allocating it. */
12007
12008 static unsigned long
12009 size_of_int_loc_descriptor (HOST_WIDE_INT i)
12010 {
12011 unsigned long s;
12012
12013 if (i >= 0)
12014 {
12015 int clz, ctz;
12016 if (i <= 31)
12017 return 1;
12018 else if (i <= 0xff)
12019 return 2;
12020 else if (i <= 0xffff)
12021 return 3;
12022 clz = clz_hwi (i);
12023 ctz = ctz_hwi (i);
12024 if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 5
12025 && clz + 5 + 255 >= HOST_BITS_PER_WIDE_INT)
12026 return size_of_int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT
12027 - clz - 5);
12028 else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 8
12029 && clz + 8 + 31 >= HOST_BITS_PER_WIDE_INT)
12030 return size_of_int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT
12031 - clz - 8);
12032 else if (HOST_BITS_PER_WIDE_INT == 32 || i <= 0xffffffff)
12033 return 5;
12034 s = size_of_uleb128 ((unsigned HOST_WIDE_INT) i);
12035 if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 8
12036 && clz + 8 + 255 >= HOST_BITS_PER_WIDE_INT)
12037 return size_of_int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT
12038 - clz - 8);
12039 else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 16
12040 && clz + 16 + (s > 5 ? 255 : 31) >= HOST_BITS_PER_WIDE_INT)
12041 return size_of_int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT
12042 - clz - 16);
12043 else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 32
12044 && clz + 32 + 31 >= HOST_BITS_PER_WIDE_INT
12045 && s > 6)
12046 return size_of_int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT
12047 - clz - 32);
12048 else
12049 return 1 + s;
12050 }
12051 else
12052 {
12053 if (i >= -0x80)
12054 return 2;
12055 else if (i >= -0x8000)
12056 return 3;
12057 else if (HOST_BITS_PER_WIDE_INT == 32 || i >= -0x80000000)
12058 {
12059 if (-(unsigned HOST_WIDE_INT) i != (unsigned HOST_WIDE_INT) i)
12060 {
12061 s = size_of_int_loc_descriptor (-i) + 1;
12062 if (s < 5)
12063 return s;
12064 }
12065 return 5;
12066 }
12067 else
12068 {
12069 unsigned long r = 1 + size_of_sleb128 (i);
12070 if (-(unsigned HOST_WIDE_INT) i != (unsigned HOST_WIDE_INT) i)
12071 {
12072 s = size_of_int_loc_descriptor (-i) + 1;
12073 if (s < r)
12074 return s;
12075 }
12076 return r;
12077 }
12078 }
12079 }
12080
12081 /* Return loc description representing "address" of integer value.
12082 This can appear only as toplevel expression. */
12083
12084 static dw_loc_descr_ref
12085 address_of_int_loc_descriptor (int size, HOST_WIDE_INT i)
12086 {
12087 int litsize;
12088 dw_loc_descr_ref loc_result = NULL;
12089
12090 if (!(dwarf_version >= 4 || !dwarf_strict))
12091 return NULL;
12092
12093 litsize = size_of_int_loc_descriptor (i);
12094 /* Determine if DW_OP_stack_value or DW_OP_implicit_value
12095 is more compact. For DW_OP_stack_value we need:
12096 litsize + 1 (DW_OP_stack_value)
12097 and for DW_OP_implicit_value:
12098 1 (DW_OP_implicit_value) + 1 (length) + size. */
12099 if ((int) DWARF2_ADDR_SIZE >= size && litsize + 1 <= 1 + 1 + size)
12100 {
12101 loc_result = int_loc_descriptor (i);
12102 add_loc_descr (&loc_result,
12103 new_loc_descr (DW_OP_stack_value, 0, 0));
12104 return loc_result;
12105 }
12106
12107 loc_result = new_loc_descr (DW_OP_implicit_value,
12108 size, 0);
12109 loc_result->dw_loc_oprnd2.val_class = dw_val_class_const;
12110 loc_result->dw_loc_oprnd2.v.val_int = i;
12111 return loc_result;
12112 }
12113
12114 /* Return a location descriptor that designates a base+offset location. */
12115
12116 static dw_loc_descr_ref
12117 based_loc_descr (rtx reg, HOST_WIDE_INT offset,
12118 enum var_init_status initialized)
12119 {
12120 unsigned int regno;
12121 dw_loc_descr_ref result;
12122 dw_fde_ref fde = cfun->fde;
12123
12124 /* We only use "frame base" when we're sure we're talking about the
12125 post-prologue local stack frame. We do this by *not* running
12126 register elimination until this point, and recognizing the special
12127 argument pointer and soft frame pointer rtx's. */
12128 if (reg == arg_pointer_rtx || reg == frame_pointer_rtx)
12129 {
12130 rtx elim = (ira_use_lra_p
12131 ? lra_eliminate_regs (reg, VOIDmode, NULL_RTX)
12132 : eliminate_regs (reg, VOIDmode, NULL_RTX));
12133
12134 if (elim != reg)
12135 {
12136 if (GET_CODE (elim) == PLUS)
12137 {
12138 offset += INTVAL (XEXP (elim, 1));
12139 elim = XEXP (elim, 0);
12140 }
12141 gcc_assert ((SUPPORTS_STACK_ALIGNMENT
12142 && (elim == hard_frame_pointer_rtx
12143 || elim == stack_pointer_rtx))
12144 || elim == (frame_pointer_needed
12145 ? hard_frame_pointer_rtx
12146 : stack_pointer_rtx));
12147
12148 /* If drap register is used to align stack, use frame
12149 pointer + offset to access stack variables. If stack
12150 is aligned without drap, use stack pointer + offset to
12151 access stack variables. */
12152 if (crtl->stack_realign_tried
12153 && reg == frame_pointer_rtx)
12154 {
12155 int base_reg
12156 = DWARF_FRAME_REGNUM ((fde && fde->drap_reg != INVALID_REGNUM)
12157 ? HARD_FRAME_POINTER_REGNUM
12158 : REGNO (elim));
12159 return new_reg_loc_descr (base_reg, offset);
12160 }
12161
12162 gcc_assert (frame_pointer_fb_offset_valid);
12163 offset += frame_pointer_fb_offset;
12164 return new_loc_descr (DW_OP_fbreg, offset, 0);
12165 }
12166 }
12167
12168 regno = REGNO (reg);
12169 #ifdef LEAF_REG_REMAP
12170 if (crtl->uses_only_leaf_regs)
12171 {
12172 int leaf_reg = LEAF_REG_REMAP (regno);
12173 if (leaf_reg != -1)
12174 regno = (unsigned) leaf_reg;
12175 }
12176 #endif
12177 regno = DWARF_FRAME_REGNUM (regno);
12178
12179 if (!optimize && fde
12180 && (fde->drap_reg == regno || fde->vdrap_reg == regno))
12181 {
12182 /* Use cfa+offset to represent the location of arguments passed
12183 on the stack when drap is used to align stack.
12184 Only do this when not optimizing, for optimized code var-tracking
12185 is supposed to track where the arguments live and the register
12186 used as vdrap or drap in some spot might be used for something
12187 else in other part of the routine. */
12188 return new_loc_descr (DW_OP_fbreg, offset, 0);
12189 }
12190
12191 if (regno <= 31)
12192 result = new_loc_descr ((enum dwarf_location_atom) (DW_OP_breg0 + regno),
12193 offset, 0);
12194 else
12195 result = new_loc_descr (DW_OP_bregx, regno, offset);
12196
12197 if (initialized == VAR_INIT_STATUS_UNINITIALIZED)
12198 add_loc_descr (&result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
12199
12200 return result;
12201 }
12202
12203 /* Return true if this RTL expression describes a base+offset calculation. */
12204
12205 static inline int
12206 is_based_loc (const_rtx rtl)
12207 {
12208 return (GET_CODE (rtl) == PLUS
12209 && ((REG_P (XEXP (rtl, 0))
12210 && REGNO (XEXP (rtl, 0)) < FIRST_PSEUDO_REGISTER
12211 && CONST_INT_P (XEXP (rtl, 1)))));
12212 }
12213
12214 /* Try to handle TLS MEMs, for which mem_loc_descriptor on XEXP (mem, 0)
12215 failed. */
12216
12217 static dw_loc_descr_ref
12218 tls_mem_loc_descriptor (rtx mem)
12219 {
12220 tree base;
12221 dw_loc_descr_ref loc_result;
12222
12223 if (MEM_EXPR (mem) == NULL_TREE || !MEM_OFFSET_KNOWN_P (mem))
12224 return NULL;
12225
12226 base = get_base_address (MEM_EXPR (mem));
12227 if (base == NULL
12228 || TREE_CODE (base) != VAR_DECL
12229 || !DECL_THREAD_LOCAL_P (base))
12230 return NULL;
12231
12232 loc_result = loc_descriptor_from_tree (MEM_EXPR (mem), 1, NULL);
12233 if (loc_result == NULL)
12234 return NULL;
12235
12236 if (MEM_OFFSET (mem))
12237 loc_descr_plus_const (&loc_result, MEM_OFFSET (mem));
12238
12239 return loc_result;
12240 }
12241
12242 /* Output debug info about reason why we failed to expand expression as dwarf
12243 expression. */
12244
12245 static void
12246 expansion_failed (tree expr, rtx rtl, char const *reason)
12247 {
12248 if (dump_file && (dump_flags & TDF_DETAILS))
12249 {
12250 fprintf (dump_file, "Failed to expand as dwarf: ");
12251 if (expr)
12252 print_generic_expr (dump_file, expr, dump_flags);
12253 if (rtl)
12254 {
12255 fprintf (dump_file, "\n");
12256 print_rtl (dump_file, rtl);
12257 }
12258 fprintf (dump_file, "\nReason: %s\n", reason);
12259 }
12260 }
12261
12262 /* Helper function for const_ok_for_output. */
12263
12264 static bool
12265 const_ok_for_output_1 (rtx rtl)
12266 {
12267 if (GET_CODE (rtl) == UNSPEC)
12268 {
12269 /* If delegitimize_address couldn't do anything with the UNSPEC, assume
12270 we can't express it in the debug info. */
12271 /* Don't complain about TLS UNSPECs, those are just too hard to
12272 delegitimize. Note this could be a non-decl SYMBOL_REF such as
12273 one in a constant pool entry, so testing SYMBOL_REF_TLS_MODEL
12274 rather than DECL_THREAD_LOCAL_P is not just an optimization. */
12275 if (flag_checking
12276 && (XVECLEN (rtl, 0) == 0
12277 || GET_CODE (XVECEXP (rtl, 0, 0)) != SYMBOL_REF
12278 || SYMBOL_REF_TLS_MODEL (XVECEXP (rtl, 0, 0)) == TLS_MODEL_NONE))
12279 inform (current_function_decl
12280 ? DECL_SOURCE_LOCATION (current_function_decl)
12281 : UNKNOWN_LOCATION,
12282 #if NUM_UNSPEC_VALUES > 0
12283 "non-delegitimized UNSPEC %s (%d) found in variable location",
12284 ((XINT (rtl, 1) >= 0 && XINT (rtl, 1) < NUM_UNSPEC_VALUES)
12285 ? unspec_strings[XINT (rtl, 1)] : "unknown"),
12286 XINT (rtl, 1));
12287 #else
12288 "non-delegitimized UNSPEC %d found in variable location",
12289 XINT (rtl, 1));
12290 #endif
12291 expansion_failed (NULL_TREE, rtl,
12292 "UNSPEC hasn't been delegitimized.\n");
12293 return false;
12294 }
12295
12296 if (targetm.const_not_ok_for_debug_p (rtl))
12297 {
12298 expansion_failed (NULL_TREE, rtl,
12299 "Expression rejected for debug by the backend.\n");
12300 return false;
12301 }
12302
12303 /* FIXME: Refer to PR60655. It is possible for simplification
12304 of rtl expressions in var tracking to produce such expressions.
12305 We should really identify / validate expressions
12306 enclosed in CONST that can be handled by assemblers on various
12307 targets and only handle legitimate cases here. */
12308 if (GET_CODE (rtl) != SYMBOL_REF)
12309 {
12310 if (GET_CODE (rtl) == NOT)
12311 return false;
12312 return true;
12313 }
12314
12315 if (CONSTANT_POOL_ADDRESS_P (rtl))
12316 {
12317 bool marked;
12318 get_pool_constant_mark (rtl, &marked);
12319 /* If all references to this pool constant were optimized away,
12320 it was not output and thus we can't represent it. */
12321 if (!marked)
12322 {
12323 expansion_failed (NULL_TREE, rtl,
12324 "Constant was removed from constant pool.\n");
12325 return false;
12326 }
12327 }
12328
12329 if (SYMBOL_REF_TLS_MODEL (rtl) != TLS_MODEL_NONE)
12330 return false;
12331
12332 /* Avoid references to external symbols in debug info, on several targets
12333 the linker might even refuse to link when linking a shared library,
12334 and in many other cases the relocations for .debug_info/.debug_loc are
12335 dropped, so the address becomes zero anyway. Hidden symbols, guaranteed
12336 to be defined within the same shared library or executable are fine. */
12337 if (SYMBOL_REF_EXTERNAL_P (rtl))
12338 {
12339 tree decl = SYMBOL_REF_DECL (rtl);
12340
12341 if (decl == NULL || !targetm.binds_local_p (decl))
12342 {
12343 expansion_failed (NULL_TREE, rtl,
12344 "Symbol not defined in current TU.\n");
12345 return false;
12346 }
12347 }
12348
12349 return true;
12350 }
12351
12352 /* Return true if constant RTL can be emitted in DW_OP_addr or
12353 DW_AT_const_value. TLS SYMBOL_REFs, external SYMBOL_REFs or
12354 non-marked constant pool SYMBOL_REFs can't be referenced in it. */
12355
12356 static bool
12357 const_ok_for_output (rtx rtl)
12358 {
12359 if (GET_CODE (rtl) == SYMBOL_REF)
12360 return const_ok_for_output_1 (rtl);
12361
12362 if (GET_CODE (rtl) == CONST)
12363 {
12364 subrtx_var_iterator::array_type array;
12365 FOR_EACH_SUBRTX_VAR (iter, array, XEXP (rtl, 0), ALL)
12366 if (!const_ok_for_output_1 (*iter))
12367 return false;
12368 return true;
12369 }
12370
12371 return true;
12372 }
12373
12374 /* Return a reference to DW_TAG_base_type corresponding to MODE and UNSIGNEDP
12375 if possible, NULL otherwise. */
12376
12377 static dw_die_ref
12378 base_type_for_mode (machine_mode mode, bool unsignedp)
12379 {
12380 dw_die_ref type_die;
12381 tree type = lang_hooks.types.type_for_mode (mode, unsignedp);
12382
12383 if (type == NULL)
12384 return NULL;
12385 switch (TREE_CODE (type))
12386 {
12387 case INTEGER_TYPE:
12388 case REAL_TYPE:
12389 break;
12390 default:
12391 return NULL;
12392 }
12393 type_die = lookup_type_die (type);
12394 if (!type_die)
12395 type_die = modified_type_die (type, TYPE_UNQUALIFIED, comp_unit_die ());
12396 if (type_die == NULL || type_die->die_tag != DW_TAG_base_type)
12397 return NULL;
12398 return type_die;
12399 }
12400
12401 /* For OP descriptor assumed to be in unsigned MODE, convert it to a unsigned
12402 type matching MODE, or, if MODE is narrower than or as wide as
12403 DWARF2_ADDR_SIZE, untyped. Return NULL if the conversion is not
12404 possible. */
12405
12406 static dw_loc_descr_ref
12407 convert_descriptor_to_mode (machine_mode mode, dw_loc_descr_ref op)
12408 {
12409 machine_mode outer_mode = mode;
12410 dw_die_ref type_die;
12411 dw_loc_descr_ref cvt;
12412
12413 if (GET_MODE_SIZE (mode) <= DWARF2_ADDR_SIZE)
12414 {
12415 add_loc_descr (&op, new_loc_descr (DW_OP_GNU_convert, 0, 0));
12416 return op;
12417 }
12418 type_die = base_type_for_mode (outer_mode, 1);
12419 if (type_die == NULL)
12420 return NULL;
12421 cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
12422 cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
12423 cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
12424 cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
12425 add_loc_descr (&op, cvt);
12426 return op;
12427 }
12428
12429 /* Return location descriptor for comparison OP with operands OP0 and OP1. */
12430
12431 static dw_loc_descr_ref
12432 compare_loc_descriptor (enum dwarf_location_atom op, dw_loc_descr_ref op0,
12433 dw_loc_descr_ref op1)
12434 {
12435 dw_loc_descr_ref ret = op0;
12436 add_loc_descr (&ret, op1);
12437 add_loc_descr (&ret, new_loc_descr (op, 0, 0));
12438 if (STORE_FLAG_VALUE != 1)
12439 {
12440 add_loc_descr (&ret, int_loc_descriptor (STORE_FLAG_VALUE));
12441 add_loc_descr (&ret, new_loc_descr (DW_OP_mul, 0, 0));
12442 }
12443 return ret;
12444 }
12445
12446 /* Return location descriptor for signed comparison OP RTL. */
12447
12448 static dw_loc_descr_ref
12449 scompare_loc_descriptor (enum dwarf_location_atom op, rtx rtl,
12450 machine_mode mem_mode)
12451 {
12452 machine_mode op_mode = GET_MODE (XEXP (rtl, 0));
12453 dw_loc_descr_ref op0, op1;
12454 int shift;
12455
12456 if (op_mode == VOIDmode)
12457 op_mode = GET_MODE (XEXP (rtl, 1));
12458 if (op_mode == VOIDmode)
12459 return NULL;
12460
12461 if (dwarf_strict
12462 && (GET_MODE_CLASS (op_mode) != MODE_INT
12463 || GET_MODE_SIZE (op_mode) > DWARF2_ADDR_SIZE))
12464 return NULL;
12465
12466 op0 = mem_loc_descriptor (XEXP (rtl, 0), op_mode, mem_mode,
12467 VAR_INIT_STATUS_INITIALIZED);
12468 op1 = mem_loc_descriptor (XEXP (rtl, 1), op_mode, mem_mode,
12469 VAR_INIT_STATUS_INITIALIZED);
12470
12471 if (op0 == NULL || op1 == NULL)
12472 return NULL;
12473
12474 if (GET_MODE_CLASS (op_mode) != MODE_INT
12475 || GET_MODE_SIZE (op_mode) == DWARF2_ADDR_SIZE)
12476 return compare_loc_descriptor (op, op0, op1);
12477
12478 if (GET_MODE_SIZE (op_mode) > DWARF2_ADDR_SIZE)
12479 {
12480 dw_die_ref type_die = base_type_for_mode (op_mode, 0);
12481 dw_loc_descr_ref cvt;
12482
12483 if (type_die == NULL)
12484 return NULL;
12485 cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
12486 cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
12487 cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
12488 cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
12489 add_loc_descr (&op0, cvt);
12490 cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
12491 cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
12492 cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
12493 cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
12494 add_loc_descr (&op1, cvt);
12495 return compare_loc_descriptor (op, op0, op1);
12496 }
12497
12498 shift = (DWARF2_ADDR_SIZE - GET_MODE_SIZE (op_mode)) * BITS_PER_UNIT;
12499 /* For eq/ne, if the operands are known to be zero-extended,
12500 there is no need to do the fancy shifting up. */
12501 if (op == DW_OP_eq || op == DW_OP_ne)
12502 {
12503 dw_loc_descr_ref last0, last1;
12504 for (last0 = op0; last0->dw_loc_next != NULL; last0 = last0->dw_loc_next)
12505 ;
12506 for (last1 = op1; last1->dw_loc_next != NULL; last1 = last1->dw_loc_next)
12507 ;
12508 /* deref_size zero extends, and for constants we can check
12509 whether they are zero extended or not. */
12510 if (((last0->dw_loc_opc == DW_OP_deref_size
12511 && last0->dw_loc_oprnd1.v.val_int <= GET_MODE_SIZE (op_mode))
12512 || (CONST_INT_P (XEXP (rtl, 0))
12513 && (unsigned HOST_WIDE_INT) INTVAL (XEXP (rtl, 0))
12514 == (INTVAL (XEXP (rtl, 0)) & GET_MODE_MASK (op_mode))))
12515 && ((last1->dw_loc_opc == DW_OP_deref_size
12516 && last1->dw_loc_oprnd1.v.val_int <= GET_MODE_SIZE (op_mode))
12517 || (CONST_INT_P (XEXP (rtl, 1))
12518 && (unsigned HOST_WIDE_INT) INTVAL (XEXP (rtl, 1))
12519 == (INTVAL (XEXP (rtl, 1)) & GET_MODE_MASK (op_mode)))))
12520 return compare_loc_descriptor (op, op0, op1);
12521
12522 /* EQ/NE comparison against constant in narrower type than
12523 DWARF2_ADDR_SIZE can be performed either as
12524 DW_OP_const1u <shift> DW_OP_shl DW_OP_const* <cst << shift>
12525 DW_OP_{eq,ne}
12526 or
12527 DW_OP_const*u <mode_mask> DW_OP_and DW_OP_const* <cst & mode_mask>
12528 DW_OP_{eq,ne}. Pick whatever is shorter. */
12529 if (CONST_INT_P (XEXP (rtl, 1))
12530 && GET_MODE_BITSIZE (op_mode) < HOST_BITS_PER_WIDE_INT
12531 && (size_of_int_loc_descriptor (shift) + 1
12532 + size_of_int_loc_descriptor (INTVAL (XEXP (rtl, 1)) << shift)
12533 >= size_of_int_loc_descriptor (GET_MODE_MASK (op_mode)) + 1
12534 + size_of_int_loc_descriptor (INTVAL (XEXP (rtl, 1))
12535 & GET_MODE_MASK (op_mode))))
12536 {
12537 add_loc_descr (&op0, int_loc_descriptor (GET_MODE_MASK (op_mode)));
12538 add_loc_descr (&op0, new_loc_descr (DW_OP_and, 0, 0));
12539 op1 = int_loc_descriptor (INTVAL (XEXP (rtl, 1))
12540 & GET_MODE_MASK (op_mode));
12541 return compare_loc_descriptor (op, op0, op1);
12542 }
12543 }
12544 add_loc_descr (&op0, int_loc_descriptor (shift));
12545 add_loc_descr (&op0, new_loc_descr (DW_OP_shl, 0, 0));
12546 if (CONST_INT_P (XEXP (rtl, 1)))
12547 op1 = int_loc_descriptor (INTVAL (XEXP (rtl, 1)) << shift);
12548 else
12549 {
12550 add_loc_descr (&op1, int_loc_descriptor (shift));
12551 add_loc_descr (&op1, new_loc_descr (DW_OP_shl, 0, 0));
12552 }
12553 return compare_loc_descriptor (op, op0, op1);
12554 }
12555
12556 /* Return location descriptor for unsigned comparison OP RTL. */
12557
12558 static dw_loc_descr_ref
12559 ucompare_loc_descriptor (enum dwarf_location_atom op, rtx rtl,
12560 machine_mode mem_mode)
12561 {
12562 machine_mode op_mode = GET_MODE (XEXP (rtl, 0));
12563 dw_loc_descr_ref op0, op1;
12564
12565 if (op_mode == VOIDmode)
12566 op_mode = GET_MODE (XEXP (rtl, 1));
12567 if (op_mode == VOIDmode)
12568 return NULL;
12569 if (GET_MODE_CLASS (op_mode) != MODE_INT)
12570 return NULL;
12571
12572 if (dwarf_strict && GET_MODE_SIZE (op_mode) > DWARF2_ADDR_SIZE)
12573 return NULL;
12574
12575 op0 = mem_loc_descriptor (XEXP (rtl, 0), op_mode, mem_mode,
12576 VAR_INIT_STATUS_INITIALIZED);
12577 op1 = mem_loc_descriptor (XEXP (rtl, 1), op_mode, mem_mode,
12578 VAR_INIT_STATUS_INITIALIZED);
12579
12580 if (op0 == NULL || op1 == NULL)
12581 return NULL;
12582
12583 if (GET_MODE_SIZE (op_mode) < DWARF2_ADDR_SIZE)
12584 {
12585 HOST_WIDE_INT mask = GET_MODE_MASK (op_mode);
12586 dw_loc_descr_ref last0, last1;
12587 for (last0 = op0; last0->dw_loc_next != NULL; last0 = last0->dw_loc_next)
12588 ;
12589 for (last1 = op1; last1->dw_loc_next != NULL; last1 = last1->dw_loc_next)
12590 ;
12591 if (CONST_INT_P (XEXP (rtl, 0)))
12592 op0 = int_loc_descriptor (INTVAL (XEXP (rtl, 0)) & mask);
12593 /* deref_size zero extends, so no need to mask it again. */
12594 else if (last0->dw_loc_opc != DW_OP_deref_size
12595 || last0->dw_loc_oprnd1.v.val_int > GET_MODE_SIZE (op_mode))
12596 {
12597 add_loc_descr (&op0, int_loc_descriptor (mask));
12598 add_loc_descr (&op0, new_loc_descr (DW_OP_and, 0, 0));
12599 }
12600 if (CONST_INT_P (XEXP (rtl, 1)))
12601 op1 = int_loc_descriptor (INTVAL (XEXP (rtl, 1)) & mask);
12602 /* deref_size zero extends, so no need to mask it again. */
12603 else if (last1->dw_loc_opc != DW_OP_deref_size
12604 || last1->dw_loc_oprnd1.v.val_int > GET_MODE_SIZE (op_mode))
12605 {
12606 add_loc_descr (&op1, int_loc_descriptor (mask));
12607 add_loc_descr (&op1, new_loc_descr (DW_OP_and, 0, 0));
12608 }
12609 }
12610 else if (GET_MODE_SIZE (op_mode) == DWARF2_ADDR_SIZE)
12611 {
12612 HOST_WIDE_INT bias = 1;
12613 bias <<= (DWARF2_ADDR_SIZE * BITS_PER_UNIT - 1);
12614 add_loc_descr (&op0, new_loc_descr (DW_OP_plus_uconst, bias, 0));
12615 if (CONST_INT_P (XEXP (rtl, 1)))
12616 op1 = int_loc_descriptor ((unsigned HOST_WIDE_INT) bias
12617 + INTVAL (XEXP (rtl, 1)));
12618 else
12619 add_loc_descr (&op1, new_loc_descr (DW_OP_plus_uconst,
12620 bias, 0));
12621 }
12622 return compare_loc_descriptor (op, op0, op1);
12623 }
12624
12625 /* Return location descriptor for {U,S}{MIN,MAX}. */
12626
12627 static dw_loc_descr_ref
12628 minmax_loc_descriptor (rtx rtl, machine_mode mode,
12629 machine_mode mem_mode)
12630 {
12631 enum dwarf_location_atom op;
12632 dw_loc_descr_ref op0, op1, ret;
12633 dw_loc_descr_ref bra_node, drop_node;
12634
12635 if (dwarf_strict
12636 && (GET_MODE_CLASS (mode) != MODE_INT
12637 || GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE))
12638 return NULL;
12639
12640 op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
12641 VAR_INIT_STATUS_INITIALIZED);
12642 op1 = mem_loc_descriptor (XEXP (rtl, 1), mode, mem_mode,
12643 VAR_INIT_STATUS_INITIALIZED);
12644
12645 if (op0 == NULL || op1 == NULL)
12646 return NULL;
12647
12648 add_loc_descr (&op0, new_loc_descr (DW_OP_dup, 0, 0));
12649 add_loc_descr (&op1, new_loc_descr (DW_OP_swap, 0, 0));
12650 add_loc_descr (&op1, new_loc_descr (DW_OP_over, 0, 0));
12651 if (GET_CODE (rtl) == UMIN || GET_CODE (rtl) == UMAX)
12652 {
12653 if (GET_MODE_SIZE (mode) < DWARF2_ADDR_SIZE)
12654 {
12655 HOST_WIDE_INT mask = GET_MODE_MASK (mode);
12656 add_loc_descr (&op0, int_loc_descriptor (mask));
12657 add_loc_descr (&op0, new_loc_descr (DW_OP_and, 0, 0));
12658 add_loc_descr (&op1, int_loc_descriptor (mask));
12659 add_loc_descr (&op1, new_loc_descr (DW_OP_and, 0, 0));
12660 }
12661 else if (GET_MODE_SIZE (mode) == DWARF2_ADDR_SIZE)
12662 {
12663 HOST_WIDE_INT bias = 1;
12664 bias <<= (DWARF2_ADDR_SIZE * BITS_PER_UNIT - 1);
12665 add_loc_descr (&op0, new_loc_descr (DW_OP_plus_uconst, bias, 0));
12666 add_loc_descr (&op1, new_loc_descr (DW_OP_plus_uconst, bias, 0));
12667 }
12668 }
12669 else if (GET_MODE_CLASS (mode) == MODE_INT
12670 && GET_MODE_SIZE (mode) < DWARF2_ADDR_SIZE)
12671 {
12672 int shift = (DWARF2_ADDR_SIZE - GET_MODE_SIZE (mode)) * BITS_PER_UNIT;
12673 add_loc_descr (&op0, int_loc_descriptor (shift));
12674 add_loc_descr (&op0, new_loc_descr (DW_OP_shl, 0, 0));
12675 add_loc_descr (&op1, int_loc_descriptor (shift));
12676 add_loc_descr (&op1, new_loc_descr (DW_OP_shl, 0, 0));
12677 }
12678 else if (GET_MODE_CLASS (mode) == MODE_INT
12679 && GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE)
12680 {
12681 dw_die_ref type_die = base_type_for_mode (mode, 0);
12682 dw_loc_descr_ref cvt;
12683 if (type_die == NULL)
12684 return NULL;
12685 cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
12686 cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
12687 cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
12688 cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
12689 add_loc_descr (&op0, cvt);
12690 cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
12691 cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
12692 cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
12693 cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
12694 add_loc_descr (&op1, cvt);
12695 }
12696
12697 if (GET_CODE (rtl) == SMIN || GET_CODE (rtl) == UMIN)
12698 op = DW_OP_lt;
12699 else
12700 op = DW_OP_gt;
12701 ret = op0;
12702 add_loc_descr (&ret, op1);
12703 add_loc_descr (&ret, new_loc_descr (op, 0, 0));
12704 bra_node = new_loc_descr (DW_OP_bra, 0, 0);
12705 add_loc_descr (&ret, bra_node);
12706 add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
12707 drop_node = new_loc_descr (DW_OP_drop, 0, 0);
12708 add_loc_descr (&ret, drop_node);
12709 bra_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
12710 bra_node->dw_loc_oprnd1.v.val_loc = drop_node;
12711 if ((GET_CODE (rtl) == SMIN || GET_CODE (rtl) == SMAX)
12712 && GET_MODE_CLASS (mode) == MODE_INT
12713 && GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE)
12714 ret = convert_descriptor_to_mode (mode, ret);
12715 return ret;
12716 }
12717
12718 /* Helper function for mem_loc_descriptor. Perform OP binary op,
12719 but after converting arguments to type_die, afterwards
12720 convert back to unsigned. */
12721
12722 static dw_loc_descr_ref
12723 typed_binop (enum dwarf_location_atom op, rtx rtl, dw_die_ref type_die,
12724 machine_mode mode, machine_mode mem_mode)
12725 {
12726 dw_loc_descr_ref cvt, op0, op1;
12727
12728 if (type_die == NULL)
12729 return NULL;
12730 op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
12731 VAR_INIT_STATUS_INITIALIZED);
12732 op1 = mem_loc_descriptor (XEXP (rtl, 1), mode, mem_mode,
12733 VAR_INIT_STATUS_INITIALIZED);
12734 if (op0 == NULL || op1 == NULL)
12735 return NULL;
12736 cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
12737 cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
12738 cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
12739 cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
12740 add_loc_descr (&op0, cvt);
12741 cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
12742 cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
12743 cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
12744 cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
12745 add_loc_descr (&op1, cvt);
12746 add_loc_descr (&op0, op1);
12747 add_loc_descr (&op0, new_loc_descr (op, 0, 0));
12748 return convert_descriptor_to_mode (mode, op0);
12749 }
12750
12751 /* CLZ (where constV is CLZ_DEFINED_VALUE_AT_ZERO computed value,
12752 const0 is DW_OP_lit0 or corresponding typed constant,
12753 const1 is DW_OP_lit1 or corresponding typed constant
12754 and constMSB is constant with just the MSB bit set
12755 for the mode):
12756 DW_OP_dup DW_OP_bra <L1> DW_OP_drop constV DW_OP_skip <L4>
12757 L1: const0 DW_OP_swap
12758 L2: DW_OP_dup constMSB DW_OP_and DW_OP_bra <L3> const1 DW_OP_shl
12759 DW_OP_swap DW_OP_plus_uconst <1> DW_OP_swap DW_OP_skip <L2>
12760 L3: DW_OP_drop
12761 L4: DW_OP_nop
12762
12763 CTZ is similar:
12764 DW_OP_dup DW_OP_bra <L1> DW_OP_drop constV DW_OP_skip <L4>
12765 L1: const0 DW_OP_swap
12766 L2: DW_OP_dup const1 DW_OP_and DW_OP_bra <L3> const1 DW_OP_shr
12767 DW_OP_swap DW_OP_plus_uconst <1> DW_OP_swap DW_OP_skip <L2>
12768 L3: DW_OP_drop
12769 L4: DW_OP_nop
12770
12771 FFS is similar:
12772 DW_OP_dup DW_OP_bra <L1> DW_OP_drop const0 DW_OP_skip <L4>
12773 L1: const1 DW_OP_swap
12774 L2: DW_OP_dup const1 DW_OP_and DW_OP_bra <L3> const1 DW_OP_shr
12775 DW_OP_swap DW_OP_plus_uconst <1> DW_OP_swap DW_OP_skip <L2>
12776 L3: DW_OP_drop
12777 L4: DW_OP_nop */
12778
12779 static dw_loc_descr_ref
12780 clz_loc_descriptor (rtx rtl, machine_mode mode,
12781 machine_mode mem_mode)
12782 {
12783 dw_loc_descr_ref op0, ret, tmp;
12784 HOST_WIDE_INT valv;
12785 dw_loc_descr_ref l1jump, l1label;
12786 dw_loc_descr_ref l2jump, l2label;
12787 dw_loc_descr_ref l3jump, l3label;
12788 dw_loc_descr_ref l4jump, l4label;
12789 rtx msb;
12790
12791 if (GET_MODE_CLASS (mode) != MODE_INT
12792 || GET_MODE (XEXP (rtl, 0)) != mode)
12793 return NULL;
12794
12795 op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
12796 VAR_INIT_STATUS_INITIALIZED);
12797 if (op0 == NULL)
12798 return NULL;
12799 ret = op0;
12800 if (GET_CODE (rtl) == CLZ)
12801 {
12802 if (!CLZ_DEFINED_VALUE_AT_ZERO (mode, valv))
12803 valv = GET_MODE_BITSIZE (mode);
12804 }
12805 else if (GET_CODE (rtl) == FFS)
12806 valv = 0;
12807 else if (!CTZ_DEFINED_VALUE_AT_ZERO (mode, valv))
12808 valv = GET_MODE_BITSIZE (mode);
12809 add_loc_descr (&ret, new_loc_descr (DW_OP_dup, 0, 0));
12810 l1jump = new_loc_descr (DW_OP_bra, 0, 0);
12811 add_loc_descr (&ret, l1jump);
12812 add_loc_descr (&ret, new_loc_descr (DW_OP_drop, 0, 0));
12813 tmp = mem_loc_descriptor (GEN_INT (valv), mode, mem_mode,
12814 VAR_INIT_STATUS_INITIALIZED);
12815 if (tmp == NULL)
12816 return NULL;
12817 add_loc_descr (&ret, tmp);
12818 l4jump = new_loc_descr (DW_OP_skip, 0, 0);
12819 add_loc_descr (&ret, l4jump);
12820 l1label = mem_loc_descriptor (GET_CODE (rtl) == FFS
12821 ? const1_rtx : const0_rtx,
12822 mode, mem_mode,
12823 VAR_INIT_STATUS_INITIALIZED);
12824 if (l1label == NULL)
12825 return NULL;
12826 add_loc_descr (&ret, l1label);
12827 add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
12828 l2label = new_loc_descr (DW_OP_dup, 0, 0);
12829 add_loc_descr (&ret, l2label);
12830 if (GET_CODE (rtl) != CLZ)
12831 msb = const1_rtx;
12832 else if (GET_MODE_BITSIZE (mode) <= HOST_BITS_PER_WIDE_INT)
12833 msb = GEN_INT ((unsigned HOST_WIDE_INT) 1
12834 << (GET_MODE_BITSIZE (mode) - 1));
12835 else
12836 msb = immed_wide_int_const
12837 (wi::set_bit_in_zero (GET_MODE_PRECISION (mode) - 1,
12838 GET_MODE_PRECISION (mode)), mode);
12839 if (GET_CODE (msb) == CONST_INT && INTVAL (msb) < 0)
12840 tmp = new_loc_descr (HOST_BITS_PER_WIDE_INT == 32
12841 ? DW_OP_const4u : HOST_BITS_PER_WIDE_INT == 64
12842 ? DW_OP_const8u : DW_OP_constu, INTVAL (msb), 0);
12843 else
12844 tmp = mem_loc_descriptor (msb, mode, mem_mode,
12845 VAR_INIT_STATUS_INITIALIZED);
12846 if (tmp == NULL)
12847 return NULL;
12848 add_loc_descr (&ret, tmp);
12849 add_loc_descr (&ret, new_loc_descr (DW_OP_and, 0, 0));
12850 l3jump = new_loc_descr (DW_OP_bra, 0, 0);
12851 add_loc_descr (&ret, l3jump);
12852 tmp = mem_loc_descriptor (const1_rtx, mode, mem_mode,
12853 VAR_INIT_STATUS_INITIALIZED);
12854 if (tmp == NULL)
12855 return NULL;
12856 add_loc_descr (&ret, tmp);
12857 add_loc_descr (&ret, new_loc_descr (GET_CODE (rtl) == CLZ
12858 ? DW_OP_shl : DW_OP_shr, 0, 0));
12859 add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
12860 add_loc_descr (&ret, new_loc_descr (DW_OP_plus_uconst, 1, 0));
12861 add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
12862 l2jump = new_loc_descr (DW_OP_skip, 0, 0);
12863 add_loc_descr (&ret, l2jump);
12864 l3label = new_loc_descr (DW_OP_drop, 0, 0);
12865 add_loc_descr (&ret, l3label);
12866 l4label = new_loc_descr (DW_OP_nop, 0, 0);
12867 add_loc_descr (&ret, l4label);
12868 l1jump->dw_loc_oprnd1.val_class = dw_val_class_loc;
12869 l1jump->dw_loc_oprnd1.v.val_loc = l1label;
12870 l2jump->dw_loc_oprnd1.val_class = dw_val_class_loc;
12871 l2jump->dw_loc_oprnd1.v.val_loc = l2label;
12872 l3jump->dw_loc_oprnd1.val_class = dw_val_class_loc;
12873 l3jump->dw_loc_oprnd1.v.val_loc = l3label;
12874 l4jump->dw_loc_oprnd1.val_class = dw_val_class_loc;
12875 l4jump->dw_loc_oprnd1.v.val_loc = l4label;
12876 return ret;
12877 }
12878
12879 /* POPCOUNT (const0 is DW_OP_lit0 or corresponding typed constant,
12880 const1 is DW_OP_lit1 or corresponding typed constant):
12881 const0 DW_OP_swap
12882 L1: DW_OP_dup DW_OP_bra <L2> DW_OP_dup DW_OP_rot const1 DW_OP_and
12883 DW_OP_plus DW_OP_swap const1 DW_OP_shr DW_OP_skip <L1>
12884 L2: DW_OP_drop
12885
12886 PARITY is similar:
12887 L1: DW_OP_dup DW_OP_bra <L2> DW_OP_dup DW_OP_rot const1 DW_OP_and
12888 DW_OP_xor DW_OP_swap const1 DW_OP_shr DW_OP_skip <L1>
12889 L2: DW_OP_drop */
12890
12891 static dw_loc_descr_ref
12892 popcount_loc_descriptor (rtx rtl, machine_mode mode,
12893 machine_mode mem_mode)
12894 {
12895 dw_loc_descr_ref op0, ret, tmp;
12896 dw_loc_descr_ref l1jump, l1label;
12897 dw_loc_descr_ref l2jump, l2label;
12898
12899 if (GET_MODE_CLASS (mode) != MODE_INT
12900 || GET_MODE (XEXP (rtl, 0)) != mode)
12901 return NULL;
12902
12903 op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
12904 VAR_INIT_STATUS_INITIALIZED);
12905 if (op0 == NULL)
12906 return NULL;
12907 ret = op0;
12908 tmp = mem_loc_descriptor (const0_rtx, mode, mem_mode,
12909 VAR_INIT_STATUS_INITIALIZED);
12910 if (tmp == NULL)
12911 return NULL;
12912 add_loc_descr (&ret, tmp);
12913 add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
12914 l1label = new_loc_descr (DW_OP_dup, 0, 0);
12915 add_loc_descr (&ret, l1label);
12916 l2jump = new_loc_descr (DW_OP_bra, 0, 0);
12917 add_loc_descr (&ret, l2jump);
12918 add_loc_descr (&ret, new_loc_descr (DW_OP_dup, 0, 0));
12919 add_loc_descr (&ret, new_loc_descr (DW_OP_rot, 0, 0));
12920 tmp = mem_loc_descriptor (const1_rtx, mode, mem_mode,
12921 VAR_INIT_STATUS_INITIALIZED);
12922 if (tmp == NULL)
12923 return NULL;
12924 add_loc_descr (&ret, tmp);
12925 add_loc_descr (&ret, new_loc_descr (DW_OP_and, 0, 0));
12926 add_loc_descr (&ret, new_loc_descr (GET_CODE (rtl) == POPCOUNT
12927 ? DW_OP_plus : DW_OP_xor, 0, 0));
12928 add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
12929 tmp = mem_loc_descriptor (const1_rtx, mode, mem_mode,
12930 VAR_INIT_STATUS_INITIALIZED);
12931 add_loc_descr (&ret, tmp);
12932 add_loc_descr (&ret, new_loc_descr (DW_OP_shr, 0, 0));
12933 l1jump = new_loc_descr (DW_OP_skip, 0, 0);
12934 add_loc_descr (&ret, l1jump);
12935 l2label = new_loc_descr (DW_OP_drop, 0, 0);
12936 add_loc_descr (&ret, l2label);
12937 l1jump->dw_loc_oprnd1.val_class = dw_val_class_loc;
12938 l1jump->dw_loc_oprnd1.v.val_loc = l1label;
12939 l2jump->dw_loc_oprnd1.val_class = dw_val_class_loc;
12940 l2jump->dw_loc_oprnd1.v.val_loc = l2label;
12941 return ret;
12942 }
12943
12944 /* BSWAP (constS is initial shift count, either 56 or 24):
12945 constS const0
12946 L1: DW_OP_pick <2> constS DW_OP_pick <3> DW_OP_minus DW_OP_shr
12947 const255 DW_OP_and DW_OP_pick <2> DW_OP_shl DW_OP_or
12948 DW_OP_swap DW_OP_dup const0 DW_OP_eq DW_OP_bra <L2> const8
12949 DW_OP_minus DW_OP_swap DW_OP_skip <L1>
12950 L2: DW_OP_drop DW_OP_swap DW_OP_drop */
12951
12952 static dw_loc_descr_ref
12953 bswap_loc_descriptor (rtx rtl, machine_mode mode,
12954 machine_mode mem_mode)
12955 {
12956 dw_loc_descr_ref op0, ret, tmp;
12957 dw_loc_descr_ref l1jump, l1label;
12958 dw_loc_descr_ref l2jump, l2label;
12959
12960 if (GET_MODE_CLASS (mode) != MODE_INT
12961 || BITS_PER_UNIT != 8
12962 || (GET_MODE_BITSIZE (mode) != 32
12963 && GET_MODE_BITSIZE (mode) != 64))
12964 return NULL;
12965
12966 op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
12967 VAR_INIT_STATUS_INITIALIZED);
12968 if (op0 == NULL)
12969 return NULL;
12970
12971 ret = op0;
12972 tmp = mem_loc_descriptor (GEN_INT (GET_MODE_BITSIZE (mode) - 8),
12973 mode, mem_mode,
12974 VAR_INIT_STATUS_INITIALIZED);
12975 if (tmp == NULL)
12976 return NULL;
12977 add_loc_descr (&ret, tmp);
12978 tmp = mem_loc_descriptor (const0_rtx, mode, mem_mode,
12979 VAR_INIT_STATUS_INITIALIZED);
12980 if (tmp == NULL)
12981 return NULL;
12982 add_loc_descr (&ret, tmp);
12983 l1label = new_loc_descr (DW_OP_pick, 2, 0);
12984 add_loc_descr (&ret, l1label);
12985 tmp = mem_loc_descriptor (GEN_INT (GET_MODE_BITSIZE (mode) - 8),
12986 mode, mem_mode,
12987 VAR_INIT_STATUS_INITIALIZED);
12988 add_loc_descr (&ret, tmp);
12989 add_loc_descr (&ret, new_loc_descr (DW_OP_pick, 3, 0));
12990 add_loc_descr (&ret, new_loc_descr (DW_OP_minus, 0, 0));
12991 add_loc_descr (&ret, new_loc_descr (DW_OP_shr, 0, 0));
12992 tmp = mem_loc_descriptor (GEN_INT (255), mode, mem_mode,
12993 VAR_INIT_STATUS_INITIALIZED);
12994 if (tmp == NULL)
12995 return NULL;
12996 add_loc_descr (&ret, tmp);
12997 add_loc_descr (&ret, new_loc_descr (DW_OP_and, 0, 0));
12998 add_loc_descr (&ret, new_loc_descr (DW_OP_pick, 2, 0));
12999 add_loc_descr (&ret, new_loc_descr (DW_OP_shl, 0, 0));
13000 add_loc_descr (&ret, new_loc_descr (DW_OP_or, 0, 0));
13001 add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
13002 add_loc_descr (&ret, new_loc_descr (DW_OP_dup, 0, 0));
13003 tmp = mem_loc_descriptor (const0_rtx, mode, mem_mode,
13004 VAR_INIT_STATUS_INITIALIZED);
13005 add_loc_descr (&ret, tmp);
13006 add_loc_descr (&ret, new_loc_descr (DW_OP_eq, 0, 0));
13007 l2jump = new_loc_descr (DW_OP_bra, 0, 0);
13008 add_loc_descr (&ret, l2jump);
13009 tmp = mem_loc_descriptor (GEN_INT (8), mode, mem_mode,
13010 VAR_INIT_STATUS_INITIALIZED);
13011 add_loc_descr (&ret, tmp);
13012 add_loc_descr (&ret, new_loc_descr (DW_OP_minus, 0, 0));
13013 add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
13014 l1jump = new_loc_descr (DW_OP_skip, 0, 0);
13015 add_loc_descr (&ret, l1jump);
13016 l2label = new_loc_descr (DW_OP_drop, 0, 0);
13017 add_loc_descr (&ret, l2label);
13018 add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
13019 add_loc_descr (&ret, new_loc_descr (DW_OP_drop, 0, 0));
13020 l1jump->dw_loc_oprnd1.val_class = dw_val_class_loc;
13021 l1jump->dw_loc_oprnd1.v.val_loc = l1label;
13022 l2jump->dw_loc_oprnd1.val_class = dw_val_class_loc;
13023 l2jump->dw_loc_oprnd1.v.val_loc = l2label;
13024 return ret;
13025 }
13026
13027 /* ROTATE (constMASK is mode mask, BITSIZE is bitsize of mode):
13028 DW_OP_over DW_OP_over DW_OP_shl [ constMASK DW_OP_and ] DW_OP_rot
13029 [ DW_OP_swap constMASK DW_OP_and DW_OP_swap ] DW_OP_neg
13030 DW_OP_plus_uconst <BITSIZE> DW_OP_shr DW_OP_or
13031
13032 ROTATERT is similar:
13033 DW_OP_over DW_OP_over DW_OP_neg DW_OP_plus_uconst <BITSIZE>
13034 DW_OP_shl [ constMASK DW_OP_and ] DW_OP_rot
13035 [ DW_OP_swap constMASK DW_OP_and DW_OP_swap ] DW_OP_shr DW_OP_or */
13036
13037 static dw_loc_descr_ref
13038 rotate_loc_descriptor (rtx rtl, machine_mode mode,
13039 machine_mode mem_mode)
13040 {
13041 rtx rtlop1 = XEXP (rtl, 1);
13042 dw_loc_descr_ref op0, op1, ret, mask[2] = { NULL, NULL };
13043 int i;
13044
13045 if (GET_MODE_CLASS (mode) != MODE_INT)
13046 return NULL;
13047
13048 if (GET_MODE (rtlop1) != VOIDmode
13049 && GET_MODE_BITSIZE (GET_MODE (rtlop1)) < GET_MODE_BITSIZE (mode))
13050 rtlop1 = gen_rtx_ZERO_EXTEND (mode, rtlop1);
13051 op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
13052 VAR_INIT_STATUS_INITIALIZED);
13053 op1 = mem_loc_descriptor (rtlop1, mode, mem_mode,
13054 VAR_INIT_STATUS_INITIALIZED);
13055 if (op0 == NULL || op1 == NULL)
13056 return NULL;
13057 if (GET_MODE_SIZE (mode) < DWARF2_ADDR_SIZE)
13058 for (i = 0; i < 2; i++)
13059 {
13060 if (GET_MODE_BITSIZE (mode) < HOST_BITS_PER_WIDE_INT)
13061 mask[i] = mem_loc_descriptor (GEN_INT (GET_MODE_MASK (mode)),
13062 mode, mem_mode,
13063 VAR_INIT_STATUS_INITIALIZED);
13064 else if (GET_MODE_BITSIZE (mode) == HOST_BITS_PER_WIDE_INT)
13065 mask[i] = new_loc_descr (HOST_BITS_PER_WIDE_INT == 32
13066 ? DW_OP_const4u
13067 : HOST_BITS_PER_WIDE_INT == 64
13068 ? DW_OP_const8u : DW_OP_constu,
13069 GET_MODE_MASK (mode), 0);
13070 else
13071 mask[i] = NULL;
13072 if (mask[i] == NULL)
13073 return NULL;
13074 add_loc_descr (&mask[i], new_loc_descr (DW_OP_and, 0, 0));
13075 }
13076 ret = op0;
13077 add_loc_descr (&ret, op1);
13078 add_loc_descr (&ret, new_loc_descr (DW_OP_over, 0, 0));
13079 add_loc_descr (&ret, new_loc_descr (DW_OP_over, 0, 0));
13080 if (GET_CODE (rtl) == ROTATERT)
13081 {
13082 add_loc_descr (&ret, new_loc_descr (DW_OP_neg, 0, 0));
13083 add_loc_descr (&ret, new_loc_descr (DW_OP_plus_uconst,
13084 GET_MODE_BITSIZE (mode), 0));
13085 }
13086 add_loc_descr (&ret, new_loc_descr (DW_OP_shl, 0, 0));
13087 if (mask[0] != NULL)
13088 add_loc_descr (&ret, mask[0]);
13089 add_loc_descr (&ret, new_loc_descr (DW_OP_rot, 0, 0));
13090 if (mask[1] != NULL)
13091 {
13092 add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
13093 add_loc_descr (&ret, mask[1]);
13094 add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
13095 }
13096 if (GET_CODE (rtl) == ROTATE)
13097 {
13098 add_loc_descr (&ret, new_loc_descr (DW_OP_neg, 0, 0));
13099 add_loc_descr (&ret, new_loc_descr (DW_OP_plus_uconst,
13100 GET_MODE_BITSIZE (mode), 0));
13101 }
13102 add_loc_descr (&ret, new_loc_descr (DW_OP_shr, 0, 0));
13103 add_loc_descr (&ret, new_loc_descr (DW_OP_or, 0, 0));
13104 return ret;
13105 }
13106
13107 /* Helper function for mem_loc_descriptor. Return DW_OP_GNU_parameter_ref
13108 for DEBUG_PARAMETER_REF RTL. */
13109
13110 static dw_loc_descr_ref
13111 parameter_ref_descriptor (rtx rtl)
13112 {
13113 dw_loc_descr_ref ret;
13114 dw_die_ref ref;
13115
13116 if (dwarf_strict)
13117 return NULL;
13118 gcc_assert (TREE_CODE (DEBUG_PARAMETER_REF_DECL (rtl)) == PARM_DECL);
13119 ref = lookup_decl_die (DEBUG_PARAMETER_REF_DECL (rtl));
13120 ret = new_loc_descr (DW_OP_GNU_parameter_ref, 0, 0);
13121 if (ref)
13122 {
13123 ret->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
13124 ret->dw_loc_oprnd1.v.val_die_ref.die = ref;
13125 ret->dw_loc_oprnd1.v.val_die_ref.external = 0;
13126 }
13127 else
13128 {
13129 ret->dw_loc_oprnd1.val_class = dw_val_class_decl_ref;
13130 ret->dw_loc_oprnd1.v.val_decl_ref = DEBUG_PARAMETER_REF_DECL (rtl);
13131 }
13132 return ret;
13133 }
13134
13135 /* The following routine converts the RTL for a variable or parameter
13136 (resident in memory) into an equivalent Dwarf representation of a
13137 mechanism for getting the address of that same variable onto the top of a
13138 hypothetical "address evaluation" stack.
13139
13140 When creating memory location descriptors, we are effectively transforming
13141 the RTL for a memory-resident object into its Dwarf postfix expression
13142 equivalent. This routine recursively descends an RTL tree, turning
13143 it into Dwarf postfix code as it goes.
13144
13145 MODE is the mode that should be assumed for the rtl if it is VOIDmode.
13146
13147 MEM_MODE is the mode of the memory reference, needed to handle some
13148 autoincrement addressing modes.
13149
13150 Return 0 if we can't represent the location. */
13151
13152 dw_loc_descr_ref
13153 mem_loc_descriptor (rtx rtl, machine_mode mode,
13154 machine_mode mem_mode,
13155 enum var_init_status initialized)
13156 {
13157 dw_loc_descr_ref mem_loc_result = NULL;
13158 enum dwarf_location_atom op;
13159 dw_loc_descr_ref op0, op1;
13160 rtx inner = NULL_RTX;
13161
13162 if (mode == VOIDmode)
13163 mode = GET_MODE (rtl);
13164
13165 /* Note that for a dynamically sized array, the location we will generate a
13166 description of here will be the lowest numbered location which is
13167 actually within the array. That's *not* necessarily the same as the
13168 zeroth element of the array. */
13169
13170 rtl = targetm.delegitimize_address (rtl);
13171
13172 if (mode != GET_MODE (rtl) && GET_MODE (rtl) != VOIDmode)
13173 return NULL;
13174
13175 switch (GET_CODE (rtl))
13176 {
13177 case POST_INC:
13178 case POST_DEC:
13179 case POST_MODIFY:
13180 return mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode, initialized);
13181
13182 case SUBREG:
13183 /* The case of a subreg may arise when we have a local (register)
13184 variable or a formal (register) parameter which doesn't quite fill
13185 up an entire register. For now, just assume that it is
13186 legitimate to make the Dwarf info refer to the whole register which
13187 contains the given subreg. */
13188 if (!subreg_lowpart_p (rtl))
13189 break;
13190 inner = SUBREG_REG (rtl);
13191 case TRUNCATE:
13192 if (inner == NULL_RTX)
13193 inner = XEXP (rtl, 0);
13194 if (GET_MODE_CLASS (mode) == MODE_INT
13195 && GET_MODE_CLASS (GET_MODE (inner)) == MODE_INT
13196 && (GET_MODE_SIZE (mode) <= DWARF2_ADDR_SIZE
13197 #ifdef POINTERS_EXTEND_UNSIGNED
13198 || (mode == Pmode && mem_mode != VOIDmode)
13199 #endif
13200 )
13201 && GET_MODE_SIZE (GET_MODE (inner)) <= DWARF2_ADDR_SIZE)
13202 {
13203 mem_loc_result = mem_loc_descriptor (inner,
13204 GET_MODE (inner),
13205 mem_mode, initialized);
13206 break;
13207 }
13208 if (dwarf_strict)
13209 break;
13210 if (GET_MODE_SIZE (mode) > GET_MODE_SIZE (GET_MODE (inner)))
13211 break;
13212 if (GET_MODE_SIZE (mode) != GET_MODE_SIZE (GET_MODE (inner))
13213 && (GET_MODE_CLASS (mode) != MODE_INT
13214 || GET_MODE_CLASS (GET_MODE (inner)) != MODE_INT))
13215 break;
13216 else
13217 {
13218 dw_die_ref type_die;
13219 dw_loc_descr_ref cvt;
13220
13221 mem_loc_result = mem_loc_descriptor (inner,
13222 GET_MODE (inner),
13223 mem_mode, initialized);
13224 if (mem_loc_result == NULL)
13225 break;
13226 type_die = base_type_for_mode (mode,
13227 GET_MODE_CLASS (mode) == MODE_INT);
13228 if (type_die == NULL)
13229 {
13230 mem_loc_result = NULL;
13231 break;
13232 }
13233 if (GET_MODE_SIZE (mode)
13234 != GET_MODE_SIZE (GET_MODE (inner)))
13235 cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
13236 else
13237 cvt = new_loc_descr (DW_OP_GNU_reinterpret, 0, 0);
13238 cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
13239 cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
13240 cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
13241 add_loc_descr (&mem_loc_result, cvt);
13242 if (GET_MODE_CLASS (mode) == MODE_INT
13243 && GET_MODE_SIZE (mode) <= DWARF2_ADDR_SIZE)
13244 {
13245 /* Convert it to untyped afterwards. */
13246 cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
13247 add_loc_descr (&mem_loc_result, cvt);
13248 }
13249 }
13250 break;
13251
13252 case REG:
13253 if (GET_MODE_CLASS (mode) != MODE_INT
13254 || (GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE
13255 && rtl != arg_pointer_rtx
13256 && rtl != frame_pointer_rtx
13257 #ifdef POINTERS_EXTEND_UNSIGNED
13258 && (mode != Pmode || mem_mode == VOIDmode)
13259 #endif
13260 ))
13261 {
13262 dw_die_ref type_die;
13263 unsigned int dbx_regnum;
13264
13265 if (dwarf_strict)
13266 break;
13267 if (REGNO (rtl) > FIRST_PSEUDO_REGISTER)
13268 break;
13269 type_die = base_type_for_mode (mode,
13270 GET_MODE_CLASS (mode) == MODE_INT);
13271 if (type_die == NULL)
13272 break;
13273
13274 dbx_regnum = dbx_reg_number (rtl);
13275 if (dbx_regnum == IGNORED_DWARF_REGNUM)
13276 break;
13277 mem_loc_result = new_loc_descr (DW_OP_GNU_regval_type,
13278 dbx_regnum, 0);
13279 mem_loc_result->dw_loc_oprnd2.val_class = dw_val_class_die_ref;
13280 mem_loc_result->dw_loc_oprnd2.v.val_die_ref.die = type_die;
13281 mem_loc_result->dw_loc_oprnd2.v.val_die_ref.external = 0;
13282 break;
13283 }
13284 /* Whenever a register number forms a part of the description of the
13285 method for calculating the (dynamic) address of a memory resident
13286 object, DWARF rules require the register number be referred to as
13287 a "base register". This distinction is not based in any way upon
13288 what category of register the hardware believes the given register
13289 belongs to. This is strictly DWARF terminology we're dealing with
13290 here. Note that in cases where the location of a memory-resident
13291 data object could be expressed as: OP_ADD (OP_BASEREG (basereg),
13292 OP_CONST (0)) the actual DWARF location descriptor that we generate
13293 may just be OP_BASEREG (basereg). This may look deceptively like
13294 the object in question was allocated to a register (rather than in
13295 memory) so DWARF consumers need to be aware of the subtle
13296 distinction between OP_REG and OP_BASEREG. */
13297 if (REGNO (rtl) < FIRST_PSEUDO_REGISTER)
13298 mem_loc_result = based_loc_descr (rtl, 0, VAR_INIT_STATUS_INITIALIZED);
13299 else if (stack_realign_drap
13300 && crtl->drap_reg
13301 && crtl->args.internal_arg_pointer == rtl
13302 && REGNO (crtl->drap_reg) < FIRST_PSEUDO_REGISTER)
13303 {
13304 /* If RTL is internal_arg_pointer, which has been optimized
13305 out, use DRAP instead. */
13306 mem_loc_result = based_loc_descr (crtl->drap_reg, 0,
13307 VAR_INIT_STATUS_INITIALIZED);
13308 }
13309 break;
13310
13311 case SIGN_EXTEND:
13312 case ZERO_EXTEND:
13313 if (GET_MODE_CLASS (mode) != MODE_INT)
13314 break;
13315 op0 = mem_loc_descriptor (XEXP (rtl, 0), GET_MODE (XEXP (rtl, 0)),
13316 mem_mode, VAR_INIT_STATUS_INITIALIZED);
13317 if (op0 == 0)
13318 break;
13319 else if (GET_CODE (rtl) == ZERO_EXTEND
13320 && GET_MODE_SIZE (mode) <= DWARF2_ADDR_SIZE
13321 && GET_MODE_BITSIZE (GET_MODE (XEXP (rtl, 0)))
13322 < HOST_BITS_PER_WIDE_INT
13323 /* If DW_OP_const{1,2,4}u won't be used, it is shorter
13324 to expand zero extend as two shifts instead of
13325 masking. */
13326 && GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0))) <= 4)
13327 {
13328 machine_mode imode = GET_MODE (XEXP (rtl, 0));
13329 mem_loc_result = op0;
13330 add_loc_descr (&mem_loc_result,
13331 int_loc_descriptor (GET_MODE_MASK (imode)));
13332 add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_and, 0, 0));
13333 }
13334 else if (GET_MODE_SIZE (mode) <= DWARF2_ADDR_SIZE)
13335 {
13336 int shift = DWARF2_ADDR_SIZE
13337 - GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0)));
13338 shift *= BITS_PER_UNIT;
13339 if (GET_CODE (rtl) == SIGN_EXTEND)
13340 op = DW_OP_shra;
13341 else
13342 op = DW_OP_shr;
13343 mem_loc_result = op0;
13344 add_loc_descr (&mem_loc_result, int_loc_descriptor (shift));
13345 add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_shl, 0, 0));
13346 add_loc_descr (&mem_loc_result, int_loc_descriptor (shift));
13347 add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
13348 }
13349 else if (!dwarf_strict)
13350 {
13351 dw_die_ref type_die1, type_die2;
13352 dw_loc_descr_ref cvt;
13353
13354 type_die1 = base_type_for_mode (GET_MODE (XEXP (rtl, 0)),
13355 GET_CODE (rtl) == ZERO_EXTEND);
13356 if (type_die1 == NULL)
13357 break;
13358 type_die2 = base_type_for_mode (mode, 1);
13359 if (type_die2 == NULL)
13360 break;
13361 mem_loc_result = op0;
13362 cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
13363 cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
13364 cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die1;
13365 cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
13366 add_loc_descr (&mem_loc_result, cvt);
13367 cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
13368 cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
13369 cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die2;
13370 cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
13371 add_loc_descr (&mem_loc_result, cvt);
13372 }
13373 break;
13374
13375 case MEM:
13376 {
13377 rtx new_rtl = avoid_constant_pool_reference (rtl);
13378 if (new_rtl != rtl)
13379 {
13380 mem_loc_result = mem_loc_descriptor (new_rtl, mode, mem_mode,
13381 initialized);
13382 if (mem_loc_result != NULL)
13383 return mem_loc_result;
13384 }
13385 }
13386 mem_loc_result = mem_loc_descriptor (XEXP (rtl, 0),
13387 get_address_mode (rtl), mode,
13388 VAR_INIT_STATUS_INITIALIZED);
13389 if (mem_loc_result == NULL)
13390 mem_loc_result = tls_mem_loc_descriptor (rtl);
13391 if (mem_loc_result != NULL)
13392 {
13393 if (GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE
13394 || GET_MODE_CLASS (mode) != MODE_INT)
13395 {
13396 dw_die_ref type_die;
13397 dw_loc_descr_ref deref;
13398
13399 if (dwarf_strict)
13400 return NULL;
13401 type_die
13402 = base_type_for_mode (mode, GET_MODE_CLASS (mode) == MODE_INT);
13403 if (type_die == NULL)
13404 return NULL;
13405 deref = new_loc_descr (DW_OP_GNU_deref_type,
13406 GET_MODE_SIZE (mode), 0);
13407 deref->dw_loc_oprnd2.val_class = dw_val_class_die_ref;
13408 deref->dw_loc_oprnd2.v.val_die_ref.die = type_die;
13409 deref->dw_loc_oprnd2.v.val_die_ref.external = 0;
13410 add_loc_descr (&mem_loc_result, deref);
13411 }
13412 else if (GET_MODE_SIZE (mode) == DWARF2_ADDR_SIZE)
13413 add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_deref, 0, 0));
13414 else
13415 add_loc_descr (&mem_loc_result,
13416 new_loc_descr (DW_OP_deref_size,
13417 GET_MODE_SIZE (mode), 0));
13418 }
13419 break;
13420
13421 case LO_SUM:
13422 return mem_loc_descriptor (XEXP (rtl, 1), mode, mem_mode, initialized);
13423
13424 case LABEL_REF:
13425 /* Some ports can transform a symbol ref into a label ref, because
13426 the symbol ref is too far away and has to be dumped into a constant
13427 pool. */
13428 case CONST:
13429 case SYMBOL_REF:
13430 if ((GET_MODE_CLASS (mode) != MODE_INT
13431 && GET_MODE_CLASS (mode) != MODE_PARTIAL_INT)
13432 || (GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE
13433 #ifdef POINTERS_EXTEND_UNSIGNED
13434 && (mode != Pmode || mem_mode == VOIDmode)
13435 #endif
13436 ))
13437 break;
13438 if (GET_CODE (rtl) == SYMBOL_REF
13439 && SYMBOL_REF_TLS_MODEL (rtl) != TLS_MODEL_NONE)
13440 {
13441 dw_loc_descr_ref temp;
13442
13443 /* If this is not defined, we have no way to emit the data. */
13444 if (!targetm.have_tls || !targetm.asm_out.output_dwarf_dtprel)
13445 break;
13446
13447 temp = new_addr_loc_descr (rtl, dtprel_true);
13448
13449 mem_loc_result = new_loc_descr (DW_OP_GNU_push_tls_address, 0, 0);
13450 add_loc_descr (&mem_loc_result, temp);
13451
13452 break;
13453 }
13454
13455 if (!const_ok_for_output (rtl))
13456 {
13457 if (GET_CODE (rtl) == CONST)
13458 mem_loc_result = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
13459 initialized);
13460 break;
13461 }
13462
13463 symref:
13464 mem_loc_result = new_addr_loc_descr (rtl, dtprel_false);
13465 vec_safe_push (used_rtx_array, rtl);
13466 break;
13467
13468 case CONCAT:
13469 case CONCATN:
13470 case VAR_LOCATION:
13471 case DEBUG_IMPLICIT_PTR:
13472 expansion_failed (NULL_TREE, rtl,
13473 "CONCAT/CONCATN/VAR_LOCATION is handled only by loc_descriptor");
13474 return 0;
13475
13476 case ENTRY_VALUE:
13477 if (dwarf_strict)
13478 return NULL;
13479 if (REG_P (ENTRY_VALUE_EXP (rtl)))
13480 {
13481 if (GET_MODE_CLASS (mode) != MODE_INT
13482 || GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE)
13483 op0 = mem_loc_descriptor (ENTRY_VALUE_EXP (rtl), mode,
13484 VOIDmode, VAR_INIT_STATUS_INITIALIZED);
13485 else
13486 {
13487 unsigned int dbx_regnum = dbx_reg_number (ENTRY_VALUE_EXP (rtl));
13488 if (dbx_regnum == IGNORED_DWARF_REGNUM)
13489 return NULL;
13490 op0 = one_reg_loc_descriptor (dbx_regnum,
13491 VAR_INIT_STATUS_INITIALIZED);
13492 }
13493 }
13494 else if (MEM_P (ENTRY_VALUE_EXP (rtl))
13495 && REG_P (XEXP (ENTRY_VALUE_EXP (rtl), 0)))
13496 {
13497 op0 = mem_loc_descriptor (ENTRY_VALUE_EXP (rtl), mode,
13498 VOIDmode, VAR_INIT_STATUS_INITIALIZED);
13499 if (op0 && op0->dw_loc_opc == DW_OP_fbreg)
13500 return NULL;
13501 }
13502 else
13503 gcc_unreachable ();
13504 if (op0 == NULL)
13505 return NULL;
13506 mem_loc_result = new_loc_descr (DW_OP_GNU_entry_value, 0, 0);
13507 mem_loc_result->dw_loc_oprnd1.val_class = dw_val_class_loc;
13508 mem_loc_result->dw_loc_oprnd1.v.val_loc = op0;
13509 break;
13510
13511 case DEBUG_PARAMETER_REF:
13512 mem_loc_result = parameter_ref_descriptor (rtl);
13513 break;
13514
13515 case PRE_MODIFY:
13516 /* Extract the PLUS expression nested inside and fall into
13517 PLUS code below. */
13518 rtl = XEXP (rtl, 1);
13519 goto plus;
13520
13521 case PRE_INC:
13522 case PRE_DEC:
13523 /* Turn these into a PLUS expression and fall into the PLUS code
13524 below. */
13525 rtl = gen_rtx_PLUS (mode, XEXP (rtl, 0),
13526 gen_int_mode (GET_CODE (rtl) == PRE_INC
13527 ? GET_MODE_UNIT_SIZE (mem_mode)
13528 : -GET_MODE_UNIT_SIZE (mem_mode),
13529 mode));
13530
13531 /* ... fall through ... */
13532
13533 case PLUS:
13534 plus:
13535 if (is_based_loc (rtl)
13536 && (GET_MODE_SIZE (mode) <= DWARF2_ADDR_SIZE
13537 || XEXP (rtl, 0) == arg_pointer_rtx
13538 || XEXP (rtl, 0) == frame_pointer_rtx)
13539 && GET_MODE_CLASS (mode) == MODE_INT)
13540 mem_loc_result = based_loc_descr (XEXP (rtl, 0),
13541 INTVAL (XEXP (rtl, 1)),
13542 VAR_INIT_STATUS_INITIALIZED);
13543 else
13544 {
13545 mem_loc_result = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
13546 VAR_INIT_STATUS_INITIALIZED);
13547 if (mem_loc_result == 0)
13548 break;
13549
13550 if (CONST_INT_P (XEXP (rtl, 1))
13551 && GET_MODE_SIZE (mode) <= DWARF2_ADDR_SIZE)
13552 loc_descr_plus_const (&mem_loc_result, INTVAL (XEXP (rtl, 1)));
13553 else
13554 {
13555 op1 = mem_loc_descriptor (XEXP (rtl, 1), mode, mem_mode,
13556 VAR_INIT_STATUS_INITIALIZED);
13557 if (op1 == 0)
13558 return NULL;
13559 add_loc_descr (&mem_loc_result, op1);
13560 add_loc_descr (&mem_loc_result,
13561 new_loc_descr (DW_OP_plus, 0, 0));
13562 }
13563 }
13564 break;
13565
13566 /* If a pseudo-reg is optimized away, it is possible for it to
13567 be replaced with a MEM containing a multiply or shift. */
13568 case MINUS:
13569 op = DW_OP_minus;
13570 goto do_binop;
13571
13572 case MULT:
13573 op = DW_OP_mul;
13574 goto do_binop;
13575
13576 case DIV:
13577 if (!dwarf_strict
13578 && GET_MODE_CLASS (mode) == MODE_INT
13579 && GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE)
13580 {
13581 mem_loc_result = typed_binop (DW_OP_div, rtl,
13582 base_type_for_mode (mode, 0),
13583 mode, mem_mode);
13584 break;
13585 }
13586 op = DW_OP_div;
13587 goto do_binop;
13588
13589 case UMOD:
13590 op = DW_OP_mod;
13591 goto do_binop;
13592
13593 case ASHIFT:
13594 op = DW_OP_shl;
13595 goto do_shift;
13596
13597 case ASHIFTRT:
13598 op = DW_OP_shra;
13599 goto do_shift;
13600
13601 case LSHIFTRT:
13602 op = DW_OP_shr;
13603 goto do_shift;
13604
13605 do_shift:
13606 if (GET_MODE_CLASS (mode) != MODE_INT)
13607 break;
13608 op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
13609 VAR_INIT_STATUS_INITIALIZED);
13610 {
13611 rtx rtlop1 = XEXP (rtl, 1);
13612 if (GET_MODE (rtlop1) != VOIDmode
13613 && GET_MODE_BITSIZE (GET_MODE (rtlop1))
13614 < GET_MODE_BITSIZE (mode))
13615 rtlop1 = gen_rtx_ZERO_EXTEND (mode, rtlop1);
13616 op1 = mem_loc_descriptor (rtlop1, mode, mem_mode,
13617 VAR_INIT_STATUS_INITIALIZED);
13618 }
13619
13620 if (op0 == 0 || op1 == 0)
13621 break;
13622
13623 mem_loc_result = op0;
13624 add_loc_descr (&mem_loc_result, op1);
13625 add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
13626 break;
13627
13628 case AND:
13629 op = DW_OP_and;
13630 goto do_binop;
13631
13632 case IOR:
13633 op = DW_OP_or;
13634 goto do_binop;
13635
13636 case XOR:
13637 op = DW_OP_xor;
13638 goto do_binop;
13639
13640 do_binop:
13641 op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
13642 VAR_INIT_STATUS_INITIALIZED);
13643 op1 = mem_loc_descriptor (XEXP (rtl, 1), mode, mem_mode,
13644 VAR_INIT_STATUS_INITIALIZED);
13645
13646 if (op0 == 0 || op1 == 0)
13647 break;
13648
13649 mem_loc_result = op0;
13650 add_loc_descr (&mem_loc_result, op1);
13651 add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
13652 break;
13653
13654 case MOD:
13655 if (GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE && !dwarf_strict)
13656 {
13657 mem_loc_result = typed_binop (DW_OP_mod, rtl,
13658 base_type_for_mode (mode, 0),
13659 mode, mem_mode);
13660 break;
13661 }
13662
13663 op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
13664 VAR_INIT_STATUS_INITIALIZED);
13665 op1 = mem_loc_descriptor (XEXP (rtl, 1), mode, mem_mode,
13666 VAR_INIT_STATUS_INITIALIZED);
13667
13668 if (op0 == 0 || op1 == 0)
13669 break;
13670
13671 mem_loc_result = op0;
13672 add_loc_descr (&mem_loc_result, op1);
13673 add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_over, 0, 0));
13674 add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_over, 0, 0));
13675 add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_div, 0, 0));
13676 add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_mul, 0, 0));
13677 add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_minus, 0, 0));
13678 break;
13679
13680 case UDIV:
13681 if (!dwarf_strict && GET_MODE_CLASS (mode) == MODE_INT)
13682 {
13683 if (GET_MODE_CLASS (mode) > DWARF2_ADDR_SIZE)
13684 {
13685 op = DW_OP_div;
13686 goto do_binop;
13687 }
13688 mem_loc_result = typed_binop (DW_OP_div, rtl,
13689 base_type_for_mode (mode, 1),
13690 mode, mem_mode);
13691 }
13692 break;
13693
13694 case NOT:
13695 op = DW_OP_not;
13696 goto do_unop;
13697
13698 case ABS:
13699 op = DW_OP_abs;
13700 goto do_unop;
13701
13702 case NEG:
13703 op = DW_OP_neg;
13704 goto do_unop;
13705
13706 do_unop:
13707 op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
13708 VAR_INIT_STATUS_INITIALIZED);
13709
13710 if (op0 == 0)
13711 break;
13712
13713 mem_loc_result = op0;
13714 add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
13715 break;
13716
13717 case CONST_INT:
13718 if (GET_MODE_SIZE (mode) <= DWARF2_ADDR_SIZE
13719 #ifdef POINTERS_EXTEND_UNSIGNED
13720 || (mode == Pmode
13721 && mem_mode != VOIDmode
13722 && trunc_int_for_mode (INTVAL (rtl), ptr_mode) == INTVAL (rtl))
13723 #endif
13724 )
13725 {
13726 mem_loc_result = int_loc_descriptor (INTVAL (rtl));
13727 break;
13728 }
13729 if (!dwarf_strict
13730 && (GET_MODE_BITSIZE (mode) == HOST_BITS_PER_WIDE_INT
13731 || GET_MODE_BITSIZE (mode) == HOST_BITS_PER_DOUBLE_INT))
13732 {
13733 dw_die_ref type_die = base_type_for_mode (mode, 1);
13734 machine_mode amode;
13735 if (type_die == NULL)
13736 return NULL;
13737 amode = mode_for_size (DWARF2_ADDR_SIZE * BITS_PER_UNIT,
13738 MODE_INT, 0);
13739 if (INTVAL (rtl) >= 0
13740 && amode != BLKmode
13741 && trunc_int_for_mode (INTVAL (rtl), amode) == INTVAL (rtl)
13742 /* const DW_OP_GNU_convert <XXX> vs.
13743 DW_OP_GNU_const_type <XXX, 1, const>. */
13744 && size_of_int_loc_descriptor (INTVAL (rtl)) + 1 + 1
13745 < (unsigned long) 1 + 1 + 1 + GET_MODE_SIZE (mode))
13746 {
13747 mem_loc_result = int_loc_descriptor (INTVAL (rtl));
13748 op0 = new_loc_descr (DW_OP_GNU_convert, 0, 0);
13749 op0->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
13750 op0->dw_loc_oprnd1.v.val_die_ref.die = type_die;
13751 op0->dw_loc_oprnd1.v.val_die_ref.external = 0;
13752 add_loc_descr (&mem_loc_result, op0);
13753 return mem_loc_result;
13754 }
13755 mem_loc_result = new_loc_descr (DW_OP_GNU_const_type, 0,
13756 INTVAL (rtl));
13757 mem_loc_result->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
13758 mem_loc_result->dw_loc_oprnd1.v.val_die_ref.die = type_die;
13759 mem_loc_result->dw_loc_oprnd1.v.val_die_ref.external = 0;
13760 if (GET_MODE_BITSIZE (mode) == HOST_BITS_PER_WIDE_INT)
13761 mem_loc_result->dw_loc_oprnd2.val_class = dw_val_class_const;
13762 else
13763 {
13764 mem_loc_result->dw_loc_oprnd2.val_class
13765 = dw_val_class_const_double;
13766 mem_loc_result->dw_loc_oprnd2.v.val_double
13767 = double_int::from_shwi (INTVAL (rtl));
13768 }
13769 }
13770 break;
13771
13772 case CONST_DOUBLE:
13773 if (!dwarf_strict)
13774 {
13775 dw_die_ref type_die;
13776
13777 /* Note that if TARGET_SUPPORTS_WIDE_INT == 0, a
13778 CONST_DOUBLE rtx could represent either a large integer
13779 or a floating-point constant. If TARGET_SUPPORTS_WIDE_INT != 0,
13780 the value is always a floating point constant.
13781
13782 When it is an integer, a CONST_DOUBLE is used whenever
13783 the constant requires 2 HWIs to be adequately represented.
13784 We output CONST_DOUBLEs as blocks. */
13785 if (mode == VOIDmode
13786 || (GET_MODE (rtl) == VOIDmode
13787 && GET_MODE_BITSIZE (mode) != HOST_BITS_PER_DOUBLE_INT))
13788 break;
13789 type_die = base_type_for_mode (mode,
13790 GET_MODE_CLASS (mode) == MODE_INT);
13791 if (type_die == NULL)
13792 return NULL;
13793 mem_loc_result = new_loc_descr (DW_OP_GNU_const_type, 0, 0);
13794 mem_loc_result->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
13795 mem_loc_result->dw_loc_oprnd1.v.val_die_ref.die = type_die;
13796 mem_loc_result->dw_loc_oprnd1.v.val_die_ref.external = 0;
13797 #if TARGET_SUPPORTS_WIDE_INT == 0
13798 if (!SCALAR_FLOAT_MODE_P (mode))
13799 {
13800 mem_loc_result->dw_loc_oprnd2.val_class
13801 = dw_val_class_const_double;
13802 mem_loc_result->dw_loc_oprnd2.v.val_double
13803 = rtx_to_double_int (rtl);
13804 }
13805 else
13806 #endif
13807 {
13808 unsigned int length = GET_MODE_SIZE (mode);
13809 unsigned char *array = ggc_vec_alloc<unsigned char> (length);
13810
13811 insert_float (rtl, array);
13812 mem_loc_result->dw_loc_oprnd2.val_class = dw_val_class_vec;
13813 mem_loc_result->dw_loc_oprnd2.v.val_vec.length = length / 4;
13814 mem_loc_result->dw_loc_oprnd2.v.val_vec.elt_size = 4;
13815 mem_loc_result->dw_loc_oprnd2.v.val_vec.array = array;
13816 }
13817 }
13818 break;
13819
13820 case CONST_WIDE_INT:
13821 if (!dwarf_strict)
13822 {
13823 dw_die_ref type_die;
13824
13825 type_die = base_type_for_mode (mode,
13826 GET_MODE_CLASS (mode) == MODE_INT);
13827 if (type_die == NULL)
13828 return NULL;
13829 mem_loc_result = new_loc_descr (DW_OP_GNU_const_type, 0, 0);
13830 mem_loc_result->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
13831 mem_loc_result->dw_loc_oprnd1.v.val_die_ref.die = type_die;
13832 mem_loc_result->dw_loc_oprnd1.v.val_die_ref.external = 0;
13833 mem_loc_result->dw_loc_oprnd2.val_class
13834 = dw_val_class_wide_int;
13835 mem_loc_result->dw_loc_oprnd2.v.val_wide = ggc_alloc<wide_int> ();
13836 *mem_loc_result->dw_loc_oprnd2.v.val_wide = std::make_pair (rtl, mode);
13837 }
13838 break;
13839
13840 case EQ:
13841 mem_loc_result = scompare_loc_descriptor (DW_OP_eq, rtl, mem_mode);
13842 break;
13843
13844 case GE:
13845 mem_loc_result = scompare_loc_descriptor (DW_OP_ge, rtl, mem_mode);
13846 break;
13847
13848 case GT:
13849 mem_loc_result = scompare_loc_descriptor (DW_OP_gt, rtl, mem_mode);
13850 break;
13851
13852 case LE:
13853 mem_loc_result = scompare_loc_descriptor (DW_OP_le, rtl, mem_mode);
13854 break;
13855
13856 case LT:
13857 mem_loc_result = scompare_loc_descriptor (DW_OP_lt, rtl, mem_mode);
13858 break;
13859
13860 case NE:
13861 mem_loc_result = scompare_loc_descriptor (DW_OP_ne, rtl, mem_mode);
13862 break;
13863
13864 case GEU:
13865 mem_loc_result = ucompare_loc_descriptor (DW_OP_ge, rtl, mem_mode);
13866 break;
13867
13868 case GTU:
13869 mem_loc_result = ucompare_loc_descriptor (DW_OP_gt, rtl, mem_mode);
13870 break;
13871
13872 case LEU:
13873 mem_loc_result = ucompare_loc_descriptor (DW_OP_le, rtl, mem_mode);
13874 break;
13875
13876 case LTU:
13877 mem_loc_result = ucompare_loc_descriptor (DW_OP_lt, rtl, mem_mode);
13878 break;
13879
13880 case UMIN:
13881 case UMAX:
13882 if (GET_MODE_CLASS (mode) != MODE_INT)
13883 break;
13884 /* FALLTHRU */
13885 case SMIN:
13886 case SMAX:
13887 mem_loc_result = minmax_loc_descriptor (rtl, mode, mem_mode);
13888 break;
13889
13890 case ZERO_EXTRACT:
13891 case SIGN_EXTRACT:
13892 if (CONST_INT_P (XEXP (rtl, 1))
13893 && CONST_INT_P (XEXP (rtl, 2))
13894 && ((unsigned) INTVAL (XEXP (rtl, 1))
13895 + (unsigned) INTVAL (XEXP (rtl, 2))
13896 <= GET_MODE_BITSIZE (mode))
13897 && GET_MODE_CLASS (mode) == MODE_INT
13898 && GET_MODE_SIZE (mode) <= DWARF2_ADDR_SIZE
13899 && GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0))) <= DWARF2_ADDR_SIZE)
13900 {
13901 int shift, size;
13902 op0 = mem_loc_descriptor (XEXP (rtl, 0), GET_MODE (XEXP (rtl, 0)),
13903 mem_mode, VAR_INIT_STATUS_INITIALIZED);
13904 if (op0 == 0)
13905 break;
13906 if (GET_CODE (rtl) == SIGN_EXTRACT)
13907 op = DW_OP_shra;
13908 else
13909 op = DW_OP_shr;
13910 mem_loc_result = op0;
13911 size = INTVAL (XEXP (rtl, 1));
13912 shift = INTVAL (XEXP (rtl, 2));
13913 if (BITS_BIG_ENDIAN)
13914 shift = GET_MODE_BITSIZE (GET_MODE (XEXP (rtl, 0)))
13915 - shift - size;
13916 if (shift + size != (int) DWARF2_ADDR_SIZE)
13917 {
13918 add_loc_descr (&mem_loc_result,
13919 int_loc_descriptor (DWARF2_ADDR_SIZE
13920 - shift - size));
13921 add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_shl, 0, 0));
13922 }
13923 if (size != (int) DWARF2_ADDR_SIZE)
13924 {
13925 add_loc_descr (&mem_loc_result,
13926 int_loc_descriptor (DWARF2_ADDR_SIZE - size));
13927 add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
13928 }
13929 }
13930 break;
13931
13932 case IF_THEN_ELSE:
13933 {
13934 dw_loc_descr_ref op2, bra_node, drop_node;
13935 op0 = mem_loc_descriptor (XEXP (rtl, 0),
13936 GET_MODE (XEXP (rtl, 0)) == VOIDmode
13937 ? word_mode : GET_MODE (XEXP (rtl, 0)),
13938 mem_mode, VAR_INIT_STATUS_INITIALIZED);
13939 op1 = mem_loc_descriptor (XEXP (rtl, 1), mode, mem_mode,
13940 VAR_INIT_STATUS_INITIALIZED);
13941 op2 = mem_loc_descriptor (XEXP (rtl, 2), mode, mem_mode,
13942 VAR_INIT_STATUS_INITIALIZED);
13943 if (op0 == NULL || op1 == NULL || op2 == NULL)
13944 break;
13945
13946 mem_loc_result = op1;
13947 add_loc_descr (&mem_loc_result, op2);
13948 add_loc_descr (&mem_loc_result, op0);
13949 bra_node = new_loc_descr (DW_OP_bra, 0, 0);
13950 add_loc_descr (&mem_loc_result, bra_node);
13951 add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_swap, 0, 0));
13952 drop_node = new_loc_descr (DW_OP_drop, 0, 0);
13953 add_loc_descr (&mem_loc_result, drop_node);
13954 bra_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
13955 bra_node->dw_loc_oprnd1.v.val_loc = drop_node;
13956 }
13957 break;
13958
13959 case FLOAT_EXTEND:
13960 case FLOAT_TRUNCATE:
13961 case FLOAT:
13962 case UNSIGNED_FLOAT:
13963 case FIX:
13964 case UNSIGNED_FIX:
13965 if (!dwarf_strict)
13966 {
13967 dw_die_ref type_die;
13968 dw_loc_descr_ref cvt;
13969
13970 op0 = mem_loc_descriptor (XEXP (rtl, 0), GET_MODE (XEXP (rtl, 0)),
13971 mem_mode, VAR_INIT_STATUS_INITIALIZED);
13972 if (op0 == NULL)
13973 break;
13974 if (GET_MODE_CLASS (GET_MODE (XEXP (rtl, 0))) == MODE_INT
13975 && (GET_CODE (rtl) == FLOAT
13976 || GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0)))
13977 <= DWARF2_ADDR_SIZE))
13978 {
13979 type_die = base_type_for_mode (GET_MODE (XEXP (rtl, 0)),
13980 GET_CODE (rtl) == UNSIGNED_FLOAT);
13981 if (type_die == NULL)
13982 break;
13983 cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
13984 cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
13985 cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
13986 cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
13987 add_loc_descr (&op0, cvt);
13988 }
13989 type_die = base_type_for_mode (mode, GET_CODE (rtl) == UNSIGNED_FIX);
13990 if (type_die == NULL)
13991 break;
13992 cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
13993 cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
13994 cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
13995 cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
13996 add_loc_descr (&op0, cvt);
13997 if (GET_MODE_CLASS (mode) == MODE_INT
13998 && (GET_CODE (rtl) == FIX
13999 || GET_MODE_SIZE (mode) < DWARF2_ADDR_SIZE))
14000 {
14001 op0 = convert_descriptor_to_mode (mode, op0);
14002 if (op0 == NULL)
14003 break;
14004 }
14005 mem_loc_result = op0;
14006 }
14007 break;
14008
14009 case CLZ:
14010 case CTZ:
14011 case FFS:
14012 mem_loc_result = clz_loc_descriptor (rtl, mode, mem_mode);
14013 break;
14014
14015 case POPCOUNT:
14016 case PARITY:
14017 mem_loc_result = popcount_loc_descriptor (rtl, mode, mem_mode);
14018 break;
14019
14020 case BSWAP:
14021 mem_loc_result = bswap_loc_descriptor (rtl, mode, mem_mode);
14022 break;
14023
14024 case ROTATE:
14025 case ROTATERT:
14026 mem_loc_result = rotate_loc_descriptor (rtl, mode, mem_mode);
14027 break;
14028
14029 case COMPARE:
14030 /* In theory, we could implement the above. */
14031 /* DWARF cannot represent the unsigned compare operations
14032 natively. */
14033 case SS_MULT:
14034 case US_MULT:
14035 case SS_DIV:
14036 case US_DIV:
14037 case SS_PLUS:
14038 case US_PLUS:
14039 case SS_MINUS:
14040 case US_MINUS:
14041 case SS_NEG:
14042 case US_NEG:
14043 case SS_ABS:
14044 case SS_ASHIFT:
14045 case US_ASHIFT:
14046 case SS_TRUNCATE:
14047 case US_TRUNCATE:
14048 case UNORDERED:
14049 case ORDERED:
14050 case UNEQ:
14051 case UNGE:
14052 case UNGT:
14053 case UNLE:
14054 case UNLT:
14055 case LTGT:
14056 case FRACT_CONVERT:
14057 case UNSIGNED_FRACT_CONVERT:
14058 case SAT_FRACT:
14059 case UNSIGNED_SAT_FRACT:
14060 case SQRT:
14061 case ASM_OPERANDS:
14062 case VEC_MERGE:
14063 case VEC_SELECT:
14064 case VEC_CONCAT:
14065 case VEC_DUPLICATE:
14066 case UNSPEC:
14067 case HIGH:
14068 case FMA:
14069 case STRICT_LOW_PART:
14070 case CONST_VECTOR:
14071 case CONST_FIXED:
14072 case CLRSB:
14073 case CLOBBER:
14074 /* If delegitimize_address couldn't do anything with the UNSPEC, we
14075 can't express it in the debug info. This can happen e.g. with some
14076 TLS UNSPECs. */
14077 break;
14078
14079 case CONST_STRING:
14080 resolve_one_addr (&rtl);
14081 goto symref;
14082
14083 default:
14084 if (flag_checking)
14085 {
14086 print_rtl (stderr, rtl);
14087 gcc_unreachable ();
14088 }
14089 break;
14090 }
14091
14092 if (mem_loc_result && initialized == VAR_INIT_STATUS_UNINITIALIZED)
14093 add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
14094
14095 return mem_loc_result;
14096 }
14097
14098 /* Return a descriptor that describes the concatenation of two locations.
14099 This is typically a complex variable. */
14100
14101 static dw_loc_descr_ref
14102 concat_loc_descriptor (rtx x0, rtx x1, enum var_init_status initialized)
14103 {
14104 dw_loc_descr_ref cc_loc_result = NULL;
14105 dw_loc_descr_ref x0_ref
14106 = loc_descriptor (x0, VOIDmode, VAR_INIT_STATUS_INITIALIZED);
14107 dw_loc_descr_ref x1_ref
14108 = loc_descriptor (x1, VOIDmode, VAR_INIT_STATUS_INITIALIZED);
14109
14110 if (x0_ref == 0 || x1_ref == 0)
14111 return 0;
14112
14113 cc_loc_result = x0_ref;
14114 add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x0)));
14115
14116 add_loc_descr (&cc_loc_result, x1_ref);
14117 add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x1)));
14118
14119 if (initialized == VAR_INIT_STATUS_UNINITIALIZED)
14120 add_loc_descr (&cc_loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
14121
14122 return cc_loc_result;
14123 }
14124
14125 /* Return a descriptor that describes the concatenation of N
14126 locations. */
14127
14128 static dw_loc_descr_ref
14129 concatn_loc_descriptor (rtx concatn, enum var_init_status initialized)
14130 {
14131 unsigned int i;
14132 dw_loc_descr_ref cc_loc_result = NULL;
14133 unsigned int n = XVECLEN (concatn, 0);
14134
14135 for (i = 0; i < n; ++i)
14136 {
14137 dw_loc_descr_ref ref;
14138 rtx x = XVECEXP (concatn, 0, i);
14139
14140 ref = loc_descriptor (x, VOIDmode, VAR_INIT_STATUS_INITIALIZED);
14141 if (ref == NULL)
14142 return NULL;
14143
14144 add_loc_descr (&cc_loc_result, ref);
14145 add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x)));
14146 }
14147
14148 if (cc_loc_result && initialized == VAR_INIT_STATUS_UNINITIALIZED)
14149 add_loc_descr (&cc_loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
14150
14151 return cc_loc_result;
14152 }
14153
14154 /* Helper function for loc_descriptor. Return DW_OP_GNU_implicit_pointer
14155 for DEBUG_IMPLICIT_PTR RTL. */
14156
14157 static dw_loc_descr_ref
14158 implicit_ptr_descriptor (rtx rtl, HOST_WIDE_INT offset)
14159 {
14160 dw_loc_descr_ref ret;
14161 dw_die_ref ref;
14162
14163 if (dwarf_strict)
14164 return NULL;
14165 gcc_assert (TREE_CODE (DEBUG_IMPLICIT_PTR_DECL (rtl)) == VAR_DECL
14166 || TREE_CODE (DEBUG_IMPLICIT_PTR_DECL (rtl)) == PARM_DECL
14167 || TREE_CODE (DEBUG_IMPLICIT_PTR_DECL (rtl)) == RESULT_DECL);
14168 ref = lookup_decl_die (DEBUG_IMPLICIT_PTR_DECL (rtl));
14169 ret = new_loc_descr (DW_OP_GNU_implicit_pointer, 0, offset);
14170 ret->dw_loc_oprnd2.val_class = dw_val_class_const;
14171 if (ref)
14172 {
14173 ret->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
14174 ret->dw_loc_oprnd1.v.val_die_ref.die = ref;
14175 ret->dw_loc_oprnd1.v.val_die_ref.external = 0;
14176 }
14177 else
14178 {
14179 ret->dw_loc_oprnd1.val_class = dw_val_class_decl_ref;
14180 ret->dw_loc_oprnd1.v.val_decl_ref = DEBUG_IMPLICIT_PTR_DECL (rtl);
14181 }
14182 return ret;
14183 }
14184
14185 /* Output a proper Dwarf location descriptor for a variable or parameter
14186 which is either allocated in a register or in a memory location. For a
14187 register, we just generate an OP_REG and the register number. For a
14188 memory location we provide a Dwarf postfix expression describing how to
14189 generate the (dynamic) address of the object onto the address stack.
14190
14191 MODE is mode of the decl if this loc_descriptor is going to be used in
14192 .debug_loc section where DW_OP_stack_value and DW_OP_implicit_value are
14193 allowed, VOIDmode otherwise.
14194
14195 If we don't know how to describe it, return 0. */
14196
14197 static dw_loc_descr_ref
14198 loc_descriptor (rtx rtl, machine_mode mode,
14199 enum var_init_status initialized)
14200 {
14201 dw_loc_descr_ref loc_result = NULL;
14202
14203 switch (GET_CODE (rtl))
14204 {
14205 case SUBREG:
14206 /* The case of a subreg may arise when we have a local (register)
14207 variable or a formal (register) parameter which doesn't quite fill
14208 up an entire register. For now, just assume that it is
14209 legitimate to make the Dwarf info refer to the whole register which
14210 contains the given subreg. */
14211 if (REG_P (SUBREG_REG (rtl)) && subreg_lowpart_p (rtl))
14212 loc_result = loc_descriptor (SUBREG_REG (rtl),
14213 GET_MODE (SUBREG_REG (rtl)), initialized);
14214 else
14215 goto do_default;
14216 break;
14217
14218 case REG:
14219 loc_result = reg_loc_descriptor (rtl, initialized);
14220 break;
14221
14222 case MEM:
14223 loc_result = mem_loc_descriptor (XEXP (rtl, 0), get_address_mode (rtl),
14224 GET_MODE (rtl), initialized);
14225 if (loc_result == NULL)
14226 loc_result = tls_mem_loc_descriptor (rtl);
14227 if (loc_result == NULL)
14228 {
14229 rtx new_rtl = avoid_constant_pool_reference (rtl);
14230 if (new_rtl != rtl)
14231 loc_result = loc_descriptor (new_rtl, mode, initialized);
14232 }
14233 break;
14234
14235 case CONCAT:
14236 loc_result = concat_loc_descriptor (XEXP (rtl, 0), XEXP (rtl, 1),
14237 initialized);
14238 break;
14239
14240 case CONCATN:
14241 loc_result = concatn_loc_descriptor (rtl, initialized);
14242 break;
14243
14244 case VAR_LOCATION:
14245 /* Single part. */
14246 if (GET_CODE (PAT_VAR_LOCATION_LOC (rtl)) != PARALLEL)
14247 {
14248 rtx loc = PAT_VAR_LOCATION_LOC (rtl);
14249 if (GET_CODE (loc) == EXPR_LIST)
14250 loc = XEXP (loc, 0);
14251 loc_result = loc_descriptor (loc, mode, initialized);
14252 break;
14253 }
14254
14255 rtl = XEXP (rtl, 1);
14256 /* FALLTHRU */
14257
14258 case PARALLEL:
14259 {
14260 rtvec par_elems = XVEC (rtl, 0);
14261 int num_elem = GET_NUM_ELEM (par_elems);
14262 machine_mode mode;
14263 int i;
14264
14265 /* Create the first one, so we have something to add to. */
14266 loc_result = loc_descriptor (XEXP (RTVEC_ELT (par_elems, 0), 0),
14267 VOIDmode, initialized);
14268 if (loc_result == NULL)
14269 return NULL;
14270 mode = GET_MODE (XEXP (RTVEC_ELT (par_elems, 0), 0));
14271 add_loc_descr_op_piece (&loc_result, GET_MODE_SIZE (mode));
14272 for (i = 1; i < num_elem; i++)
14273 {
14274 dw_loc_descr_ref temp;
14275
14276 temp = loc_descriptor (XEXP (RTVEC_ELT (par_elems, i), 0),
14277 VOIDmode, initialized);
14278 if (temp == NULL)
14279 return NULL;
14280 add_loc_descr (&loc_result, temp);
14281 mode = GET_MODE (XEXP (RTVEC_ELT (par_elems, i), 0));
14282 add_loc_descr_op_piece (&loc_result, GET_MODE_SIZE (mode));
14283 }
14284 }
14285 break;
14286
14287 case CONST_INT:
14288 if (mode != VOIDmode && mode != BLKmode)
14289 loc_result = address_of_int_loc_descriptor (GET_MODE_SIZE (mode),
14290 INTVAL (rtl));
14291 break;
14292
14293 case CONST_DOUBLE:
14294 if (mode == VOIDmode)
14295 mode = GET_MODE (rtl);
14296
14297 if (mode != VOIDmode && (dwarf_version >= 4 || !dwarf_strict))
14298 {
14299 gcc_assert (mode == GET_MODE (rtl) || VOIDmode == GET_MODE (rtl));
14300
14301 /* Note that a CONST_DOUBLE rtx could represent either an integer
14302 or a floating-point constant. A CONST_DOUBLE is used whenever
14303 the constant requires more than one word in order to be
14304 adequately represented. We output CONST_DOUBLEs as blocks. */
14305 loc_result = new_loc_descr (DW_OP_implicit_value,
14306 GET_MODE_SIZE (mode), 0);
14307 #if TARGET_SUPPORTS_WIDE_INT == 0
14308 if (!SCALAR_FLOAT_MODE_P (mode))
14309 {
14310 loc_result->dw_loc_oprnd2.val_class = dw_val_class_const_double;
14311 loc_result->dw_loc_oprnd2.v.val_double
14312 = rtx_to_double_int (rtl);
14313 }
14314 else
14315 #endif
14316 {
14317 unsigned int length = GET_MODE_SIZE (mode);
14318 unsigned char *array = ggc_vec_alloc<unsigned char> (length);
14319
14320 insert_float (rtl, array);
14321 loc_result->dw_loc_oprnd2.val_class = dw_val_class_vec;
14322 loc_result->dw_loc_oprnd2.v.val_vec.length = length / 4;
14323 loc_result->dw_loc_oprnd2.v.val_vec.elt_size = 4;
14324 loc_result->dw_loc_oprnd2.v.val_vec.array = array;
14325 }
14326 }
14327 break;
14328
14329 case CONST_WIDE_INT:
14330 if (mode == VOIDmode)
14331 mode = GET_MODE (rtl);
14332
14333 if (mode != VOIDmode && (dwarf_version >= 4 || !dwarf_strict))
14334 {
14335 loc_result = new_loc_descr (DW_OP_implicit_value,
14336 GET_MODE_SIZE (mode), 0);
14337 loc_result->dw_loc_oprnd2.val_class = dw_val_class_wide_int;
14338 loc_result->dw_loc_oprnd2.v.val_wide = ggc_alloc<wide_int> ();
14339 *loc_result->dw_loc_oprnd2.v.val_wide = std::make_pair (rtl, mode);
14340 }
14341 break;
14342
14343 case CONST_VECTOR:
14344 if (mode == VOIDmode)
14345 mode = GET_MODE (rtl);
14346
14347 if (mode != VOIDmode && (dwarf_version >= 4 || !dwarf_strict))
14348 {
14349 unsigned int elt_size = GET_MODE_UNIT_SIZE (GET_MODE (rtl));
14350 unsigned int length = CONST_VECTOR_NUNITS (rtl);
14351 unsigned char *array
14352 = ggc_vec_alloc<unsigned char> (length * elt_size);
14353 unsigned int i;
14354 unsigned char *p;
14355 machine_mode imode = GET_MODE_INNER (mode);
14356
14357 gcc_assert (mode == GET_MODE (rtl) || VOIDmode == GET_MODE (rtl));
14358 switch (GET_MODE_CLASS (mode))
14359 {
14360 case MODE_VECTOR_INT:
14361 for (i = 0, p = array; i < length; i++, p += elt_size)
14362 {
14363 rtx elt = CONST_VECTOR_ELT (rtl, i);
14364 insert_wide_int (std::make_pair (elt, imode), p, elt_size);
14365 }
14366 break;
14367
14368 case MODE_VECTOR_FLOAT:
14369 for (i = 0, p = array; i < length; i++, p += elt_size)
14370 {
14371 rtx elt = CONST_VECTOR_ELT (rtl, i);
14372 insert_float (elt, p);
14373 }
14374 break;
14375
14376 default:
14377 gcc_unreachable ();
14378 }
14379
14380 loc_result = new_loc_descr (DW_OP_implicit_value,
14381 length * elt_size, 0);
14382 loc_result->dw_loc_oprnd2.val_class = dw_val_class_vec;
14383 loc_result->dw_loc_oprnd2.v.val_vec.length = length;
14384 loc_result->dw_loc_oprnd2.v.val_vec.elt_size = elt_size;
14385 loc_result->dw_loc_oprnd2.v.val_vec.array = array;
14386 }
14387 break;
14388
14389 case CONST:
14390 if (mode == VOIDmode
14391 || CONST_SCALAR_INT_P (XEXP (rtl, 0))
14392 || CONST_DOUBLE_AS_FLOAT_P (XEXP (rtl, 0))
14393 || GET_CODE (XEXP (rtl, 0)) == CONST_VECTOR)
14394 {
14395 loc_result = loc_descriptor (XEXP (rtl, 0), mode, initialized);
14396 break;
14397 }
14398 /* FALLTHROUGH */
14399 case SYMBOL_REF:
14400 if (!const_ok_for_output (rtl))
14401 break;
14402 case LABEL_REF:
14403 if (mode != VOIDmode && GET_MODE_SIZE (mode) == DWARF2_ADDR_SIZE
14404 && (dwarf_version >= 4 || !dwarf_strict))
14405 {
14406 loc_result = new_addr_loc_descr (rtl, dtprel_false);
14407 add_loc_descr (&loc_result, new_loc_descr (DW_OP_stack_value, 0, 0));
14408 vec_safe_push (used_rtx_array, rtl);
14409 }
14410 break;
14411
14412 case DEBUG_IMPLICIT_PTR:
14413 loc_result = implicit_ptr_descriptor (rtl, 0);
14414 break;
14415
14416 case PLUS:
14417 if (GET_CODE (XEXP (rtl, 0)) == DEBUG_IMPLICIT_PTR
14418 && CONST_INT_P (XEXP (rtl, 1)))
14419 {
14420 loc_result
14421 = implicit_ptr_descriptor (XEXP (rtl, 0), INTVAL (XEXP (rtl, 1)));
14422 break;
14423 }
14424 /* FALLTHRU */
14425 do_default:
14426 default:
14427 if ((GET_MODE_CLASS (mode) == MODE_INT && GET_MODE (rtl) == mode
14428 && GET_MODE_SIZE (GET_MODE (rtl)) <= DWARF2_ADDR_SIZE
14429 && dwarf_version >= 4)
14430 || (!dwarf_strict && mode != VOIDmode && mode != BLKmode))
14431 {
14432 /* Value expression. */
14433 loc_result = mem_loc_descriptor (rtl, mode, VOIDmode, initialized);
14434 if (loc_result)
14435 add_loc_descr (&loc_result,
14436 new_loc_descr (DW_OP_stack_value, 0, 0));
14437 }
14438 break;
14439 }
14440
14441 return loc_result;
14442 }
14443
14444 /* We need to figure out what section we should use as the base for the
14445 address ranges where a given location is valid.
14446 1. If this particular DECL has a section associated with it, use that.
14447 2. If this function has a section associated with it, use that.
14448 3. Otherwise, use the text section.
14449 XXX: If you split a variable across multiple sections, we won't notice. */
14450
14451 static const char *
14452 secname_for_decl (const_tree decl)
14453 {
14454 const char *secname;
14455
14456 if (VAR_OR_FUNCTION_DECL_P (decl)
14457 && (DECL_EXTERNAL (decl) || TREE_PUBLIC (decl) || TREE_STATIC (decl))
14458 && DECL_SECTION_NAME (decl))
14459 secname = DECL_SECTION_NAME (decl);
14460 else if (current_function_decl && DECL_SECTION_NAME (current_function_decl))
14461 secname = DECL_SECTION_NAME (current_function_decl);
14462 else if (cfun && in_cold_section_p)
14463 secname = crtl->subsections.cold_section_label;
14464 else
14465 secname = text_section_label;
14466
14467 return secname;
14468 }
14469
14470 /* Return true when DECL_BY_REFERENCE is defined and set for DECL. */
14471
14472 static bool
14473 decl_by_reference_p (tree decl)
14474 {
14475 return ((TREE_CODE (decl) == PARM_DECL || TREE_CODE (decl) == RESULT_DECL
14476 || TREE_CODE (decl) == VAR_DECL)
14477 && DECL_BY_REFERENCE (decl));
14478 }
14479
14480 /* Helper function for dw_loc_list. Compute proper Dwarf location descriptor
14481 for VARLOC. */
14482
14483 static dw_loc_descr_ref
14484 dw_loc_list_1 (tree loc, rtx varloc, int want_address,
14485 enum var_init_status initialized)
14486 {
14487 int have_address = 0;
14488 dw_loc_descr_ref descr;
14489 machine_mode mode;
14490
14491 if (want_address != 2)
14492 {
14493 gcc_assert (GET_CODE (varloc) == VAR_LOCATION);
14494 /* Single part. */
14495 if (GET_CODE (PAT_VAR_LOCATION_LOC (varloc)) != PARALLEL)
14496 {
14497 varloc = PAT_VAR_LOCATION_LOC (varloc);
14498 if (GET_CODE (varloc) == EXPR_LIST)
14499 varloc = XEXP (varloc, 0);
14500 mode = GET_MODE (varloc);
14501 if (MEM_P (varloc))
14502 {
14503 rtx addr = XEXP (varloc, 0);
14504 descr = mem_loc_descriptor (addr, get_address_mode (varloc),
14505 mode, initialized);
14506 if (descr)
14507 have_address = 1;
14508 else
14509 {
14510 rtx x = avoid_constant_pool_reference (varloc);
14511 if (x != varloc)
14512 descr = mem_loc_descriptor (x, mode, VOIDmode,
14513 initialized);
14514 }
14515 }
14516 else
14517 descr = mem_loc_descriptor (varloc, mode, VOIDmode, initialized);
14518 }
14519 else
14520 return 0;
14521 }
14522 else
14523 {
14524 if (GET_CODE (varloc) == VAR_LOCATION)
14525 mode = DECL_MODE (PAT_VAR_LOCATION_DECL (varloc));
14526 else
14527 mode = DECL_MODE (loc);
14528 descr = loc_descriptor (varloc, mode, initialized);
14529 have_address = 1;
14530 }
14531
14532 if (!descr)
14533 return 0;
14534
14535 if (want_address == 2 && !have_address
14536 && (dwarf_version >= 4 || !dwarf_strict))
14537 {
14538 if (int_size_in_bytes (TREE_TYPE (loc)) > DWARF2_ADDR_SIZE)
14539 {
14540 expansion_failed (loc, NULL_RTX,
14541 "DWARF address size mismatch");
14542 return 0;
14543 }
14544 add_loc_descr (&descr, new_loc_descr (DW_OP_stack_value, 0, 0));
14545 have_address = 1;
14546 }
14547 /* Show if we can't fill the request for an address. */
14548 if (want_address && !have_address)
14549 {
14550 expansion_failed (loc, NULL_RTX,
14551 "Want address and only have value");
14552 return 0;
14553 }
14554
14555 /* If we've got an address and don't want one, dereference. */
14556 if (!want_address && have_address)
14557 {
14558 HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (loc));
14559 enum dwarf_location_atom op;
14560
14561 if (size > DWARF2_ADDR_SIZE || size == -1)
14562 {
14563 expansion_failed (loc, NULL_RTX,
14564 "DWARF address size mismatch");
14565 return 0;
14566 }
14567 else if (size == DWARF2_ADDR_SIZE)
14568 op = DW_OP_deref;
14569 else
14570 op = DW_OP_deref_size;
14571
14572 add_loc_descr (&descr, new_loc_descr (op, size, 0));
14573 }
14574
14575 return descr;
14576 }
14577
14578 /* Create a DW_OP_piece or DW_OP_bit_piece for bitsize, or return NULL
14579 if it is not possible. */
14580
14581 static dw_loc_descr_ref
14582 new_loc_descr_op_bit_piece (HOST_WIDE_INT bitsize, HOST_WIDE_INT offset)
14583 {
14584 if ((bitsize % BITS_PER_UNIT) == 0 && offset == 0)
14585 return new_loc_descr (DW_OP_piece, bitsize / BITS_PER_UNIT, 0);
14586 else if (dwarf_version >= 3 || !dwarf_strict)
14587 return new_loc_descr (DW_OP_bit_piece, bitsize, offset);
14588 else
14589 return NULL;
14590 }
14591
14592 /* Helper function for dw_loc_list. Compute proper Dwarf location descriptor
14593 for VAR_LOC_NOTE for variable DECL that has been optimized by SRA. */
14594
14595 static dw_loc_descr_ref
14596 dw_sra_loc_expr (tree decl, rtx loc)
14597 {
14598 rtx p;
14599 unsigned HOST_WIDE_INT padsize = 0;
14600 dw_loc_descr_ref descr, *descr_tail;
14601 unsigned HOST_WIDE_INT decl_size;
14602 rtx varloc;
14603 enum var_init_status initialized;
14604
14605 if (DECL_SIZE (decl) == NULL
14606 || !tree_fits_uhwi_p (DECL_SIZE (decl)))
14607 return NULL;
14608
14609 decl_size = tree_to_uhwi (DECL_SIZE (decl));
14610 descr = NULL;
14611 descr_tail = &descr;
14612
14613 for (p = loc; p; p = XEXP (p, 1))
14614 {
14615 unsigned HOST_WIDE_INT bitsize = decl_piece_bitsize (p);
14616 rtx loc_note = *decl_piece_varloc_ptr (p);
14617 dw_loc_descr_ref cur_descr;
14618 dw_loc_descr_ref *tail, last = NULL;
14619 unsigned HOST_WIDE_INT opsize = 0;
14620
14621 if (loc_note == NULL_RTX
14622 || NOTE_VAR_LOCATION_LOC (loc_note) == NULL_RTX)
14623 {
14624 padsize += bitsize;
14625 continue;
14626 }
14627 initialized = NOTE_VAR_LOCATION_STATUS (loc_note);
14628 varloc = NOTE_VAR_LOCATION (loc_note);
14629 cur_descr = dw_loc_list_1 (decl, varloc, 2, initialized);
14630 if (cur_descr == NULL)
14631 {
14632 padsize += bitsize;
14633 continue;
14634 }
14635
14636 /* Check that cur_descr either doesn't use
14637 DW_OP_*piece operations, or their sum is equal
14638 to bitsize. Otherwise we can't embed it. */
14639 for (tail = &cur_descr; *tail != NULL;
14640 tail = &(*tail)->dw_loc_next)
14641 if ((*tail)->dw_loc_opc == DW_OP_piece)
14642 {
14643 opsize += (*tail)->dw_loc_oprnd1.v.val_unsigned
14644 * BITS_PER_UNIT;
14645 last = *tail;
14646 }
14647 else if ((*tail)->dw_loc_opc == DW_OP_bit_piece)
14648 {
14649 opsize += (*tail)->dw_loc_oprnd1.v.val_unsigned;
14650 last = *tail;
14651 }
14652
14653 if (last != NULL && opsize != bitsize)
14654 {
14655 padsize += bitsize;
14656 /* Discard the current piece of the descriptor and release any
14657 addr_table entries it uses. */
14658 remove_loc_list_addr_table_entries (cur_descr);
14659 continue;
14660 }
14661
14662 /* If there is a hole, add DW_OP_*piece after empty DWARF
14663 expression, which means that those bits are optimized out. */
14664 if (padsize)
14665 {
14666 if (padsize > decl_size)
14667 {
14668 remove_loc_list_addr_table_entries (cur_descr);
14669 goto discard_descr;
14670 }
14671 decl_size -= padsize;
14672 *descr_tail = new_loc_descr_op_bit_piece (padsize, 0);
14673 if (*descr_tail == NULL)
14674 {
14675 remove_loc_list_addr_table_entries (cur_descr);
14676 goto discard_descr;
14677 }
14678 descr_tail = &(*descr_tail)->dw_loc_next;
14679 padsize = 0;
14680 }
14681 *descr_tail = cur_descr;
14682 descr_tail = tail;
14683 if (bitsize > decl_size)
14684 goto discard_descr;
14685 decl_size -= bitsize;
14686 if (last == NULL)
14687 {
14688 HOST_WIDE_INT offset = 0;
14689 if (GET_CODE (varloc) == VAR_LOCATION
14690 && GET_CODE (PAT_VAR_LOCATION_LOC (varloc)) != PARALLEL)
14691 {
14692 varloc = PAT_VAR_LOCATION_LOC (varloc);
14693 if (GET_CODE (varloc) == EXPR_LIST)
14694 varloc = XEXP (varloc, 0);
14695 }
14696 do
14697 {
14698 if (GET_CODE (varloc) == CONST
14699 || GET_CODE (varloc) == SIGN_EXTEND
14700 || GET_CODE (varloc) == ZERO_EXTEND)
14701 varloc = XEXP (varloc, 0);
14702 else if (GET_CODE (varloc) == SUBREG)
14703 varloc = SUBREG_REG (varloc);
14704 else
14705 break;
14706 }
14707 while (1);
14708 /* DW_OP_bit_size offset should be zero for register
14709 or implicit location descriptions and empty location
14710 descriptions, but for memory addresses needs big endian
14711 adjustment. */
14712 if (MEM_P (varloc))
14713 {
14714 unsigned HOST_WIDE_INT memsize
14715 = MEM_SIZE (varloc) * BITS_PER_UNIT;
14716 if (memsize != bitsize)
14717 {
14718 if (BYTES_BIG_ENDIAN != WORDS_BIG_ENDIAN
14719 && (memsize > BITS_PER_WORD || bitsize > BITS_PER_WORD))
14720 goto discard_descr;
14721 if (memsize < bitsize)
14722 goto discard_descr;
14723 if (BITS_BIG_ENDIAN)
14724 offset = memsize - bitsize;
14725 }
14726 }
14727
14728 *descr_tail = new_loc_descr_op_bit_piece (bitsize, offset);
14729 if (*descr_tail == NULL)
14730 goto discard_descr;
14731 descr_tail = &(*descr_tail)->dw_loc_next;
14732 }
14733 }
14734
14735 /* If there were any non-empty expressions, add padding till the end of
14736 the decl. */
14737 if (descr != NULL && decl_size != 0)
14738 {
14739 *descr_tail = new_loc_descr_op_bit_piece (decl_size, 0);
14740 if (*descr_tail == NULL)
14741 goto discard_descr;
14742 }
14743 return descr;
14744
14745 discard_descr:
14746 /* Discard the descriptor and release any addr_table entries it uses. */
14747 remove_loc_list_addr_table_entries (descr);
14748 return NULL;
14749 }
14750
14751 /* Return the dwarf representation of the location list LOC_LIST of
14752 DECL. WANT_ADDRESS has the same meaning as in loc_list_from_tree
14753 function. */
14754
14755 static dw_loc_list_ref
14756 dw_loc_list (var_loc_list *loc_list, tree decl, int want_address)
14757 {
14758 const char *endname, *secname;
14759 rtx varloc;
14760 enum var_init_status initialized;
14761 struct var_loc_node *node;
14762 dw_loc_descr_ref descr;
14763 char label_id[MAX_ARTIFICIAL_LABEL_BYTES];
14764 dw_loc_list_ref list = NULL;
14765 dw_loc_list_ref *listp = &list;
14766
14767 /* Now that we know what section we are using for a base,
14768 actually construct the list of locations.
14769 The first location information is what is passed to the
14770 function that creates the location list, and the remaining
14771 locations just get added on to that list.
14772 Note that we only know the start address for a location
14773 (IE location changes), so to build the range, we use
14774 the range [current location start, next location start].
14775 This means we have to special case the last node, and generate
14776 a range of [last location start, end of function label]. */
14777
14778 secname = secname_for_decl (decl);
14779
14780 for (node = loc_list->first; node; node = node->next)
14781 if (GET_CODE (node->loc) == EXPR_LIST
14782 || NOTE_VAR_LOCATION_LOC (node->loc) != NULL_RTX)
14783 {
14784 if (GET_CODE (node->loc) == EXPR_LIST)
14785 {
14786 /* This requires DW_OP_{,bit_}piece, which is not usable
14787 inside DWARF expressions. */
14788 if (want_address != 2)
14789 continue;
14790 descr = dw_sra_loc_expr (decl, node->loc);
14791 if (descr == NULL)
14792 continue;
14793 }
14794 else
14795 {
14796 initialized = NOTE_VAR_LOCATION_STATUS (node->loc);
14797 varloc = NOTE_VAR_LOCATION (node->loc);
14798 descr = dw_loc_list_1 (decl, varloc, want_address, initialized);
14799 }
14800 if (descr)
14801 {
14802 bool range_across_switch = false;
14803 /* If section switch happens in between node->label
14804 and node->next->label (or end of function) and
14805 we can't emit it as a single entry list,
14806 emit two ranges, first one ending at the end
14807 of first partition and second one starting at the
14808 beginning of second partition. */
14809 if (node == loc_list->last_before_switch
14810 && (node != loc_list->first || loc_list->first->next)
14811 && current_function_decl)
14812 {
14813 endname = cfun->fde->dw_fde_end;
14814 range_across_switch = true;
14815 }
14816 /* The variable has a location between NODE->LABEL and
14817 NODE->NEXT->LABEL. */
14818 else if (node->next)
14819 endname = node->next->label;
14820 /* If the variable has a location at the last label
14821 it keeps its location until the end of function. */
14822 else if (!current_function_decl)
14823 endname = text_end_label;
14824 else
14825 {
14826 ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_END_LABEL,
14827 current_function_funcdef_no);
14828 endname = ggc_strdup (label_id);
14829 }
14830
14831 *listp = new_loc_list (descr, node->label, endname, secname);
14832 if (TREE_CODE (decl) == PARM_DECL
14833 && node == loc_list->first
14834 && NOTE_P (node->loc)
14835 && strcmp (node->label, endname) == 0)
14836 (*listp)->force = true;
14837 listp = &(*listp)->dw_loc_next;
14838
14839 if (range_across_switch)
14840 {
14841 if (GET_CODE (node->loc) == EXPR_LIST)
14842 descr = dw_sra_loc_expr (decl, node->loc);
14843 else
14844 {
14845 initialized = NOTE_VAR_LOCATION_STATUS (node->loc);
14846 varloc = NOTE_VAR_LOCATION (node->loc);
14847 descr = dw_loc_list_1 (decl, varloc, want_address,
14848 initialized);
14849 }
14850 gcc_assert (descr);
14851 /* The variable has a location between NODE->LABEL and
14852 NODE->NEXT->LABEL. */
14853 if (node->next)
14854 endname = node->next->label;
14855 else
14856 endname = cfun->fde->dw_fde_second_end;
14857 *listp = new_loc_list (descr,
14858 cfun->fde->dw_fde_second_begin,
14859 endname, secname);
14860 listp = &(*listp)->dw_loc_next;
14861 }
14862 }
14863 }
14864
14865 /* Try to avoid the overhead of a location list emitting a location
14866 expression instead, but only if we didn't have more than one
14867 location entry in the first place. If some entries were not
14868 representable, we don't want to pretend a single entry that was
14869 applies to the entire scope in which the variable is
14870 available. */
14871 if (list && loc_list->first->next)
14872 gen_llsym (list);
14873
14874 return list;
14875 }
14876
14877 /* Return if the loc_list has only single element and thus can be represented
14878 as location description. */
14879
14880 static bool
14881 single_element_loc_list_p (dw_loc_list_ref list)
14882 {
14883 gcc_assert (!list->dw_loc_next || list->ll_symbol);
14884 return !list->ll_symbol;
14885 }
14886
14887 /* To each location in list LIST add loc descr REF. */
14888
14889 static void
14890 add_loc_descr_to_each (dw_loc_list_ref list, dw_loc_descr_ref ref)
14891 {
14892 dw_loc_descr_ref copy;
14893 add_loc_descr (&list->expr, ref);
14894 list = list->dw_loc_next;
14895 while (list)
14896 {
14897 copy = ggc_alloc<dw_loc_descr_node> ();
14898 memcpy (copy, ref, sizeof (dw_loc_descr_node));
14899 add_loc_descr (&list->expr, copy);
14900 while (copy->dw_loc_next)
14901 {
14902 dw_loc_descr_ref new_copy = ggc_alloc<dw_loc_descr_node> ();
14903 memcpy (new_copy, copy->dw_loc_next, sizeof (dw_loc_descr_node));
14904 copy->dw_loc_next = new_copy;
14905 copy = new_copy;
14906 }
14907 list = list->dw_loc_next;
14908 }
14909 }
14910
14911 /* Given two lists RET and LIST
14912 produce location list that is result of adding expression in LIST
14913 to expression in RET on each position in program.
14914 Might be destructive on both RET and LIST.
14915
14916 TODO: We handle only simple cases of RET or LIST having at most one
14917 element. General case would inolve sorting the lists in program order
14918 and merging them that will need some additional work.
14919 Adding that will improve quality of debug info especially for SRA-ed
14920 structures. */
14921
14922 static void
14923 add_loc_list (dw_loc_list_ref *ret, dw_loc_list_ref list)
14924 {
14925 if (!list)
14926 return;
14927 if (!*ret)
14928 {
14929 *ret = list;
14930 return;
14931 }
14932 if (!list->dw_loc_next)
14933 {
14934 add_loc_descr_to_each (*ret, list->expr);
14935 return;
14936 }
14937 if (!(*ret)->dw_loc_next)
14938 {
14939 add_loc_descr_to_each (list, (*ret)->expr);
14940 *ret = list;
14941 return;
14942 }
14943 expansion_failed (NULL_TREE, NULL_RTX,
14944 "Don't know how to merge two non-trivial"
14945 " location lists.\n");
14946 *ret = NULL;
14947 return;
14948 }
14949
14950 /* LOC is constant expression. Try a luck, look it up in constant
14951 pool and return its loc_descr of its address. */
14952
14953 static dw_loc_descr_ref
14954 cst_pool_loc_descr (tree loc)
14955 {
14956 /* Get an RTL for this, if something has been emitted. */
14957 rtx rtl = lookup_constant_def (loc);
14958
14959 if (!rtl || !MEM_P (rtl))
14960 {
14961 gcc_assert (!rtl);
14962 return 0;
14963 }
14964 gcc_assert (GET_CODE (XEXP (rtl, 0)) == SYMBOL_REF);
14965
14966 /* TODO: We might get more coverage if we was actually delaying expansion
14967 of all expressions till end of compilation when constant pools are fully
14968 populated. */
14969 if (!TREE_ASM_WRITTEN (SYMBOL_REF_DECL (XEXP (rtl, 0))))
14970 {
14971 expansion_failed (loc, NULL_RTX,
14972 "CST value in contant pool but not marked.");
14973 return 0;
14974 }
14975 return mem_loc_descriptor (XEXP (rtl, 0), get_address_mode (rtl),
14976 GET_MODE (rtl), VAR_INIT_STATUS_INITIALIZED);
14977 }
14978
14979 /* Return dw_loc_list representing address of addr_expr LOC
14980 by looking for inner INDIRECT_REF expression and turning
14981 it into simple arithmetics.
14982
14983 See loc_list_from_tree for the meaning of CONTEXT. */
14984
14985 static dw_loc_list_ref
14986 loc_list_for_address_of_addr_expr_of_indirect_ref (tree loc, bool toplev,
14987 const loc_descr_context *context)
14988 {
14989 tree obj, offset;
14990 HOST_WIDE_INT bitsize, bitpos, bytepos;
14991 machine_mode mode;
14992 int unsignedp, reversep, volatilep = 0;
14993 dw_loc_list_ref list_ret = NULL, list_ret1 = NULL;
14994
14995 obj = get_inner_reference (TREE_OPERAND (loc, 0),
14996 &bitsize, &bitpos, &offset, &mode,
14997 &unsignedp, &reversep, &volatilep, false);
14998 STRIP_NOPS (obj);
14999 if (bitpos % BITS_PER_UNIT)
15000 {
15001 expansion_failed (loc, NULL_RTX, "bitfield access");
15002 return 0;
15003 }
15004 if (!INDIRECT_REF_P (obj))
15005 {
15006 expansion_failed (obj,
15007 NULL_RTX, "no indirect ref in inner refrence");
15008 return 0;
15009 }
15010 if (!offset && !bitpos)
15011 list_ret = loc_list_from_tree (TREE_OPERAND (obj, 0), toplev ? 2 : 1,
15012 context);
15013 else if (toplev
15014 && int_size_in_bytes (TREE_TYPE (loc)) <= DWARF2_ADDR_SIZE
15015 && (dwarf_version >= 4 || !dwarf_strict))
15016 {
15017 list_ret = loc_list_from_tree (TREE_OPERAND (obj, 0), 0, context);
15018 if (!list_ret)
15019 return 0;
15020 if (offset)
15021 {
15022 /* Variable offset. */
15023 list_ret1 = loc_list_from_tree (offset, 0, context);
15024 if (list_ret1 == 0)
15025 return 0;
15026 add_loc_list (&list_ret, list_ret1);
15027 if (!list_ret)
15028 return 0;
15029 add_loc_descr_to_each (list_ret,
15030 new_loc_descr (DW_OP_plus, 0, 0));
15031 }
15032 bytepos = bitpos / BITS_PER_UNIT;
15033 if (bytepos > 0)
15034 add_loc_descr_to_each (list_ret,
15035 new_loc_descr (DW_OP_plus_uconst,
15036 bytepos, 0));
15037 else if (bytepos < 0)
15038 loc_list_plus_const (list_ret, bytepos);
15039 add_loc_descr_to_each (list_ret,
15040 new_loc_descr (DW_OP_stack_value, 0, 0));
15041 }
15042 return list_ret;
15043 }
15044
15045 /* Set LOC to the next operation that is not a DW_OP_nop operation. In the case
15046 all operations from LOC are nops, move to the last one. Insert in NOPS all
15047 operations that are skipped. */
15048
15049 static void
15050 loc_descr_to_next_no_nop (dw_loc_descr_ref &loc,
15051 hash_set<dw_loc_descr_ref> &nops)
15052 {
15053 while (loc->dw_loc_next != NULL && loc->dw_loc_opc == DW_OP_nop)
15054 {
15055 nops.add (loc);
15056 loc = loc->dw_loc_next;
15057 }
15058 }
15059
15060 /* Helper for loc_descr_without_nops: free the location description operation
15061 P. */
15062
15063 bool
15064 free_loc_descr (const dw_loc_descr_ref &loc, void *data ATTRIBUTE_UNUSED)
15065 {
15066 ggc_free (loc);
15067 return true;
15068 }
15069
15070 /* Remove all DW_OP_nop operations from LOC except, if it exists, the one that
15071 finishes LOC. */
15072
15073 static void
15074 loc_descr_without_nops (dw_loc_descr_ref &loc)
15075 {
15076 if (loc->dw_loc_opc == DW_OP_nop && loc->dw_loc_next == NULL)
15077 return;
15078
15079 /* Set of all DW_OP_nop operations we remove. */
15080 hash_set<dw_loc_descr_ref> nops;
15081
15082 /* First, strip all prefix NOP operations in order to keep the head of the
15083 operations list. */
15084 loc_descr_to_next_no_nop (loc, nops);
15085
15086 for (dw_loc_descr_ref cur = loc; cur != NULL;)
15087 {
15088 /* For control flow operations: strip "prefix" nops in destination
15089 labels. */
15090 if (cur->dw_loc_oprnd1.val_class == dw_val_class_loc)
15091 loc_descr_to_next_no_nop (cur->dw_loc_oprnd1.v.val_loc, nops);
15092 if (cur->dw_loc_oprnd2.val_class == dw_val_class_loc)
15093 loc_descr_to_next_no_nop (cur->dw_loc_oprnd2.v.val_loc, nops);
15094
15095 /* Do the same for the operations that follow, then move to the next
15096 iteration. */
15097 if (cur->dw_loc_next != NULL)
15098 loc_descr_to_next_no_nop (cur->dw_loc_next, nops);
15099 cur = cur->dw_loc_next;
15100 }
15101
15102 nops.traverse<void *, free_loc_descr> (NULL);
15103 }
15104
15105
15106 struct dwarf_procedure_info;
15107
15108 /* Helper structure for location descriptions generation. */
15109 struct loc_descr_context
15110 {
15111 /* The type that is implicitly referenced by DW_OP_push_object_address, or
15112 NULL_TREE if DW_OP_push_object_address in invalid for this location
15113 description. This is used when processing PLACEHOLDER_EXPR nodes. */
15114 tree context_type;
15115 /* The ..._DECL node that should be translated as a
15116 DW_OP_push_object_address operation. */
15117 tree base_decl;
15118 /* Information about the DWARF procedure we are currently generating. NULL if
15119 we are not generating a DWARF procedure. */
15120 struct dwarf_procedure_info *dpi;
15121 };
15122
15123 /* DWARF procedures generation
15124
15125 DWARF expressions (aka. location descriptions) are used to encode variable
15126 things such as sizes or offsets. Such computations can have redundant parts
15127 that can be factorized in order to reduce the size of the output debug
15128 information. This is the whole point of DWARF procedures.
15129
15130 Thanks to stor-layout.c, size and offset expressions in GENERIC trees are
15131 already factorized into functions ("size functions") in order to handle very
15132 big and complex types. Such functions are quite simple: they have integral
15133 arguments, they return an integral result and their body contains only a
15134 return statement with arithmetic expressions. This is the only kind of
15135 function we are interested in translating into DWARF procedures, here.
15136
15137 DWARF expressions and DWARF procedure are executed using a stack, so we have
15138 to define some calling convention for them to interact. Let's say that:
15139
15140 - Before calling a DWARF procedure, DWARF expressions must push on the stack
15141 all arguments in reverse order (right-to-left) so that when the DWARF
15142 procedure execution starts, the first argument is the top of the stack.
15143
15144 - Then, when returning, the DWARF procedure must have consumed all arguments
15145 on the stack, must have pushed the result and touched nothing else.
15146
15147 - Each integral argument and the result are integral types can be hold in a
15148 single stack slot.
15149
15150 - We call "frame offset" the number of stack slots that are "under DWARF
15151 procedure control": it includes the arguments slots, the temporaries and
15152 the result slot. Thus, it is equal to the number of arguments when the
15153 procedure execution starts and must be equal to one (the result) when it
15154 returns. */
15155
15156 /* Helper structure used when generating operations for a DWARF procedure. */
15157 struct dwarf_procedure_info
15158 {
15159 /* The FUNCTION_DECL node corresponding to the DWARF procedure that is
15160 currently translated. */
15161 tree fndecl;
15162 /* The number of arguments FNDECL takes. */
15163 unsigned args_count;
15164 };
15165
15166 /* Return a pointer to a newly created DIE node for a DWARF procedure. Add
15167 LOCATION as its DW_AT_location attribute. If FNDECL is not NULL_TREE,
15168 equate it to this DIE. */
15169
15170 static dw_die_ref
15171 new_dwarf_proc_die (dw_loc_descr_ref location, tree fndecl,
15172 dw_die_ref parent_die)
15173 {
15174 const bool dwarf_proc_supported = dwarf_version >= 4;
15175 dw_die_ref dwarf_proc_die;
15176
15177 if ((dwarf_version < 3 && dwarf_strict)
15178 || location == NULL)
15179 return NULL;
15180
15181 dwarf_proc_die = new_die (dwarf_proc_supported
15182 ? DW_TAG_dwarf_procedure
15183 : DW_TAG_variable,
15184 parent_die,
15185 fndecl);
15186 if (fndecl)
15187 equate_decl_number_to_die (fndecl, dwarf_proc_die);
15188 if (!dwarf_proc_supported)
15189 add_AT_flag (dwarf_proc_die, DW_AT_artificial, 1);
15190 add_AT_loc (dwarf_proc_die, DW_AT_location, location);
15191 return dwarf_proc_die;
15192 }
15193
15194 /* Return whether TYPE is a supported type as a DWARF procedure argument
15195 type or return type (we handle only scalar types and pointer types that
15196 aren't wider than the DWARF expression evaluation stack. */
15197
15198 static bool
15199 is_handled_procedure_type (tree type)
15200 {
15201 return ((INTEGRAL_TYPE_P (type)
15202 || TREE_CODE (type) == OFFSET_TYPE
15203 || TREE_CODE (type) == POINTER_TYPE)
15204 && int_size_in_bytes (type) <= DWARF2_ADDR_SIZE);
15205 }
15206
15207 /* Helper for resolve_args_picking. Stop when coming across VISITED nodes. */
15208
15209 static bool
15210 resolve_args_picking_1 (dw_loc_descr_ref loc, unsigned initial_frame_offset,
15211 struct dwarf_procedure_info *dpi,
15212 hash_set<dw_loc_descr_ref> &visited)
15213 {
15214 /* The "frame_offset" identifier is already used to name a macro... */
15215 unsigned frame_offset_ = initial_frame_offset;
15216 dw_loc_descr_ref l;
15217
15218 for (l = loc; l != NULL;)
15219 {
15220 /* If we already met this node, there is nothing to compute anymore. */
15221 if (visited.add (l))
15222 {
15223 #if ENABLE_CHECKING
15224 /* Make sure that the stack size is consistent wherever the execution
15225 flow comes from. */
15226 gcc_assert ((unsigned) l->dw_loc_frame_offset == frame_offset_);
15227 #endif
15228 break;
15229 }
15230 #if ENABLE_CHECKING
15231 l->dw_loc_frame_offset = frame_offset_;
15232 #endif
15233
15234 /* If needed, relocate the picking offset with respect to the frame
15235 offset. */
15236 if (l->dw_loc_opc == DW_OP_pick && l->frame_offset_rel)
15237 {
15238 /* frame_offset_ is the size of the current stack frame, including
15239 incoming arguments. Besides, the arguments are pushed
15240 right-to-left. Thus, in order to access the Nth argument from
15241 this operation node, the picking has to skip temporaries *plus*
15242 one stack slot per argument (0 for the first one, 1 for the second
15243 one, etc.).
15244
15245 The targetted argument number (N) is already set as the operand,
15246 and the number of temporaries can be computed with:
15247 frame_offsets_ - dpi->args_count */
15248 l->dw_loc_oprnd1.v.val_unsigned += frame_offset_ - dpi->args_count;
15249
15250 /* DW_OP_pick handles only offsets from 0 to 255 (inclusive)... */
15251 if (l->dw_loc_oprnd1.v.val_unsigned > 255)
15252 return false;
15253 }
15254
15255 /* Update frame_offset according to the effect the current operation has
15256 on the stack. */
15257 switch (l->dw_loc_opc)
15258 {
15259 case DW_OP_deref:
15260 case DW_OP_swap:
15261 case DW_OP_rot:
15262 case DW_OP_abs:
15263 case DW_OP_not:
15264 case DW_OP_plus_uconst:
15265 case DW_OP_skip:
15266 case DW_OP_reg0:
15267 case DW_OP_reg1:
15268 case DW_OP_reg2:
15269 case DW_OP_reg3:
15270 case DW_OP_reg4:
15271 case DW_OP_reg5:
15272 case DW_OP_reg6:
15273 case DW_OP_reg7:
15274 case DW_OP_reg8:
15275 case DW_OP_reg9:
15276 case DW_OP_reg10:
15277 case DW_OP_reg11:
15278 case DW_OP_reg12:
15279 case DW_OP_reg13:
15280 case DW_OP_reg14:
15281 case DW_OP_reg15:
15282 case DW_OP_reg16:
15283 case DW_OP_reg17:
15284 case DW_OP_reg18:
15285 case DW_OP_reg19:
15286 case DW_OP_reg20:
15287 case DW_OP_reg21:
15288 case DW_OP_reg22:
15289 case DW_OP_reg23:
15290 case DW_OP_reg24:
15291 case DW_OP_reg25:
15292 case DW_OP_reg26:
15293 case DW_OP_reg27:
15294 case DW_OP_reg28:
15295 case DW_OP_reg29:
15296 case DW_OP_reg30:
15297 case DW_OP_reg31:
15298 case DW_OP_bregx:
15299 case DW_OP_piece:
15300 case DW_OP_deref_size:
15301 case DW_OP_nop:
15302 case DW_OP_form_tls_address:
15303 case DW_OP_bit_piece:
15304 case DW_OP_implicit_value:
15305 case DW_OP_stack_value:
15306 break;
15307
15308 case DW_OP_addr:
15309 case DW_OP_const1u:
15310 case DW_OP_const1s:
15311 case DW_OP_const2u:
15312 case DW_OP_const2s:
15313 case DW_OP_const4u:
15314 case DW_OP_const4s:
15315 case DW_OP_const8u:
15316 case DW_OP_const8s:
15317 case DW_OP_constu:
15318 case DW_OP_consts:
15319 case DW_OP_dup:
15320 case DW_OP_over:
15321 case DW_OP_pick:
15322 case DW_OP_lit0:
15323 case DW_OP_lit1:
15324 case DW_OP_lit2:
15325 case DW_OP_lit3:
15326 case DW_OP_lit4:
15327 case DW_OP_lit5:
15328 case DW_OP_lit6:
15329 case DW_OP_lit7:
15330 case DW_OP_lit8:
15331 case DW_OP_lit9:
15332 case DW_OP_lit10:
15333 case DW_OP_lit11:
15334 case DW_OP_lit12:
15335 case DW_OP_lit13:
15336 case DW_OP_lit14:
15337 case DW_OP_lit15:
15338 case DW_OP_lit16:
15339 case DW_OP_lit17:
15340 case DW_OP_lit18:
15341 case DW_OP_lit19:
15342 case DW_OP_lit20:
15343 case DW_OP_lit21:
15344 case DW_OP_lit22:
15345 case DW_OP_lit23:
15346 case DW_OP_lit24:
15347 case DW_OP_lit25:
15348 case DW_OP_lit26:
15349 case DW_OP_lit27:
15350 case DW_OP_lit28:
15351 case DW_OP_lit29:
15352 case DW_OP_lit30:
15353 case DW_OP_lit31:
15354 case DW_OP_breg0:
15355 case DW_OP_breg1:
15356 case DW_OP_breg2:
15357 case DW_OP_breg3:
15358 case DW_OP_breg4:
15359 case DW_OP_breg5:
15360 case DW_OP_breg6:
15361 case DW_OP_breg7:
15362 case DW_OP_breg8:
15363 case DW_OP_breg9:
15364 case DW_OP_breg10:
15365 case DW_OP_breg11:
15366 case DW_OP_breg12:
15367 case DW_OP_breg13:
15368 case DW_OP_breg14:
15369 case DW_OP_breg15:
15370 case DW_OP_breg16:
15371 case DW_OP_breg17:
15372 case DW_OP_breg18:
15373 case DW_OP_breg19:
15374 case DW_OP_breg20:
15375 case DW_OP_breg21:
15376 case DW_OP_breg22:
15377 case DW_OP_breg23:
15378 case DW_OP_breg24:
15379 case DW_OP_breg25:
15380 case DW_OP_breg26:
15381 case DW_OP_breg27:
15382 case DW_OP_breg28:
15383 case DW_OP_breg29:
15384 case DW_OP_breg30:
15385 case DW_OP_breg31:
15386 case DW_OP_fbreg:
15387 case DW_OP_push_object_address:
15388 case DW_OP_call_frame_cfa:
15389 ++frame_offset_;
15390 break;
15391
15392 case DW_OP_drop:
15393 case DW_OP_xderef:
15394 case DW_OP_and:
15395 case DW_OP_div:
15396 case DW_OP_minus:
15397 case DW_OP_mod:
15398 case DW_OP_mul:
15399 case DW_OP_neg:
15400 case DW_OP_or:
15401 case DW_OP_plus:
15402 case DW_OP_shl:
15403 case DW_OP_shr:
15404 case DW_OP_shra:
15405 case DW_OP_xor:
15406 case DW_OP_bra:
15407 case DW_OP_eq:
15408 case DW_OP_ge:
15409 case DW_OP_gt:
15410 case DW_OP_le:
15411 case DW_OP_lt:
15412 case DW_OP_ne:
15413 case DW_OP_regx:
15414 case DW_OP_xderef_size:
15415 --frame_offset_;
15416 break;
15417
15418 case DW_OP_call2:
15419 case DW_OP_call4:
15420 case DW_OP_call_ref:
15421 {
15422 dw_die_ref dwarf_proc = l->dw_loc_oprnd1.v.val_die_ref.die;
15423 int *stack_usage = dwarf_proc_stack_usage_map->get (dwarf_proc);
15424
15425 if (stack_usage == NULL)
15426 return false;
15427 frame_offset += *stack_usage;
15428 break;
15429 }
15430
15431 case DW_OP_GNU_push_tls_address:
15432 case DW_OP_GNU_uninit:
15433 case DW_OP_GNU_encoded_addr:
15434 case DW_OP_GNU_implicit_pointer:
15435 case DW_OP_GNU_entry_value:
15436 case DW_OP_GNU_const_type:
15437 case DW_OP_GNU_regval_type:
15438 case DW_OP_GNU_deref_type:
15439 case DW_OP_GNU_convert:
15440 case DW_OP_GNU_reinterpret:
15441 case DW_OP_GNU_parameter_ref:
15442 /* loc_list_from_tree will probably not output these operations for
15443 size functions, so assume they will not appear here. */
15444 /* Fall through... */
15445
15446 default:
15447 gcc_unreachable ();
15448 }
15449
15450 /* Now, follow the control flow (except subroutine calls). */
15451 switch (l->dw_loc_opc)
15452 {
15453 case DW_OP_bra:
15454 if (!resolve_args_picking_1 (l->dw_loc_next, frame_offset_, dpi,
15455 visited))
15456 return false;
15457 /* Fall through... */
15458
15459 case DW_OP_skip:
15460 l = l->dw_loc_oprnd1.v.val_loc;
15461 break;
15462
15463 case DW_OP_stack_value:
15464 return true;
15465
15466 default:
15467 l = l->dw_loc_next;
15468 break;
15469 }
15470 }
15471
15472 return true;
15473 }
15474
15475 /* Make a DFS over operations reachable through LOC (i.e. follow branch
15476 operations) in order to resolve the operand of DW_OP_pick operations that
15477 target DWARF procedure arguments (DPI). Stop at already visited nodes.
15478 INITIAL_FRAME_OFFSET is the frame offset *before* LOC is executed. Return
15479 if all relocations were successful. */
15480
15481 static bool
15482 resolve_args_picking (dw_loc_descr_ref loc, unsigned initial_frame_offset,
15483 struct dwarf_procedure_info *dpi)
15484 {
15485 hash_set<dw_loc_descr_ref> visited;
15486
15487 return resolve_args_picking_1 (loc, initial_frame_offset, dpi, visited);
15488 }
15489
15490 /* Try to generate a DWARF procedure that computes the same result as FNDECL.
15491 Return NULL if it is not possible. */
15492
15493 static dw_die_ref
15494 function_to_dwarf_procedure (tree fndecl)
15495 {
15496 struct loc_descr_context ctx;
15497 struct dwarf_procedure_info dpi;
15498 dw_die_ref dwarf_proc_die;
15499 tree tree_body = DECL_SAVED_TREE (fndecl);
15500 dw_loc_descr_ref loc_body, epilogue;
15501
15502 tree cursor;
15503 unsigned i;
15504
15505 /* Do not generate multiple DWARF procedures for the same function
15506 declaration. */
15507 dwarf_proc_die = lookup_decl_die (fndecl);
15508 if (dwarf_proc_die != NULL)
15509 return dwarf_proc_die;
15510
15511 /* DWARF procedures are available starting with the DWARFv3 standard, but
15512 it's the DWARFv4 standard that introduces the DW_TAG_dwarf_procedure
15513 DIE. */
15514 if (dwarf_version < 3 && dwarf_strict)
15515 return NULL;
15516
15517 /* We handle only functions for which we still have a body, that return a
15518 supported type and that takes arguments with supported types. Note that
15519 there is no point translating functions that return nothing. */
15520 if (tree_body == NULL_TREE
15521 || DECL_RESULT (fndecl) == NULL_TREE
15522 || !is_handled_procedure_type (TREE_TYPE (DECL_RESULT (fndecl))))
15523 return NULL;
15524
15525 for (cursor = DECL_ARGUMENTS (fndecl);
15526 cursor != NULL_TREE;
15527 cursor = TREE_CHAIN (cursor))
15528 if (!is_handled_procedure_type (TREE_TYPE (cursor)))
15529 return NULL;
15530
15531 /* Match only "expr" in: RETURN_EXPR (MODIFY_EXPR (RESULT_DECL, expr)). */
15532 if (TREE_CODE (tree_body) != RETURN_EXPR)
15533 return NULL;
15534 tree_body = TREE_OPERAND (tree_body, 0);
15535 if (TREE_CODE (tree_body) != MODIFY_EXPR
15536 || TREE_OPERAND (tree_body, 0) != DECL_RESULT (fndecl))
15537 return NULL;
15538 tree_body = TREE_OPERAND (tree_body, 1);
15539
15540 /* Try to translate the body expression itself. Note that this will probably
15541 cause an infinite recursion if its call graph has a cycle. This is very
15542 unlikely for size functions, however, so don't bother with such things at
15543 the moment. */
15544 ctx.context_type = NULL_TREE;
15545 ctx.base_decl = NULL_TREE;
15546 ctx.dpi = &dpi;
15547 dpi.fndecl = fndecl;
15548 dpi.args_count = list_length (DECL_ARGUMENTS (fndecl));
15549 loc_body = loc_descriptor_from_tree (tree_body, 0, &ctx);
15550 if (!loc_body)
15551 return NULL;
15552
15553 /* After evaluating all operands in "loc_body", we should still have on the
15554 stack all arguments plus the desired function result (top of the stack).
15555 Generate code in order to keep only the result in our stack frame. */
15556 epilogue = NULL;
15557 for (i = 0; i < dpi.args_count; ++i)
15558 {
15559 dw_loc_descr_ref op_couple = new_loc_descr (DW_OP_swap, 0, 0);
15560 op_couple->dw_loc_next = new_loc_descr (DW_OP_drop, 0, 0);
15561 op_couple->dw_loc_next->dw_loc_next = epilogue;
15562 epilogue = op_couple;
15563 }
15564 add_loc_descr (&loc_body, epilogue);
15565 if (!resolve_args_picking (loc_body, dpi.args_count, &dpi))
15566 return NULL;
15567
15568 /* Trailing nops from loc_descriptor_from_tree (if any) cannot be removed
15569 because they are considered useful. Now there is an epilogue, they are
15570 not anymore, so give it another try. */
15571 loc_descr_without_nops (loc_body);
15572
15573 /* fndecl may be used both as a regular DW_TAG_subprogram DIE and as
15574 a DW_TAG_dwarf_procedure, so we may have a conflict, here. It's unlikely,
15575 though, given that size functions do not come from source, so they should
15576 not have a dedicated DW_TAG_subprogram DIE. */
15577 dwarf_proc_die
15578 = new_dwarf_proc_die (loc_body, fndecl,
15579 get_context_die (DECL_CONTEXT (fndecl)));
15580
15581 /* The called DWARF procedure consumes one stack slot per argument and
15582 returns one stack slot. */
15583 dwarf_proc_stack_usage_map->put (dwarf_proc_die, 1 - dpi.args_count);
15584
15585 return dwarf_proc_die;
15586 }
15587
15588
15589 /* Generate Dwarf location list representing LOC.
15590 If WANT_ADDRESS is false, expression computing LOC will be computed
15591 If WANT_ADDRESS is 1, expression computing address of LOC will be returned
15592 if WANT_ADDRESS is 2, expression computing address useable in location
15593 will be returned (i.e. DW_OP_reg can be used
15594 to refer to register values).
15595
15596 CONTEXT provides information to customize the location descriptions
15597 generation. Its context_type field specifies what type is implicitly
15598 referenced by DW_OP_push_object_address. If it is NULL_TREE, this operation
15599 will not be generated.
15600
15601 Its DPI field determines whether we are generating a DWARF expression for a
15602 DWARF procedure, so PARM_DECL references are processed specifically.
15603
15604 If CONTEXT is NULL, the behavior is the same as if context_type, base_decl
15605 and dpi fields were null. */
15606
15607 static dw_loc_list_ref
15608 loc_list_from_tree_1 (tree loc, int want_address,
15609 const struct loc_descr_context *context)
15610 {
15611 dw_loc_descr_ref ret = NULL, ret1 = NULL;
15612 dw_loc_list_ref list_ret = NULL, list_ret1 = NULL;
15613 int have_address = 0;
15614 enum dwarf_location_atom op;
15615
15616 /* ??? Most of the time we do not take proper care for sign/zero
15617 extending the values properly. Hopefully this won't be a real
15618 problem... */
15619
15620 if (context != NULL
15621 && context->base_decl == loc
15622 && want_address == 0)
15623 {
15624 if (dwarf_version >= 3 || !dwarf_strict)
15625 return new_loc_list (new_loc_descr (DW_OP_push_object_address, 0, 0),
15626 NULL, NULL, NULL);
15627 else
15628 return NULL;
15629 }
15630
15631 switch (TREE_CODE (loc))
15632 {
15633 case ERROR_MARK:
15634 expansion_failed (loc, NULL_RTX, "ERROR_MARK");
15635 return 0;
15636
15637 case PLACEHOLDER_EXPR:
15638 /* This case involves extracting fields from an object to determine the
15639 position of other fields. It is supposed to appear only as the first
15640 operand of COMPONENT_REF nodes and to reference precisely the type
15641 that the context allows. */
15642 if (context != NULL
15643 && TREE_TYPE (loc) == context->context_type
15644 && want_address >= 1)
15645 {
15646 if (dwarf_version >= 3 || !dwarf_strict)
15647 {
15648 ret = new_loc_descr (DW_OP_push_object_address, 0, 0);
15649 have_address = 1;
15650 break;
15651 }
15652 else
15653 return NULL;
15654 }
15655 else
15656 expansion_failed (loc, NULL_RTX,
15657 "PLACEHOLDER_EXPR for an unexpected type");
15658 break;
15659
15660 case CALL_EXPR:
15661 {
15662 const int nargs = call_expr_nargs (loc);
15663 tree callee = get_callee_fndecl (loc);
15664 int i;
15665 dw_die_ref dwarf_proc;
15666
15667 if (callee == NULL_TREE)
15668 goto call_expansion_failed;
15669
15670 /* We handle only functions that return an integer. */
15671 if (!is_handled_procedure_type (TREE_TYPE (TREE_TYPE (callee))))
15672 goto call_expansion_failed;
15673
15674 dwarf_proc = function_to_dwarf_procedure (callee);
15675 if (dwarf_proc == NULL)
15676 goto call_expansion_failed;
15677
15678 /* Evaluate arguments right-to-left so that the first argument will
15679 be the top-most one on the stack. */
15680 for (i = nargs - 1; i >= 0; --i)
15681 {
15682 dw_loc_descr_ref loc_descr
15683 = loc_descriptor_from_tree (CALL_EXPR_ARG (loc, i), 0,
15684 context);
15685
15686 if (loc_descr == NULL)
15687 goto call_expansion_failed;
15688
15689 add_loc_descr (&ret, loc_descr);
15690 }
15691
15692 ret1 = new_loc_descr (DW_OP_call4, 0, 0);
15693 ret1->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
15694 ret1->dw_loc_oprnd1.v.val_die_ref.die = dwarf_proc;
15695 ret1->dw_loc_oprnd1.v.val_die_ref.external = 0;
15696 add_loc_descr (&ret, ret1);
15697 break;
15698
15699 call_expansion_failed:
15700 expansion_failed (loc, NULL_RTX, "CALL_EXPR");
15701 /* There are no opcodes for these operations. */
15702 return 0;
15703 }
15704
15705 case PREINCREMENT_EXPR:
15706 case PREDECREMENT_EXPR:
15707 case POSTINCREMENT_EXPR:
15708 case POSTDECREMENT_EXPR:
15709 expansion_failed (loc, NULL_RTX, "PRE/POST INDCREMENT/DECREMENT");
15710 /* There are no opcodes for these operations. */
15711 return 0;
15712
15713 case ADDR_EXPR:
15714 /* If we already want an address, see if there is INDIRECT_REF inside
15715 e.g. for &this->field. */
15716 if (want_address)
15717 {
15718 list_ret = loc_list_for_address_of_addr_expr_of_indirect_ref
15719 (loc, want_address == 2, context);
15720 if (list_ret)
15721 have_address = 1;
15722 else if (decl_address_ip_invariant_p (TREE_OPERAND (loc, 0))
15723 && (ret = cst_pool_loc_descr (loc)))
15724 have_address = 1;
15725 }
15726 /* Otherwise, process the argument and look for the address. */
15727 if (!list_ret && !ret)
15728 list_ret = loc_list_from_tree_1 (TREE_OPERAND (loc, 0), 1, context);
15729 else
15730 {
15731 if (want_address)
15732 expansion_failed (loc, NULL_RTX, "need address of ADDR_EXPR");
15733 return NULL;
15734 }
15735 break;
15736
15737 case VAR_DECL:
15738 if (DECL_THREAD_LOCAL_P (loc))
15739 {
15740 rtx rtl;
15741 enum dwarf_location_atom tls_op;
15742 enum dtprel_bool dtprel = dtprel_false;
15743
15744 if (targetm.have_tls)
15745 {
15746 /* If this is not defined, we have no way to emit the
15747 data. */
15748 if (!targetm.asm_out.output_dwarf_dtprel)
15749 return 0;
15750
15751 /* The way DW_OP_GNU_push_tls_address is specified, we
15752 can only look up addresses of objects in the current
15753 module. We used DW_OP_addr as first op, but that's
15754 wrong, because DW_OP_addr is relocated by the debug
15755 info consumer, while DW_OP_GNU_push_tls_address
15756 operand shouldn't be. */
15757 if (DECL_EXTERNAL (loc) && !targetm.binds_local_p (loc))
15758 return 0;
15759 dtprel = dtprel_true;
15760 tls_op = DW_OP_GNU_push_tls_address;
15761 }
15762 else
15763 {
15764 if (!targetm.emutls.debug_form_tls_address
15765 || !(dwarf_version >= 3 || !dwarf_strict))
15766 return 0;
15767 /* We stuffed the control variable into the DECL_VALUE_EXPR
15768 to signal (via DECL_HAS_VALUE_EXPR_P) that the decl should
15769 no longer appear in gimple code. We used the control
15770 variable in specific so that we could pick it up here. */
15771 loc = DECL_VALUE_EXPR (loc);
15772 tls_op = DW_OP_form_tls_address;
15773 }
15774
15775 rtl = rtl_for_decl_location (loc);
15776 if (rtl == NULL_RTX)
15777 return 0;
15778
15779 if (!MEM_P (rtl))
15780 return 0;
15781 rtl = XEXP (rtl, 0);
15782 if (! CONSTANT_P (rtl))
15783 return 0;
15784
15785 ret = new_addr_loc_descr (rtl, dtprel);
15786 ret1 = new_loc_descr (tls_op, 0, 0);
15787 add_loc_descr (&ret, ret1);
15788
15789 have_address = 1;
15790 break;
15791 }
15792 /* FALLTHRU */
15793
15794 case PARM_DECL:
15795 if (context != NULL && context->dpi != NULL
15796 && DECL_CONTEXT (loc) == context->dpi->fndecl)
15797 {
15798 /* We are generating code for a DWARF procedure and we want to access
15799 one of its arguments: find the appropriate argument offset and let
15800 the resolve_args_picking pass compute the offset that complies
15801 with the stack frame size. */
15802 unsigned i = 0;
15803 tree cursor;
15804
15805 for (cursor = DECL_ARGUMENTS (context->dpi->fndecl);
15806 cursor != NULL_TREE && cursor != loc;
15807 cursor = TREE_CHAIN (cursor), ++i)
15808 ;
15809 /* If we are translating a DWARF procedure, all referenced parameters
15810 must belong to the current function. */
15811 gcc_assert (cursor != NULL_TREE);
15812
15813 ret = new_loc_descr (DW_OP_pick, i, 0);
15814 ret->frame_offset_rel = 1;
15815 break;
15816 }
15817 /* FALLTHRU */
15818
15819 case RESULT_DECL:
15820 if (DECL_HAS_VALUE_EXPR_P (loc))
15821 return loc_list_from_tree_1 (DECL_VALUE_EXPR (loc),
15822 want_address, context);
15823 /* FALLTHRU */
15824
15825 case FUNCTION_DECL:
15826 {
15827 rtx rtl;
15828 var_loc_list *loc_list = lookup_decl_loc (loc);
15829
15830 if (loc_list && loc_list->first)
15831 {
15832 list_ret = dw_loc_list (loc_list, loc, want_address);
15833 have_address = want_address != 0;
15834 break;
15835 }
15836 rtl = rtl_for_decl_location (loc);
15837 if (rtl == NULL_RTX)
15838 {
15839 expansion_failed (loc, NULL_RTX, "DECL has no RTL");
15840 return 0;
15841 }
15842 else if (CONST_INT_P (rtl))
15843 {
15844 HOST_WIDE_INT val = INTVAL (rtl);
15845 if (TYPE_UNSIGNED (TREE_TYPE (loc)))
15846 val &= GET_MODE_MASK (DECL_MODE (loc));
15847 ret = int_loc_descriptor (val);
15848 }
15849 else if (GET_CODE (rtl) == CONST_STRING)
15850 {
15851 expansion_failed (loc, NULL_RTX, "CONST_STRING");
15852 return 0;
15853 }
15854 else if (CONSTANT_P (rtl) && const_ok_for_output (rtl))
15855 ret = new_addr_loc_descr (rtl, dtprel_false);
15856 else
15857 {
15858 machine_mode mode, mem_mode;
15859
15860 /* Certain constructs can only be represented at top-level. */
15861 if (want_address == 2)
15862 {
15863 ret = loc_descriptor (rtl, VOIDmode,
15864 VAR_INIT_STATUS_INITIALIZED);
15865 have_address = 1;
15866 }
15867 else
15868 {
15869 mode = GET_MODE (rtl);
15870 mem_mode = VOIDmode;
15871 if (MEM_P (rtl))
15872 {
15873 mem_mode = mode;
15874 mode = get_address_mode (rtl);
15875 rtl = XEXP (rtl, 0);
15876 have_address = 1;
15877 }
15878 ret = mem_loc_descriptor (rtl, mode, mem_mode,
15879 VAR_INIT_STATUS_INITIALIZED);
15880 }
15881 if (!ret)
15882 expansion_failed (loc, rtl,
15883 "failed to produce loc descriptor for rtl");
15884 }
15885 }
15886 break;
15887
15888 case MEM_REF:
15889 if (!integer_zerop (TREE_OPERAND (loc, 1)))
15890 {
15891 have_address = 1;
15892 goto do_plus;
15893 }
15894 /* Fallthru. */
15895 case INDIRECT_REF:
15896 list_ret = loc_list_from_tree_1 (TREE_OPERAND (loc, 0), 0, context);
15897 have_address = 1;
15898 break;
15899
15900 case TARGET_MEM_REF:
15901 case SSA_NAME:
15902 case DEBUG_EXPR_DECL:
15903 return NULL;
15904
15905 case COMPOUND_EXPR:
15906 return loc_list_from_tree_1 (TREE_OPERAND (loc, 1), want_address,
15907 context);
15908
15909 CASE_CONVERT:
15910 case VIEW_CONVERT_EXPR:
15911 case SAVE_EXPR:
15912 case MODIFY_EXPR:
15913 case NON_LVALUE_EXPR:
15914 return loc_list_from_tree_1 (TREE_OPERAND (loc, 0), want_address,
15915 context);
15916
15917 case COMPONENT_REF:
15918 case BIT_FIELD_REF:
15919 case ARRAY_REF:
15920 case ARRAY_RANGE_REF:
15921 case REALPART_EXPR:
15922 case IMAGPART_EXPR:
15923 {
15924 tree obj, offset;
15925 HOST_WIDE_INT bitsize, bitpos, bytepos;
15926 machine_mode mode;
15927 int unsignedp, reversep, volatilep = 0;
15928
15929 obj = get_inner_reference (loc, &bitsize, &bitpos, &offset, &mode,
15930 &unsignedp, &reversep, &volatilep, false);
15931
15932 gcc_assert (obj != loc);
15933
15934 list_ret = loc_list_from_tree_1 (obj,
15935 want_address == 2
15936 && !bitpos && !offset ? 2 : 1,
15937 context);
15938 /* TODO: We can extract value of the small expression via shifting even
15939 for nonzero bitpos. */
15940 if (list_ret == 0)
15941 return 0;
15942 if (bitpos % BITS_PER_UNIT != 0 || bitsize % BITS_PER_UNIT != 0)
15943 {
15944 expansion_failed (loc, NULL_RTX,
15945 "bitfield access");
15946 return 0;
15947 }
15948
15949 if (offset != NULL_TREE)
15950 {
15951 /* Variable offset. */
15952 list_ret1 = loc_list_from_tree_1 (offset, 0, context);
15953 if (list_ret1 == 0)
15954 return 0;
15955 add_loc_list (&list_ret, list_ret1);
15956 if (!list_ret)
15957 return 0;
15958 add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_plus, 0, 0));
15959 }
15960
15961 bytepos = bitpos / BITS_PER_UNIT;
15962 if (bytepos > 0)
15963 add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_plus_uconst, bytepos, 0));
15964 else if (bytepos < 0)
15965 loc_list_plus_const (list_ret, bytepos);
15966
15967 have_address = 1;
15968 break;
15969 }
15970
15971 case INTEGER_CST:
15972 if ((want_address || !tree_fits_shwi_p (loc))
15973 && (ret = cst_pool_loc_descr (loc)))
15974 have_address = 1;
15975 else if (want_address == 2
15976 && tree_fits_shwi_p (loc)
15977 && (ret = address_of_int_loc_descriptor
15978 (int_size_in_bytes (TREE_TYPE (loc)),
15979 tree_to_shwi (loc))))
15980 have_address = 1;
15981 else if (tree_fits_shwi_p (loc))
15982 ret = int_loc_descriptor (tree_to_shwi (loc));
15983 else if (tree_fits_uhwi_p (loc))
15984 ret = uint_loc_descriptor (tree_to_uhwi (loc));
15985 else
15986 {
15987 expansion_failed (loc, NULL_RTX,
15988 "Integer operand is not host integer");
15989 return 0;
15990 }
15991 break;
15992
15993 case CONSTRUCTOR:
15994 case REAL_CST:
15995 case STRING_CST:
15996 case COMPLEX_CST:
15997 if ((ret = cst_pool_loc_descr (loc)))
15998 have_address = 1;
15999 else
16000 /* We can construct small constants here using int_loc_descriptor. */
16001 expansion_failed (loc, NULL_RTX,
16002 "constructor or constant not in constant pool");
16003 break;
16004
16005 case TRUTH_AND_EXPR:
16006 case TRUTH_ANDIF_EXPR:
16007 case BIT_AND_EXPR:
16008 op = DW_OP_and;
16009 goto do_binop;
16010
16011 case TRUTH_XOR_EXPR:
16012 case BIT_XOR_EXPR:
16013 op = DW_OP_xor;
16014 goto do_binop;
16015
16016 case TRUTH_OR_EXPR:
16017 case TRUTH_ORIF_EXPR:
16018 case BIT_IOR_EXPR:
16019 op = DW_OP_or;
16020 goto do_binop;
16021
16022 case FLOOR_DIV_EXPR:
16023 case CEIL_DIV_EXPR:
16024 case ROUND_DIV_EXPR:
16025 case TRUNC_DIV_EXPR:
16026 case EXACT_DIV_EXPR:
16027 if (TYPE_UNSIGNED (TREE_TYPE (loc)))
16028 return 0;
16029 op = DW_OP_div;
16030 goto do_binop;
16031
16032 case MINUS_EXPR:
16033 op = DW_OP_minus;
16034 goto do_binop;
16035
16036 case FLOOR_MOD_EXPR:
16037 case CEIL_MOD_EXPR:
16038 case ROUND_MOD_EXPR:
16039 case TRUNC_MOD_EXPR:
16040 if (TYPE_UNSIGNED (TREE_TYPE (loc)))
16041 {
16042 op = DW_OP_mod;
16043 goto do_binop;
16044 }
16045 list_ret = loc_list_from_tree_1 (TREE_OPERAND (loc, 0), 0, context);
16046 list_ret1 = loc_list_from_tree_1 (TREE_OPERAND (loc, 1), 0, context);
16047 if (list_ret == 0 || list_ret1 == 0)
16048 return 0;
16049
16050 add_loc_list (&list_ret, list_ret1);
16051 if (list_ret == 0)
16052 return 0;
16053 add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_over, 0, 0));
16054 add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_over, 0, 0));
16055 add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_div, 0, 0));
16056 add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_mul, 0, 0));
16057 add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_minus, 0, 0));
16058 break;
16059
16060 case MULT_EXPR:
16061 op = DW_OP_mul;
16062 goto do_binop;
16063
16064 case LSHIFT_EXPR:
16065 op = DW_OP_shl;
16066 goto do_binop;
16067
16068 case RSHIFT_EXPR:
16069 op = (TYPE_UNSIGNED (TREE_TYPE (loc)) ? DW_OP_shr : DW_OP_shra);
16070 goto do_binop;
16071
16072 case POINTER_PLUS_EXPR:
16073 case PLUS_EXPR:
16074 do_plus:
16075 if (tree_fits_shwi_p (TREE_OPERAND (loc, 1)))
16076 {
16077 /* Big unsigned numbers can fit in HOST_WIDE_INT but it may be
16078 smarter to encode their opposite. The DW_OP_plus_uconst operation
16079 takes 1 + X bytes, X being the size of the ULEB128 addend. On the
16080 other hand, a "<push literal>; DW_OP_minus" pattern takes 1 + Y
16081 bytes, Y being the size of the operation that pushes the opposite
16082 of the addend. So let's choose the smallest representation. */
16083 const tree tree_addend = TREE_OPERAND (loc, 1);
16084 offset_int wi_addend;
16085 HOST_WIDE_INT shwi_addend;
16086 dw_loc_descr_ref loc_naddend;
16087
16088 list_ret = loc_list_from_tree_1 (TREE_OPERAND (loc, 0), 0, context);
16089 if (list_ret == 0)
16090 return 0;
16091
16092 /* Try to get the literal to push. It is the opposite of the addend,
16093 so as we rely on wrapping during DWARF evaluation, first decode
16094 the literal as a "DWARF-sized" signed number. */
16095 wi_addend = wi::to_offset (tree_addend);
16096 wi_addend = wi::sext (wi_addend, DWARF2_ADDR_SIZE * 8);
16097 shwi_addend = wi_addend.to_shwi ();
16098 loc_naddend = (shwi_addend != INTTYPE_MINIMUM (HOST_WIDE_INT))
16099 ? int_loc_descriptor (-shwi_addend)
16100 : NULL;
16101
16102 if (loc_naddend != NULL
16103 && ((unsigned) size_of_uleb128 (shwi_addend)
16104 > size_of_loc_descr (loc_naddend)))
16105 {
16106 add_loc_descr_to_each (list_ret, loc_naddend);
16107 add_loc_descr_to_each (list_ret,
16108 new_loc_descr (DW_OP_minus, 0, 0));
16109 }
16110 else
16111 {
16112 for (dw_loc_descr_ref loc_cur = loc_naddend; loc_cur != NULL; )
16113 {
16114 loc_naddend = loc_cur;
16115 loc_cur = loc_cur->dw_loc_next;
16116 ggc_free (loc_naddend);
16117 }
16118 loc_list_plus_const (list_ret, wi_addend.to_shwi ());
16119 }
16120 break;
16121 }
16122
16123 op = DW_OP_plus;
16124 goto do_binop;
16125
16126 case LE_EXPR:
16127 op = DW_OP_le;
16128 goto do_comp_binop;
16129
16130 case GE_EXPR:
16131 op = DW_OP_ge;
16132 goto do_comp_binop;
16133
16134 case LT_EXPR:
16135 op = DW_OP_lt;
16136 goto do_comp_binop;
16137
16138 case GT_EXPR:
16139 op = DW_OP_gt;
16140 goto do_comp_binop;
16141
16142 do_comp_binop:
16143 if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
16144 {
16145 list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0, context);
16146 list_ret1 = loc_list_from_tree (TREE_OPERAND (loc, 1), 0, context);
16147 list_ret = loc_list_from_uint_comparison (list_ret, list_ret1,
16148 TREE_CODE (loc));
16149 break;
16150 }
16151 else
16152 goto do_binop;
16153
16154 case EQ_EXPR:
16155 op = DW_OP_eq;
16156 goto do_binop;
16157
16158 case NE_EXPR:
16159 op = DW_OP_ne;
16160 goto do_binop;
16161
16162 do_binop:
16163 list_ret = loc_list_from_tree_1 (TREE_OPERAND (loc, 0), 0, context);
16164 list_ret1 = loc_list_from_tree_1 (TREE_OPERAND (loc, 1), 0, context);
16165 if (list_ret == 0 || list_ret1 == 0)
16166 return 0;
16167
16168 add_loc_list (&list_ret, list_ret1);
16169 if (list_ret == 0)
16170 return 0;
16171 add_loc_descr_to_each (list_ret, new_loc_descr (op, 0, 0));
16172 break;
16173
16174 case TRUTH_NOT_EXPR:
16175 case BIT_NOT_EXPR:
16176 op = DW_OP_not;
16177 goto do_unop;
16178
16179 case ABS_EXPR:
16180 op = DW_OP_abs;
16181 goto do_unop;
16182
16183 case NEGATE_EXPR:
16184 op = DW_OP_neg;
16185 goto do_unop;
16186
16187 do_unop:
16188 list_ret = loc_list_from_tree_1 (TREE_OPERAND (loc, 0), 0, context);
16189 if (list_ret == 0)
16190 return 0;
16191
16192 add_loc_descr_to_each (list_ret, new_loc_descr (op, 0, 0));
16193 break;
16194
16195 case MIN_EXPR:
16196 case MAX_EXPR:
16197 {
16198 const enum tree_code code =
16199 TREE_CODE (loc) == MIN_EXPR ? GT_EXPR : LT_EXPR;
16200
16201 loc = build3 (COND_EXPR, TREE_TYPE (loc),
16202 build2 (code, integer_type_node,
16203 TREE_OPERAND (loc, 0), TREE_OPERAND (loc, 1)),
16204 TREE_OPERAND (loc, 1), TREE_OPERAND (loc, 0));
16205 }
16206
16207 /* ... fall through ... */
16208
16209 case COND_EXPR:
16210 {
16211 dw_loc_descr_ref lhs
16212 = loc_descriptor_from_tree (TREE_OPERAND (loc, 1), 0, context);
16213 dw_loc_list_ref rhs
16214 = loc_list_from_tree_1 (TREE_OPERAND (loc, 2), 0, context);
16215 dw_loc_descr_ref bra_node, jump_node, tmp;
16216
16217 list_ret = loc_list_from_tree_1 (TREE_OPERAND (loc, 0), 0, context);
16218 if (list_ret == 0 || lhs == 0 || rhs == 0)
16219 return 0;
16220
16221 bra_node = new_loc_descr (DW_OP_bra, 0, 0);
16222 add_loc_descr_to_each (list_ret, bra_node);
16223
16224 add_loc_list (&list_ret, rhs);
16225 jump_node = new_loc_descr (DW_OP_skip, 0, 0);
16226 add_loc_descr_to_each (list_ret, jump_node);
16227
16228 add_loc_descr_to_each (list_ret, lhs);
16229 bra_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
16230 bra_node->dw_loc_oprnd1.v.val_loc = lhs;
16231
16232 /* ??? Need a node to point the skip at. Use a nop. */
16233 tmp = new_loc_descr (DW_OP_nop, 0, 0);
16234 add_loc_descr_to_each (list_ret, tmp);
16235 jump_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
16236 jump_node->dw_loc_oprnd1.v.val_loc = tmp;
16237 }
16238 break;
16239
16240 case FIX_TRUNC_EXPR:
16241 return 0;
16242
16243 default:
16244 /* Leave front-end specific codes as simply unknown. This comes
16245 up, for instance, with the C STMT_EXPR. */
16246 if ((unsigned int) TREE_CODE (loc)
16247 >= (unsigned int) LAST_AND_UNUSED_TREE_CODE)
16248 {
16249 expansion_failed (loc, NULL_RTX,
16250 "language specific tree node");
16251 return 0;
16252 }
16253
16254 /* Otherwise this is a generic code; we should just lists all of
16255 these explicitly. We forgot one. */
16256 if (flag_checking)
16257 gcc_unreachable ();
16258
16259 /* In a release build, we want to degrade gracefully: better to
16260 generate incomplete debugging information than to crash. */
16261 return NULL;
16262 }
16263
16264 if (!ret && !list_ret)
16265 return 0;
16266
16267 if (want_address == 2 && !have_address
16268 && (dwarf_version >= 4 || !dwarf_strict))
16269 {
16270 if (int_size_in_bytes (TREE_TYPE (loc)) > DWARF2_ADDR_SIZE)
16271 {
16272 expansion_failed (loc, NULL_RTX,
16273 "DWARF address size mismatch");
16274 return 0;
16275 }
16276 if (ret)
16277 add_loc_descr (&ret, new_loc_descr (DW_OP_stack_value, 0, 0));
16278 else
16279 add_loc_descr_to_each (list_ret,
16280 new_loc_descr (DW_OP_stack_value, 0, 0));
16281 have_address = 1;
16282 }
16283 /* Show if we can't fill the request for an address. */
16284 if (want_address && !have_address)
16285 {
16286 expansion_failed (loc, NULL_RTX,
16287 "Want address and only have value");
16288 return 0;
16289 }
16290
16291 gcc_assert (!ret || !list_ret);
16292
16293 /* If we've got an address and don't want one, dereference. */
16294 if (!want_address && have_address)
16295 {
16296 HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (loc));
16297
16298 if (size > DWARF2_ADDR_SIZE || size == -1)
16299 {
16300 expansion_failed (loc, NULL_RTX,
16301 "DWARF address size mismatch");
16302 return 0;
16303 }
16304 else if (size == DWARF2_ADDR_SIZE)
16305 op = DW_OP_deref;
16306 else
16307 op = DW_OP_deref_size;
16308
16309 if (ret)
16310 add_loc_descr (&ret, new_loc_descr (op, size, 0));
16311 else
16312 add_loc_descr_to_each (list_ret, new_loc_descr (op, size, 0));
16313 }
16314 if (ret)
16315 list_ret = new_loc_list (ret, NULL, NULL, NULL);
16316
16317 return list_ret;
16318 }
16319
16320 /* Likewise, but strip useless DW_OP_nop operations in the resulting
16321 expressions. */
16322
16323 static dw_loc_list_ref
16324 loc_list_from_tree (tree loc, int want_address,
16325 const struct loc_descr_context *context)
16326 {
16327 dw_loc_list_ref result = loc_list_from_tree_1 (loc, want_address, context);
16328
16329 for (dw_loc_list_ref loc_cur = result;
16330 loc_cur != NULL; loc_cur =
16331 loc_cur->dw_loc_next)
16332 loc_descr_without_nops (loc_cur->expr);
16333 return result;
16334 }
16335
16336 /* Same as above but return only single location expression. */
16337 static dw_loc_descr_ref
16338 loc_descriptor_from_tree (tree loc, int want_address,
16339 const struct loc_descr_context *context)
16340 {
16341 dw_loc_list_ref ret = loc_list_from_tree (loc, want_address, context);
16342 if (!ret)
16343 return NULL;
16344 if (ret->dw_loc_next)
16345 {
16346 expansion_failed (loc, NULL_RTX,
16347 "Location list where only loc descriptor needed");
16348 return NULL;
16349 }
16350 return ret->expr;
16351 }
16352
16353 /* Given a value, round it up to the lowest multiple of `boundary'
16354 which is not less than the value itself. */
16355
16356 static inline HOST_WIDE_INT
16357 ceiling (HOST_WIDE_INT value, unsigned int boundary)
16358 {
16359 return (((value + boundary - 1) / boundary) * boundary);
16360 }
16361
16362 /* Given a pointer to what is assumed to be a FIELD_DECL node, return a
16363 pointer to the declared type for the relevant field variable, or return
16364 `integer_type_node' if the given node turns out to be an
16365 ERROR_MARK node. */
16366
16367 static inline tree
16368 field_type (const_tree decl)
16369 {
16370 tree type;
16371
16372 if (TREE_CODE (decl) == ERROR_MARK)
16373 return integer_type_node;
16374
16375 type = DECL_BIT_FIELD_TYPE (decl);
16376 if (type == NULL_TREE)
16377 type = TREE_TYPE (decl);
16378
16379 return type;
16380 }
16381
16382 /* Given a pointer to a tree node, return the alignment in bits for
16383 it, or else return BITS_PER_WORD if the node actually turns out to
16384 be an ERROR_MARK node. */
16385
16386 static inline unsigned
16387 simple_type_align_in_bits (const_tree type)
16388 {
16389 return (TREE_CODE (type) != ERROR_MARK) ? TYPE_ALIGN (type) : BITS_PER_WORD;
16390 }
16391
16392 static inline unsigned
16393 simple_decl_align_in_bits (const_tree decl)
16394 {
16395 return (TREE_CODE (decl) != ERROR_MARK) ? DECL_ALIGN (decl) : BITS_PER_WORD;
16396 }
16397
16398 /* Return the result of rounding T up to ALIGN. */
16399
16400 static inline offset_int
16401 round_up_to_align (const offset_int &t, unsigned int align)
16402 {
16403 return wi::udiv_trunc (t + align - 1, align) * align;
16404 }
16405
16406 /* Compute the size of TYPE in bytes. If possible, return NULL and store the
16407 size as an integer constant in CST_SIZE. Otherwise, if possible, return a
16408 DWARF expression that computes the size. Return NULL and set CST_SIZE to -1
16409 if we fail to return the size in one of these two forms. */
16410
16411 static dw_loc_descr_ref
16412 type_byte_size (const_tree type, HOST_WIDE_INT *cst_size)
16413 {
16414 tree tree_size;
16415 struct loc_descr_context ctx;
16416
16417 /* Return a constant integer in priority, if possible. */
16418 *cst_size = int_size_in_bytes (type);
16419 if (*cst_size != -1)
16420 return NULL;
16421
16422 ctx.context_type = const_cast<tree> (type);
16423 ctx.base_decl = NULL_TREE;
16424 ctx.dpi = NULL;
16425
16426 type = TYPE_MAIN_VARIANT (type);
16427 tree_size = TYPE_SIZE_UNIT (type);
16428 return ((tree_size != NULL_TREE)
16429 ? loc_descriptor_from_tree (tree_size, 0, &ctx)
16430 : NULL);
16431 }
16432
16433 /* Helper structure for RECORD_TYPE processing. */
16434 struct vlr_context
16435 {
16436 /* Root RECORD_TYPE. It is needed to generate data member location
16437 descriptions in variable-length records (VLR), but also to cope with
16438 variants, which are composed of nested structures multiplexed with
16439 QUAL_UNION_TYPE nodes. Each time such a structure is passed to a
16440 function processing a FIELD_DECL, it is required to be non null. */
16441 tree struct_type;
16442 /* When generating a variant part in a RECORD_TYPE (i.e. a nested
16443 QUAL_UNION_TYPE), this holds an expression that computes the offset for
16444 this variant part as part of the root record (in storage units). For
16445 regular records, it must be NULL_TREE. */
16446 tree variant_part_offset;
16447 };
16448
16449 /* Given a pointer to a FIELD_DECL, compute the byte offset of the lowest
16450 addressed byte of the "containing object" for the given FIELD_DECL. If
16451 possible, return a native constant through CST_OFFSET (in which case NULL is
16452 returned); otherwise return a DWARF expression that computes the offset.
16453
16454 Set *CST_OFFSET to 0 and return NULL if we are unable to determine what
16455 that offset is, either because the argument turns out to be a pointer to an
16456 ERROR_MARK node, or because the offset expression is too complex for us.
16457
16458 CTX is required: see the comment for VLR_CONTEXT. */
16459
16460 static dw_loc_descr_ref
16461 field_byte_offset (const_tree decl, struct vlr_context *ctx,
16462 HOST_WIDE_INT *cst_offset)
16463 {
16464 offset_int object_offset_in_bits;
16465 offset_int object_offset_in_bytes;
16466 offset_int bitpos_int;
16467 bool is_byte_offset_cst, is_bit_offset_cst;
16468 tree tree_result;
16469 dw_loc_list_ref loc_result;
16470
16471 *cst_offset = 0;
16472
16473 if (TREE_CODE (decl) == ERROR_MARK)
16474 return NULL;
16475 else
16476 gcc_assert (TREE_CODE (decl) == FIELD_DECL);
16477
16478 is_bit_offset_cst = TREE_CODE (DECL_FIELD_BIT_OFFSET (decl)) != INTEGER_CST;
16479 is_byte_offset_cst = TREE_CODE (DECL_FIELD_OFFSET (decl)) != INTEGER_CST;
16480
16481 /* We cannot handle variable bit offsets at the moment, so abort if it's the
16482 case. */
16483 if (is_bit_offset_cst)
16484 return NULL;
16485
16486 #ifdef PCC_BITFIELD_TYPE_MATTERS
16487 /* We used to handle only constant offsets in all cases. Now, we handle
16488 properly dynamic byte offsets only when PCC bitfield type doesn't
16489 matter. */
16490 if (PCC_BITFIELD_TYPE_MATTERS && is_byte_offset_cst && is_bit_offset_cst)
16491 {
16492 tree type;
16493 tree field_size_tree;
16494 offset_int deepest_bitpos;
16495 offset_int field_size_in_bits;
16496 unsigned int type_align_in_bits;
16497 unsigned int decl_align_in_bits;
16498 offset_int type_size_in_bits;
16499
16500 bitpos_int = wi::to_offset (bit_position (decl));
16501 type = field_type (decl);
16502 type_size_in_bits = offset_int_type_size_in_bits (type);
16503 type_align_in_bits = simple_type_align_in_bits (type);
16504
16505 field_size_tree = DECL_SIZE (decl);
16506
16507 /* The size could be unspecified if there was an error, or for
16508 a flexible array member. */
16509 if (!field_size_tree)
16510 field_size_tree = bitsize_zero_node;
16511
16512 /* If the size of the field is not constant, use the type size. */
16513 if (TREE_CODE (field_size_tree) == INTEGER_CST)
16514 field_size_in_bits = wi::to_offset (field_size_tree);
16515 else
16516 field_size_in_bits = type_size_in_bits;
16517
16518 decl_align_in_bits = simple_decl_align_in_bits (decl);
16519
16520 /* The GCC front-end doesn't make any attempt to keep track of the
16521 starting bit offset (relative to the start of the containing
16522 structure type) of the hypothetical "containing object" for a
16523 bit-field. Thus, when computing the byte offset value for the
16524 start of the "containing object" of a bit-field, we must deduce
16525 this information on our own. This can be rather tricky to do in
16526 some cases. For example, handling the following structure type
16527 definition when compiling for an i386/i486 target (which only
16528 aligns long long's to 32-bit boundaries) can be very tricky:
16529
16530 struct S { int field1; long long field2:31; };
16531
16532 Fortunately, there is a simple rule-of-thumb which can be used
16533 in such cases. When compiling for an i386/i486, GCC will
16534 allocate 8 bytes for the structure shown above. It decides to
16535 do this based upon one simple rule for bit-field allocation.
16536 GCC allocates each "containing object" for each bit-field at
16537 the first (i.e. lowest addressed) legitimate alignment boundary
16538 (based upon the required minimum alignment for the declared
16539 type of the field) which it can possibly use, subject to the
16540 condition that there is still enough available space remaining
16541 in the containing object (when allocated at the selected point)
16542 to fully accommodate all of the bits of the bit-field itself.
16543
16544 This simple rule makes it obvious why GCC allocates 8 bytes for
16545 each object of the structure type shown above. When looking
16546 for a place to allocate the "containing object" for `field2',
16547 the compiler simply tries to allocate a 64-bit "containing
16548 object" at each successive 32-bit boundary (starting at zero)
16549 until it finds a place to allocate that 64- bit field such that
16550 at least 31 contiguous (and previously unallocated) bits remain
16551 within that selected 64 bit field. (As it turns out, for the
16552 example above, the compiler finds it is OK to allocate the
16553 "containing object" 64-bit field at bit-offset zero within the
16554 structure type.)
16555
16556 Here we attempt to work backwards from the limited set of facts
16557 we're given, and we try to deduce from those facts, where GCC
16558 must have believed that the containing object started (within
16559 the structure type). The value we deduce is then used (by the
16560 callers of this routine) to generate DW_AT_location and
16561 DW_AT_bit_offset attributes for fields (both bit-fields and, in
16562 the case of DW_AT_location, regular fields as well). */
16563
16564 /* Figure out the bit-distance from the start of the structure to
16565 the "deepest" bit of the bit-field. */
16566 deepest_bitpos = bitpos_int + field_size_in_bits;
16567
16568 /* This is the tricky part. Use some fancy footwork to deduce
16569 where the lowest addressed bit of the containing object must
16570 be. */
16571 object_offset_in_bits = deepest_bitpos - type_size_in_bits;
16572
16573 /* Round up to type_align by default. This works best for
16574 bitfields. */
16575 object_offset_in_bits
16576 = round_up_to_align (object_offset_in_bits, type_align_in_bits);
16577
16578 if (wi::gtu_p (object_offset_in_bits, bitpos_int))
16579 {
16580 object_offset_in_bits = deepest_bitpos - type_size_in_bits;
16581
16582 /* Round up to decl_align instead. */
16583 object_offset_in_bits
16584 = round_up_to_align (object_offset_in_bits, decl_align_in_bits);
16585 }
16586 }
16587 #endif /* PCC_BITFIELD_TYPE_MATTERS */
16588
16589 tree_result = byte_position (decl);
16590 if (ctx->variant_part_offset != NULL_TREE)
16591 tree_result = fold (build2 (PLUS_EXPR, TREE_TYPE (tree_result),
16592 ctx->variant_part_offset, tree_result));
16593
16594 /* If the byte offset is a constant, it's simplier to handle a native
16595 constant rather than a DWARF expression. */
16596 if (TREE_CODE (tree_result) == INTEGER_CST)
16597 {
16598 *cst_offset = wi::to_offset (tree_result).to_shwi ();
16599 return NULL;
16600 }
16601 struct loc_descr_context loc_ctx = {
16602 ctx->struct_type, /* context_type */
16603 NULL_TREE, /* base_decl */
16604 NULL /* dpi */
16605 };
16606 loc_result = loc_list_from_tree (tree_result, 0, &loc_ctx);
16607
16608 /* We want a DWARF expression: abort if we only have a location list with
16609 multiple elements. */
16610 if (!loc_result || !single_element_loc_list_p (loc_result))
16611 return NULL;
16612 else
16613 return loc_result->expr;
16614 }
16615 \f
16616 /* The following routines define various Dwarf attributes and any data
16617 associated with them. */
16618
16619 /* Add a location description attribute value to a DIE.
16620
16621 This emits location attributes suitable for whole variables and
16622 whole parameters. Note that the location attributes for struct fields are
16623 generated by the routine `data_member_location_attribute' below. */
16624
16625 static inline void
16626 add_AT_location_description (dw_die_ref die, enum dwarf_attribute attr_kind,
16627 dw_loc_list_ref descr)
16628 {
16629 if (descr == 0)
16630 return;
16631 if (single_element_loc_list_p (descr))
16632 add_AT_loc (die, attr_kind, descr->expr);
16633 else
16634 add_AT_loc_list (die, attr_kind, descr);
16635 }
16636
16637 /* Add DW_AT_accessibility attribute to DIE if needed. */
16638
16639 static void
16640 add_accessibility_attribute (dw_die_ref die, tree decl)
16641 {
16642 /* In DWARF3+ the default is DW_ACCESS_private only in DW_TAG_class_type
16643 children, otherwise the default is DW_ACCESS_public. In DWARF2
16644 the default has always been DW_ACCESS_public. */
16645 if (TREE_PROTECTED (decl))
16646 add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_protected);
16647 else if (TREE_PRIVATE (decl))
16648 {
16649 if (dwarf_version == 2
16650 || die->die_parent == NULL
16651 || die->die_parent->die_tag != DW_TAG_class_type)
16652 add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_private);
16653 }
16654 else if (dwarf_version > 2
16655 && die->die_parent
16656 && die->die_parent->die_tag == DW_TAG_class_type)
16657 add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_public);
16658 }
16659
16660 /* Attach the specialized form of location attribute used for data members of
16661 struct and union types. In the special case of a FIELD_DECL node which
16662 represents a bit-field, the "offset" part of this special location
16663 descriptor must indicate the distance in bytes from the lowest-addressed
16664 byte of the containing struct or union type to the lowest-addressed byte of
16665 the "containing object" for the bit-field. (See the `field_byte_offset'
16666 function above).
16667
16668 For any given bit-field, the "containing object" is a hypothetical object
16669 (of some integral or enum type) within which the given bit-field lives. The
16670 type of this hypothetical "containing object" is always the same as the
16671 declared type of the individual bit-field itself (for GCC anyway... the
16672 DWARF spec doesn't actually mandate this). Note that it is the size (in
16673 bytes) of the hypothetical "containing object" which will be given in the
16674 DW_AT_byte_size attribute for this bit-field. (See the
16675 `byte_size_attribute' function below.) It is also used when calculating the
16676 value of the DW_AT_bit_offset attribute. (See the `bit_offset_attribute'
16677 function below.)
16678
16679 CTX is required: see the comment for VLR_CONTEXT. */
16680
16681 static void
16682 add_data_member_location_attribute (dw_die_ref die,
16683 tree decl,
16684 struct vlr_context *ctx)
16685 {
16686 HOST_WIDE_INT offset;
16687 dw_loc_descr_ref loc_descr = 0;
16688
16689 if (TREE_CODE (decl) == TREE_BINFO)
16690 {
16691 /* We're working on the TAG_inheritance for a base class. */
16692 if (BINFO_VIRTUAL_P (decl) && is_cxx ())
16693 {
16694 /* For C++ virtual bases we can't just use BINFO_OFFSET, as they
16695 aren't at a fixed offset from all (sub)objects of the same
16696 type. We need to extract the appropriate offset from our
16697 vtable. The following dwarf expression means
16698
16699 BaseAddr = ObAddr + *((*ObAddr) - Offset)
16700
16701 This is specific to the V3 ABI, of course. */
16702
16703 dw_loc_descr_ref tmp;
16704
16705 /* Make a copy of the object address. */
16706 tmp = new_loc_descr (DW_OP_dup, 0, 0);
16707 add_loc_descr (&loc_descr, tmp);
16708
16709 /* Extract the vtable address. */
16710 tmp = new_loc_descr (DW_OP_deref, 0, 0);
16711 add_loc_descr (&loc_descr, tmp);
16712
16713 /* Calculate the address of the offset. */
16714 offset = tree_to_shwi (BINFO_VPTR_FIELD (decl));
16715 gcc_assert (offset < 0);
16716
16717 tmp = int_loc_descriptor (-offset);
16718 add_loc_descr (&loc_descr, tmp);
16719 tmp = new_loc_descr (DW_OP_minus, 0, 0);
16720 add_loc_descr (&loc_descr, tmp);
16721
16722 /* Extract the offset. */
16723 tmp = new_loc_descr (DW_OP_deref, 0, 0);
16724 add_loc_descr (&loc_descr, tmp);
16725
16726 /* Add it to the object address. */
16727 tmp = new_loc_descr (DW_OP_plus, 0, 0);
16728 add_loc_descr (&loc_descr, tmp);
16729 }
16730 else
16731 offset = tree_to_shwi (BINFO_OFFSET (decl));
16732 }
16733 else
16734 {
16735 loc_descr = field_byte_offset (decl, ctx, &offset);
16736
16737 /* If loc_descr is available then we know the field offset is dynamic.
16738 However, GDB does not handle dynamic field offsets very well at the
16739 moment. */
16740 if (loc_descr != NULL && gnat_encodings != DWARF_GNAT_ENCODINGS_MINIMAL)
16741 {
16742 loc_descr = NULL;
16743 offset = 0;
16744 }
16745
16746 /* Data member location evalutation starts with the base address on the
16747 stack. Compute the field offset and add it to this base address. */
16748 else if (loc_descr != NULL)
16749 add_loc_descr (&loc_descr, new_loc_descr (DW_OP_plus, 0, 0));
16750 }
16751
16752 if (! loc_descr)
16753 {
16754 if (dwarf_version > 2)
16755 {
16756 /* Don't need to output a location expression, just the constant. */
16757 if (offset < 0)
16758 add_AT_int (die, DW_AT_data_member_location, offset);
16759 else
16760 add_AT_unsigned (die, DW_AT_data_member_location, offset);
16761 return;
16762 }
16763 else
16764 {
16765 enum dwarf_location_atom op;
16766
16767 /* The DWARF2 standard says that we should assume that the structure
16768 address is already on the stack, so we can specify a structure
16769 field address by using DW_OP_plus_uconst. */
16770 op = DW_OP_plus_uconst;
16771 loc_descr = new_loc_descr (op, offset, 0);
16772 }
16773 }
16774
16775 add_AT_loc (die, DW_AT_data_member_location, loc_descr);
16776 }
16777
16778 /* Writes integer values to dw_vec_const array. */
16779
16780 static void
16781 insert_int (HOST_WIDE_INT val, unsigned int size, unsigned char *dest)
16782 {
16783 while (size != 0)
16784 {
16785 *dest++ = val & 0xff;
16786 val >>= 8;
16787 --size;
16788 }
16789 }
16790
16791 /* Reads integers from dw_vec_const array. Inverse of insert_int. */
16792
16793 static HOST_WIDE_INT
16794 extract_int (const unsigned char *src, unsigned int size)
16795 {
16796 HOST_WIDE_INT val = 0;
16797
16798 src += size;
16799 while (size != 0)
16800 {
16801 val <<= 8;
16802 val |= *--src & 0xff;
16803 --size;
16804 }
16805 return val;
16806 }
16807
16808 /* Writes wide_int values to dw_vec_const array. */
16809
16810 static void
16811 insert_wide_int (const wide_int &val, unsigned char *dest, int elt_size)
16812 {
16813 int i;
16814
16815 if (elt_size <= HOST_BITS_PER_WIDE_INT/BITS_PER_UNIT)
16816 {
16817 insert_int ((HOST_WIDE_INT) val.elt (0), elt_size, dest);
16818 return;
16819 }
16820
16821 /* We'd have to extend this code to support odd sizes. */
16822 gcc_assert (elt_size % (HOST_BITS_PER_WIDE_INT / BITS_PER_UNIT) == 0);
16823
16824 int n = elt_size / (HOST_BITS_PER_WIDE_INT / BITS_PER_UNIT);
16825
16826 if (WORDS_BIG_ENDIAN)
16827 for (i = n - 1; i >= 0; i--)
16828 {
16829 insert_int ((HOST_WIDE_INT) val.elt (i), sizeof (HOST_WIDE_INT), dest);
16830 dest += sizeof (HOST_WIDE_INT);
16831 }
16832 else
16833 for (i = 0; i < n; i++)
16834 {
16835 insert_int ((HOST_WIDE_INT) val.elt (i), sizeof (HOST_WIDE_INT), dest);
16836 dest += sizeof (HOST_WIDE_INT);
16837 }
16838 }
16839
16840 /* Writes floating point values to dw_vec_const array. */
16841
16842 static void
16843 insert_float (const_rtx rtl, unsigned char *array)
16844 {
16845 long val[4];
16846 int i;
16847
16848 real_to_target (val, CONST_DOUBLE_REAL_VALUE (rtl), GET_MODE (rtl));
16849
16850 /* real_to_target puts 32-bit pieces in each long. Pack them. */
16851 for (i = 0; i < GET_MODE_SIZE (GET_MODE (rtl)) / 4; i++)
16852 {
16853 insert_int (val[i], 4, array);
16854 array += 4;
16855 }
16856 }
16857
16858 /* Attach a DW_AT_const_value attribute for a variable or a parameter which
16859 does not have a "location" either in memory or in a register. These
16860 things can arise in GNU C when a constant is passed as an actual parameter
16861 to an inlined function. They can also arise in C++ where declared
16862 constants do not necessarily get memory "homes". */
16863
16864 static bool
16865 add_const_value_attribute (dw_die_ref die, rtx rtl)
16866 {
16867 switch (GET_CODE (rtl))
16868 {
16869 case CONST_INT:
16870 {
16871 HOST_WIDE_INT val = INTVAL (rtl);
16872
16873 if (val < 0)
16874 add_AT_int (die, DW_AT_const_value, val);
16875 else
16876 add_AT_unsigned (die, DW_AT_const_value, (unsigned HOST_WIDE_INT) val);
16877 }
16878 return true;
16879
16880 case CONST_WIDE_INT:
16881 {
16882 wide_int w1 = std::make_pair (rtl, MAX_MODE_INT);
16883 unsigned int prec = MIN (wi::min_precision (w1, UNSIGNED),
16884 (unsigned int)CONST_WIDE_INT_NUNITS (rtl) * HOST_BITS_PER_WIDE_INT);
16885 wide_int w = wi::zext (w1, prec);
16886 add_AT_wide (die, DW_AT_const_value, w);
16887 }
16888 return true;
16889
16890 case CONST_DOUBLE:
16891 /* Note that a CONST_DOUBLE rtx could represent either an integer or a
16892 floating-point constant. A CONST_DOUBLE is used whenever the
16893 constant requires more than one word in order to be adequately
16894 represented. */
16895 {
16896 machine_mode mode = GET_MODE (rtl);
16897
16898 if (TARGET_SUPPORTS_WIDE_INT == 0 && !SCALAR_FLOAT_MODE_P (mode))
16899 add_AT_double (die, DW_AT_const_value,
16900 CONST_DOUBLE_HIGH (rtl), CONST_DOUBLE_LOW (rtl));
16901 else
16902 {
16903 unsigned int length = GET_MODE_SIZE (mode);
16904 unsigned char *array = ggc_vec_alloc<unsigned char> (length);
16905
16906 insert_float (rtl, array);
16907 add_AT_vec (die, DW_AT_const_value, length / 4, 4, array);
16908 }
16909 }
16910 return true;
16911
16912 case CONST_VECTOR:
16913 {
16914 machine_mode mode = GET_MODE (rtl);
16915 unsigned int elt_size = GET_MODE_UNIT_SIZE (mode);
16916 unsigned int length = CONST_VECTOR_NUNITS (rtl);
16917 unsigned char *array
16918 = ggc_vec_alloc<unsigned char> (length * elt_size);
16919 unsigned int i;
16920 unsigned char *p;
16921 machine_mode imode = GET_MODE_INNER (mode);
16922
16923 switch (GET_MODE_CLASS (mode))
16924 {
16925 case MODE_VECTOR_INT:
16926 for (i = 0, p = array; i < length; i++, p += elt_size)
16927 {
16928 rtx elt = CONST_VECTOR_ELT (rtl, i);
16929 insert_wide_int (std::make_pair (elt, imode), p, elt_size);
16930 }
16931 break;
16932
16933 case MODE_VECTOR_FLOAT:
16934 for (i = 0, p = array; i < length; i++, p += elt_size)
16935 {
16936 rtx elt = CONST_VECTOR_ELT (rtl, i);
16937 insert_float (elt, p);
16938 }
16939 break;
16940
16941 default:
16942 gcc_unreachable ();
16943 }
16944
16945 add_AT_vec (die, DW_AT_const_value, length, elt_size, array);
16946 }
16947 return true;
16948
16949 case CONST_STRING:
16950 if (dwarf_version >= 4 || !dwarf_strict)
16951 {
16952 dw_loc_descr_ref loc_result;
16953 resolve_one_addr (&rtl);
16954 rtl_addr:
16955 loc_result = new_addr_loc_descr (rtl, dtprel_false);
16956 add_loc_descr (&loc_result, new_loc_descr (DW_OP_stack_value, 0, 0));
16957 add_AT_loc (die, DW_AT_location, loc_result);
16958 vec_safe_push (used_rtx_array, rtl);
16959 return true;
16960 }
16961 return false;
16962
16963 case CONST:
16964 if (CONSTANT_P (XEXP (rtl, 0)))
16965 return add_const_value_attribute (die, XEXP (rtl, 0));
16966 /* FALLTHROUGH */
16967 case SYMBOL_REF:
16968 if (!const_ok_for_output (rtl))
16969 return false;
16970 case LABEL_REF:
16971 if (dwarf_version >= 4 || !dwarf_strict)
16972 goto rtl_addr;
16973 return false;
16974
16975 case PLUS:
16976 /* In cases where an inlined instance of an inline function is passed
16977 the address of an `auto' variable (which is local to the caller) we
16978 can get a situation where the DECL_RTL of the artificial local
16979 variable (for the inlining) which acts as a stand-in for the
16980 corresponding formal parameter (of the inline function) will look
16981 like (plus:SI (reg:SI FRAME_PTR) (const_int ...)). This is not
16982 exactly a compile-time constant expression, but it isn't the address
16983 of the (artificial) local variable either. Rather, it represents the
16984 *value* which the artificial local variable always has during its
16985 lifetime. We currently have no way to represent such quasi-constant
16986 values in Dwarf, so for now we just punt and generate nothing. */
16987 return false;
16988
16989 case HIGH:
16990 case CONST_FIXED:
16991 return false;
16992
16993 case MEM:
16994 if (GET_CODE (XEXP (rtl, 0)) == CONST_STRING
16995 && MEM_READONLY_P (rtl)
16996 && GET_MODE (rtl) == BLKmode)
16997 {
16998 add_AT_string (die, DW_AT_const_value, XSTR (XEXP (rtl, 0), 0));
16999 return true;
17000 }
17001 return false;
17002
17003 default:
17004 /* No other kinds of rtx should be possible here. */
17005 gcc_unreachable ();
17006 }
17007 return false;
17008 }
17009
17010 /* Determine whether the evaluation of EXPR references any variables
17011 or functions which aren't otherwise used (and therefore may not be
17012 output). */
17013 static tree
17014 reference_to_unused (tree * tp, int * walk_subtrees,
17015 void * data ATTRIBUTE_UNUSED)
17016 {
17017 if (! EXPR_P (*tp) && ! CONSTANT_CLASS_P (*tp))
17018 *walk_subtrees = 0;
17019
17020 if (DECL_P (*tp) && ! TREE_PUBLIC (*tp) && ! TREE_USED (*tp)
17021 && ! TREE_ASM_WRITTEN (*tp))
17022 return *tp;
17023 /* ??? The C++ FE emits debug information for using decls, so
17024 putting gcc_unreachable here falls over. See PR31899. For now
17025 be conservative. */
17026 else if (!symtab->global_info_ready
17027 && (TREE_CODE (*tp) == VAR_DECL || TREE_CODE (*tp) == FUNCTION_DECL))
17028 return *tp;
17029 else if (TREE_CODE (*tp) == VAR_DECL)
17030 {
17031 varpool_node *node = varpool_node::get (*tp);
17032 if (!node || !node->definition)
17033 return *tp;
17034 }
17035 else if (TREE_CODE (*tp) == FUNCTION_DECL
17036 && (!DECL_EXTERNAL (*tp) || DECL_DECLARED_INLINE_P (*tp)))
17037 {
17038 /* The call graph machinery must have finished analyzing,
17039 optimizing and gimplifying the CU by now.
17040 So if *TP has no call graph node associated
17041 to it, it means *TP will not be emitted. */
17042 if (!cgraph_node::get (*tp))
17043 return *tp;
17044 }
17045 else if (TREE_CODE (*tp) == STRING_CST && !TREE_ASM_WRITTEN (*tp))
17046 return *tp;
17047
17048 return NULL_TREE;
17049 }
17050
17051 /* Generate an RTL constant from a decl initializer INIT with decl type TYPE,
17052 for use in a later add_const_value_attribute call. */
17053
17054 static rtx
17055 rtl_for_decl_init (tree init, tree type)
17056 {
17057 rtx rtl = NULL_RTX;
17058
17059 STRIP_NOPS (init);
17060
17061 /* If a variable is initialized with a string constant without embedded
17062 zeros, build CONST_STRING. */
17063 if (TREE_CODE (init) == STRING_CST && TREE_CODE (type) == ARRAY_TYPE)
17064 {
17065 tree enttype = TREE_TYPE (type);
17066 tree domain = TYPE_DOMAIN (type);
17067 machine_mode mode = TYPE_MODE (enttype);
17068
17069 if (GET_MODE_CLASS (mode) == MODE_INT && GET_MODE_SIZE (mode) == 1
17070 && domain
17071 && integer_zerop (TYPE_MIN_VALUE (domain))
17072 && compare_tree_int (TYPE_MAX_VALUE (domain),
17073 TREE_STRING_LENGTH (init) - 1) == 0
17074 && ((size_t) TREE_STRING_LENGTH (init)
17075 == strlen (TREE_STRING_POINTER (init)) + 1))
17076 {
17077 rtl = gen_rtx_CONST_STRING (VOIDmode,
17078 ggc_strdup (TREE_STRING_POINTER (init)));
17079 rtl = gen_rtx_MEM (BLKmode, rtl);
17080 MEM_READONLY_P (rtl) = 1;
17081 }
17082 }
17083 /* Other aggregates, and complex values, could be represented using
17084 CONCAT: FIXME! */
17085 else if (AGGREGATE_TYPE_P (type)
17086 || (TREE_CODE (init) == VIEW_CONVERT_EXPR
17087 && AGGREGATE_TYPE_P (TREE_TYPE (TREE_OPERAND (init, 0))))
17088 || TREE_CODE (type) == COMPLEX_TYPE)
17089 ;
17090 /* Vectors only work if their mode is supported by the target.
17091 FIXME: generic vectors ought to work too. */
17092 else if (TREE_CODE (type) == VECTOR_TYPE
17093 && !VECTOR_MODE_P (TYPE_MODE (type)))
17094 ;
17095 /* If the initializer is something that we know will expand into an
17096 immediate RTL constant, expand it now. We must be careful not to
17097 reference variables which won't be output. */
17098 else if (initializer_constant_valid_p (init, type)
17099 && ! walk_tree (&init, reference_to_unused, NULL, NULL))
17100 {
17101 /* Convert vector CONSTRUCTOR initializers to VECTOR_CST if
17102 possible. */
17103 if (TREE_CODE (type) == VECTOR_TYPE)
17104 switch (TREE_CODE (init))
17105 {
17106 case VECTOR_CST:
17107 break;
17108 case CONSTRUCTOR:
17109 if (TREE_CONSTANT (init))
17110 {
17111 vec<constructor_elt, va_gc> *elts = CONSTRUCTOR_ELTS (init);
17112 bool constant_p = true;
17113 tree value;
17114 unsigned HOST_WIDE_INT ix;
17115
17116 /* Even when ctor is constant, it might contain non-*_CST
17117 elements (e.g. { 1.0/0.0 - 1.0/0.0, 0.0 }) and those don't
17118 belong into VECTOR_CST nodes. */
17119 FOR_EACH_CONSTRUCTOR_VALUE (elts, ix, value)
17120 if (!CONSTANT_CLASS_P (value))
17121 {
17122 constant_p = false;
17123 break;
17124 }
17125
17126 if (constant_p)
17127 {
17128 init = build_vector_from_ctor (type, elts);
17129 break;
17130 }
17131 }
17132 /* FALLTHRU */
17133
17134 default:
17135 return NULL;
17136 }
17137
17138 rtl = expand_expr (init, NULL_RTX, VOIDmode, EXPAND_INITIALIZER);
17139
17140 /* If expand_expr returns a MEM, it wasn't immediate. */
17141 gcc_assert (!rtl || !MEM_P (rtl));
17142 }
17143
17144 return rtl;
17145 }
17146
17147 /* Generate RTL for the variable DECL to represent its location. */
17148
17149 static rtx
17150 rtl_for_decl_location (tree decl)
17151 {
17152 rtx rtl;
17153
17154 /* Here we have to decide where we are going to say the parameter "lives"
17155 (as far as the debugger is concerned). We only have a couple of
17156 choices. GCC provides us with DECL_RTL and with DECL_INCOMING_RTL.
17157
17158 DECL_RTL normally indicates where the parameter lives during most of the
17159 activation of the function. If optimization is enabled however, this
17160 could be either NULL or else a pseudo-reg. Both of those cases indicate
17161 that the parameter doesn't really live anywhere (as far as the code
17162 generation parts of GCC are concerned) during most of the function's
17163 activation. That will happen (for example) if the parameter is never
17164 referenced within the function.
17165
17166 We could just generate a location descriptor here for all non-NULL
17167 non-pseudo values of DECL_RTL and ignore all of the rest, but we can be
17168 a little nicer than that if we also consider DECL_INCOMING_RTL in cases
17169 where DECL_RTL is NULL or is a pseudo-reg.
17170
17171 Note however that we can only get away with using DECL_INCOMING_RTL as
17172 a backup substitute for DECL_RTL in certain limited cases. In cases
17173 where DECL_ARG_TYPE (decl) indicates the same type as TREE_TYPE (decl),
17174 we can be sure that the parameter was passed using the same type as it is
17175 declared to have within the function, and that its DECL_INCOMING_RTL
17176 points us to a place where a value of that type is passed.
17177
17178 In cases where DECL_ARG_TYPE (decl) and TREE_TYPE (decl) are different,
17179 we cannot (in general) use DECL_INCOMING_RTL as a substitute for DECL_RTL
17180 because in these cases DECL_INCOMING_RTL points us to a value of some
17181 type which is *different* from the type of the parameter itself. Thus,
17182 if we tried to use DECL_INCOMING_RTL to generate a location attribute in
17183 such cases, the debugger would end up (for example) trying to fetch a
17184 `float' from a place which actually contains the first part of a
17185 `double'. That would lead to really incorrect and confusing
17186 output at debug-time.
17187
17188 So, in general, we *do not* use DECL_INCOMING_RTL as a backup for DECL_RTL
17189 in cases where DECL_ARG_TYPE (decl) != TREE_TYPE (decl). There
17190 are a couple of exceptions however. On little-endian machines we can
17191 get away with using DECL_INCOMING_RTL even when DECL_ARG_TYPE (decl) is
17192 not the same as TREE_TYPE (decl), but only when DECL_ARG_TYPE (decl) is
17193 an integral type that is smaller than TREE_TYPE (decl). These cases arise
17194 when (on a little-endian machine) a non-prototyped function has a
17195 parameter declared to be of type `short' or `char'. In such cases,
17196 TREE_TYPE (decl) will be `short' or `char', DECL_ARG_TYPE (decl) will
17197 be `int', and DECL_INCOMING_RTL will point to the lowest-order byte of the
17198 passed `int' value. If the debugger then uses that address to fetch
17199 a `short' or a `char' (on a little-endian machine) the result will be
17200 the correct data, so we allow for such exceptional cases below.
17201
17202 Note that our goal here is to describe the place where the given formal
17203 parameter lives during most of the function's activation (i.e. between the
17204 end of the prologue and the start of the epilogue). We'll do that as best
17205 as we can. Note however that if the given formal parameter is modified
17206 sometime during the execution of the function, then a stack backtrace (at
17207 debug-time) will show the function as having been called with the *new*
17208 value rather than the value which was originally passed in. This happens
17209 rarely enough that it is not a major problem, but it *is* a problem, and
17210 I'd like to fix it.
17211
17212 A future version of dwarf2out.c may generate two additional attributes for
17213 any given DW_TAG_formal_parameter DIE which will describe the "passed
17214 type" and the "passed location" for the given formal parameter in addition
17215 to the attributes we now generate to indicate the "declared type" and the
17216 "active location" for each parameter. This additional set of attributes
17217 could be used by debuggers for stack backtraces. Separately, note that
17218 sometimes DECL_RTL can be NULL and DECL_INCOMING_RTL can be NULL also.
17219 This happens (for example) for inlined-instances of inline function formal
17220 parameters which are never referenced. This really shouldn't be
17221 happening. All PARM_DECL nodes should get valid non-NULL
17222 DECL_INCOMING_RTL values. FIXME. */
17223
17224 /* Use DECL_RTL as the "location" unless we find something better. */
17225 rtl = DECL_RTL_IF_SET (decl);
17226
17227 /* When generating abstract instances, ignore everything except
17228 constants, symbols living in memory, and symbols living in
17229 fixed registers. */
17230 if (! reload_completed)
17231 {
17232 if (rtl
17233 && (CONSTANT_P (rtl)
17234 || (MEM_P (rtl)
17235 && CONSTANT_P (XEXP (rtl, 0)))
17236 || (REG_P (rtl)
17237 && TREE_CODE (decl) == VAR_DECL
17238 && TREE_STATIC (decl))))
17239 {
17240 rtl = targetm.delegitimize_address (rtl);
17241 return rtl;
17242 }
17243 rtl = NULL_RTX;
17244 }
17245 else if (TREE_CODE (decl) == PARM_DECL)
17246 {
17247 if (rtl == NULL_RTX
17248 || is_pseudo_reg (rtl)
17249 || (MEM_P (rtl)
17250 && is_pseudo_reg (XEXP (rtl, 0))
17251 && DECL_INCOMING_RTL (decl)
17252 && MEM_P (DECL_INCOMING_RTL (decl))
17253 && GET_MODE (rtl) == GET_MODE (DECL_INCOMING_RTL (decl))))
17254 {
17255 tree declared_type = TREE_TYPE (decl);
17256 tree passed_type = DECL_ARG_TYPE (decl);
17257 machine_mode dmode = TYPE_MODE (declared_type);
17258 machine_mode pmode = TYPE_MODE (passed_type);
17259
17260 /* This decl represents a formal parameter which was optimized out.
17261 Note that DECL_INCOMING_RTL may be NULL in here, but we handle
17262 all cases where (rtl == NULL_RTX) just below. */
17263 if (dmode == pmode)
17264 rtl = DECL_INCOMING_RTL (decl);
17265 else if ((rtl == NULL_RTX || is_pseudo_reg (rtl))
17266 && SCALAR_INT_MODE_P (dmode)
17267 && GET_MODE_SIZE (dmode) <= GET_MODE_SIZE (pmode)
17268 && DECL_INCOMING_RTL (decl))
17269 {
17270 rtx inc = DECL_INCOMING_RTL (decl);
17271 if (REG_P (inc))
17272 rtl = inc;
17273 else if (MEM_P (inc))
17274 {
17275 if (BYTES_BIG_ENDIAN)
17276 rtl = adjust_address_nv (inc, dmode,
17277 GET_MODE_SIZE (pmode)
17278 - GET_MODE_SIZE (dmode));
17279 else
17280 rtl = inc;
17281 }
17282 }
17283 }
17284
17285 /* If the parm was passed in registers, but lives on the stack, then
17286 make a big endian correction if the mode of the type of the
17287 parameter is not the same as the mode of the rtl. */
17288 /* ??? This is the same series of checks that are made in dbxout.c before
17289 we reach the big endian correction code there. It isn't clear if all
17290 of these checks are necessary here, but keeping them all is the safe
17291 thing to do. */
17292 else if (MEM_P (rtl)
17293 && XEXP (rtl, 0) != const0_rtx
17294 && ! CONSTANT_P (XEXP (rtl, 0))
17295 /* Not passed in memory. */
17296 && !MEM_P (DECL_INCOMING_RTL (decl))
17297 /* Not passed by invisible reference. */
17298 && (!REG_P (XEXP (rtl, 0))
17299 || REGNO (XEXP (rtl, 0)) == HARD_FRAME_POINTER_REGNUM
17300 || REGNO (XEXP (rtl, 0)) == STACK_POINTER_REGNUM
17301 #if !HARD_FRAME_POINTER_IS_ARG_POINTER
17302 || REGNO (XEXP (rtl, 0)) == ARG_POINTER_REGNUM
17303 #endif
17304 )
17305 /* Big endian correction check. */
17306 && BYTES_BIG_ENDIAN
17307 && TYPE_MODE (TREE_TYPE (decl)) != GET_MODE (rtl)
17308 && (GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl)))
17309 < UNITS_PER_WORD))
17310 {
17311 machine_mode addr_mode = get_address_mode (rtl);
17312 int offset = (UNITS_PER_WORD
17313 - GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl))));
17314
17315 rtl = gen_rtx_MEM (TYPE_MODE (TREE_TYPE (decl)),
17316 plus_constant (addr_mode, XEXP (rtl, 0), offset));
17317 }
17318 }
17319 else if (TREE_CODE (decl) == VAR_DECL
17320 && rtl
17321 && MEM_P (rtl)
17322 && GET_MODE (rtl) != TYPE_MODE (TREE_TYPE (decl))
17323 && BYTES_BIG_ENDIAN)
17324 {
17325 machine_mode addr_mode = get_address_mode (rtl);
17326 int rsize = GET_MODE_SIZE (GET_MODE (rtl));
17327 int dsize = GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl)));
17328
17329 /* If a variable is declared "register" yet is smaller than
17330 a register, then if we store the variable to memory, it
17331 looks like we're storing a register-sized value, when in
17332 fact we are not. We need to adjust the offset of the
17333 storage location to reflect the actual value's bytes,
17334 else gdb will not be able to display it. */
17335 if (rsize > dsize)
17336 rtl = gen_rtx_MEM (TYPE_MODE (TREE_TYPE (decl)),
17337 plus_constant (addr_mode, XEXP (rtl, 0),
17338 rsize - dsize));
17339 }
17340
17341 /* A variable with no DECL_RTL but a DECL_INITIAL is a compile-time constant,
17342 and will have been substituted directly into all expressions that use it.
17343 C does not have such a concept, but C++ and other languages do. */
17344 if (!rtl && TREE_CODE (decl) == VAR_DECL && DECL_INITIAL (decl))
17345 rtl = rtl_for_decl_init (DECL_INITIAL (decl), TREE_TYPE (decl));
17346
17347 if (rtl)
17348 rtl = targetm.delegitimize_address (rtl);
17349
17350 /* If we don't look past the constant pool, we risk emitting a
17351 reference to a constant pool entry that isn't referenced from
17352 code, and thus is not emitted. */
17353 if (rtl)
17354 rtl = avoid_constant_pool_reference (rtl);
17355
17356 /* Try harder to get a rtl. If this symbol ends up not being emitted
17357 in the current CU, resolve_addr will remove the expression referencing
17358 it. */
17359 if (rtl == NULL_RTX
17360 && TREE_CODE (decl) == VAR_DECL
17361 && !DECL_EXTERNAL (decl)
17362 && TREE_STATIC (decl)
17363 && DECL_NAME (decl)
17364 && !DECL_HARD_REGISTER (decl)
17365 && DECL_MODE (decl) != VOIDmode)
17366 {
17367 rtl = make_decl_rtl_for_debug (decl);
17368 if (!MEM_P (rtl)
17369 || GET_CODE (XEXP (rtl, 0)) != SYMBOL_REF
17370 || SYMBOL_REF_DECL (XEXP (rtl, 0)) != decl)
17371 rtl = NULL_RTX;
17372 }
17373
17374 return rtl;
17375 }
17376
17377 /* Check whether decl is a Fortran COMMON symbol. If not, NULL_TREE is
17378 returned. If so, the decl for the COMMON block is returned, and the
17379 value is the offset into the common block for the symbol. */
17380
17381 static tree
17382 fortran_common (tree decl, HOST_WIDE_INT *value)
17383 {
17384 tree val_expr, cvar;
17385 machine_mode mode;
17386 HOST_WIDE_INT bitsize, bitpos;
17387 tree offset;
17388 int unsignedp, reversep, volatilep = 0;
17389
17390 /* If the decl isn't a VAR_DECL, or if it isn't static, or if
17391 it does not have a value (the offset into the common area), or if it
17392 is thread local (as opposed to global) then it isn't common, and shouldn't
17393 be handled as such. */
17394 if (TREE_CODE (decl) != VAR_DECL
17395 || !TREE_STATIC (decl)
17396 || !DECL_HAS_VALUE_EXPR_P (decl)
17397 || !is_fortran ())
17398 return NULL_TREE;
17399
17400 val_expr = DECL_VALUE_EXPR (decl);
17401 if (TREE_CODE (val_expr) != COMPONENT_REF)
17402 return NULL_TREE;
17403
17404 cvar = get_inner_reference (val_expr, &bitsize, &bitpos, &offset, &mode,
17405 &unsignedp, &reversep, &volatilep, true);
17406
17407 if (cvar == NULL_TREE
17408 || TREE_CODE (cvar) != VAR_DECL
17409 || DECL_ARTIFICIAL (cvar)
17410 || !TREE_PUBLIC (cvar))
17411 return NULL_TREE;
17412
17413 *value = 0;
17414 if (offset != NULL)
17415 {
17416 if (!tree_fits_shwi_p (offset))
17417 return NULL_TREE;
17418 *value = tree_to_shwi (offset);
17419 }
17420 if (bitpos != 0)
17421 *value += bitpos / BITS_PER_UNIT;
17422
17423 return cvar;
17424 }
17425
17426 /* Generate *either* a DW_AT_location attribute or else a DW_AT_const_value
17427 data attribute for a variable or a parameter. We generate the
17428 DW_AT_const_value attribute only in those cases where the given variable
17429 or parameter does not have a true "location" either in memory or in a
17430 register. This can happen (for example) when a constant is passed as an
17431 actual argument in a call to an inline function. (It's possible that
17432 these things can crop up in other ways also.) Note that one type of
17433 constant value which can be passed into an inlined function is a constant
17434 pointer. This can happen for example if an actual argument in an inlined
17435 function call evaluates to a compile-time constant address.
17436
17437 CACHE_P is true if it is worth caching the location list for DECL,
17438 so that future calls can reuse it rather than regenerate it from scratch.
17439 This is true for BLOCK_NONLOCALIZED_VARS in inlined subroutines,
17440 since we will need to refer to them each time the function is inlined. */
17441
17442 static bool
17443 add_location_or_const_value_attribute (dw_die_ref die, tree decl, bool cache_p)
17444 {
17445 rtx rtl;
17446 dw_loc_list_ref list;
17447 var_loc_list *loc_list;
17448 cached_dw_loc_list *cache;
17449
17450 if (early_dwarf)
17451 return false;
17452
17453 if (TREE_CODE (decl) == ERROR_MARK)
17454 return false;
17455
17456 if (get_AT (die, DW_AT_location)
17457 || get_AT (die, DW_AT_const_value))
17458 return true;
17459
17460 gcc_assert (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == PARM_DECL
17461 || TREE_CODE (decl) == RESULT_DECL);
17462
17463 /* Try to get some constant RTL for this decl, and use that as the value of
17464 the location. */
17465
17466 rtl = rtl_for_decl_location (decl);
17467 if (rtl && (CONSTANT_P (rtl) || GET_CODE (rtl) == CONST_STRING)
17468 && add_const_value_attribute (die, rtl))
17469 return true;
17470
17471 /* See if we have single element location list that is equivalent to
17472 a constant value. That way we are better to use add_const_value_attribute
17473 rather than expanding constant value equivalent. */
17474 loc_list = lookup_decl_loc (decl);
17475 if (loc_list
17476 && loc_list->first
17477 && loc_list->first->next == NULL
17478 && NOTE_P (loc_list->first->loc)
17479 && NOTE_VAR_LOCATION (loc_list->first->loc)
17480 && NOTE_VAR_LOCATION_LOC (loc_list->first->loc))
17481 {
17482 struct var_loc_node *node;
17483
17484 node = loc_list->first;
17485 rtl = NOTE_VAR_LOCATION_LOC (node->loc);
17486 if (GET_CODE (rtl) == EXPR_LIST)
17487 rtl = XEXP (rtl, 0);
17488 if ((CONSTANT_P (rtl) || GET_CODE (rtl) == CONST_STRING)
17489 && add_const_value_attribute (die, rtl))
17490 return true;
17491 }
17492 /* If this decl is from BLOCK_NONLOCALIZED_VARS, we might need its
17493 list several times. See if we've already cached the contents. */
17494 list = NULL;
17495 if (loc_list == NULL || cached_dw_loc_list_table == NULL)
17496 cache_p = false;
17497 if (cache_p)
17498 {
17499 cache = cached_dw_loc_list_table->find_with_hash (decl, DECL_UID (decl));
17500 if (cache)
17501 list = cache->loc_list;
17502 }
17503 if (list == NULL)
17504 {
17505 list = loc_list_from_tree (decl, decl_by_reference_p (decl) ? 0 : 2,
17506 NULL);
17507 /* It is usually worth caching this result if the decl is from
17508 BLOCK_NONLOCALIZED_VARS and if the list has at least two elements. */
17509 if (cache_p && list && list->dw_loc_next)
17510 {
17511 cached_dw_loc_list **slot
17512 = cached_dw_loc_list_table->find_slot_with_hash (decl,
17513 DECL_UID (decl),
17514 INSERT);
17515 cache = ggc_cleared_alloc<cached_dw_loc_list> ();
17516 cache->decl_id = DECL_UID (decl);
17517 cache->loc_list = list;
17518 *slot = cache;
17519 }
17520 }
17521 if (list)
17522 {
17523 add_AT_location_description (die, DW_AT_location, list);
17524 return true;
17525 }
17526 /* None of that worked, so it must not really have a location;
17527 try adding a constant value attribute from the DECL_INITIAL. */
17528 return tree_add_const_value_attribute_for_decl (die, decl);
17529 }
17530
17531 /* Helper function for tree_add_const_value_attribute. Natively encode
17532 initializer INIT into an array. Return true if successful. */
17533
17534 static bool
17535 native_encode_initializer (tree init, unsigned char *array, int size)
17536 {
17537 tree type;
17538
17539 if (init == NULL_TREE)
17540 return false;
17541
17542 STRIP_NOPS (init);
17543 switch (TREE_CODE (init))
17544 {
17545 case STRING_CST:
17546 type = TREE_TYPE (init);
17547 if (TREE_CODE (type) == ARRAY_TYPE)
17548 {
17549 tree enttype = TREE_TYPE (type);
17550 machine_mode mode = TYPE_MODE (enttype);
17551
17552 if (GET_MODE_CLASS (mode) != MODE_INT || GET_MODE_SIZE (mode) != 1)
17553 return false;
17554 if (int_size_in_bytes (type) != size)
17555 return false;
17556 if (size > TREE_STRING_LENGTH (init))
17557 {
17558 memcpy (array, TREE_STRING_POINTER (init),
17559 TREE_STRING_LENGTH (init));
17560 memset (array + TREE_STRING_LENGTH (init),
17561 '\0', size - TREE_STRING_LENGTH (init));
17562 }
17563 else
17564 memcpy (array, TREE_STRING_POINTER (init), size);
17565 return true;
17566 }
17567 return false;
17568 case CONSTRUCTOR:
17569 type = TREE_TYPE (init);
17570 if (int_size_in_bytes (type) != size)
17571 return false;
17572 if (TREE_CODE (type) == ARRAY_TYPE)
17573 {
17574 HOST_WIDE_INT min_index;
17575 unsigned HOST_WIDE_INT cnt;
17576 int curpos = 0, fieldsize;
17577 constructor_elt *ce;
17578
17579 if (TYPE_DOMAIN (type) == NULL_TREE
17580 || !tree_fits_shwi_p (TYPE_MIN_VALUE (TYPE_DOMAIN (type))))
17581 return false;
17582
17583 fieldsize = int_size_in_bytes (TREE_TYPE (type));
17584 if (fieldsize <= 0)
17585 return false;
17586
17587 min_index = tree_to_shwi (TYPE_MIN_VALUE (TYPE_DOMAIN (type)));
17588 memset (array, '\0', size);
17589 FOR_EACH_VEC_SAFE_ELT (CONSTRUCTOR_ELTS (init), cnt, ce)
17590 {
17591 tree val = ce->value;
17592 tree index = ce->index;
17593 int pos = curpos;
17594 if (index && TREE_CODE (index) == RANGE_EXPR)
17595 pos = (tree_to_shwi (TREE_OPERAND (index, 0)) - min_index)
17596 * fieldsize;
17597 else if (index)
17598 pos = (tree_to_shwi (index) - min_index) * fieldsize;
17599
17600 if (val)
17601 {
17602 STRIP_NOPS (val);
17603 if (!native_encode_initializer (val, array + pos, fieldsize))
17604 return false;
17605 }
17606 curpos = pos + fieldsize;
17607 if (index && TREE_CODE (index) == RANGE_EXPR)
17608 {
17609 int count = tree_to_shwi (TREE_OPERAND (index, 1))
17610 - tree_to_shwi (TREE_OPERAND (index, 0));
17611 while (count-- > 0)
17612 {
17613 if (val)
17614 memcpy (array + curpos, array + pos, fieldsize);
17615 curpos += fieldsize;
17616 }
17617 }
17618 gcc_assert (curpos <= size);
17619 }
17620 return true;
17621 }
17622 else if (TREE_CODE (type) == RECORD_TYPE
17623 || TREE_CODE (type) == UNION_TYPE)
17624 {
17625 tree field = NULL_TREE;
17626 unsigned HOST_WIDE_INT cnt;
17627 constructor_elt *ce;
17628
17629 if (int_size_in_bytes (type) != size)
17630 return false;
17631
17632 if (TREE_CODE (type) == RECORD_TYPE)
17633 field = TYPE_FIELDS (type);
17634
17635 FOR_EACH_VEC_SAFE_ELT (CONSTRUCTOR_ELTS (init), cnt, ce)
17636 {
17637 tree val = ce->value;
17638 int pos, fieldsize;
17639
17640 if (ce->index != 0)
17641 field = ce->index;
17642
17643 if (val)
17644 STRIP_NOPS (val);
17645
17646 if (field == NULL_TREE || DECL_BIT_FIELD (field))
17647 return false;
17648
17649 if (TREE_CODE (TREE_TYPE (field)) == ARRAY_TYPE
17650 && TYPE_DOMAIN (TREE_TYPE (field))
17651 && ! TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (field))))
17652 return false;
17653 else if (DECL_SIZE_UNIT (field) == NULL_TREE
17654 || !tree_fits_shwi_p (DECL_SIZE_UNIT (field)))
17655 return false;
17656 fieldsize = tree_to_shwi (DECL_SIZE_UNIT (field));
17657 pos = int_byte_position (field);
17658 gcc_assert (pos + fieldsize <= size);
17659 if (val
17660 && !native_encode_initializer (val, array + pos, fieldsize))
17661 return false;
17662 }
17663 return true;
17664 }
17665 return false;
17666 case VIEW_CONVERT_EXPR:
17667 case NON_LVALUE_EXPR:
17668 return native_encode_initializer (TREE_OPERAND (init, 0), array, size);
17669 default:
17670 return native_encode_expr (init, array, size) == size;
17671 }
17672 }
17673
17674 /* Attach a DW_AT_const_value attribute to DIE. The value of the
17675 attribute is the const value T. */
17676
17677 static bool
17678 tree_add_const_value_attribute (dw_die_ref die, tree t)
17679 {
17680 tree init;
17681 tree type = TREE_TYPE (t);
17682 rtx rtl;
17683
17684 if (!t || !TREE_TYPE (t) || TREE_TYPE (t) == error_mark_node)
17685 return false;
17686
17687 init = t;
17688 gcc_assert (!DECL_P (init));
17689
17690 rtl = rtl_for_decl_init (init, type);
17691 if (rtl)
17692 return add_const_value_attribute (die, rtl);
17693 /* If the host and target are sane, try harder. */
17694 else if (CHAR_BIT == 8 && BITS_PER_UNIT == 8
17695 && initializer_constant_valid_p (init, type))
17696 {
17697 HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (init));
17698 if (size > 0 && (int) size == size)
17699 {
17700 unsigned char *array = ggc_cleared_vec_alloc<unsigned char> (size);
17701
17702 if (native_encode_initializer (init, array, size))
17703 {
17704 add_AT_vec (die, DW_AT_const_value, size, 1, array);
17705 return true;
17706 }
17707 ggc_free (array);
17708 }
17709 }
17710 return false;
17711 }
17712
17713 /* Attach a DW_AT_const_value attribute to VAR_DIE. The value of the
17714 attribute is the const value of T, where T is an integral constant
17715 variable with static storage duration
17716 (so it can't be a PARM_DECL or a RESULT_DECL). */
17717
17718 static bool
17719 tree_add_const_value_attribute_for_decl (dw_die_ref var_die, tree decl)
17720 {
17721
17722 if (!decl
17723 || (TREE_CODE (decl) != VAR_DECL
17724 && TREE_CODE (decl) != CONST_DECL)
17725 || (TREE_CODE (decl) == VAR_DECL
17726 && !TREE_STATIC (decl)))
17727 return false;
17728
17729 if (TREE_READONLY (decl)
17730 && ! TREE_THIS_VOLATILE (decl)
17731 && DECL_INITIAL (decl))
17732 /* OK */;
17733 else
17734 return false;
17735
17736 /* Don't add DW_AT_const_value if abstract origin already has one. */
17737 if (get_AT (var_die, DW_AT_const_value))
17738 return false;
17739
17740 return tree_add_const_value_attribute (var_die, DECL_INITIAL (decl));
17741 }
17742
17743 /* Convert the CFI instructions for the current function into a
17744 location list. This is used for DW_AT_frame_base when we targeting
17745 a dwarf2 consumer that does not support the dwarf3
17746 DW_OP_call_frame_cfa. OFFSET is a constant to be added to all CFA
17747 expressions. */
17748
17749 static dw_loc_list_ref
17750 convert_cfa_to_fb_loc_list (HOST_WIDE_INT offset)
17751 {
17752 int ix;
17753 dw_fde_ref fde;
17754 dw_loc_list_ref list, *list_tail;
17755 dw_cfi_ref cfi;
17756 dw_cfa_location last_cfa, next_cfa;
17757 const char *start_label, *last_label, *section;
17758 dw_cfa_location remember;
17759
17760 fde = cfun->fde;
17761 gcc_assert (fde != NULL);
17762
17763 section = secname_for_decl (current_function_decl);
17764 list_tail = &list;
17765 list = NULL;
17766
17767 memset (&next_cfa, 0, sizeof (next_cfa));
17768 next_cfa.reg = INVALID_REGNUM;
17769 remember = next_cfa;
17770
17771 start_label = fde->dw_fde_begin;
17772
17773 /* ??? Bald assumption that the CIE opcode list does not contain
17774 advance opcodes. */
17775 FOR_EACH_VEC_ELT (*cie_cfi_vec, ix, cfi)
17776 lookup_cfa_1 (cfi, &next_cfa, &remember);
17777
17778 last_cfa = next_cfa;
17779 last_label = start_label;
17780
17781 if (fde->dw_fde_second_begin && fde->dw_fde_switch_cfi_index == 0)
17782 {
17783 /* If the first partition contained no CFI adjustments, the
17784 CIE opcodes apply to the whole first partition. */
17785 *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset),
17786 fde->dw_fde_begin, fde->dw_fde_end, section);
17787 list_tail =&(*list_tail)->dw_loc_next;
17788 start_label = last_label = fde->dw_fde_second_begin;
17789 }
17790
17791 FOR_EACH_VEC_SAFE_ELT (fde->dw_fde_cfi, ix, cfi)
17792 {
17793 switch (cfi->dw_cfi_opc)
17794 {
17795 case DW_CFA_set_loc:
17796 case DW_CFA_advance_loc1:
17797 case DW_CFA_advance_loc2:
17798 case DW_CFA_advance_loc4:
17799 if (!cfa_equal_p (&last_cfa, &next_cfa))
17800 {
17801 *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset),
17802 start_label, last_label, section);
17803
17804 list_tail = &(*list_tail)->dw_loc_next;
17805 last_cfa = next_cfa;
17806 start_label = last_label;
17807 }
17808 last_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
17809 break;
17810
17811 case DW_CFA_advance_loc:
17812 /* The encoding is complex enough that we should never emit this. */
17813 gcc_unreachable ();
17814
17815 default:
17816 lookup_cfa_1 (cfi, &next_cfa, &remember);
17817 break;
17818 }
17819 if (ix + 1 == fde->dw_fde_switch_cfi_index)
17820 {
17821 if (!cfa_equal_p (&last_cfa, &next_cfa))
17822 {
17823 *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset),
17824 start_label, last_label, section);
17825
17826 list_tail = &(*list_tail)->dw_loc_next;
17827 last_cfa = next_cfa;
17828 start_label = last_label;
17829 }
17830 *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset),
17831 start_label, fde->dw_fde_end, section);
17832 list_tail = &(*list_tail)->dw_loc_next;
17833 start_label = last_label = fde->dw_fde_second_begin;
17834 }
17835 }
17836
17837 if (!cfa_equal_p (&last_cfa, &next_cfa))
17838 {
17839 *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset),
17840 start_label, last_label, section);
17841 list_tail = &(*list_tail)->dw_loc_next;
17842 start_label = last_label;
17843 }
17844
17845 *list_tail = new_loc_list (build_cfa_loc (&next_cfa, offset),
17846 start_label,
17847 fde->dw_fde_second_begin
17848 ? fde->dw_fde_second_end : fde->dw_fde_end,
17849 section);
17850
17851 if (list && list->dw_loc_next)
17852 gen_llsym (list);
17853
17854 return list;
17855 }
17856
17857 /* Compute a displacement from the "steady-state frame pointer" to the
17858 frame base (often the same as the CFA), and store it in
17859 frame_pointer_fb_offset. OFFSET is added to the displacement
17860 before the latter is negated. */
17861
17862 static void
17863 compute_frame_pointer_to_fb_displacement (HOST_WIDE_INT offset)
17864 {
17865 rtx reg, elim;
17866
17867 #ifdef FRAME_POINTER_CFA_OFFSET
17868 reg = frame_pointer_rtx;
17869 offset += FRAME_POINTER_CFA_OFFSET (current_function_decl);
17870 #else
17871 reg = arg_pointer_rtx;
17872 offset += ARG_POINTER_CFA_OFFSET (current_function_decl);
17873 #endif
17874
17875 elim = (ira_use_lra_p
17876 ? lra_eliminate_regs (reg, VOIDmode, NULL_RTX)
17877 : eliminate_regs (reg, VOIDmode, NULL_RTX));
17878 if (GET_CODE (elim) == PLUS)
17879 {
17880 offset += INTVAL (XEXP (elim, 1));
17881 elim = XEXP (elim, 0);
17882 }
17883
17884 frame_pointer_fb_offset = -offset;
17885
17886 /* ??? AVR doesn't set up valid eliminations when there is no stack frame
17887 in which to eliminate. This is because it's stack pointer isn't
17888 directly accessible as a register within the ISA. To work around
17889 this, assume that while we cannot provide a proper value for
17890 frame_pointer_fb_offset, we won't need one either. */
17891 frame_pointer_fb_offset_valid
17892 = ((SUPPORTS_STACK_ALIGNMENT
17893 && (elim == hard_frame_pointer_rtx
17894 || elim == stack_pointer_rtx))
17895 || elim == (frame_pointer_needed
17896 ? hard_frame_pointer_rtx
17897 : stack_pointer_rtx));
17898 }
17899
17900 /* Generate a DW_AT_name attribute given some string value to be included as
17901 the value of the attribute. */
17902
17903 static void
17904 add_name_attribute (dw_die_ref die, const char *name_string)
17905 {
17906 if (name_string != NULL && *name_string != 0)
17907 {
17908 if (demangle_name_func)
17909 name_string = (*demangle_name_func) (name_string);
17910
17911 add_AT_string (die, DW_AT_name, name_string);
17912 }
17913 }
17914
17915 /* Retrieve the descriptive type of TYPE, if any, make sure it has a
17916 DIE and attach a DW_AT_GNAT_descriptive_type attribute to the DIE
17917 of TYPE accordingly.
17918
17919 ??? This is a temporary measure until after we're able to generate
17920 regular DWARF for the complex Ada type system. */
17921
17922 static void
17923 add_gnat_descriptive_type_attribute (dw_die_ref die, tree type,
17924 dw_die_ref context_die)
17925 {
17926 tree dtype;
17927 dw_die_ref dtype_die;
17928
17929 if (!lang_hooks.types.descriptive_type)
17930 return;
17931
17932 dtype = lang_hooks.types.descriptive_type (type);
17933 if (!dtype)
17934 return;
17935
17936 dtype_die = lookup_type_die (dtype);
17937 if (!dtype_die)
17938 {
17939 gen_type_die (dtype, context_die);
17940 dtype_die = lookup_type_die (dtype);
17941 gcc_assert (dtype_die);
17942 }
17943
17944 add_AT_die_ref (die, DW_AT_GNAT_descriptive_type, dtype_die);
17945 }
17946
17947 /* Retrieve the comp_dir string suitable for use with DW_AT_comp_dir. */
17948
17949 static const char *
17950 comp_dir_string (void)
17951 {
17952 const char *wd;
17953 char *wd1;
17954 static const char *cached_wd = NULL;
17955
17956 if (cached_wd != NULL)
17957 return cached_wd;
17958
17959 wd = get_src_pwd ();
17960 if (wd == NULL)
17961 return NULL;
17962
17963 if (DWARF2_DIR_SHOULD_END_WITH_SEPARATOR)
17964 {
17965 int wdlen;
17966
17967 wdlen = strlen (wd);
17968 wd1 = ggc_vec_alloc<char> (wdlen + 2);
17969 strcpy (wd1, wd);
17970 wd1 [wdlen] = DIR_SEPARATOR;
17971 wd1 [wdlen + 1] = 0;
17972 wd = wd1;
17973 }
17974
17975 cached_wd = remap_debug_filename (wd);
17976 return cached_wd;
17977 }
17978
17979 /* Generate a DW_AT_comp_dir attribute for DIE. */
17980
17981 static void
17982 add_comp_dir_attribute (dw_die_ref die)
17983 {
17984 const char * wd = comp_dir_string ();
17985 if (wd != NULL)
17986 add_AT_string (die, DW_AT_comp_dir, wd);
17987 }
17988
17989 /* Given a tree node VALUE describing a scalar attribute ATTR (i.e. a bound, a
17990 pointer computation, ...), output a representation for that bound according
17991 to the accepted FORMS (see enum dw_scalar_form) and add it to DIE. See
17992 loc_list_from_tree for the meaning of CONTEXT. */
17993
17994 static void
17995 add_scalar_info (dw_die_ref die, enum dwarf_attribute attr, tree value,
17996 int forms, const struct loc_descr_context *context)
17997 {
17998 dw_die_ref ctx, decl_die;
17999 dw_loc_list_ref list;
18000
18001 bool strip_conversions = true;
18002
18003 while (strip_conversions)
18004 switch (TREE_CODE (value))
18005 {
18006 case ERROR_MARK:
18007 case SAVE_EXPR:
18008 return;
18009
18010 CASE_CONVERT:
18011 case VIEW_CONVERT_EXPR:
18012 value = TREE_OPERAND (value, 0);
18013 break;
18014
18015 default:
18016 strip_conversions = false;
18017 break;
18018 }
18019
18020 /* If possible and permitted, output the attribute as a constant. */
18021 if ((forms & dw_scalar_form_constant) != 0
18022 && TREE_CODE (value) == INTEGER_CST)
18023 {
18024 unsigned int prec = simple_type_size_in_bits (TREE_TYPE (value));
18025
18026 /* If HOST_WIDE_INT is big enough then represent the bound as
18027 a constant value. We need to choose a form based on
18028 whether the type is signed or unsigned. We cannot just
18029 call add_AT_unsigned if the value itself is positive
18030 (add_AT_unsigned might add the unsigned value encoded as
18031 DW_FORM_data[1248]). Some DWARF consumers will lookup the
18032 bounds type and then sign extend any unsigned values found
18033 for signed types. This is needed only for
18034 DW_AT_{lower,upper}_bound, since for most other attributes,
18035 consumers will treat DW_FORM_data[1248] as unsigned values,
18036 regardless of the underlying type. */
18037 if (prec <= HOST_BITS_PER_WIDE_INT
18038 || tree_fits_uhwi_p (value))
18039 {
18040 if (TYPE_UNSIGNED (TREE_TYPE (value)))
18041 add_AT_unsigned (die, attr, TREE_INT_CST_LOW (value));
18042 else
18043 add_AT_int (die, attr, TREE_INT_CST_LOW (value));
18044 }
18045 else
18046 /* Otherwise represent the bound as an unsigned value with
18047 the precision of its type. The precision and signedness
18048 of the type will be necessary to re-interpret it
18049 unambiguously. */
18050 add_AT_wide (die, attr, value);
18051 return;
18052 }
18053
18054 /* Otherwise, if it's possible and permitted too, output a reference to
18055 another DIE. */
18056 if ((forms & dw_scalar_form_reference) != 0)
18057 {
18058 tree decl = NULL_TREE;
18059
18060 /* Some type attributes reference an outer type. For instance, the upper
18061 bound of an array may reference an embedding record (this happens in
18062 Ada). */
18063 if (TREE_CODE (value) == COMPONENT_REF
18064 && TREE_CODE (TREE_OPERAND (value, 0)) == PLACEHOLDER_EXPR
18065 && TREE_CODE (TREE_OPERAND (value, 1)) == FIELD_DECL)
18066 decl = TREE_OPERAND (value, 1);
18067
18068 else if (TREE_CODE (value) == VAR_DECL
18069 || TREE_CODE (value) == PARM_DECL
18070 || TREE_CODE (value) == RESULT_DECL)
18071 decl = value;
18072
18073 if (decl != NULL_TREE)
18074 {
18075 dw_die_ref decl_die = lookup_decl_die (decl);
18076
18077 /* ??? Can this happen, or should the variable have been bound
18078 first? Probably it can, since I imagine that we try to create
18079 the types of parameters in the order in which they exist in
18080 the list, and won't have created a forward reference to a
18081 later parameter. */
18082 if (decl_die != NULL)
18083 {
18084 add_AT_die_ref (die, attr, decl_die);
18085 return;
18086 }
18087 }
18088 }
18089
18090 /* Last chance: try to create a stack operation procedure to evaluate the
18091 value. Do nothing if even that is not possible or permitted. */
18092 if ((forms & dw_scalar_form_exprloc) == 0)
18093 return;
18094
18095 list = loc_list_from_tree (value, 2, context);
18096 if (list == NULL || single_element_loc_list_p (list))
18097 {
18098 /* If this attribute is not a reference nor constant, it is
18099 a DWARF expression rather than location description. For that
18100 loc_list_from_tree (value, 0, &context) is needed. */
18101 dw_loc_list_ref list2 = loc_list_from_tree (value, 0, context);
18102 if (list2 && single_element_loc_list_p (list2))
18103 {
18104 add_AT_loc (die, attr, list2->expr);
18105 return;
18106 }
18107 }
18108
18109 /* If that failed to give a single element location list, fall back to
18110 outputting this as a reference... still if permitted. */
18111 if (list == NULL || (forms & dw_scalar_form_reference) == 0)
18112 return;
18113
18114 if (current_function_decl == 0)
18115 ctx = comp_unit_die ();
18116 else
18117 ctx = lookup_decl_die (current_function_decl);
18118
18119 decl_die = new_die (DW_TAG_variable, ctx, value);
18120 add_AT_flag (decl_die, DW_AT_artificial, 1);
18121 add_type_attribute (decl_die, TREE_TYPE (value), TYPE_QUAL_CONST, ctx);
18122 add_AT_location_description (decl_die, DW_AT_location, list);
18123 add_AT_die_ref (die, attr, decl_die);
18124 }
18125
18126 /* Return the default for DW_AT_lower_bound, or -1 if there is not any
18127 default. */
18128
18129 static int
18130 lower_bound_default (void)
18131 {
18132 switch (get_AT_unsigned (comp_unit_die (), DW_AT_language))
18133 {
18134 case DW_LANG_C:
18135 case DW_LANG_C89:
18136 case DW_LANG_C99:
18137 case DW_LANG_C11:
18138 case DW_LANG_C_plus_plus:
18139 case DW_LANG_C_plus_plus_11:
18140 case DW_LANG_C_plus_plus_14:
18141 case DW_LANG_ObjC:
18142 case DW_LANG_ObjC_plus_plus:
18143 case DW_LANG_Java:
18144 return 0;
18145 case DW_LANG_Fortran77:
18146 case DW_LANG_Fortran90:
18147 case DW_LANG_Fortran95:
18148 case DW_LANG_Fortran03:
18149 case DW_LANG_Fortran08:
18150 return 1;
18151 case DW_LANG_UPC:
18152 case DW_LANG_D:
18153 case DW_LANG_Python:
18154 return dwarf_version >= 4 ? 0 : -1;
18155 case DW_LANG_Ada95:
18156 case DW_LANG_Ada83:
18157 case DW_LANG_Cobol74:
18158 case DW_LANG_Cobol85:
18159 case DW_LANG_Pascal83:
18160 case DW_LANG_Modula2:
18161 case DW_LANG_PLI:
18162 return dwarf_version >= 4 ? 1 : -1;
18163 default:
18164 return -1;
18165 }
18166 }
18167
18168 /* Given a tree node describing an array bound (either lower or upper) output
18169 a representation for that bound. */
18170
18171 static void
18172 add_bound_info (dw_die_ref subrange_die, enum dwarf_attribute bound_attr,
18173 tree bound, const struct loc_descr_context *context)
18174 {
18175 int dflt;
18176
18177 while (1)
18178 switch (TREE_CODE (bound))
18179 {
18180 /* Strip all conversions. */
18181 CASE_CONVERT:
18182 case VIEW_CONVERT_EXPR:
18183 bound = TREE_OPERAND (bound, 0);
18184 break;
18185
18186 /* All fixed-bounds are represented by INTEGER_CST nodes. Lower bounds
18187 are even omitted when they are the default. */
18188 case INTEGER_CST:
18189 /* If the value for this bound is the default one, we can even omit the
18190 attribute. */
18191 if (bound_attr == DW_AT_lower_bound
18192 && tree_fits_shwi_p (bound)
18193 && (dflt = lower_bound_default ()) != -1
18194 && tree_to_shwi (bound) == dflt)
18195 return;
18196
18197 /* FALLTHRU */
18198
18199 default:
18200 /* Because of the complex interaction there can be with other GNAT
18201 encodings, GDB isn't ready yet to handle proper DWARF description
18202 for self-referencial subrange bounds: let GNAT encodings do the
18203 magic in such a case. */
18204 if (gnat_encodings != DWARF_GNAT_ENCODINGS_MINIMAL
18205 && contains_placeholder_p (bound))
18206 return;
18207
18208 add_scalar_info (subrange_die, bound_attr, bound,
18209 dw_scalar_form_constant
18210 | dw_scalar_form_exprloc
18211 | dw_scalar_form_reference,
18212 context);
18213 return;
18214 }
18215 }
18216
18217 /* Add subscript info to TYPE_DIE, describing an array TYPE, collapsing
18218 possibly nested array subscripts in a flat sequence if COLLAPSE_P is true.
18219 Note that the block of subscript information for an array type also
18220 includes information about the element type of the given array type.
18221
18222 This function reuses previously set type and bound information if
18223 available. */
18224
18225 static void
18226 add_subscript_info (dw_die_ref type_die, tree type, bool collapse_p)
18227 {
18228 unsigned dimension_number;
18229 tree lower, upper;
18230 dw_die_ref child = type_die->die_child;
18231
18232 for (dimension_number = 0;
18233 TREE_CODE (type) == ARRAY_TYPE && (dimension_number == 0 || collapse_p);
18234 type = TREE_TYPE (type), dimension_number++)
18235 {
18236 tree domain = TYPE_DOMAIN (type);
18237
18238 if (TYPE_STRING_FLAG (type) && is_fortran () && dimension_number > 0)
18239 break;
18240
18241 /* Arrays come in three flavors: Unspecified bounds, fixed bounds,
18242 and (in GNU C only) variable bounds. Handle all three forms
18243 here. */
18244
18245 /* Find and reuse a previously generated DW_TAG_subrange_type if
18246 available.
18247
18248 For multi-dimensional arrays, as we iterate through the
18249 various dimensions in the enclosing for loop above, we also
18250 iterate through the DIE children and pick at each
18251 DW_TAG_subrange_type previously generated (if available).
18252 Each child DW_TAG_subrange_type DIE describes the range of
18253 the current dimension. At this point we should have as many
18254 DW_TAG_subrange_type's as we have dimensions in the
18255 array. */
18256 dw_die_ref subrange_die = NULL;
18257 if (child)
18258 while (1)
18259 {
18260 child = child->die_sib;
18261 if (child->die_tag == DW_TAG_subrange_type)
18262 subrange_die = child;
18263 if (child == type_die->die_child)
18264 {
18265 /* If we wrapped around, stop looking next time. */
18266 child = NULL;
18267 break;
18268 }
18269 if (child->die_tag == DW_TAG_subrange_type)
18270 break;
18271 }
18272 if (!subrange_die)
18273 subrange_die = new_die (DW_TAG_subrange_type, type_die, NULL);
18274
18275 if (domain)
18276 {
18277 /* We have an array type with specified bounds. */
18278 lower = TYPE_MIN_VALUE (domain);
18279 upper = TYPE_MAX_VALUE (domain);
18280
18281 /* Define the index type. */
18282 if (TREE_TYPE (domain)
18283 && !get_AT (subrange_die, DW_AT_type))
18284 {
18285 /* ??? This is probably an Ada unnamed subrange type. Ignore the
18286 TREE_TYPE field. We can't emit debug info for this
18287 because it is an unnamed integral type. */
18288 if (TREE_CODE (domain) == INTEGER_TYPE
18289 && TYPE_NAME (domain) == NULL_TREE
18290 && TREE_CODE (TREE_TYPE (domain)) == INTEGER_TYPE
18291 && TYPE_NAME (TREE_TYPE (domain)) == NULL_TREE)
18292 ;
18293 else
18294 add_type_attribute (subrange_die, TREE_TYPE (domain),
18295 TYPE_UNQUALIFIED, type_die);
18296 }
18297
18298 /* ??? If upper is NULL, the array has unspecified length,
18299 but it does have a lower bound. This happens with Fortran
18300 dimension arr(N:*)
18301 Since the debugger is definitely going to need to know N
18302 to produce useful results, go ahead and output the lower
18303 bound solo, and hope the debugger can cope. */
18304
18305 if (!get_AT (subrange_die, DW_AT_lower_bound))
18306 add_bound_info (subrange_die, DW_AT_lower_bound, lower, NULL);
18307 if (upper && !get_AT (subrange_die, DW_AT_upper_bound))
18308 add_bound_info (subrange_die, DW_AT_upper_bound, upper, NULL);
18309 }
18310
18311 /* Otherwise we have an array type with an unspecified length. The
18312 DWARF-2 spec does not say how to handle this; let's just leave out the
18313 bounds. */
18314 }
18315 }
18316
18317 /* Add a DW_AT_byte_size attribute to DIE with TREE_NODE's size. */
18318
18319 static void
18320 add_byte_size_attribute (dw_die_ref die, tree tree_node)
18321 {
18322 dw_die_ref decl_die;
18323 HOST_WIDE_INT size;
18324 dw_loc_descr_ref size_expr = NULL;
18325
18326 switch (TREE_CODE (tree_node))
18327 {
18328 case ERROR_MARK:
18329 size = 0;
18330 break;
18331 case ENUMERAL_TYPE:
18332 case RECORD_TYPE:
18333 case UNION_TYPE:
18334 case QUAL_UNION_TYPE:
18335 if (TREE_CODE (TYPE_SIZE_UNIT (tree_node)) == VAR_DECL
18336 && (decl_die = lookup_decl_die (TYPE_SIZE_UNIT (tree_node))))
18337 {
18338 add_AT_die_ref (die, DW_AT_byte_size, decl_die);
18339 return;
18340 }
18341 size_expr = type_byte_size (tree_node, &size);
18342 break;
18343 case FIELD_DECL:
18344 /* For a data member of a struct or union, the DW_AT_byte_size is
18345 generally given as the number of bytes normally allocated for an
18346 object of the *declared* type of the member itself. This is true
18347 even for bit-fields. */
18348 size = int_size_in_bytes (field_type (tree_node));
18349 break;
18350 default:
18351 gcc_unreachable ();
18352 }
18353
18354 /* Support for dynamically-sized objects was introduced by DWARFv3.
18355 At the moment, GDB does not handle variable byte sizes very well,
18356 though. */
18357 if ((dwarf_version >= 3 || !dwarf_strict)
18358 && gnat_encodings == DWARF_GNAT_ENCODINGS_MINIMAL
18359 && size_expr != NULL)
18360 add_AT_loc (die, DW_AT_byte_size, size_expr);
18361
18362 /* Note that `size' might be -1 when we get to this point. If it is, that
18363 indicates that the byte size of the entity in question is variable and
18364 that we could not generate a DWARF expression that computes it. */
18365 if (size >= 0)
18366 add_AT_unsigned (die, DW_AT_byte_size, size);
18367 }
18368
18369 /* For a FIELD_DECL node which represents a bit-field, output an attribute
18370 which specifies the distance in bits from the highest order bit of the
18371 "containing object" for the bit-field to the highest order bit of the
18372 bit-field itself.
18373
18374 For any given bit-field, the "containing object" is a hypothetical object
18375 (of some integral or enum type) within which the given bit-field lives. The
18376 type of this hypothetical "containing object" is always the same as the
18377 declared type of the individual bit-field itself. The determination of the
18378 exact location of the "containing object" for a bit-field is rather
18379 complicated. It's handled by the `field_byte_offset' function (above).
18380
18381 CTX is required: see the comment for VLR_CONTEXT.
18382
18383 Note that it is the size (in bytes) of the hypothetical "containing object"
18384 which will be given in the DW_AT_byte_size attribute for this bit-field.
18385 (See `byte_size_attribute' above). */
18386
18387 static inline void
18388 add_bit_offset_attribute (dw_die_ref die, tree decl, struct vlr_context *ctx)
18389 {
18390 HOST_WIDE_INT object_offset_in_bytes;
18391 tree original_type = DECL_BIT_FIELD_TYPE (decl);
18392 HOST_WIDE_INT bitpos_int;
18393 HOST_WIDE_INT highest_order_object_bit_offset;
18394 HOST_WIDE_INT highest_order_field_bit_offset;
18395 HOST_WIDE_INT bit_offset;
18396
18397 field_byte_offset (decl, ctx, &object_offset_in_bytes);
18398
18399 /* Must be a field and a bit field. */
18400 gcc_assert (original_type && TREE_CODE (decl) == FIELD_DECL);
18401
18402 /* We can't yet handle bit-fields whose offsets are variable, so if we
18403 encounter such things, just return without generating any attribute
18404 whatsoever. Likewise for variable or too large size. */
18405 if (! tree_fits_shwi_p (bit_position (decl))
18406 || ! tree_fits_uhwi_p (DECL_SIZE (decl)))
18407 return;
18408
18409 bitpos_int = int_bit_position (decl);
18410
18411 /* Note that the bit offset is always the distance (in bits) from the
18412 highest-order bit of the "containing object" to the highest-order bit of
18413 the bit-field itself. Since the "high-order end" of any object or field
18414 is different on big-endian and little-endian machines, the computation
18415 below must take account of these differences. */
18416 highest_order_object_bit_offset = object_offset_in_bytes * BITS_PER_UNIT;
18417 highest_order_field_bit_offset = bitpos_int;
18418
18419 if (! BYTES_BIG_ENDIAN)
18420 {
18421 highest_order_field_bit_offset += tree_to_shwi (DECL_SIZE (decl));
18422 highest_order_object_bit_offset +=
18423 simple_type_size_in_bits (original_type);
18424 }
18425
18426 bit_offset
18427 = (! BYTES_BIG_ENDIAN
18428 ? highest_order_object_bit_offset - highest_order_field_bit_offset
18429 : highest_order_field_bit_offset - highest_order_object_bit_offset);
18430
18431 if (bit_offset < 0)
18432 add_AT_int (die, DW_AT_bit_offset, bit_offset);
18433 else
18434 add_AT_unsigned (die, DW_AT_bit_offset, (unsigned HOST_WIDE_INT) bit_offset);
18435 }
18436
18437 /* For a FIELD_DECL node which represents a bit field, output an attribute
18438 which specifies the length in bits of the given field. */
18439
18440 static inline void
18441 add_bit_size_attribute (dw_die_ref die, tree decl)
18442 {
18443 /* Must be a field and a bit field. */
18444 gcc_assert (TREE_CODE (decl) == FIELD_DECL
18445 && DECL_BIT_FIELD_TYPE (decl));
18446
18447 if (tree_fits_uhwi_p (DECL_SIZE (decl)))
18448 add_AT_unsigned (die, DW_AT_bit_size, tree_to_uhwi (DECL_SIZE (decl)));
18449 }
18450
18451 /* If the compiled language is ANSI C, then add a 'prototyped'
18452 attribute, if arg types are given for the parameters of a function. */
18453
18454 static inline void
18455 add_prototyped_attribute (dw_die_ref die, tree func_type)
18456 {
18457 switch (get_AT_unsigned (comp_unit_die (), DW_AT_language))
18458 {
18459 case DW_LANG_C:
18460 case DW_LANG_C89:
18461 case DW_LANG_C99:
18462 case DW_LANG_C11:
18463 case DW_LANG_ObjC:
18464 if (prototype_p (func_type))
18465 add_AT_flag (die, DW_AT_prototyped, 1);
18466 break;
18467 default:
18468 break;
18469 }
18470 }
18471
18472 /* Add an 'abstract_origin' attribute below a given DIE. The DIE is found
18473 by looking in either the type declaration or object declaration
18474 equate table. */
18475
18476 static inline dw_die_ref
18477 add_abstract_origin_attribute (dw_die_ref die, tree origin)
18478 {
18479 dw_die_ref origin_die = NULL;
18480
18481 if (TREE_CODE (origin) != FUNCTION_DECL)
18482 {
18483 /* We may have gotten separated from the block for the inlined
18484 function, if we're in an exception handler or some such; make
18485 sure that the abstract function has been written out.
18486
18487 Doing this for nested functions is wrong, however; functions are
18488 distinct units, and our context might not even be inline. */
18489 tree fn = origin;
18490
18491 if (TYPE_P (fn))
18492 fn = TYPE_STUB_DECL (fn);
18493
18494 fn = decl_function_context (fn);
18495 if (fn)
18496 dwarf2out_abstract_function (fn);
18497 }
18498
18499 if (DECL_P (origin))
18500 origin_die = lookup_decl_die (origin);
18501 else if (TYPE_P (origin))
18502 origin_die = lookup_type_die (origin);
18503
18504 /* XXX: Functions that are never lowered don't always have correct block
18505 trees (in the case of java, they simply have no block tree, in some other
18506 languages). For these functions, there is nothing we can really do to
18507 output correct debug info for inlined functions in all cases. Rather
18508 than die, we'll just produce deficient debug info now, in that we will
18509 have variables without a proper abstract origin. In the future, when all
18510 functions are lowered, we should re-add a gcc_assert (origin_die)
18511 here. */
18512
18513 if (origin_die)
18514 add_AT_die_ref (die, DW_AT_abstract_origin, origin_die);
18515 return origin_die;
18516 }
18517
18518 /* We do not currently support the pure_virtual attribute. */
18519
18520 static inline void
18521 add_pure_or_virtual_attribute (dw_die_ref die, tree func_decl)
18522 {
18523 if (DECL_VINDEX (func_decl))
18524 {
18525 add_AT_unsigned (die, DW_AT_virtuality, DW_VIRTUALITY_virtual);
18526
18527 if (tree_fits_shwi_p (DECL_VINDEX (func_decl)))
18528 add_AT_loc (die, DW_AT_vtable_elem_location,
18529 new_loc_descr (DW_OP_constu,
18530 tree_to_shwi (DECL_VINDEX (func_decl)),
18531 0));
18532
18533 /* GNU extension: Record what type this method came from originally. */
18534 if (debug_info_level > DINFO_LEVEL_TERSE
18535 && DECL_CONTEXT (func_decl))
18536 add_AT_die_ref (die, DW_AT_containing_type,
18537 lookup_type_die (DECL_CONTEXT (func_decl)));
18538 }
18539 }
18540 \f
18541 /* Add a DW_AT_linkage_name or DW_AT_MIPS_linkage_name attribute for the
18542 given decl. This used to be a vendor extension until after DWARF 4
18543 standardized it. */
18544
18545 static void
18546 add_linkage_attr (dw_die_ref die, tree decl)
18547 {
18548 const char *name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
18549
18550 /* Mimic what assemble_name_raw does with a leading '*'. */
18551 if (name[0] == '*')
18552 name = &name[1];
18553
18554 if (dwarf_version >= 4)
18555 add_AT_string (die, DW_AT_linkage_name, name);
18556 else
18557 add_AT_string (die, DW_AT_MIPS_linkage_name, name);
18558 }
18559
18560 /* Add source coordinate attributes for the given decl. */
18561
18562 static void
18563 add_src_coords_attributes (dw_die_ref die, tree decl)
18564 {
18565 expanded_location s;
18566
18567 if (LOCATION_LOCUS (DECL_SOURCE_LOCATION (decl)) == UNKNOWN_LOCATION)
18568 return;
18569 s = expand_location (DECL_SOURCE_LOCATION (decl));
18570 add_AT_file (die, DW_AT_decl_file, lookup_filename (s.file));
18571 add_AT_unsigned (die, DW_AT_decl_line, s.line);
18572 }
18573
18574 /* Add DW_AT_{,MIPS_}linkage_name attribute for the given decl. */
18575
18576 static void
18577 add_linkage_name (dw_die_ref die, tree decl)
18578 {
18579 if (debug_info_level > DINFO_LEVEL_NONE
18580 && (TREE_CODE (decl) == FUNCTION_DECL || TREE_CODE (decl) == VAR_DECL)
18581 && TREE_PUBLIC (decl)
18582 && !(TREE_CODE (decl) == VAR_DECL && DECL_REGISTER (decl))
18583 && die->die_tag != DW_TAG_member)
18584 {
18585 /* Defer until we have an assembler name set. */
18586 if (!DECL_ASSEMBLER_NAME_SET_P (decl))
18587 {
18588 limbo_die_node *asm_name;
18589
18590 asm_name = ggc_cleared_alloc<limbo_die_node> ();
18591 asm_name->die = die;
18592 asm_name->created_for = decl;
18593 asm_name->next = deferred_asm_name;
18594 deferred_asm_name = asm_name;
18595 }
18596 else if (DECL_ASSEMBLER_NAME (decl) != DECL_NAME (decl))
18597 add_linkage_attr (die, decl);
18598 }
18599 }
18600
18601 /* Add a DW_AT_name attribute and source coordinate attribute for the
18602 given decl, but only if it actually has a name. */
18603
18604 static void
18605 add_name_and_src_coords_attributes (dw_die_ref die, tree decl)
18606 {
18607 tree decl_name;
18608
18609 decl_name = DECL_NAME (decl);
18610 if (decl_name != NULL && IDENTIFIER_POINTER (decl_name) != NULL)
18611 {
18612 const char *name = dwarf2_name (decl, 0);
18613 if (name)
18614 add_name_attribute (die, name);
18615 if (! DECL_ARTIFICIAL (decl))
18616 add_src_coords_attributes (die, decl);
18617
18618 add_linkage_name (die, decl);
18619 }
18620
18621 #ifdef VMS_DEBUGGING_INFO
18622 /* Get the function's name, as described by its RTL. This may be different
18623 from the DECL_NAME name used in the source file. */
18624 if (TREE_CODE (decl) == FUNCTION_DECL && TREE_ASM_WRITTEN (decl))
18625 {
18626 add_AT_addr (die, DW_AT_VMS_rtnbeg_pd_address,
18627 XEXP (DECL_RTL (decl), 0), false);
18628 vec_safe_push (used_rtx_array, XEXP (DECL_RTL (decl), 0));
18629 }
18630 #endif /* VMS_DEBUGGING_INFO */
18631 }
18632
18633 /* Add VALUE as a DW_AT_discr_value attribute to DIE. */
18634
18635 static void
18636 add_discr_value (dw_die_ref die, dw_discr_value *value)
18637 {
18638 dw_attr_node attr;
18639
18640 attr.dw_attr = DW_AT_discr_value;
18641 attr.dw_attr_val.val_class = dw_val_class_discr_value;
18642 attr.dw_attr_val.val_entry = NULL;
18643 attr.dw_attr_val.v.val_discr_value.pos = value->pos;
18644 if (value->pos)
18645 attr.dw_attr_val.v.val_discr_value.v.uval = value->v.uval;
18646 else
18647 attr.dw_attr_val.v.val_discr_value.v.sval = value->v.sval;
18648 add_dwarf_attr (die, &attr);
18649 }
18650
18651 /* Add DISCR_LIST as a DW_AT_discr_list to DIE. */
18652
18653 static void
18654 add_discr_list (dw_die_ref die, dw_discr_list_ref discr_list)
18655 {
18656 dw_attr_node attr;
18657
18658 attr.dw_attr = DW_AT_discr_list;
18659 attr.dw_attr_val.val_class = dw_val_class_discr_list;
18660 attr.dw_attr_val.val_entry = NULL;
18661 attr.dw_attr_val.v.val_discr_list = discr_list;
18662 add_dwarf_attr (die, &attr);
18663 }
18664
18665 static inline dw_discr_list_ref
18666 AT_discr_list (dw_attr_node *attr)
18667 {
18668 return attr->dw_attr_val.v.val_discr_list;
18669 }
18670
18671 #ifdef VMS_DEBUGGING_INFO
18672 /* Output the debug main pointer die for VMS */
18673
18674 void
18675 dwarf2out_vms_debug_main_pointer (void)
18676 {
18677 char label[MAX_ARTIFICIAL_LABEL_BYTES];
18678 dw_die_ref die;
18679
18680 /* Allocate the VMS debug main subprogram die. */
18681 die = ggc_cleared_alloc<die_node> ();
18682 die->die_tag = DW_TAG_subprogram;
18683 add_name_attribute (die, VMS_DEBUG_MAIN_POINTER);
18684 ASM_GENERATE_INTERNAL_LABEL (label, PROLOGUE_END_LABEL,
18685 current_function_funcdef_no);
18686 add_AT_lbl_id (die, DW_AT_entry_pc, label);
18687
18688 /* Make it the first child of comp_unit_die (). */
18689 die->die_parent = comp_unit_die ();
18690 if (comp_unit_die ()->die_child)
18691 {
18692 die->die_sib = comp_unit_die ()->die_child->die_sib;
18693 comp_unit_die ()->die_child->die_sib = die;
18694 }
18695 else
18696 {
18697 die->die_sib = die;
18698 comp_unit_die ()->die_child = die;
18699 }
18700 }
18701 #endif /* VMS_DEBUGGING_INFO */
18702
18703 /* Push a new declaration scope. */
18704
18705 static void
18706 push_decl_scope (tree scope)
18707 {
18708 vec_safe_push (decl_scope_table, scope);
18709 }
18710
18711 /* Pop a declaration scope. */
18712
18713 static inline void
18714 pop_decl_scope (void)
18715 {
18716 decl_scope_table->pop ();
18717 }
18718
18719 /* walk_tree helper function for uses_local_type, below. */
18720
18721 static tree
18722 uses_local_type_r (tree *tp, int *walk_subtrees, void *data ATTRIBUTE_UNUSED)
18723 {
18724 if (!TYPE_P (*tp))
18725 *walk_subtrees = 0;
18726 else
18727 {
18728 tree name = TYPE_NAME (*tp);
18729 if (name && DECL_P (name) && decl_function_context (name))
18730 return *tp;
18731 }
18732 return NULL_TREE;
18733 }
18734
18735 /* If TYPE involves a function-local type (including a local typedef to a
18736 non-local type), returns that type; otherwise returns NULL_TREE. */
18737
18738 static tree
18739 uses_local_type (tree type)
18740 {
18741 tree used = walk_tree_without_duplicates (&type, uses_local_type_r, NULL);
18742 return used;
18743 }
18744
18745 /* Return the DIE for the scope that immediately contains this type.
18746 Non-named types that do not involve a function-local type get global
18747 scope. Named types nested in namespaces or other types get their
18748 containing scope. All other types (i.e. function-local named types) get
18749 the current active scope. */
18750
18751 static dw_die_ref
18752 scope_die_for (tree t, dw_die_ref context_die)
18753 {
18754 dw_die_ref scope_die = NULL;
18755 tree containing_scope;
18756
18757 /* Non-types always go in the current scope. */
18758 gcc_assert (TYPE_P (t));
18759
18760 /* Use the scope of the typedef, rather than the scope of the type
18761 it refers to. */
18762 if (TYPE_NAME (t) && DECL_P (TYPE_NAME (t)))
18763 containing_scope = DECL_CONTEXT (TYPE_NAME (t));
18764 else
18765 containing_scope = TYPE_CONTEXT (t);
18766
18767 /* Use the containing namespace if there is one. */
18768 if (containing_scope && TREE_CODE (containing_scope) == NAMESPACE_DECL)
18769 {
18770 if (context_die == lookup_decl_die (containing_scope))
18771 /* OK */;
18772 else if (debug_info_level > DINFO_LEVEL_TERSE)
18773 context_die = get_context_die (containing_scope);
18774 else
18775 containing_scope = NULL_TREE;
18776 }
18777
18778 /* Ignore function type "scopes" from the C frontend. They mean that
18779 a tagged type is local to a parmlist of a function declarator, but
18780 that isn't useful to DWARF. */
18781 if (containing_scope && TREE_CODE (containing_scope) == FUNCTION_TYPE)
18782 containing_scope = NULL_TREE;
18783
18784 if (SCOPE_FILE_SCOPE_P (containing_scope))
18785 {
18786 /* If T uses a local type keep it local as well, to avoid references
18787 to function-local DIEs from outside the function. */
18788 if (current_function_decl && uses_local_type (t))
18789 scope_die = context_die;
18790 else
18791 scope_die = comp_unit_die ();
18792 }
18793 else if (TYPE_P (containing_scope))
18794 {
18795 /* For types, we can just look up the appropriate DIE. */
18796 if (debug_info_level > DINFO_LEVEL_TERSE)
18797 scope_die = get_context_die (containing_scope);
18798 else
18799 {
18800 scope_die = lookup_type_die_strip_naming_typedef (containing_scope);
18801 if (scope_die == NULL)
18802 scope_die = comp_unit_die ();
18803 }
18804 }
18805 else
18806 scope_die = context_die;
18807
18808 return scope_die;
18809 }
18810
18811 /* Returns nonzero if CONTEXT_DIE is internal to a function. */
18812
18813 static inline int
18814 local_scope_p (dw_die_ref context_die)
18815 {
18816 for (; context_die; context_die = context_die->die_parent)
18817 if (context_die->die_tag == DW_TAG_inlined_subroutine
18818 || context_die->die_tag == DW_TAG_subprogram)
18819 return 1;
18820
18821 return 0;
18822 }
18823
18824 /* Returns nonzero if CONTEXT_DIE is a class. */
18825
18826 static inline int
18827 class_scope_p (dw_die_ref context_die)
18828 {
18829 return (context_die
18830 && (context_die->die_tag == DW_TAG_structure_type
18831 || context_die->die_tag == DW_TAG_class_type
18832 || context_die->die_tag == DW_TAG_interface_type
18833 || context_die->die_tag == DW_TAG_union_type));
18834 }
18835
18836 /* Returns nonzero if CONTEXT_DIE is a class or namespace, for deciding
18837 whether or not to treat a DIE in this context as a declaration. */
18838
18839 static inline int
18840 class_or_namespace_scope_p (dw_die_ref context_die)
18841 {
18842 return (class_scope_p (context_die)
18843 || (context_die && context_die->die_tag == DW_TAG_namespace));
18844 }
18845
18846 /* Many forms of DIEs require a "type description" attribute. This
18847 routine locates the proper "type descriptor" die for the type given
18848 by 'type' plus any additional qualifiers given by 'cv_quals', and
18849 adds a DW_AT_type attribute below the given die. */
18850
18851 static void
18852 add_type_attribute (dw_die_ref object_die, tree type, int cv_quals,
18853 dw_die_ref context_die)
18854 {
18855 enum tree_code code = TREE_CODE (type);
18856 dw_die_ref type_die = NULL;
18857
18858 /* ??? If this type is an unnamed subrange type of an integral, floating-point
18859 or fixed-point type, use the inner type. This is because we have no
18860 support for unnamed types in base_type_die. This can happen if this is
18861 an Ada subrange type. Correct solution is emit a subrange type die. */
18862 if ((code == INTEGER_TYPE || code == REAL_TYPE || code == FIXED_POINT_TYPE)
18863 && TREE_TYPE (type) != 0 && TYPE_NAME (type) == 0)
18864 type = TREE_TYPE (type), code = TREE_CODE (type);
18865
18866 if (code == ERROR_MARK
18867 /* Handle a special case. For functions whose return type is void, we
18868 generate *no* type attribute. (Note that no object may have type
18869 `void', so this only applies to function return types). */
18870 || code == VOID_TYPE)
18871 return;
18872
18873 type_die = modified_type_die (type,
18874 cv_quals | TYPE_QUALS_NO_ADDR_SPACE (type),
18875 context_die);
18876
18877 if (type_die != NULL)
18878 add_AT_die_ref (object_die, DW_AT_type, type_die);
18879 }
18880
18881 /* Given an object die, add the calling convention attribute for the
18882 function call type. */
18883 static void
18884 add_calling_convention_attribute (dw_die_ref subr_die, tree decl)
18885 {
18886 enum dwarf_calling_convention value = DW_CC_normal;
18887
18888 value = ((enum dwarf_calling_convention)
18889 targetm.dwarf_calling_convention (TREE_TYPE (decl)));
18890
18891 if (is_fortran ()
18892 && !strcmp (IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)), "MAIN__"))
18893 {
18894 /* DWARF 2 doesn't provide a way to identify a program's source-level
18895 entry point. DW_AT_calling_convention attributes are only meant
18896 to describe functions' calling conventions. However, lacking a
18897 better way to signal the Fortran main program, we used this for
18898 a long time, following existing custom. Now, DWARF 4 has
18899 DW_AT_main_subprogram, which we add below, but some tools still
18900 rely on the old way, which we thus keep. */
18901 value = DW_CC_program;
18902
18903 if (dwarf_version >= 4 || !dwarf_strict)
18904 add_AT_flag (subr_die, DW_AT_main_subprogram, 1);
18905 }
18906
18907 /* Only add the attribute if the backend requests it, and
18908 is not DW_CC_normal. */
18909 if (value && (value != DW_CC_normal))
18910 add_AT_unsigned (subr_die, DW_AT_calling_convention, value);
18911 }
18912
18913 /* Given a tree pointer to a struct, class, union, or enum type node, return
18914 a pointer to the (string) tag name for the given type, or zero if the type
18915 was declared without a tag. */
18916
18917 static const char *
18918 type_tag (const_tree type)
18919 {
18920 const char *name = 0;
18921
18922 if (TYPE_NAME (type) != 0)
18923 {
18924 tree t = 0;
18925
18926 /* Find the IDENTIFIER_NODE for the type name. */
18927 if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE
18928 && !TYPE_NAMELESS (type))
18929 t = TYPE_NAME (type);
18930
18931 /* The g++ front end makes the TYPE_NAME of *each* tagged type point to
18932 a TYPE_DECL node, regardless of whether or not a `typedef' was
18933 involved. */
18934 else if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
18935 && ! DECL_IGNORED_P (TYPE_NAME (type)))
18936 {
18937 /* We want to be extra verbose. Don't call dwarf_name if
18938 DECL_NAME isn't set. The default hook for decl_printable_name
18939 doesn't like that, and in this context it's correct to return
18940 0, instead of "<anonymous>" or the like. */
18941 if (DECL_NAME (TYPE_NAME (type))
18942 && !DECL_NAMELESS (TYPE_NAME (type)))
18943 name = lang_hooks.dwarf_name (TYPE_NAME (type), 2);
18944 }
18945
18946 /* Now get the name as a string, or invent one. */
18947 if (!name && t != 0)
18948 name = IDENTIFIER_POINTER (t);
18949 }
18950
18951 return (name == 0 || *name == '\0') ? 0 : name;
18952 }
18953
18954 /* Return the type associated with a data member, make a special check
18955 for bit field types. */
18956
18957 static inline tree
18958 member_declared_type (const_tree member)
18959 {
18960 return (DECL_BIT_FIELD_TYPE (member)
18961 ? DECL_BIT_FIELD_TYPE (member) : TREE_TYPE (member));
18962 }
18963
18964 /* Get the decl's label, as described by its RTL. This may be different
18965 from the DECL_NAME name used in the source file. */
18966
18967 #if 0
18968 static const char *
18969 decl_start_label (tree decl)
18970 {
18971 rtx x;
18972 const char *fnname;
18973
18974 x = DECL_RTL (decl);
18975 gcc_assert (MEM_P (x));
18976
18977 x = XEXP (x, 0);
18978 gcc_assert (GET_CODE (x) == SYMBOL_REF);
18979
18980 fnname = XSTR (x, 0);
18981 return fnname;
18982 }
18983 #endif
18984 \f
18985 /* For variable-length arrays that have been previously generated, but
18986 may be incomplete due to missing subscript info, fill the subscript
18987 info. Return TRUE if this is one of those cases. */
18988 static bool
18989 fill_variable_array_bounds (tree type)
18990 {
18991 if (TREE_ASM_WRITTEN (type)
18992 && TREE_CODE (type) == ARRAY_TYPE
18993 && variably_modified_type_p (type, NULL))
18994 {
18995 dw_die_ref array_die = lookup_type_die (type);
18996 if (!array_die)
18997 return false;
18998 add_subscript_info (array_die, type, !is_ada ());
18999 return true;
19000 }
19001 return false;
19002 }
19003
19004 /* These routines generate the internal representation of the DIE's for
19005 the compilation unit. Debugging information is collected by walking
19006 the declaration trees passed in from dwarf2out_decl(). */
19007
19008 static void
19009 gen_array_type_die (tree type, dw_die_ref context_die)
19010 {
19011 dw_die_ref array_die;
19012
19013 /* GNU compilers represent multidimensional array types as sequences of one
19014 dimensional array types whose element types are themselves array types.
19015 We sometimes squish that down to a single array_type DIE with multiple
19016 subscripts in the Dwarf debugging info. The draft Dwarf specification
19017 say that we are allowed to do this kind of compression in C, because
19018 there is no difference between an array of arrays and a multidimensional
19019 array. We don't do this for Ada to remain as close as possible to the
19020 actual representation, which is especially important against the language
19021 flexibilty wrt arrays of variable size. */
19022
19023 bool collapse_nested_arrays = !is_ada ();
19024
19025 if (fill_variable_array_bounds (type))
19026 return;
19027
19028 dw_die_ref scope_die = scope_die_for (type, context_die);
19029 tree element_type;
19030
19031 /* Emit DW_TAG_string_type for Fortran character types (with kind 1 only, as
19032 DW_TAG_string_type doesn't have DW_AT_type attribute). */
19033 if (TYPE_STRING_FLAG (type)
19034 && TREE_CODE (type) == ARRAY_TYPE
19035 && is_fortran ()
19036 && TYPE_MODE (TREE_TYPE (type)) == TYPE_MODE (char_type_node))
19037 {
19038 HOST_WIDE_INT size;
19039
19040 array_die = new_die (DW_TAG_string_type, scope_die, type);
19041 add_name_attribute (array_die, type_tag (type));
19042 equate_type_number_to_die (type, array_die);
19043 size = int_size_in_bytes (type);
19044 if (size >= 0)
19045 add_AT_unsigned (array_die, DW_AT_byte_size, size);
19046 else if (TYPE_DOMAIN (type) != NULL_TREE
19047 && TYPE_MAX_VALUE (TYPE_DOMAIN (type)) != NULL_TREE
19048 && DECL_P (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))
19049 {
19050 tree szdecl = TYPE_MAX_VALUE (TYPE_DOMAIN (type));
19051 dw_loc_list_ref loc = loc_list_from_tree (szdecl, 2, NULL);
19052
19053 size = int_size_in_bytes (TREE_TYPE (szdecl));
19054 if (loc && size > 0)
19055 {
19056 add_AT_location_description (array_die, DW_AT_string_length, loc);
19057 if (size != DWARF2_ADDR_SIZE)
19058 add_AT_unsigned (array_die, DW_AT_byte_size, size);
19059 }
19060 }
19061 return;
19062 }
19063
19064 array_die = new_die (DW_TAG_array_type, scope_die, type);
19065 add_name_attribute (array_die, type_tag (type));
19066 equate_type_number_to_die (type, array_die);
19067
19068 if (TREE_CODE (type) == VECTOR_TYPE)
19069 add_AT_flag (array_die, DW_AT_GNU_vector, 1);
19070
19071 /* For Fortran multidimensional arrays use DW_ORD_col_major ordering. */
19072 if (is_fortran ()
19073 && TREE_CODE (type) == ARRAY_TYPE
19074 && TREE_CODE (TREE_TYPE (type)) == ARRAY_TYPE
19075 && !TYPE_STRING_FLAG (TREE_TYPE (type)))
19076 add_AT_unsigned (array_die, DW_AT_ordering, DW_ORD_col_major);
19077
19078 #if 0
19079 /* We default the array ordering. SDB will probably do
19080 the right things even if DW_AT_ordering is not present. It's not even
19081 an issue until we start to get into multidimensional arrays anyway. If
19082 SDB is ever caught doing the Wrong Thing for multi-dimensional arrays,
19083 then we'll have to put the DW_AT_ordering attribute back in. (But if
19084 and when we find out that we need to put these in, we will only do so
19085 for multidimensional arrays. */
19086 add_AT_unsigned (array_die, DW_AT_ordering, DW_ORD_row_major);
19087 #endif
19088
19089 if (TREE_CODE (type) == VECTOR_TYPE)
19090 {
19091 /* For VECTOR_TYPEs we use an array die with appropriate bounds. */
19092 dw_die_ref subrange_die = new_die (DW_TAG_subrange_type, array_die, NULL);
19093 add_bound_info (subrange_die, DW_AT_lower_bound, size_zero_node, NULL);
19094 add_bound_info (subrange_die, DW_AT_upper_bound,
19095 size_int (TYPE_VECTOR_SUBPARTS (type) - 1), NULL);
19096 }
19097 else
19098 add_subscript_info (array_die, type, collapse_nested_arrays);
19099
19100 /* Add representation of the type of the elements of this array type and
19101 emit the corresponding DIE if we haven't done it already. */
19102 element_type = TREE_TYPE (type);
19103 if (collapse_nested_arrays)
19104 while (TREE_CODE (element_type) == ARRAY_TYPE)
19105 {
19106 if (TYPE_STRING_FLAG (element_type) && is_fortran ())
19107 break;
19108 element_type = TREE_TYPE (element_type);
19109 }
19110
19111 add_type_attribute (array_die, element_type, TYPE_UNQUALIFIED, context_die);
19112
19113 add_gnat_descriptive_type_attribute (array_die, type, context_die);
19114 if (TYPE_ARTIFICIAL (type))
19115 add_AT_flag (array_die, DW_AT_artificial, 1);
19116
19117 if (get_AT (array_die, DW_AT_name))
19118 add_pubtype (type, array_die);
19119 }
19120
19121 /* This routine generates DIE for array with hidden descriptor, details
19122 are filled into *info by a langhook. */
19123
19124 static void
19125 gen_descr_array_type_die (tree type, struct array_descr_info *info,
19126 dw_die_ref context_die)
19127 {
19128 const dw_die_ref scope_die = scope_die_for (type, context_die);
19129 const dw_die_ref array_die = new_die (DW_TAG_array_type, scope_die, type);
19130 const struct loc_descr_context context = { type, info->base_decl, NULL };
19131 int dim;
19132
19133 add_name_attribute (array_die, type_tag (type));
19134 equate_type_number_to_die (type, array_die);
19135
19136 if (info->ndimensions > 1)
19137 switch (info->ordering)
19138 {
19139 case array_descr_ordering_row_major:
19140 add_AT_unsigned (array_die, DW_AT_ordering, DW_ORD_row_major);
19141 break;
19142 case array_descr_ordering_column_major:
19143 add_AT_unsigned (array_die, DW_AT_ordering, DW_ORD_col_major);
19144 break;
19145 default:
19146 break;
19147 }
19148
19149 if (dwarf_version >= 3 || !dwarf_strict)
19150 {
19151 if (info->data_location)
19152 add_scalar_info (array_die, DW_AT_data_location, info->data_location,
19153 dw_scalar_form_exprloc, &context);
19154 if (info->associated)
19155 add_scalar_info (array_die, DW_AT_associated, info->associated,
19156 dw_scalar_form_constant
19157 | dw_scalar_form_exprloc
19158 | dw_scalar_form_reference, &context);
19159 if (info->allocated)
19160 add_scalar_info (array_die, DW_AT_allocated, info->allocated,
19161 dw_scalar_form_constant
19162 | dw_scalar_form_exprloc
19163 | dw_scalar_form_reference, &context);
19164 if (info->stride)
19165 {
19166 const enum dwarf_attribute attr
19167 = (info->stride_in_bits) ? DW_AT_bit_stride : DW_AT_byte_stride;
19168 const int forms
19169 = (info->stride_in_bits)
19170 ? dw_scalar_form_constant
19171 : (dw_scalar_form_constant
19172 | dw_scalar_form_exprloc
19173 | dw_scalar_form_reference);
19174
19175 add_scalar_info (array_die, attr, info->stride, forms, &context);
19176 }
19177 }
19178
19179 add_gnat_descriptive_type_attribute (array_die, type, context_die);
19180
19181 for (dim = 0; dim < info->ndimensions; dim++)
19182 {
19183 dw_die_ref subrange_die
19184 = new_die (DW_TAG_subrange_type, array_die, NULL);
19185
19186 if (info->dimen[dim].bounds_type)
19187 add_type_attribute (subrange_die,
19188 info->dimen[dim].bounds_type, 0,
19189 context_die);
19190 if (info->dimen[dim].lower_bound)
19191 add_bound_info (subrange_die, DW_AT_lower_bound,
19192 info->dimen[dim].lower_bound, &context);
19193 if (info->dimen[dim].upper_bound)
19194 add_bound_info (subrange_die, DW_AT_upper_bound,
19195 info->dimen[dim].upper_bound, &context);
19196 if ((dwarf_version >= 3 || !dwarf_strict) && info->dimen[dim].stride)
19197 add_scalar_info (subrange_die, DW_AT_byte_stride,
19198 info->dimen[dim].stride,
19199 dw_scalar_form_constant
19200 | dw_scalar_form_exprloc
19201 | dw_scalar_form_reference,
19202 &context);
19203 }
19204
19205 gen_type_die (info->element_type, context_die);
19206 add_type_attribute (array_die, info->element_type, TYPE_UNQUALIFIED,
19207 context_die);
19208
19209 if (get_AT (array_die, DW_AT_name))
19210 add_pubtype (type, array_die);
19211 }
19212
19213 #if 0
19214 static void
19215 gen_entry_point_die (tree decl, dw_die_ref context_die)
19216 {
19217 tree origin = decl_ultimate_origin (decl);
19218 dw_die_ref decl_die = new_die (DW_TAG_entry_point, context_die, decl);
19219
19220 if (origin != NULL)
19221 add_abstract_origin_attribute (decl_die, origin);
19222 else
19223 {
19224 add_name_and_src_coords_attributes (decl_die, decl);
19225 add_type_attribute (decl_die, TREE_TYPE (TREE_TYPE (decl)),
19226 TYPE_UNQUALIFIED, context_die);
19227 }
19228
19229 if (DECL_ABSTRACT_P (decl))
19230 equate_decl_number_to_die (decl, decl_die);
19231 else
19232 add_AT_lbl_id (decl_die, DW_AT_low_pc, decl_start_label (decl));
19233 }
19234 #endif
19235
19236 /* Walk through the list of incomplete types again, trying once more to
19237 emit full debugging info for them. */
19238
19239 static void
19240 retry_incomplete_types (void)
19241 {
19242 int i;
19243
19244 for (i = vec_safe_length (incomplete_types) - 1; i >= 0; i--)
19245 if (should_emit_struct_debug ((*incomplete_types)[i], DINFO_USAGE_DIR_USE))
19246 gen_type_die ((*incomplete_types)[i], comp_unit_die ());
19247 }
19248
19249 /* Determine what tag to use for a record type. */
19250
19251 static enum dwarf_tag
19252 record_type_tag (tree type)
19253 {
19254 if (! lang_hooks.types.classify_record)
19255 return DW_TAG_structure_type;
19256
19257 switch (lang_hooks.types.classify_record (type))
19258 {
19259 case RECORD_IS_STRUCT:
19260 return DW_TAG_structure_type;
19261
19262 case RECORD_IS_CLASS:
19263 return DW_TAG_class_type;
19264
19265 case RECORD_IS_INTERFACE:
19266 if (dwarf_version >= 3 || !dwarf_strict)
19267 return DW_TAG_interface_type;
19268 return DW_TAG_structure_type;
19269
19270 default:
19271 gcc_unreachable ();
19272 }
19273 }
19274
19275 /* Generate a DIE to represent an enumeration type. Note that these DIEs
19276 include all of the information about the enumeration values also. Each
19277 enumerated type name/value is listed as a child of the enumerated type
19278 DIE. */
19279
19280 static dw_die_ref
19281 gen_enumeration_type_die (tree type, dw_die_ref context_die)
19282 {
19283 dw_die_ref type_die = lookup_type_die (type);
19284
19285 if (type_die == NULL)
19286 {
19287 type_die = new_die (DW_TAG_enumeration_type,
19288 scope_die_for (type, context_die), type);
19289 equate_type_number_to_die (type, type_die);
19290 add_name_attribute (type_die, type_tag (type));
19291 if (dwarf_version >= 4 || !dwarf_strict)
19292 {
19293 if (ENUM_IS_SCOPED (type))
19294 add_AT_flag (type_die, DW_AT_enum_class, 1);
19295 if (ENUM_IS_OPAQUE (type))
19296 add_AT_flag (type_die, DW_AT_declaration, 1);
19297 }
19298 }
19299 else if (! TYPE_SIZE (type))
19300 return type_die;
19301 else
19302 remove_AT (type_die, DW_AT_declaration);
19303
19304 /* Handle a GNU C/C++ extension, i.e. incomplete enum types. If the
19305 given enum type is incomplete, do not generate the DW_AT_byte_size
19306 attribute or the DW_AT_element_list attribute. */
19307 if (TYPE_SIZE (type))
19308 {
19309 tree link;
19310
19311 TREE_ASM_WRITTEN (type) = 1;
19312 add_byte_size_attribute (type_die, type);
19313 if (dwarf_version >= 3 || !dwarf_strict)
19314 {
19315 tree underlying = lang_hooks.types.enum_underlying_base_type (type);
19316 add_type_attribute (type_die, underlying, TYPE_UNQUALIFIED,
19317 context_die);
19318 }
19319 if (TYPE_STUB_DECL (type) != NULL_TREE)
19320 {
19321 add_src_coords_attributes (type_die, TYPE_STUB_DECL (type));
19322 add_accessibility_attribute (type_die, TYPE_STUB_DECL (type));
19323 }
19324
19325 /* If the first reference to this type was as the return type of an
19326 inline function, then it may not have a parent. Fix this now. */
19327 if (type_die->die_parent == NULL)
19328 add_child_die (scope_die_for (type, context_die), type_die);
19329
19330 for (link = TYPE_VALUES (type);
19331 link != NULL; link = TREE_CHAIN (link))
19332 {
19333 dw_die_ref enum_die = new_die (DW_TAG_enumerator, type_die, link);
19334 tree value = TREE_VALUE (link);
19335
19336 add_name_attribute (enum_die,
19337 IDENTIFIER_POINTER (TREE_PURPOSE (link)));
19338
19339 if (TREE_CODE (value) == CONST_DECL)
19340 value = DECL_INITIAL (value);
19341
19342 if (simple_type_size_in_bits (TREE_TYPE (value))
19343 <= HOST_BITS_PER_WIDE_INT || tree_fits_shwi_p (value))
19344 {
19345 /* For constant forms created by add_AT_unsigned DWARF
19346 consumers (GDB, elfutils, etc.) always zero extend
19347 the value. Only when the actual value is negative
19348 do we need to use add_AT_int to generate a constant
19349 form that can represent negative values. */
19350 HOST_WIDE_INT val = TREE_INT_CST_LOW (value);
19351 if (TYPE_UNSIGNED (TREE_TYPE (value)) || val >= 0)
19352 add_AT_unsigned (enum_die, DW_AT_const_value,
19353 (unsigned HOST_WIDE_INT) val);
19354 else
19355 add_AT_int (enum_die, DW_AT_const_value, val);
19356 }
19357 else
19358 /* Enumeration constants may be wider than HOST_WIDE_INT. Handle
19359 that here. TODO: This should be re-worked to use correct
19360 signed/unsigned double tags for all cases. */
19361 add_AT_wide (enum_die, DW_AT_const_value, value);
19362 }
19363
19364 add_gnat_descriptive_type_attribute (type_die, type, context_die);
19365 if (TYPE_ARTIFICIAL (type))
19366 add_AT_flag (type_die, DW_AT_artificial, 1);
19367 }
19368 else
19369 add_AT_flag (type_die, DW_AT_declaration, 1);
19370
19371 add_pubtype (type, type_die);
19372
19373 return type_die;
19374 }
19375
19376 /* Generate a DIE to represent either a real live formal parameter decl or to
19377 represent just the type of some formal parameter position in some function
19378 type.
19379
19380 Note that this routine is a bit unusual because its argument may be a
19381 ..._DECL node (i.e. either a PARM_DECL or perhaps a VAR_DECL which
19382 represents an inlining of some PARM_DECL) or else some sort of a ..._TYPE
19383 node. If it's the former then this function is being called to output a
19384 DIE to represent a formal parameter object (or some inlining thereof). If
19385 it's the latter, then this function is only being called to output a
19386 DW_TAG_formal_parameter DIE to stand as a placeholder for some formal
19387 argument type of some subprogram type.
19388 If EMIT_NAME_P is true, name and source coordinate attributes
19389 are emitted. */
19390
19391 static dw_die_ref
19392 gen_formal_parameter_die (tree node, tree origin, bool emit_name_p,
19393 dw_die_ref context_die)
19394 {
19395 tree node_or_origin = node ? node : origin;
19396 tree ultimate_origin;
19397 dw_die_ref parm_die = NULL;
19398
19399 if (TREE_CODE_CLASS (TREE_CODE (node_or_origin)) == tcc_declaration)
19400 {
19401 parm_die = lookup_decl_die (node);
19402
19403 /* If the contexts differ, we may not be talking about the same
19404 thing. */
19405 if (parm_die && parm_die->die_parent != context_die)
19406 {
19407 if (!DECL_ABSTRACT_P (node))
19408 {
19409 /* This can happen when creating an inlined instance, in
19410 which case we need to create a new DIE that will get
19411 annotated with DW_AT_abstract_origin. */
19412 parm_die = NULL;
19413 }
19414 else
19415 {
19416 /* FIXME: Reuse DIE even with a differing context.
19417
19418 This can happen when calling
19419 dwarf2out_abstract_function to build debug info for
19420 the abstract instance of a function for which we have
19421 already generated a DIE in
19422 dwarf2out_early_global_decl.
19423
19424 Once we remove dwarf2out_abstract_function, we should
19425 have a call to gcc_unreachable here. */
19426 }
19427 }
19428
19429 if (parm_die && parm_die->die_parent == NULL)
19430 {
19431 /* Check that parm_die already has the right attributes that
19432 we would have added below. If any attributes are
19433 missing, fall through to add them. */
19434 if (! DECL_ABSTRACT_P (node_or_origin)
19435 && !get_AT (parm_die, DW_AT_location)
19436 && !get_AT (parm_die, DW_AT_const_value))
19437 /* We are missing location info, and are about to add it. */
19438 ;
19439 else
19440 {
19441 add_child_die (context_die, parm_die);
19442 return parm_die;
19443 }
19444 }
19445 }
19446
19447 /* If we have a previously generated DIE, use it, unless this is an
19448 concrete instance (origin != NULL), in which case we need a new
19449 DIE with a corresponding DW_AT_abstract_origin. */
19450 bool reusing_die;
19451 if (parm_die && origin == NULL)
19452 reusing_die = true;
19453 else
19454 {
19455 parm_die = new_die (DW_TAG_formal_parameter, context_die, node);
19456 reusing_die = false;
19457 }
19458
19459 switch (TREE_CODE_CLASS (TREE_CODE (node_or_origin)))
19460 {
19461 case tcc_declaration:
19462 ultimate_origin = decl_ultimate_origin (node_or_origin);
19463 if (node || ultimate_origin)
19464 origin = ultimate_origin;
19465
19466 if (reusing_die)
19467 goto add_location;
19468
19469 if (origin != NULL)
19470 add_abstract_origin_attribute (parm_die, origin);
19471 else if (emit_name_p)
19472 add_name_and_src_coords_attributes (parm_die, node);
19473 if (origin == NULL
19474 || (! DECL_ABSTRACT_P (node_or_origin)
19475 && variably_modified_type_p (TREE_TYPE (node_or_origin),
19476 decl_function_context
19477 (node_or_origin))))
19478 {
19479 tree type = TREE_TYPE (node_or_origin);
19480 if (decl_by_reference_p (node_or_origin))
19481 add_type_attribute (parm_die, TREE_TYPE (type),
19482 TYPE_UNQUALIFIED, context_die);
19483 else
19484 add_type_attribute (parm_die, type,
19485 decl_quals (node_or_origin),
19486 context_die);
19487 }
19488 if (origin == NULL && DECL_ARTIFICIAL (node))
19489 add_AT_flag (parm_die, DW_AT_artificial, 1);
19490 add_location:
19491 if (node && node != origin)
19492 equate_decl_number_to_die (node, parm_die);
19493 if (! DECL_ABSTRACT_P (node_or_origin))
19494 add_location_or_const_value_attribute (parm_die, node_or_origin,
19495 node == NULL);
19496
19497 break;
19498
19499 case tcc_type:
19500 /* We were called with some kind of a ..._TYPE node. */
19501 add_type_attribute (parm_die, node_or_origin, TYPE_UNQUALIFIED,
19502 context_die);
19503 break;
19504
19505 default:
19506 gcc_unreachable ();
19507 }
19508
19509 return parm_die;
19510 }
19511
19512 /* Generate and return a DW_TAG_GNU_formal_parameter_pack. Also generate
19513 children DW_TAG_formal_parameter DIEs representing the arguments of the
19514 parameter pack.
19515
19516 PARM_PACK must be a function parameter pack.
19517 PACK_ARG is the first argument of the parameter pack. Its TREE_CHAIN
19518 must point to the subsequent arguments of the function PACK_ARG belongs to.
19519 SUBR_DIE is the DIE of the function PACK_ARG belongs to.
19520 If NEXT_ARG is non NULL, *NEXT_ARG is set to the function argument
19521 following the last one for which a DIE was generated. */
19522
19523 static dw_die_ref
19524 gen_formal_parameter_pack_die (tree parm_pack,
19525 tree pack_arg,
19526 dw_die_ref subr_die,
19527 tree *next_arg)
19528 {
19529 tree arg;
19530 dw_die_ref parm_pack_die;
19531
19532 gcc_assert (parm_pack
19533 && lang_hooks.function_parameter_pack_p (parm_pack)
19534 && subr_die);
19535
19536 parm_pack_die = new_die (DW_TAG_GNU_formal_parameter_pack, subr_die, parm_pack);
19537 add_src_coords_attributes (parm_pack_die, parm_pack);
19538
19539 for (arg = pack_arg; arg; arg = DECL_CHAIN (arg))
19540 {
19541 if (! lang_hooks.decls.function_parm_expanded_from_pack_p (arg,
19542 parm_pack))
19543 break;
19544 gen_formal_parameter_die (arg, NULL,
19545 false /* Don't emit name attribute. */,
19546 parm_pack_die);
19547 }
19548 if (next_arg)
19549 *next_arg = arg;
19550 return parm_pack_die;
19551 }
19552
19553 /* Generate a special type of DIE used as a stand-in for a trailing ellipsis
19554 at the end of an (ANSI prototyped) formal parameters list. */
19555
19556 static void
19557 gen_unspecified_parameters_die (tree decl_or_type, dw_die_ref context_die)
19558 {
19559 new_die (DW_TAG_unspecified_parameters, context_die, decl_or_type);
19560 }
19561
19562 /* Generate a list of nameless DW_TAG_formal_parameter DIEs (and perhaps a
19563 DW_TAG_unspecified_parameters DIE) to represent the types of the formal
19564 parameters as specified in some function type specification (except for
19565 those which appear as part of a function *definition*). */
19566
19567 static void
19568 gen_formal_types_die (tree function_or_method_type, dw_die_ref context_die)
19569 {
19570 tree link;
19571 tree formal_type = NULL;
19572 tree first_parm_type;
19573 tree arg;
19574
19575 if (TREE_CODE (function_or_method_type) == FUNCTION_DECL)
19576 {
19577 arg = DECL_ARGUMENTS (function_or_method_type);
19578 function_or_method_type = TREE_TYPE (function_or_method_type);
19579 }
19580 else
19581 arg = NULL_TREE;
19582
19583 first_parm_type = TYPE_ARG_TYPES (function_or_method_type);
19584
19585 /* Make our first pass over the list of formal parameter types and output a
19586 DW_TAG_formal_parameter DIE for each one. */
19587 for (link = first_parm_type; link; )
19588 {
19589 dw_die_ref parm_die;
19590
19591 formal_type = TREE_VALUE (link);
19592 if (formal_type == void_type_node)
19593 break;
19594
19595 /* Output a (nameless) DIE to represent the formal parameter itself. */
19596 if (!POINTER_BOUNDS_TYPE_P (formal_type))
19597 {
19598 parm_die = gen_formal_parameter_die (formal_type, NULL,
19599 true /* Emit name attribute. */,
19600 context_die);
19601 if (TREE_CODE (function_or_method_type) == METHOD_TYPE
19602 && link == first_parm_type)
19603 {
19604 add_AT_flag (parm_die, DW_AT_artificial, 1);
19605 if (dwarf_version >= 3 || !dwarf_strict)
19606 add_AT_die_ref (context_die, DW_AT_object_pointer, parm_die);
19607 }
19608 else if (arg && DECL_ARTIFICIAL (arg))
19609 add_AT_flag (parm_die, DW_AT_artificial, 1);
19610 }
19611
19612 link = TREE_CHAIN (link);
19613 if (arg)
19614 arg = DECL_CHAIN (arg);
19615 }
19616
19617 /* If this function type has an ellipsis, add a
19618 DW_TAG_unspecified_parameters DIE to the end of the parameter list. */
19619 if (formal_type != void_type_node)
19620 gen_unspecified_parameters_die (function_or_method_type, context_die);
19621
19622 /* Make our second (and final) pass over the list of formal parameter types
19623 and output DIEs to represent those types (as necessary). */
19624 for (link = TYPE_ARG_TYPES (function_or_method_type);
19625 link && TREE_VALUE (link);
19626 link = TREE_CHAIN (link))
19627 gen_type_die (TREE_VALUE (link), context_die);
19628 }
19629
19630 /* We want to generate the DIE for TYPE so that we can generate the
19631 die for MEMBER, which has been defined; we will need to refer back
19632 to the member declaration nested within TYPE. If we're trying to
19633 generate minimal debug info for TYPE, processing TYPE won't do the
19634 trick; we need to attach the member declaration by hand. */
19635
19636 static void
19637 gen_type_die_for_member (tree type, tree member, dw_die_ref context_die)
19638 {
19639 gen_type_die (type, context_die);
19640
19641 /* If we're trying to avoid duplicate debug info, we may not have
19642 emitted the member decl for this function. Emit it now. */
19643 if (TYPE_STUB_DECL (type)
19644 && TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type))
19645 && ! lookup_decl_die (member))
19646 {
19647 dw_die_ref type_die;
19648 gcc_assert (!decl_ultimate_origin (member));
19649
19650 push_decl_scope (type);
19651 type_die = lookup_type_die_strip_naming_typedef (type);
19652 if (TREE_CODE (member) == FUNCTION_DECL)
19653 gen_subprogram_die (member, type_die);
19654 else if (TREE_CODE (member) == FIELD_DECL)
19655 {
19656 /* Ignore the nameless fields that are used to skip bits but handle
19657 C++ anonymous unions and structs. */
19658 if (DECL_NAME (member) != NULL_TREE
19659 || TREE_CODE (TREE_TYPE (member)) == UNION_TYPE
19660 || TREE_CODE (TREE_TYPE (member)) == RECORD_TYPE)
19661 {
19662 struct vlr_context vlr_ctx = {
19663 DECL_CONTEXT (member), /* struct_type */
19664 NULL_TREE /* variant_part_offset */
19665 };
19666 gen_type_die (member_declared_type (member), type_die);
19667 gen_field_die (member, &vlr_ctx, type_die);
19668 }
19669 }
19670 else
19671 gen_variable_die (member, NULL_TREE, type_die);
19672
19673 pop_decl_scope ();
19674 }
19675 }
19676 \f
19677 /* Forward declare these functions, because they are mutually recursive
19678 with their set_block_* pairing functions. */
19679 static void set_decl_origin_self (tree);
19680 static void set_decl_abstract_flags (tree, vec<tree> &);
19681
19682 /* Given a pointer to some BLOCK node, if the BLOCK_ABSTRACT_ORIGIN for the
19683 given BLOCK node is NULL, set the BLOCK_ABSTRACT_ORIGIN for the node so
19684 that it points to the node itself, thus indicating that the node is its
19685 own (abstract) origin. Additionally, if the BLOCK_ABSTRACT_ORIGIN for
19686 the given node is NULL, recursively descend the decl/block tree which
19687 it is the root of, and for each other ..._DECL or BLOCK node contained
19688 therein whose DECL_ABSTRACT_ORIGINs or BLOCK_ABSTRACT_ORIGINs are also
19689 still NULL, set *their* DECL_ABSTRACT_ORIGIN or BLOCK_ABSTRACT_ORIGIN
19690 values to point to themselves. */
19691
19692 static void
19693 set_block_origin_self (tree stmt)
19694 {
19695 if (BLOCK_ABSTRACT_ORIGIN (stmt) == NULL_TREE)
19696 {
19697 BLOCK_ABSTRACT_ORIGIN (stmt) = stmt;
19698
19699 {
19700 tree local_decl;
19701
19702 for (local_decl = BLOCK_VARS (stmt);
19703 local_decl != NULL_TREE;
19704 local_decl = DECL_CHAIN (local_decl))
19705 /* Do not recurse on nested functions since the inlining status
19706 of parent and child can be different as per the DWARF spec. */
19707 if (TREE_CODE (local_decl) != FUNCTION_DECL
19708 && !DECL_EXTERNAL (local_decl))
19709 set_decl_origin_self (local_decl);
19710 }
19711
19712 {
19713 tree subblock;
19714
19715 for (subblock = BLOCK_SUBBLOCKS (stmt);
19716 subblock != NULL_TREE;
19717 subblock = BLOCK_CHAIN (subblock))
19718 set_block_origin_self (subblock); /* Recurse. */
19719 }
19720 }
19721 }
19722
19723 /* Given a pointer to some ..._DECL node, if the DECL_ABSTRACT_ORIGIN for
19724 the given ..._DECL node is NULL, set the DECL_ABSTRACT_ORIGIN for the
19725 node to so that it points to the node itself, thus indicating that the
19726 node represents its own (abstract) origin. Additionally, if the
19727 DECL_ABSTRACT_ORIGIN for the given node is NULL, recursively descend
19728 the decl/block tree of which the given node is the root of, and for
19729 each other ..._DECL or BLOCK node contained therein whose
19730 DECL_ABSTRACT_ORIGINs or BLOCK_ABSTRACT_ORIGINs are also still NULL,
19731 set *their* DECL_ABSTRACT_ORIGIN or BLOCK_ABSTRACT_ORIGIN values to
19732 point to themselves. */
19733
19734 static void
19735 set_decl_origin_self (tree decl)
19736 {
19737 if (DECL_ABSTRACT_ORIGIN (decl) == NULL_TREE)
19738 {
19739 DECL_ABSTRACT_ORIGIN (decl) = decl;
19740 if (TREE_CODE (decl) == FUNCTION_DECL)
19741 {
19742 tree arg;
19743
19744 for (arg = DECL_ARGUMENTS (decl); arg; arg = DECL_CHAIN (arg))
19745 DECL_ABSTRACT_ORIGIN (arg) = arg;
19746 if (DECL_INITIAL (decl) != NULL_TREE
19747 && DECL_INITIAL (decl) != error_mark_node)
19748 set_block_origin_self (DECL_INITIAL (decl));
19749 }
19750 }
19751 }
19752 \f
19753 /* Given a pointer to some BLOCK node, set the BLOCK_ABSTRACT flag to 1
19754 and if it wasn't 1 before, push it to abstract_vec vector.
19755 For all local decls and all local sub-blocks (recursively) do it
19756 too. */
19757
19758 static void
19759 set_block_abstract_flags (tree stmt, vec<tree> &abstract_vec)
19760 {
19761 tree local_decl;
19762 tree subblock;
19763 unsigned int i;
19764
19765 if (!BLOCK_ABSTRACT (stmt))
19766 {
19767 abstract_vec.safe_push (stmt);
19768 BLOCK_ABSTRACT (stmt) = 1;
19769 }
19770
19771 for (local_decl = BLOCK_VARS (stmt);
19772 local_decl != NULL_TREE;
19773 local_decl = DECL_CHAIN (local_decl))
19774 if (! DECL_EXTERNAL (local_decl))
19775 set_decl_abstract_flags (local_decl, abstract_vec);
19776
19777 for (i = 0; i < BLOCK_NUM_NONLOCALIZED_VARS (stmt); i++)
19778 {
19779 local_decl = BLOCK_NONLOCALIZED_VAR (stmt, i);
19780 if ((TREE_CODE (local_decl) == VAR_DECL && !TREE_STATIC (local_decl))
19781 || TREE_CODE (local_decl) == PARM_DECL)
19782 set_decl_abstract_flags (local_decl, abstract_vec);
19783 }
19784
19785 for (subblock = BLOCK_SUBBLOCKS (stmt);
19786 subblock != NULL_TREE;
19787 subblock = BLOCK_CHAIN (subblock))
19788 set_block_abstract_flags (subblock, abstract_vec);
19789 }
19790
19791 /* Given a pointer to some ..._DECL node, set DECL_ABSTRACT_P flag on it
19792 to 1 and if it wasn't 1 before, push to abstract_vec vector.
19793 In the case where the decl is a FUNCTION_DECL also set the abstract
19794 flags for all of the parameters, local vars, local
19795 blocks and sub-blocks (recursively). */
19796
19797 static void
19798 set_decl_abstract_flags (tree decl, vec<tree> &abstract_vec)
19799 {
19800 if (!DECL_ABSTRACT_P (decl))
19801 {
19802 abstract_vec.safe_push (decl);
19803 DECL_ABSTRACT_P (decl) = 1;
19804 }
19805
19806 if (TREE_CODE (decl) == FUNCTION_DECL)
19807 {
19808 tree arg;
19809
19810 for (arg = DECL_ARGUMENTS (decl); arg; arg = DECL_CHAIN (arg))
19811 if (!DECL_ABSTRACT_P (arg))
19812 {
19813 abstract_vec.safe_push (arg);
19814 DECL_ABSTRACT_P (arg) = 1;
19815 }
19816 if (DECL_INITIAL (decl) != NULL_TREE
19817 && DECL_INITIAL (decl) != error_mark_node)
19818 set_block_abstract_flags (DECL_INITIAL (decl), abstract_vec);
19819 }
19820 }
19821
19822 /* Generate the DWARF2 info for the "abstract" instance of a function which we
19823 may later generate inlined and/or out-of-line instances of.
19824
19825 FIXME: In the early-dwarf world, this function, and most of the
19826 DECL_ABSTRACT code should be obsoleted. The early DIE _is_
19827 the abstract instance. All we would need to do is annotate
19828 the early DIE with the appropriate DW_AT_inline in late
19829 dwarf (perhaps in gen_inlined_subroutine_die).
19830
19831 However, we can't do this yet, because LTO streaming of DIEs
19832 has not been implemented yet. */
19833
19834 static void
19835 dwarf2out_abstract_function (tree decl)
19836 {
19837 dw_die_ref old_die;
19838 tree save_fn;
19839 tree context;
19840 hash_table<decl_loc_hasher> *old_decl_loc_table;
19841 hash_table<dw_loc_list_hasher> *old_cached_dw_loc_list_table;
19842 int old_call_site_count, old_tail_call_site_count;
19843 struct call_arg_loc_node *old_call_arg_locations;
19844
19845 /* Make sure we have the actual abstract inline, not a clone. */
19846 decl = DECL_ORIGIN (decl);
19847
19848 old_die = lookup_decl_die (decl);
19849 if (old_die && get_AT (old_die, DW_AT_inline))
19850 /* We've already generated the abstract instance. */
19851 return;
19852
19853 /* We can be called while recursively when seeing block defining inlined subroutine
19854 DIE. Be sure to not clobber the outer location table nor use it or we would
19855 get locations in abstract instantces. */
19856 old_decl_loc_table = decl_loc_table;
19857 decl_loc_table = NULL;
19858 old_cached_dw_loc_list_table = cached_dw_loc_list_table;
19859 cached_dw_loc_list_table = NULL;
19860 old_call_arg_locations = call_arg_locations;
19861 call_arg_locations = NULL;
19862 old_call_site_count = call_site_count;
19863 call_site_count = -1;
19864 old_tail_call_site_count = tail_call_site_count;
19865 tail_call_site_count = -1;
19866
19867 /* Be sure we've emitted the in-class declaration DIE (if any) first, so
19868 we don't get confused by DECL_ABSTRACT_P. */
19869 if (debug_info_level > DINFO_LEVEL_TERSE)
19870 {
19871 context = decl_class_context (decl);
19872 if (context)
19873 gen_type_die_for_member
19874 (context, decl, decl_function_context (decl) ? NULL : comp_unit_die ());
19875 }
19876
19877 /* Pretend we've just finished compiling this function. */
19878 save_fn = current_function_decl;
19879 current_function_decl = decl;
19880
19881 auto_vec<tree, 64> abstract_vec;
19882 set_decl_abstract_flags (decl, abstract_vec);
19883 dwarf2out_decl (decl);
19884 unsigned int i;
19885 tree t;
19886 FOR_EACH_VEC_ELT (abstract_vec, i, t)
19887 if (TREE_CODE (t) == BLOCK)
19888 BLOCK_ABSTRACT (t) = 0;
19889 else
19890 DECL_ABSTRACT_P (t) = 0;
19891
19892 current_function_decl = save_fn;
19893 decl_loc_table = old_decl_loc_table;
19894 cached_dw_loc_list_table = old_cached_dw_loc_list_table;
19895 call_arg_locations = old_call_arg_locations;
19896 call_site_count = old_call_site_count;
19897 tail_call_site_count = old_tail_call_site_count;
19898 }
19899
19900 /* Helper function of premark_used_types() which gets called through
19901 htab_traverse.
19902
19903 Marks the DIE of a given type in *SLOT as perennial, so it never gets
19904 marked as unused by prune_unused_types. */
19905
19906 bool
19907 premark_used_types_helper (tree const &type, void *)
19908 {
19909 dw_die_ref die;
19910
19911 die = lookup_type_die (type);
19912 if (die != NULL)
19913 die->die_perennial_p = 1;
19914 return true;
19915 }
19916
19917 /* Helper function of premark_types_used_by_global_vars which gets called
19918 through htab_traverse.
19919
19920 Marks the DIE of a given type in *SLOT as perennial, so it never gets
19921 marked as unused by prune_unused_types. The DIE of the type is marked
19922 only if the global variable using the type will actually be emitted. */
19923
19924 int
19925 premark_types_used_by_global_vars_helper (types_used_by_vars_entry **slot,
19926 void *)
19927 {
19928 struct types_used_by_vars_entry *entry;
19929 dw_die_ref die;
19930
19931 entry = (struct types_used_by_vars_entry *) *slot;
19932 gcc_assert (entry->type != NULL
19933 && entry->var_decl != NULL);
19934 die = lookup_type_die (entry->type);
19935 if (die)
19936 {
19937 /* Ask cgraph if the global variable really is to be emitted.
19938 If yes, then we'll keep the DIE of ENTRY->TYPE. */
19939 varpool_node *node = varpool_node::get (entry->var_decl);
19940 if (node && node->definition)
19941 {
19942 die->die_perennial_p = 1;
19943 /* Keep the parent DIEs as well. */
19944 while ((die = die->die_parent) && die->die_perennial_p == 0)
19945 die->die_perennial_p = 1;
19946 }
19947 }
19948 return 1;
19949 }
19950
19951 /* Mark all members of used_types_hash as perennial. */
19952
19953 static void
19954 premark_used_types (struct function *fun)
19955 {
19956 if (fun && fun->used_types_hash)
19957 fun->used_types_hash->traverse<void *, premark_used_types_helper> (NULL);
19958 }
19959
19960 /* Mark all members of types_used_by_vars_entry as perennial. */
19961
19962 static void
19963 premark_types_used_by_global_vars (void)
19964 {
19965 if (types_used_by_vars_hash)
19966 types_used_by_vars_hash
19967 ->traverse<void *, premark_types_used_by_global_vars_helper> (NULL);
19968 }
19969
19970 /* Generate a DW_TAG_GNU_call_site DIE in function DECL under SUBR_DIE
19971 for CA_LOC call arg loc node. */
19972
19973 static dw_die_ref
19974 gen_call_site_die (tree decl, dw_die_ref subr_die,
19975 struct call_arg_loc_node *ca_loc)
19976 {
19977 dw_die_ref stmt_die = NULL, die;
19978 tree block = ca_loc->block;
19979
19980 while (block
19981 && block != DECL_INITIAL (decl)
19982 && TREE_CODE (block) == BLOCK)
19983 {
19984 stmt_die = BLOCK_DIE (block);
19985 if (stmt_die)
19986 break;
19987 block = BLOCK_SUPERCONTEXT (block);
19988 }
19989 if (stmt_die == NULL)
19990 stmt_die = subr_die;
19991 die = new_die (DW_TAG_GNU_call_site, stmt_die, NULL_TREE);
19992 add_AT_lbl_id (die, DW_AT_low_pc, ca_loc->label);
19993 if (ca_loc->tail_call_p)
19994 add_AT_flag (die, DW_AT_GNU_tail_call, 1);
19995 if (ca_loc->symbol_ref)
19996 {
19997 dw_die_ref tdie = lookup_decl_die (SYMBOL_REF_DECL (ca_loc->symbol_ref));
19998 if (tdie)
19999 add_AT_die_ref (die, DW_AT_abstract_origin, tdie);
20000 else
20001 add_AT_addr (die, DW_AT_abstract_origin, ca_loc->symbol_ref, false);
20002 }
20003 return die;
20004 }
20005
20006 /* Generate a DIE to represent a declared function (either file-scope or
20007 block-local). */
20008
20009 static void
20010 gen_subprogram_die (tree decl, dw_die_ref context_die)
20011 {
20012 tree origin = decl_ultimate_origin (decl);
20013 dw_die_ref subr_die;
20014 dw_die_ref old_die = lookup_decl_die (decl);
20015
20016 /* This function gets called multiple times for different stages of
20017 the debug process. For example, for func() in this code:
20018
20019 namespace S
20020 {
20021 void func() { ... }
20022 }
20023
20024 ...we get called 4 times. Twice in early debug and twice in
20025 late debug:
20026
20027 Early debug
20028 -----------
20029
20030 1. Once while generating func() within the namespace. This is
20031 the declaration. The declaration bit below is set, as the
20032 context is the namespace.
20033
20034 A new DIE will be generated with DW_AT_declaration set.
20035
20036 2. Once for func() itself. This is the specification. The
20037 declaration bit below is clear as the context is the CU.
20038
20039 We will use the cached DIE from (1) to create a new DIE with
20040 DW_AT_specification pointing to the declaration in (1).
20041
20042 Late debug via rest_of_handle_final()
20043 -------------------------------------
20044
20045 3. Once generating func() within the namespace. This is also the
20046 declaration, as in (1), but this time we will early exit below
20047 as we have a cached DIE and a declaration needs no additional
20048 annotations (no locations), as the source declaration line
20049 info is enough.
20050
20051 4. Once for func() itself. As in (2), this is the specification,
20052 but this time we will re-use the cached DIE, and just annotate
20053 it with the location information that should now be available.
20054
20055 For something without namespaces, but with abstract instances, we
20056 are also called a multiple times:
20057
20058 class Base
20059 {
20060 public:
20061 Base (); // constructor declaration (1)
20062 };
20063
20064 Base::Base () { } // constructor specification (2)
20065
20066 Early debug
20067 -----------
20068
20069 1. Once for the Base() constructor by virtue of it being a
20070 member of the Base class. This is done via
20071 rest_of_type_compilation.
20072
20073 This is a declaration, so a new DIE will be created with
20074 DW_AT_declaration.
20075
20076 2. Once for the Base() constructor definition, but this time
20077 while generating the abstract instance of the base
20078 constructor (__base_ctor) which is being generated via early
20079 debug of reachable functions.
20080
20081 Even though we have a cached version of the declaration (1),
20082 we will create a DW_AT_specification of the declaration DIE
20083 in (1).
20084
20085 3. Once for the __base_ctor itself, but this time, we generate
20086 an DW_AT_abstract_origin version of the DW_AT_specification in
20087 (2).
20088
20089 Late debug via rest_of_handle_final
20090 -----------------------------------
20091
20092 4. One final time for the __base_ctor (which will have a cached
20093 DIE with DW_AT_abstract_origin created in (3). This time,
20094 we will just annotate the location information now
20095 available.
20096 */
20097 int declaration = (current_function_decl != decl
20098 || class_or_namespace_scope_p (context_die));
20099
20100 premark_used_types (DECL_STRUCT_FUNCTION (decl));
20101
20102 /* Now that the C++ front end lazily declares artificial member fns, we
20103 might need to retrofit the declaration into its class. */
20104 if (!declaration && !origin && !old_die
20105 && DECL_CONTEXT (decl) && TYPE_P (DECL_CONTEXT (decl))
20106 && !class_or_namespace_scope_p (context_die)
20107 && debug_info_level > DINFO_LEVEL_TERSE)
20108 old_die = force_decl_die (decl);
20109
20110 /* An inlined instance, tag a new DIE with DW_AT_abstract_origin. */
20111 if (origin != NULL)
20112 {
20113 gcc_assert (!declaration || local_scope_p (context_die));
20114
20115 /* Fixup die_parent for the abstract instance of a nested
20116 inline function. */
20117 if (old_die && old_die->die_parent == NULL)
20118 add_child_die (context_die, old_die);
20119
20120 if (old_die && get_AT_ref (old_die, DW_AT_abstract_origin))
20121 {
20122 /* If we have a DW_AT_abstract_origin we have a working
20123 cached version. */
20124 subr_die = old_die;
20125 }
20126 else
20127 {
20128 subr_die = new_die (DW_TAG_subprogram, context_die, decl);
20129 add_abstract_origin_attribute (subr_die, origin);
20130 /* This is where the actual code for a cloned function is.
20131 Let's emit linkage name attribute for it. This helps
20132 debuggers to e.g, set breakpoints into
20133 constructors/destructors when the user asks "break
20134 K::K". */
20135 add_linkage_name (subr_die, decl);
20136 }
20137 }
20138 /* A cached copy, possibly from early dwarf generation. Reuse as
20139 much as possible. */
20140 else if (old_die)
20141 {
20142 /* A declaration that has been previously dumped needs no
20143 additional information. */
20144 if (declaration)
20145 return;
20146
20147 if (!get_AT_flag (old_die, DW_AT_declaration)
20148 /* We can have a normal definition following an inline one in the
20149 case of redefinition of GNU C extern inlines.
20150 It seems reasonable to use AT_specification in this case. */
20151 && !get_AT (old_die, DW_AT_inline))
20152 {
20153 /* Detect and ignore this case, where we are trying to output
20154 something we have already output. */
20155 if (get_AT (old_die, DW_AT_low_pc)
20156 || get_AT (old_die, DW_AT_ranges))
20157 return;
20158
20159 /* If we have no location information, this must be a
20160 partially generated DIE from early dwarf generation.
20161 Fall through and generate it. */
20162 }
20163
20164 /* If the definition comes from the same place as the declaration,
20165 maybe use the old DIE. We always want the DIE for this function
20166 that has the *_pc attributes to be under comp_unit_die so the
20167 debugger can find it. We also need to do this for abstract
20168 instances of inlines, since the spec requires the out-of-line copy
20169 to have the same parent. For local class methods, this doesn't
20170 apply; we just use the old DIE. */
20171 expanded_location s = expand_location (DECL_SOURCE_LOCATION (decl));
20172 struct dwarf_file_data * file_index = lookup_filename (s.file);
20173 if ((is_cu_die (old_die->die_parent)
20174 /* This condition fixes the inconsistency/ICE with the
20175 following Fortran test (or some derivative thereof) while
20176 building libgfortran:
20177
20178 module some_m
20179 contains
20180 logical function funky (FLAG)
20181 funky = .true.
20182 end function
20183 end module
20184 */
20185 || (old_die->die_parent
20186 && old_die->die_parent->die_tag == DW_TAG_module)
20187 || context_die == NULL)
20188 && (DECL_ARTIFICIAL (decl)
20189 || (get_AT_file (old_die, DW_AT_decl_file) == file_index
20190 && (get_AT_unsigned (old_die, DW_AT_decl_line)
20191 == (unsigned) s.line))))
20192 {
20193 subr_die = old_die;
20194
20195 /* Clear out the declaration attribute, but leave the
20196 parameters so they can be augmented with location
20197 information later. Unless this was a declaration, in
20198 which case, wipe out the nameless parameters and recreate
20199 them further down. */
20200 if (remove_AT (subr_die, DW_AT_declaration))
20201 {
20202
20203 remove_AT (subr_die, DW_AT_object_pointer);
20204 remove_child_TAG (subr_die, DW_TAG_formal_parameter);
20205 }
20206 }
20207 /* Make a specification pointing to the previously built
20208 declaration. */
20209 else
20210 {
20211 subr_die = new_die (DW_TAG_subprogram, context_die, decl);
20212 add_AT_specification (subr_die, old_die);
20213 add_pubname (decl, subr_die);
20214 if (get_AT_file (old_die, DW_AT_decl_file) != file_index)
20215 add_AT_file (subr_die, DW_AT_decl_file, file_index);
20216 if (get_AT_unsigned (old_die, DW_AT_decl_line) != (unsigned) s.line)
20217 add_AT_unsigned (subr_die, DW_AT_decl_line, s.line);
20218
20219 /* If the prototype had an 'auto' or 'decltype(auto)' return type,
20220 emit the real type on the definition die. */
20221 if (is_cxx() && debug_info_level > DINFO_LEVEL_TERSE)
20222 {
20223 dw_die_ref die = get_AT_ref (old_die, DW_AT_type);
20224 if (die == auto_die || die == decltype_auto_die)
20225 add_type_attribute (subr_die, TREE_TYPE (TREE_TYPE (decl)),
20226 TYPE_UNQUALIFIED, context_die);
20227 }
20228 }
20229 }
20230 /* Create a fresh DIE for anything else. */
20231 else
20232 {
20233 subr_die = new_die (DW_TAG_subprogram, context_die, decl);
20234
20235 if (TREE_PUBLIC (decl))
20236 add_AT_flag (subr_die, DW_AT_external, 1);
20237
20238 add_name_and_src_coords_attributes (subr_die, decl);
20239 add_pubname (decl, subr_die);
20240 if (debug_info_level > DINFO_LEVEL_TERSE)
20241 {
20242 add_prototyped_attribute (subr_die, TREE_TYPE (decl));
20243 add_type_attribute (subr_die, TREE_TYPE (TREE_TYPE (decl)),
20244 TYPE_UNQUALIFIED, context_die);
20245 }
20246
20247 add_pure_or_virtual_attribute (subr_die, decl);
20248 if (DECL_ARTIFICIAL (decl))
20249 add_AT_flag (subr_die, DW_AT_artificial, 1);
20250
20251 if (TREE_THIS_VOLATILE (decl) && (dwarf_version >= 5 || !dwarf_strict))
20252 add_AT_flag (subr_die, DW_AT_noreturn, 1);
20253
20254 add_accessibility_attribute (subr_die, decl);
20255 }
20256
20257 /* Unless we have an existing non-declaration DIE, equate the new
20258 DIE. */
20259 if (!old_die || is_declaration_die (old_die))
20260 equate_decl_number_to_die (decl, subr_die);
20261
20262 if (declaration)
20263 {
20264 if (!old_die || !get_AT (old_die, DW_AT_inline))
20265 {
20266 add_AT_flag (subr_die, DW_AT_declaration, 1);
20267
20268 /* If this is an explicit function declaration then generate
20269 a DW_AT_explicit attribute. */
20270 if (lang_hooks.decls.function_decl_explicit_p (decl)
20271 && (dwarf_version >= 3 || !dwarf_strict))
20272 add_AT_flag (subr_die, DW_AT_explicit, 1);
20273
20274 /* If this is a C++11 deleted special function member then generate
20275 a DW_AT_GNU_deleted attribute. */
20276 if (lang_hooks.decls.function_decl_deleted_p (decl)
20277 && (! dwarf_strict))
20278 add_AT_flag (subr_die, DW_AT_GNU_deleted, 1);
20279 }
20280 }
20281 /* Tag abstract instances with DW_AT_inline. */
20282 else if (DECL_ABSTRACT_P (decl))
20283 {
20284 if (DECL_DECLARED_INLINE_P (decl))
20285 {
20286 if (cgraph_function_possibly_inlined_p (decl))
20287 add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_declared_inlined);
20288 else
20289 add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_declared_not_inlined);
20290 }
20291 else
20292 {
20293 if (cgraph_function_possibly_inlined_p (decl))
20294 add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_inlined);
20295 else
20296 add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_not_inlined);
20297 }
20298
20299 if (DECL_DECLARED_INLINE_P (decl)
20300 && lookup_attribute ("artificial", DECL_ATTRIBUTES (decl)))
20301 add_AT_flag (subr_die, DW_AT_artificial, 1);
20302 }
20303 /* For non DECL_EXTERNALs, if range information is available, fill
20304 the DIE with it. */
20305 else if (!DECL_EXTERNAL (decl) && !early_dwarf)
20306 {
20307 HOST_WIDE_INT cfa_fb_offset;
20308
20309 struct function *fun = DECL_STRUCT_FUNCTION (decl);
20310
20311 if (!flag_reorder_blocks_and_partition)
20312 {
20313 dw_fde_ref fde = fun->fde;
20314 if (fde->dw_fde_begin)
20315 {
20316 /* We have already generated the labels. */
20317 add_AT_low_high_pc (subr_die, fde->dw_fde_begin,
20318 fde->dw_fde_end, false);
20319 }
20320 else
20321 {
20322 /* Create start/end labels and add the range. */
20323 char label_id_low[MAX_ARTIFICIAL_LABEL_BYTES];
20324 char label_id_high[MAX_ARTIFICIAL_LABEL_BYTES];
20325 ASM_GENERATE_INTERNAL_LABEL (label_id_low, FUNC_BEGIN_LABEL,
20326 current_function_funcdef_no);
20327 ASM_GENERATE_INTERNAL_LABEL (label_id_high, FUNC_END_LABEL,
20328 current_function_funcdef_no);
20329 add_AT_low_high_pc (subr_die, label_id_low, label_id_high,
20330 false);
20331 }
20332
20333 #if VMS_DEBUGGING_INFO
20334 /* HP OpenVMS Industry Standard 64: DWARF Extensions
20335 Section 2.3 Prologue and Epilogue Attributes:
20336 When a breakpoint is set on entry to a function, it is generally
20337 desirable for execution to be suspended, not on the very first
20338 instruction of the function, but rather at a point after the
20339 function's frame has been set up, after any language defined local
20340 declaration processing has been completed, and before execution of
20341 the first statement of the function begins. Debuggers generally
20342 cannot properly determine where this point is. Similarly for a
20343 breakpoint set on exit from a function. The prologue and epilogue
20344 attributes allow a compiler to communicate the location(s) to use. */
20345
20346 {
20347 if (fde->dw_fde_vms_end_prologue)
20348 add_AT_vms_delta (subr_die, DW_AT_HP_prologue,
20349 fde->dw_fde_begin, fde->dw_fde_vms_end_prologue);
20350
20351 if (fde->dw_fde_vms_begin_epilogue)
20352 add_AT_vms_delta (subr_die, DW_AT_HP_epilogue,
20353 fde->dw_fde_begin, fde->dw_fde_vms_begin_epilogue);
20354 }
20355 #endif
20356
20357 }
20358 else
20359 {
20360 /* Generate pubnames entries for the split function code ranges. */
20361 dw_fde_ref fde = fun->fde;
20362
20363 if (fde->dw_fde_second_begin)
20364 {
20365 if (dwarf_version >= 3 || !dwarf_strict)
20366 {
20367 /* We should use ranges for non-contiguous code section
20368 addresses. Use the actual code range for the initial
20369 section, since the HOT/COLD labels might precede an
20370 alignment offset. */
20371 bool range_list_added = false;
20372 add_ranges_by_labels (subr_die, fde->dw_fde_begin,
20373 fde->dw_fde_end, &range_list_added,
20374 false);
20375 add_ranges_by_labels (subr_die, fde->dw_fde_second_begin,
20376 fde->dw_fde_second_end,
20377 &range_list_added, false);
20378 if (range_list_added)
20379 add_ranges (NULL);
20380 }
20381 else
20382 {
20383 /* There is no real support in DW2 for this .. so we make
20384 a work-around. First, emit the pub name for the segment
20385 containing the function label. Then make and emit a
20386 simplified subprogram DIE for the second segment with the
20387 name pre-fixed by __hot/cold_sect_of_. We use the same
20388 linkage name for the second die so that gdb will find both
20389 sections when given "b foo". */
20390 const char *name = NULL;
20391 tree decl_name = DECL_NAME (decl);
20392 dw_die_ref seg_die;
20393
20394 /* Do the 'primary' section. */
20395 add_AT_low_high_pc (subr_die, fde->dw_fde_begin,
20396 fde->dw_fde_end, false);
20397
20398 /* Build a minimal DIE for the secondary section. */
20399 seg_die = new_die (DW_TAG_subprogram,
20400 subr_die->die_parent, decl);
20401
20402 if (TREE_PUBLIC (decl))
20403 add_AT_flag (seg_die, DW_AT_external, 1);
20404
20405 if (decl_name != NULL
20406 && IDENTIFIER_POINTER (decl_name) != NULL)
20407 {
20408 name = dwarf2_name (decl, 1);
20409 if (! DECL_ARTIFICIAL (decl))
20410 add_src_coords_attributes (seg_die, decl);
20411
20412 add_linkage_name (seg_die, decl);
20413 }
20414 gcc_assert (name != NULL);
20415 add_pure_or_virtual_attribute (seg_die, decl);
20416 if (DECL_ARTIFICIAL (decl))
20417 add_AT_flag (seg_die, DW_AT_artificial, 1);
20418
20419 name = concat ("__second_sect_of_", name, NULL);
20420 add_AT_low_high_pc (seg_die, fde->dw_fde_second_begin,
20421 fde->dw_fde_second_end, false);
20422 add_name_attribute (seg_die, name);
20423 if (want_pubnames ())
20424 add_pubname_string (name, seg_die);
20425 }
20426 }
20427 else
20428 add_AT_low_high_pc (subr_die, fde->dw_fde_begin, fde->dw_fde_end,
20429 false);
20430 }
20431
20432 cfa_fb_offset = CFA_FRAME_BASE_OFFSET (decl);
20433
20434 /* We define the "frame base" as the function's CFA. This is more
20435 convenient for several reasons: (1) It's stable across the prologue
20436 and epilogue, which makes it better than just a frame pointer,
20437 (2) With dwarf3, there exists a one-byte encoding that allows us
20438 to reference the .debug_frame data by proxy, but failing that,
20439 (3) We can at least reuse the code inspection and interpretation
20440 code that determines the CFA position at various points in the
20441 function. */
20442 if (dwarf_version >= 3 && targetm.debug_unwind_info () == UI_DWARF2)
20443 {
20444 dw_loc_descr_ref op = new_loc_descr (DW_OP_call_frame_cfa, 0, 0);
20445 add_AT_loc (subr_die, DW_AT_frame_base, op);
20446 }
20447 else
20448 {
20449 dw_loc_list_ref list = convert_cfa_to_fb_loc_list (cfa_fb_offset);
20450 if (list->dw_loc_next)
20451 add_AT_loc_list (subr_die, DW_AT_frame_base, list);
20452 else
20453 add_AT_loc (subr_die, DW_AT_frame_base, list->expr);
20454 }
20455
20456 /* Compute a displacement from the "steady-state frame pointer" to
20457 the CFA. The former is what all stack slots and argument slots
20458 will reference in the rtl; the latter is what we've told the
20459 debugger about. We'll need to adjust all frame_base references
20460 by this displacement. */
20461 compute_frame_pointer_to_fb_displacement (cfa_fb_offset);
20462
20463 if (fun->static_chain_decl)
20464 {
20465 /* DWARF requires here a location expression that computes the
20466 address of the enclosing subprogram's frame base. The machinery
20467 in tree-nested.c is supposed to store this specific address in the
20468 last field of the FRAME record. */
20469 const tree frame_type
20470 = TREE_TYPE (TREE_TYPE (fun->static_chain_decl));
20471 const tree fb_decl = tree_last (TYPE_FIELDS (frame_type));
20472
20473 tree fb_expr
20474 = build1 (INDIRECT_REF, frame_type, fun->static_chain_decl);
20475 fb_expr = build3 (COMPONENT_REF, TREE_TYPE (fb_decl),
20476 fb_expr, fb_decl, NULL_TREE);
20477
20478 add_AT_location_description (subr_die, DW_AT_static_link,
20479 loc_list_from_tree (fb_expr, 0, NULL));
20480 }
20481 }
20482
20483 /* Generate child dies for template paramaters. */
20484 if (early_dwarf && debug_info_level > DINFO_LEVEL_TERSE)
20485 gen_generic_params_dies (decl);
20486
20487 /* Now output descriptions of the arguments for this function. This gets
20488 (unnecessarily?) complex because of the fact that the DECL_ARGUMENT list
20489 for a FUNCTION_DECL doesn't indicate cases where there was a trailing
20490 `...' at the end of the formal parameter list. In order to find out if
20491 there was a trailing ellipsis or not, we must instead look at the type
20492 associated with the FUNCTION_DECL. This will be a node of type
20493 FUNCTION_TYPE. If the chain of type nodes hanging off of this
20494 FUNCTION_TYPE node ends with a void_type_node then there should *not* be
20495 an ellipsis at the end. */
20496
20497 /* In the case where we are describing a mere function declaration, all we
20498 need to do here (and all we *can* do here) is to describe the *types* of
20499 its formal parameters. */
20500 if (debug_info_level <= DINFO_LEVEL_TERSE)
20501 ;
20502 else if (declaration)
20503 gen_formal_types_die (decl, subr_die);
20504 else
20505 {
20506 /* Generate DIEs to represent all known formal parameters. */
20507 tree parm = DECL_ARGUMENTS (decl);
20508 tree generic_decl = early_dwarf
20509 ? lang_hooks.decls.get_generic_function_decl (decl) : NULL;
20510 tree generic_decl_parm = generic_decl
20511 ? DECL_ARGUMENTS (generic_decl)
20512 : NULL;
20513
20514 /* Now we want to walk the list of parameters of the function and
20515 emit their relevant DIEs.
20516
20517 We consider the case of DECL being an instance of a generic function
20518 as well as it being a normal function.
20519
20520 If DECL is an instance of a generic function we walk the
20521 parameters of the generic function declaration _and_ the parameters of
20522 DECL itself. This is useful because we want to emit specific DIEs for
20523 function parameter packs and those are declared as part of the
20524 generic function declaration. In that particular case,
20525 the parameter pack yields a DW_TAG_GNU_formal_parameter_pack DIE.
20526 That DIE has children DIEs representing the set of arguments
20527 of the pack. Note that the set of pack arguments can be empty.
20528 In that case, the DW_TAG_GNU_formal_parameter_pack DIE will not have any
20529 children DIE.
20530
20531 Otherwise, we just consider the parameters of DECL. */
20532 while (generic_decl_parm || parm)
20533 {
20534 if (generic_decl_parm
20535 && lang_hooks.function_parameter_pack_p (generic_decl_parm))
20536 gen_formal_parameter_pack_die (generic_decl_parm,
20537 parm, subr_die,
20538 &parm);
20539 else if (parm && !POINTER_BOUNDS_P (parm))
20540 {
20541 dw_die_ref parm_die = gen_decl_die (parm, NULL, NULL, subr_die);
20542
20543 if (parm == DECL_ARGUMENTS (decl)
20544 && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE
20545 && parm_die
20546 && (dwarf_version >= 3 || !dwarf_strict))
20547 add_AT_die_ref (subr_die, DW_AT_object_pointer, parm_die);
20548
20549 parm = DECL_CHAIN (parm);
20550 }
20551 else if (parm)
20552 parm = DECL_CHAIN (parm);
20553
20554 if (generic_decl_parm)
20555 generic_decl_parm = DECL_CHAIN (generic_decl_parm);
20556 }
20557
20558 /* Decide whether we need an unspecified_parameters DIE at the end.
20559 There are 2 more cases to do this for: 1) the ansi ... declaration -
20560 this is detectable when the end of the arg list is not a
20561 void_type_node 2) an unprototyped function declaration (not a
20562 definition). This just means that we have no info about the
20563 parameters at all. */
20564 if (prototype_p (TREE_TYPE (decl)))
20565 {
20566 /* This is the prototyped case, check for.... */
20567 if (stdarg_p (TREE_TYPE (decl)))
20568 gen_unspecified_parameters_die (decl, subr_die);
20569 }
20570 else if (DECL_INITIAL (decl) == NULL_TREE)
20571 gen_unspecified_parameters_die (decl, subr_die);
20572 }
20573
20574 if (subr_die != old_die)
20575 /* Add the calling convention attribute if requested. */
20576 add_calling_convention_attribute (subr_die, decl);
20577
20578 /* Output Dwarf info for all of the stuff within the body of the function
20579 (if it has one - it may be just a declaration).
20580
20581 OUTER_SCOPE is a pointer to the outermost BLOCK node created to represent
20582 a function. This BLOCK actually represents the outermost binding contour
20583 for the function, i.e. the contour in which the function's formal
20584 parameters and labels get declared. Curiously, it appears that the front
20585 end doesn't actually put the PARM_DECL nodes for the current function onto
20586 the BLOCK_VARS list for this outer scope, but are strung off of the
20587 DECL_ARGUMENTS list for the function instead.
20588
20589 The BLOCK_VARS list for the `outer_scope' does provide us with a list of
20590 the LABEL_DECL nodes for the function however, and we output DWARF info
20591 for those in decls_for_scope. Just within the `outer_scope' there will be
20592 a BLOCK node representing the function's outermost pair of curly braces,
20593 and any blocks used for the base and member initializers of a C++
20594 constructor function. */
20595 tree outer_scope = DECL_INITIAL (decl);
20596 if (! declaration && outer_scope && TREE_CODE (outer_scope) != ERROR_MARK)
20597 {
20598 int call_site_note_count = 0;
20599 int tail_call_site_note_count = 0;
20600
20601 /* Emit a DW_TAG_variable DIE for a named return value. */
20602 if (DECL_NAME (DECL_RESULT (decl)))
20603 gen_decl_die (DECL_RESULT (decl), NULL, NULL, subr_die);
20604
20605 /* The first time through decls_for_scope we will generate the
20606 DIEs for the locals. The second time, we fill in the
20607 location info. */
20608 decls_for_scope (outer_scope, subr_die);
20609
20610 if (call_arg_locations && !dwarf_strict)
20611 {
20612 struct call_arg_loc_node *ca_loc;
20613 for (ca_loc = call_arg_locations; ca_loc; ca_loc = ca_loc->next)
20614 {
20615 dw_die_ref die = NULL;
20616 rtx tloc = NULL_RTX, tlocc = NULL_RTX;
20617 rtx arg, next_arg;
20618
20619 for (arg = (ca_loc->call_arg_loc_note != NULL_RTX
20620 ? NOTE_VAR_LOCATION (ca_loc->call_arg_loc_note)
20621 : NULL_RTX);
20622 arg; arg = next_arg)
20623 {
20624 dw_loc_descr_ref reg, val;
20625 machine_mode mode = GET_MODE (XEXP (XEXP (arg, 0), 1));
20626 dw_die_ref cdie, tdie = NULL;
20627
20628 next_arg = XEXP (arg, 1);
20629 if (REG_P (XEXP (XEXP (arg, 0), 0))
20630 && next_arg
20631 && MEM_P (XEXP (XEXP (next_arg, 0), 0))
20632 && REG_P (XEXP (XEXP (XEXP (next_arg, 0), 0), 0))
20633 && REGNO (XEXP (XEXP (arg, 0), 0))
20634 == REGNO (XEXP (XEXP (XEXP (next_arg, 0), 0), 0)))
20635 next_arg = XEXP (next_arg, 1);
20636 if (mode == VOIDmode)
20637 {
20638 mode = GET_MODE (XEXP (XEXP (arg, 0), 0));
20639 if (mode == VOIDmode)
20640 mode = GET_MODE (XEXP (arg, 0));
20641 }
20642 if (mode == VOIDmode || mode == BLKmode)
20643 continue;
20644 /* Get dynamic information about call target only if we
20645 have no static information: we cannot generate both
20646 DW_AT_abstract_origin and DW_AT_GNU_call_site_target
20647 attributes. */
20648 if (ca_loc->symbol_ref == NULL_RTX)
20649 {
20650 if (XEXP (XEXP (arg, 0), 0) == pc_rtx)
20651 {
20652 tloc = XEXP (XEXP (arg, 0), 1);
20653 continue;
20654 }
20655 else if (GET_CODE (XEXP (XEXP (arg, 0), 0)) == CLOBBER
20656 && XEXP (XEXP (XEXP (arg, 0), 0), 0) == pc_rtx)
20657 {
20658 tlocc = XEXP (XEXP (arg, 0), 1);
20659 continue;
20660 }
20661 }
20662 reg = NULL;
20663 if (REG_P (XEXP (XEXP (arg, 0), 0)))
20664 reg = reg_loc_descriptor (XEXP (XEXP (arg, 0), 0),
20665 VAR_INIT_STATUS_INITIALIZED);
20666 else if (MEM_P (XEXP (XEXP (arg, 0), 0)))
20667 {
20668 rtx mem = XEXP (XEXP (arg, 0), 0);
20669 reg = mem_loc_descriptor (XEXP (mem, 0),
20670 get_address_mode (mem),
20671 GET_MODE (mem),
20672 VAR_INIT_STATUS_INITIALIZED);
20673 }
20674 else if (GET_CODE (XEXP (XEXP (arg, 0), 0))
20675 == DEBUG_PARAMETER_REF)
20676 {
20677 tree tdecl
20678 = DEBUG_PARAMETER_REF_DECL (XEXP (XEXP (arg, 0), 0));
20679 tdie = lookup_decl_die (tdecl);
20680 if (tdie == NULL)
20681 continue;
20682 }
20683 else
20684 continue;
20685 if (reg == NULL
20686 && GET_CODE (XEXP (XEXP (arg, 0), 0))
20687 != DEBUG_PARAMETER_REF)
20688 continue;
20689 val = mem_loc_descriptor (XEXP (XEXP (arg, 0), 1), mode,
20690 VOIDmode,
20691 VAR_INIT_STATUS_INITIALIZED);
20692 if (val == NULL)
20693 continue;
20694 if (die == NULL)
20695 die = gen_call_site_die (decl, subr_die, ca_loc);
20696 cdie = new_die (DW_TAG_GNU_call_site_parameter, die,
20697 NULL_TREE);
20698 if (reg != NULL)
20699 add_AT_loc (cdie, DW_AT_location, reg);
20700 else if (tdie != NULL)
20701 add_AT_die_ref (cdie, DW_AT_abstract_origin, tdie);
20702 add_AT_loc (cdie, DW_AT_GNU_call_site_value, val);
20703 if (next_arg != XEXP (arg, 1))
20704 {
20705 mode = GET_MODE (XEXP (XEXP (XEXP (arg, 1), 0), 1));
20706 if (mode == VOIDmode)
20707 mode = GET_MODE (XEXP (XEXP (XEXP (arg, 1), 0), 0));
20708 val = mem_loc_descriptor (XEXP (XEXP (XEXP (arg, 1),
20709 0), 1),
20710 mode, VOIDmode,
20711 VAR_INIT_STATUS_INITIALIZED);
20712 if (val != NULL)
20713 add_AT_loc (cdie, DW_AT_GNU_call_site_data_value, val);
20714 }
20715 }
20716 if (die == NULL
20717 && (ca_loc->symbol_ref || tloc))
20718 die = gen_call_site_die (decl, subr_die, ca_loc);
20719 if (die != NULL && (tloc != NULL_RTX || tlocc != NULL_RTX))
20720 {
20721 dw_loc_descr_ref tval = NULL;
20722
20723 if (tloc != NULL_RTX)
20724 tval = mem_loc_descriptor (tloc,
20725 GET_MODE (tloc) == VOIDmode
20726 ? Pmode : GET_MODE (tloc),
20727 VOIDmode,
20728 VAR_INIT_STATUS_INITIALIZED);
20729 if (tval)
20730 add_AT_loc (die, DW_AT_GNU_call_site_target, tval);
20731 else if (tlocc != NULL_RTX)
20732 {
20733 tval = mem_loc_descriptor (tlocc,
20734 GET_MODE (tlocc) == VOIDmode
20735 ? Pmode : GET_MODE (tlocc),
20736 VOIDmode,
20737 VAR_INIT_STATUS_INITIALIZED);
20738 if (tval)
20739 add_AT_loc (die, DW_AT_GNU_call_site_target_clobbered,
20740 tval);
20741 }
20742 }
20743 if (die != NULL)
20744 {
20745 call_site_note_count++;
20746 if (ca_loc->tail_call_p)
20747 tail_call_site_note_count++;
20748 }
20749 }
20750 }
20751 call_arg_locations = NULL;
20752 call_arg_loc_last = NULL;
20753 if (tail_call_site_count >= 0
20754 && tail_call_site_count == tail_call_site_note_count
20755 && !dwarf_strict)
20756 {
20757 if (call_site_count >= 0
20758 && call_site_count == call_site_note_count)
20759 add_AT_flag (subr_die, DW_AT_GNU_all_call_sites, 1);
20760 else
20761 add_AT_flag (subr_die, DW_AT_GNU_all_tail_call_sites, 1);
20762 }
20763 call_site_count = -1;
20764 tail_call_site_count = -1;
20765 }
20766 }
20767
20768 /* Returns a hash value for X (which really is a die_struct). */
20769
20770 hashval_t
20771 block_die_hasher::hash (die_struct *d)
20772 {
20773 return (hashval_t) d->decl_id ^ htab_hash_pointer (d->die_parent);
20774 }
20775
20776 /* Return nonzero if decl_id and die_parent of die_struct X is the same
20777 as decl_id and die_parent of die_struct Y. */
20778
20779 bool
20780 block_die_hasher::equal (die_struct *x, die_struct *y)
20781 {
20782 return x->decl_id == y->decl_id && x->die_parent == y->die_parent;
20783 }
20784
20785 /* Return TRUE if DECL, which may have been previously generated as
20786 OLD_DIE, is a candidate for a DW_AT_specification. DECLARATION is
20787 true if decl (or its origin) is either an extern declaration or a
20788 class/namespace scoped declaration.
20789
20790 The declare_in_namespace support causes us to get two DIEs for one
20791 variable, both of which are declarations. We want to avoid
20792 considering one to be a specification, so we must test for
20793 DECLARATION and DW_AT_declaration. */
20794 static inline bool
20795 decl_will_get_specification_p (dw_die_ref old_die, tree decl, bool declaration)
20796 {
20797 return (old_die && TREE_STATIC (decl) && !declaration
20798 && get_AT_flag (old_die, DW_AT_declaration) == 1);
20799 }
20800
20801 /* Return true if DECL is a local static. */
20802
20803 static inline bool
20804 local_function_static (tree decl)
20805 {
20806 gcc_assert (TREE_CODE (decl) == VAR_DECL);
20807 return TREE_STATIC (decl)
20808 && DECL_CONTEXT (decl)
20809 && TREE_CODE (DECL_CONTEXT (decl)) == FUNCTION_DECL;
20810 }
20811
20812 /* Generate a DIE to represent a declared data object.
20813 Either DECL or ORIGIN must be non-null. */
20814
20815 static void
20816 gen_variable_die (tree decl, tree origin, dw_die_ref context_die)
20817 {
20818 HOST_WIDE_INT off = 0;
20819 tree com_decl;
20820 tree decl_or_origin = decl ? decl : origin;
20821 tree ultimate_origin;
20822 dw_die_ref var_die;
20823 dw_die_ref old_die = decl ? lookup_decl_die (decl) : NULL;
20824 dw_die_ref origin_die = NULL;
20825 bool declaration = (DECL_EXTERNAL (decl_or_origin)
20826 || class_or_namespace_scope_p (context_die));
20827 bool specialization_p = false;
20828
20829 ultimate_origin = decl_ultimate_origin (decl_or_origin);
20830 if (decl || ultimate_origin)
20831 origin = ultimate_origin;
20832 com_decl = fortran_common (decl_or_origin, &off);
20833
20834 /* Symbol in common gets emitted as a child of the common block, in the form
20835 of a data member. */
20836 if (com_decl)
20837 {
20838 dw_die_ref com_die;
20839 dw_loc_list_ref loc;
20840 die_node com_die_arg;
20841
20842 var_die = lookup_decl_die (decl_or_origin);
20843 if (var_die)
20844 {
20845 if (get_AT (var_die, DW_AT_location) == NULL)
20846 {
20847 loc = loc_list_from_tree (com_decl, off ? 1 : 2, NULL);
20848 if (loc)
20849 {
20850 if (off)
20851 {
20852 /* Optimize the common case. */
20853 if (single_element_loc_list_p (loc)
20854 && loc->expr->dw_loc_opc == DW_OP_addr
20855 && loc->expr->dw_loc_next == NULL
20856 && GET_CODE (loc->expr->dw_loc_oprnd1.v.val_addr)
20857 == SYMBOL_REF)
20858 {
20859 rtx x = loc->expr->dw_loc_oprnd1.v.val_addr;
20860 loc->expr->dw_loc_oprnd1.v.val_addr
20861 = plus_constant (GET_MODE (x), x , off);
20862 }
20863 else
20864 loc_list_plus_const (loc, off);
20865 }
20866 add_AT_location_description (var_die, DW_AT_location, loc);
20867 remove_AT (var_die, DW_AT_declaration);
20868 }
20869 }
20870 return;
20871 }
20872
20873 if (common_block_die_table == NULL)
20874 common_block_die_table = hash_table<block_die_hasher>::create_ggc (10);
20875
20876 com_die_arg.decl_id = DECL_UID (com_decl);
20877 com_die_arg.die_parent = context_die;
20878 com_die = common_block_die_table->find (&com_die_arg);
20879 loc = loc_list_from_tree (com_decl, 2, NULL);
20880 if (com_die == NULL)
20881 {
20882 const char *cnam
20883 = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (com_decl));
20884 die_node **slot;
20885
20886 com_die = new_die (DW_TAG_common_block, context_die, decl);
20887 add_name_and_src_coords_attributes (com_die, com_decl);
20888 if (loc)
20889 {
20890 add_AT_location_description (com_die, DW_AT_location, loc);
20891 /* Avoid sharing the same loc descriptor between
20892 DW_TAG_common_block and DW_TAG_variable. */
20893 loc = loc_list_from_tree (com_decl, 2, NULL);
20894 }
20895 else if (DECL_EXTERNAL (decl))
20896 add_AT_flag (com_die, DW_AT_declaration, 1);
20897 if (want_pubnames ())
20898 add_pubname_string (cnam, com_die); /* ??? needed? */
20899 com_die->decl_id = DECL_UID (com_decl);
20900 slot = common_block_die_table->find_slot (com_die, INSERT);
20901 *slot = com_die;
20902 }
20903 else if (get_AT (com_die, DW_AT_location) == NULL && loc)
20904 {
20905 add_AT_location_description (com_die, DW_AT_location, loc);
20906 loc = loc_list_from_tree (com_decl, 2, NULL);
20907 remove_AT (com_die, DW_AT_declaration);
20908 }
20909 var_die = new_die (DW_TAG_variable, com_die, decl);
20910 add_name_and_src_coords_attributes (var_die, decl);
20911 add_type_attribute (var_die, TREE_TYPE (decl), decl_quals (decl),
20912 context_die);
20913 add_AT_flag (var_die, DW_AT_external, 1);
20914 if (loc)
20915 {
20916 if (off)
20917 {
20918 /* Optimize the common case. */
20919 if (single_element_loc_list_p (loc)
20920 && loc->expr->dw_loc_opc == DW_OP_addr
20921 && loc->expr->dw_loc_next == NULL
20922 && GET_CODE (loc->expr->dw_loc_oprnd1.v.val_addr) == SYMBOL_REF)
20923 {
20924 rtx x = loc->expr->dw_loc_oprnd1.v.val_addr;
20925 loc->expr->dw_loc_oprnd1.v.val_addr
20926 = plus_constant (GET_MODE (x), x, off);
20927 }
20928 else
20929 loc_list_plus_const (loc, off);
20930 }
20931 add_AT_location_description (var_die, DW_AT_location, loc);
20932 }
20933 else if (DECL_EXTERNAL (decl))
20934 add_AT_flag (var_die, DW_AT_declaration, 1);
20935 equate_decl_number_to_die (decl, var_die);
20936 return;
20937 }
20938
20939 if (old_die)
20940 {
20941 if (declaration)
20942 {
20943 /* A declaration that has been previously dumped, needs no
20944 further annotations, since it doesn't need location on
20945 the second pass. */
20946 return;
20947 }
20948 else if (decl_will_get_specification_p (old_die, decl, declaration)
20949 && !get_AT (old_die, DW_AT_specification))
20950 {
20951 /* Fall-thru so we can make a new variable die along with a
20952 DW_AT_specification. */
20953 }
20954 else if (origin && old_die->die_parent != context_die)
20955 {
20956 /* If we will be creating an inlined instance, we need a
20957 new DIE that will get annotated with
20958 DW_AT_abstract_origin. Clear things so we can get a
20959 new DIE. */
20960 gcc_assert (!DECL_ABSTRACT_P (decl));
20961 old_die = NULL;
20962 }
20963 else
20964 {
20965 /* If a DIE was dumped early, it still needs location info.
20966 Skip to where we fill the location bits. */
20967 var_die = old_die;
20968 goto gen_variable_die_location;
20969 }
20970 }
20971
20972 /* For static data members, the declaration in the class is supposed
20973 to have DW_TAG_member tag; the specification should still be
20974 DW_TAG_variable referencing the DW_TAG_member DIE. */
20975 if (declaration && class_scope_p (context_die))
20976 var_die = new_die (DW_TAG_member, context_die, decl);
20977 else
20978 var_die = new_die (DW_TAG_variable, context_die, decl);
20979
20980 if (origin != NULL)
20981 origin_die = add_abstract_origin_attribute (var_die, origin);
20982
20983 /* Loop unrolling can create multiple blocks that refer to the same
20984 static variable, so we must test for the DW_AT_declaration flag.
20985
20986 ??? Loop unrolling/reorder_blocks should perhaps be rewritten to
20987 copy decls and set the DECL_ABSTRACT_P flag on them instead of
20988 sharing them.
20989
20990 ??? Duplicated blocks have been rewritten to use .debug_ranges. */
20991 else if (decl_will_get_specification_p (old_die, decl, declaration))
20992 {
20993 /* This is a definition of a C++ class level static. */
20994 add_AT_specification (var_die, old_die);
20995 specialization_p = true;
20996 if (DECL_NAME (decl))
20997 {
20998 expanded_location s = expand_location (DECL_SOURCE_LOCATION (decl));
20999 struct dwarf_file_data * file_index = lookup_filename (s.file);
21000
21001 if (get_AT_file (old_die, DW_AT_decl_file) != file_index)
21002 add_AT_file (var_die, DW_AT_decl_file, file_index);
21003
21004 if (get_AT_unsigned (old_die, DW_AT_decl_line) != (unsigned) s.line)
21005 add_AT_unsigned (var_die, DW_AT_decl_line, s.line);
21006
21007 if (old_die->die_tag == DW_TAG_member)
21008 add_linkage_name (var_die, decl);
21009 }
21010 }
21011 else
21012 add_name_and_src_coords_attributes (var_die, decl);
21013
21014 if ((origin == NULL && !specialization_p)
21015 || (origin != NULL
21016 && !DECL_ABSTRACT_P (decl_or_origin)
21017 && variably_modified_type_p (TREE_TYPE (decl_or_origin),
21018 decl_function_context
21019 (decl_or_origin))))
21020 {
21021 tree type = TREE_TYPE (decl_or_origin);
21022
21023 if (decl_by_reference_p (decl_or_origin))
21024 add_type_attribute (var_die, TREE_TYPE (type), TYPE_UNQUALIFIED,
21025 context_die);
21026 else
21027 add_type_attribute (var_die, type, decl_quals (decl_or_origin),
21028 context_die);
21029 }
21030
21031 if (origin == NULL && !specialization_p)
21032 {
21033 if (TREE_PUBLIC (decl))
21034 add_AT_flag (var_die, DW_AT_external, 1);
21035
21036 if (DECL_ARTIFICIAL (decl))
21037 add_AT_flag (var_die, DW_AT_artificial, 1);
21038
21039 add_accessibility_attribute (var_die, decl);
21040 }
21041
21042 if (declaration)
21043 add_AT_flag (var_die, DW_AT_declaration, 1);
21044
21045 if (decl && (DECL_ABSTRACT_P (decl)
21046 || !old_die || is_declaration_die (old_die)))
21047 equate_decl_number_to_die (decl, var_die);
21048
21049 gen_variable_die_location:
21050 if (! declaration
21051 && (! DECL_ABSTRACT_P (decl_or_origin)
21052 /* Local static vars are shared between all clones/inlines,
21053 so emit DW_AT_location on the abstract DIE if DECL_RTL is
21054 already set. */
21055 || (TREE_CODE (decl_or_origin) == VAR_DECL
21056 && TREE_STATIC (decl_or_origin)
21057 && DECL_RTL_SET_P (decl_or_origin)))
21058 /* When abstract origin already has DW_AT_location attribute, no need
21059 to add it again. */
21060 && (origin_die == NULL || get_AT (origin_die, DW_AT_location) == NULL))
21061 {
21062 if (early_dwarf)
21063 add_pubname (decl_or_origin, var_die);
21064 else
21065 add_location_or_const_value_attribute (var_die, decl_or_origin,
21066 decl == NULL);
21067 }
21068 else
21069 tree_add_const_value_attribute_for_decl (var_die, decl_or_origin);
21070 }
21071
21072 /* Generate a DIE to represent a named constant. */
21073
21074 static void
21075 gen_const_die (tree decl, dw_die_ref context_die)
21076 {
21077 dw_die_ref const_die;
21078 tree type = TREE_TYPE (decl);
21079
21080 const_die = lookup_decl_die (decl);
21081 if (const_die)
21082 return;
21083
21084 const_die = new_die (DW_TAG_constant, context_die, decl);
21085 equate_decl_number_to_die (decl, const_die);
21086 add_name_and_src_coords_attributes (const_die, decl);
21087 add_type_attribute (const_die, type, TYPE_QUAL_CONST, context_die);
21088 if (TREE_PUBLIC (decl))
21089 add_AT_flag (const_die, DW_AT_external, 1);
21090 if (DECL_ARTIFICIAL (decl))
21091 add_AT_flag (const_die, DW_AT_artificial, 1);
21092 tree_add_const_value_attribute_for_decl (const_die, decl);
21093 }
21094
21095 /* Generate a DIE to represent a label identifier. */
21096
21097 static void
21098 gen_label_die (tree decl, dw_die_ref context_die)
21099 {
21100 tree origin = decl_ultimate_origin (decl);
21101 dw_die_ref lbl_die = lookup_decl_die (decl);
21102 rtx insn;
21103 char label[MAX_ARTIFICIAL_LABEL_BYTES];
21104
21105 if (!lbl_die)
21106 {
21107 lbl_die = new_die (DW_TAG_label, context_die, decl);
21108 equate_decl_number_to_die (decl, lbl_die);
21109
21110 if (origin != NULL)
21111 add_abstract_origin_attribute (lbl_die, origin);
21112 else
21113 add_name_and_src_coords_attributes (lbl_die, decl);
21114 }
21115
21116 if (DECL_ABSTRACT_P (decl))
21117 equate_decl_number_to_die (decl, lbl_die);
21118 else
21119 {
21120 insn = DECL_RTL_IF_SET (decl);
21121
21122 /* Deleted labels are programmer specified labels which have been
21123 eliminated because of various optimizations. We still emit them
21124 here so that it is possible to put breakpoints on them. */
21125 if (insn
21126 && (LABEL_P (insn)
21127 || ((NOTE_P (insn)
21128 && NOTE_KIND (insn) == NOTE_INSN_DELETED_LABEL))))
21129 {
21130 /* When optimization is enabled (via -O) some parts of the compiler
21131 (e.g. jump.c and cse.c) may try to delete CODE_LABEL insns which
21132 represent source-level labels which were explicitly declared by
21133 the user. This really shouldn't be happening though, so catch
21134 it if it ever does happen. */
21135 gcc_assert (!as_a<rtx_insn *> (insn)->deleted ());
21136
21137 ASM_GENERATE_INTERNAL_LABEL (label, "L", CODE_LABEL_NUMBER (insn));
21138 add_AT_lbl_id (lbl_die, DW_AT_low_pc, label);
21139 }
21140 else if (insn
21141 && NOTE_P (insn)
21142 && NOTE_KIND (insn) == NOTE_INSN_DELETED_DEBUG_LABEL
21143 && CODE_LABEL_NUMBER (insn) != -1)
21144 {
21145 ASM_GENERATE_INTERNAL_LABEL (label, "LDL", CODE_LABEL_NUMBER (insn));
21146 add_AT_lbl_id (lbl_die, DW_AT_low_pc, label);
21147 }
21148 }
21149 }
21150
21151 /* A helper function for gen_inlined_subroutine_die. Add source coordinate
21152 attributes to the DIE for a block STMT, to describe where the inlined
21153 function was called from. This is similar to add_src_coords_attributes. */
21154
21155 static inline void
21156 add_call_src_coords_attributes (tree stmt, dw_die_ref die)
21157 {
21158 expanded_location s = expand_location (BLOCK_SOURCE_LOCATION (stmt));
21159
21160 if (dwarf_version >= 3 || !dwarf_strict)
21161 {
21162 add_AT_file (die, DW_AT_call_file, lookup_filename (s.file));
21163 add_AT_unsigned (die, DW_AT_call_line, s.line);
21164 }
21165 }
21166
21167
21168 /* A helper function for gen_lexical_block_die and gen_inlined_subroutine_die.
21169 Add low_pc and high_pc attributes to the DIE for a block STMT. */
21170
21171 static inline void
21172 add_high_low_attributes (tree stmt, dw_die_ref die)
21173 {
21174 char label[MAX_ARTIFICIAL_LABEL_BYTES];
21175
21176 if (BLOCK_FRAGMENT_CHAIN (stmt)
21177 && (dwarf_version >= 3 || !dwarf_strict))
21178 {
21179 tree chain, superblock = NULL_TREE;
21180 dw_die_ref pdie;
21181 dw_attr_node *attr = NULL;
21182
21183 if (inlined_function_outer_scope_p (stmt))
21184 {
21185 ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_BEGIN_LABEL,
21186 BLOCK_NUMBER (stmt));
21187 add_AT_lbl_id (die, DW_AT_entry_pc, label);
21188 }
21189
21190 /* Optimize duplicate .debug_ranges lists or even tails of
21191 lists. If this BLOCK has same ranges as its supercontext,
21192 lookup DW_AT_ranges attribute in the supercontext (and
21193 recursively so), verify that the ranges_table contains the
21194 right values and use it instead of adding a new .debug_range. */
21195 for (chain = stmt, pdie = die;
21196 BLOCK_SAME_RANGE (chain);
21197 chain = BLOCK_SUPERCONTEXT (chain))
21198 {
21199 dw_attr_node *new_attr;
21200
21201 pdie = pdie->die_parent;
21202 if (pdie == NULL)
21203 break;
21204 if (BLOCK_SUPERCONTEXT (chain) == NULL_TREE)
21205 break;
21206 new_attr = get_AT (pdie, DW_AT_ranges);
21207 if (new_attr == NULL
21208 || new_attr->dw_attr_val.val_class != dw_val_class_range_list)
21209 break;
21210 attr = new_attr;
21211 superblock = BLOCK_SUPERCONTEXT (chain);
21212 }
21213 if (attr != NULL
21214 && (ranges_table[attr->dw_attr_val.v.val_offset
21215 / 2 / DWARF2_ADDR_SIZE].num
21216 == BLOCK_NUMBER (superblock))
21217 && BLOCK_FRAGMENT_CHAIN (superblock))
21218 {
21219 unsigned long off = attr->dw_attr_val.v.val_offset
21220 / 2 / DWARF2_ADDR_SIZE;
21221 unsigned long supercnt = 0, thiscnt = 0;
21222 for (chain = BLOCK_FRAGMENT_CHAIN (superblock);
21223 chain; chain = BLOCK_FRAGMENT_CHAIN (chain))
21224 {
21225 ++supercnt;
21226 gcc_checking_assert (ranges_table[off + supercnt].num
21227 == BLOCK_NUMBER (chain));
21228 }
21229 gcc_checking_assert (ranges_table[off + supercnt + 1].num == 0);
21230 for (chain = BLOCK_FRAGMENT_CHAIN (stmt);
21231 chain; chain = BLOCK_FRAGMENT_CHAIN (chain))
21232 ++thiscnt;
21233 gcc_assert (supercnt >= thiscnt);
21234 add_AT_range_list (die, DW_AT_ranges,
21235 ((off + supercnt - thiscnt)
21236 * 2 * DWARF2_ADDR_SIZE),
21237 false);
21238 return;
21239 }
21240
21241 add_AT_range_list (die, DW_AT_ranges, add_ranges (stmt), false);
21242
21243 chain = BLOCK_FRAGMENT_CHAIN (stmt);
21244 do
21245 {
21246 add_ranges (chain);
21247 chain = BLOCK_FRAGMENT_CHAIN (chain);
21248 }
21249 while (chain);
21250 add_ranges (NULL);
21251 }
21252 else
21253 {
21254 char label_high[MAX_ARTIFICIAL_LABEL_BYTES];
21255 ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_BEGIN_LABEL,
21256 BLOCK_NUMBER (stmt));
21257 ASM_GENERATE_INTERNAL_LABEL (label_high, BLOCK_END_LABEL,
21258 BLOCK_NUMBER (stmt));
21259 add_AT_low_high_pc (die, label, label_high, false);
21260 }
21261 }
21262
21263 /* Generate a DIE for a lexical block. */
21264
21265 static void
21266 gen_lexical_block_die (tree stmt, dw_die_ref context_die)
21267 {
21268 dw_die_ref old_die = BLOCK_DIE (stmt);
21269 dw_die_ref stmt_die = NULL;
21270 if (!old_die)
21271 {
21272 stmt_die = new_die (DW_TAG_lexical_block, context_die, stmt);
21273 BLOCK_DIE (stmt) = stmt_die;
21274 }
21275
21276 if (BLOCK_ABSTRACT (stmt))
21277 {
21278 if (old_die)
21279 {
21280 /* This must have been generated early and it won't even
21281 need location information since it's a DW_AT_inline
21282 function. */
21283 if (flag_checking)
21284 for (dw_die_ref c = context_die; c; c = c->die_parent)
21285 if (c->die_tag == DW_TAG_inlined_subroutine
21286 || c->die_tag == DW_TAG_subprogram)
21287 {
21288 gcc_assert (get_AT (c, DW_AT_inline));
21289 break;
21290 }
21291 return;
21292 }
21293 }
21294 else if (BLOCK_ABSTRACT_ORIGIN (stmt))
21295 {
21296 /* If this is an inlined instance, create a new lexical die for
21297 anything below to attach DW_AT_abstract_origin to. */
21298 if (old_die)
21299 {
21300 stmt_die = new_die (DW_TAG_lexical_block, context_die, stmt);
21301 BLOCK_DIE (stmt) = stmt_die;
21302 old_die = NULL;
21303 }
21304 }
21305
21306 if (old_die)
21307 stmt_die = old_die;
21308
21309 /* A non abstract block whose blocks have already been reordered
21310 should have the instruction range for this block. If so, set the
21311 high/low attributes. */
21312 if (!early_dwarf && !BLOCK_ABSTRACT (stmt) && TREE_ASM_WRITTEN (stmt))
21313 {
21314 gcc_assert (stmt_die);
21315 add_high_low_attributes (stmt, stmt_die);
21316 }
21317
21318 decls_for_scope (stmt, stmt_die);
21319 }
21320
21321 /* Generate a DIE for an inlined subprogram. */
21322
21323 static void
21324 gen_inlined_subroutine_die (tree stmt, dw_die_ref context_die)
21325 {
21326 tree decl;
21327
21328 /* The instance of function that is effectively being inlined shall not
21329 be abstract. */
21330 gcc_assert (! BLOCK_ABSTRACT (stmt));
21331
21332 decl = block_ultimate_origin (stmt);
21333
21334 /* Make sure any inlined functions are known to be inlineable. */
21335 gcc_checking_assert (DECL_ABSTRACT_P (decl)
21336 || cgraph_function_possibly_inlined_p (decl));
21337
21338 /* Emit info for the abstract instance first, if we haven't yet. We
21339 must emit this even if the block is abstract, otherwise when we
21340 emit the block below (or elsewhere), we may end up trying to emit
21341 a die whose origin die hasn't been emitted, and crashing. */
21342 dwarf2out_abstract_function (decl);
21343
21344 if (! BLOCK_ABSTRACT (stmt))
21345 {
21346 dw_die_ref subr_die
21347 = new_die (DW_TAG_inlined_subroutine, context_die, stmt);
21348
21349 if (call_arg_locations)
21350 BLOCK_DIE (stmt) = subr_die;
21351 add_abstract_origin_attribute (subr_die, decl);
21352 if (TREE_ASM_WRITTEN (stmt))
21353 add_high_low_attributes (stmt, subr_die);
21354 add_call_src_coords_attributes (stmt, subr_die);
21355
21356 decls_for_scope (stmt, subr_die);
21357 }
21358 }
21359
21360 /* Generate a DIE for a field in a record, or structure. CTX is required: see
21361 the comment for VLR_CONTEXT. */
21362
21363 static void
21364 gen_field_die (tree decl, struct vlr_context *ctx, dw_die_ref context_die)
21365 {
21366 dw_die_ref decl_die;
21367
21368 if (TREE_TYPE (decl) == error_mark_node)
21369 return;
21370
21371 decl_die = new_die (DW_TAG_member, context_die, decl);
21372 add_name_and_src_coords_attributes (decl_die, decl);
21373 add_type_attribute (decl_die, member_declared_type (decl),
21374 decl_quals (decl), context_die);
21375
21376 if (DECL_BIT_FIELD_TYPE (decl))
21377 {
21378 add_byte_size_attribute (decl_die, decl);
21379 add_bit_size_attribute (decl_die, decl);
21380 add_bit_offset_attribute (decl_die, decl, ctx);
21381 }
21382
21383 /* If we have a variant part offset, then we are supposed to process a member
21384 of a QUAL_UNION_TYPE, which is how we represent variant parts in
21385 trees. */
21386 gcc_assert (ctx->variant_part_offset == NULL_TREE
21387 || TREE_CODE (DECL_FIELD_CONTEXT (decl)) != QUAL_UNION_TYPE);
21388 if (TREE_CODE (DECL_FIELD_CONTEXT (decl)) != UNION_TYPE)
21389 add_data_member_location_attribute (decl_die, decl, ctx);
21390
21391 if (DECL_ARTIFICIAL (decl))
21392 add_AT_flag (decl_die, DW_AT_artificial, 1);
21393
21394 add_accessibility_attribute (decl_die, decl);
21395
21396 /* Equate decl number to die, so that we can look up this decl later on. */
21397 equate_decl_number_to_die (decl, decl_die);
21398 }
21399
21400 #if 0
21401 /* Don't generate either pointer_type DIEs or reference_type DIEs here.
21402 Use modified_type_die instead.
21403 We keep this code here just in case these types of DIEs may be needed to
21404 represent certain things in other languages (e.g. Pascal) someday. */
21405
21406 static void
21407 gen_pointer_type_die (tree type, dw_die_ref context_die)
21408 {
21409 dw_die_ref ptr_die
21410 = new_die (DW_TAG_pointer_type, scope_die_for (type, context_die), type);
21411
21412 equate_type_number_to_die (type, ptr_die);
21413 add_type_attribute (ptr_die, TREE_TYPE (type), TYPE_UNQUALIFIED,
21414 context_die);
21415 add_AT_unsigned (mod_type_die, DW_AT_byte_size, PTR_SIZE);
21416 }
21417
21418 /* Don't generate either pointer_type DIEs or reference_type DIEs here.
21419 Use modified_type_die instead.
21420 We keep this code here just in case these types of DIEs may be needed to
21421 represent certain things in other languages (e.g. Pascal) someday. */
21422
21423 static void
21424 gen_reference_type_die (tree type, dw_die_ref context_die)
21425 {
21426 dw_die_ref ref_die, scope_die = scope_die_for (type, context_die);
21427
21428 if (TYPE_REF_IS_RVALUE (type) && dwarf_version >= 4)
21429 ref_die = new_die (DW_TAG_rvalue_reference_type, scope_die, type);
21430 else
21431 ref_die = new_die (DW_TAG_reference_type, scope_die, type);
21432
21433 equate_type_number_to_die (type, ref_die);
21434 add_type_attribute (ref_die, TREE_TYPE (type), TYPE_UNQUALIFIED,
21435 context_die);
21436 add_AT_unsigned (mod_type_die, DW_AT_byte_size, PTR_SIZE);
21437 }
21438 #endif
21439
21440 /* Generate a DIE for a pointer to a member type. */
21441
21442 static void
21443 gen_ptr_to_mbr_type_die (tree type, dw_die_ref context_die)
21444 {
21445 dw_die_ref ptr_die
21446 = new_die (DW_TAG_ptr_to_member_type,
21447 scope_die_for (type, context_die), type);
21448
21449 equate_type_number_to_die (type, ptr_die);
21450 add_AT_die_ref (ptr_die, DW_AT_containing_type,
21451 lookup_type_die (TYPE_OFFSET_BASETYPE (type)));
21452 add_type_attribute (ptr_die, TREE_TYPE (type), TYPE_UNQUALIFIED,
21453 context_die);
21454 }
21455
21456 static char *producer_string;
21457
21458 /* Return a heap allocated producer string including command line options
21459 if -grecord-gcc-switches. */
21460
21461 static char *
21462 gen_producer_string (void)
21463 {
21464 size_t j;
21465 auto_vec<const char *> switches;
21466 const char *language_string = lang_hooks.name;
21467 char *producer, *tail;
21468 const char *p;
21469 size_t len = dwarf_record_gcc_switches ? 0 : 3;
21470 size_t plen = strlen (language_string) + 1 + strlen (version_string);
21471
21472 for (j = 1; dwarf_record_gcc_switches && j < save_decoded_options_count; j++)
21473 switch (save_decoded_options[j].opt_index)
21474 {
21475 case OPT_o:
21476 case OPT_d:
21477 case OPT_dumpbase:
21478 case OPT_dumpdir:
21479 case OPT_auxbase:
21480 case OPT_auxbase_strip:
21481 case OPT_quiet:
21482 case OPT_version:
21483 case OPT_v:
21484 case OPT_w:
21485 case OPT_L:
21486 case OPT_D:
21487 case OPT_I:
21488 case OPT_U:
21489 case OPT_SPECIAL_unknown:
21490 case OPT_SPECIAL_ignore:
21491 case OPT_SPECIAL_program_name:
21492 case OPT_SPECIAL_input_file:
21493 case OPT_grecord_gcc_switches:
21494 case OPT_gno_record_gcc_switches:
21495 case OPT__output_pch_:
21496 case OPT_fdiagnostics_show_location_:
21497 case OPT_fdiagnostics_show_option:
21498 case OPT_fdiagnostics_show_caret:
21499 case OPT_fdiagnostics_color_:
21500 case OPT_fverbose_asm:
21501 case OPT____:
21502 case OPT__sysroot_:
21503 case OPT_nostdinc:
21504 case OPT_nostdinc__:
21505 case OPT_fpreprocessed:
21506 case OPT_fltrans_output_list_:
21507 case OPT_fresolution_:
21508 case OPT_fdebug_prefix_map_:
21509 /* Ignore these. */
21510 continue;
21511 default:
21512 if (cl_options[save_decoded_options[j].opt_index].flags
21513 & CL_NO_DWARF_RECORD)
21514 continue;
21515 gcc_checking_assert (save_decoded_options[j].canonical_option[0][0]
21516 == '-');
21517 switch (save_decoded_options[j].canonical_option[0][1])
21518 {
21519 case 'M':
21520 case 'i':
21521 case 'W':
21522 continue;
21523 case 'f':
21524 if (strncmp (save_decoded_options[j].canonical_option[0] + 2,
21525 "dump", 4) == 0)
21526 continue;
21527 break;
21528 default:
21529 break;
21530 }
21531 switches.safe_push (save_decoded_options[j].orig_option_with_args_text);
21532 len += strlen (save_decoded_options[j].orig_option_with_args_text) + 1;
21533 break;
21534 }
21535
21536 producer = XNEWVEC (char, plen + 1 + len + 1);
21537 tail = producer;
21538 sprintf (tail, "%s %s", language_string, version_string);
21539 tail += plen;
21540
21541 FOR_EACH_VEC_ELT (switches, j, p)
21542 {
21543 len = strlen (p);
21544 *tail = ' ';
21545 memcpy (tail + 1, p, len);
21546 tail += len + 1;
21547 }
21548
21549 *tail = '\0';
21550 return producer;
21551 }
21552
21553 /* Given a C and/or C++ language/version string return the "highest".
21554 C++ is assumed to be "higher" than C in this case. Used for merging
21555 LTO translation unit languages. */
21556 static const char *
21557 highest_c_language (const char *lang1, const char *lang2)
21558 {
21559 if (strcmp ("GNU C++14", lang1) == 0 || strcmp ("GNU C++14", lang2) == 0)
21560 return "GNU C++14";
21561 if (strcmp ("GNU C++11", lang1) == 0 || strcmp ("GNU C++11", lang2) == 0)
21562 return "GNU C++11";
21563 if (strcmp ("GNU C++98", lang1) == 0 || strcmp ("GNU C++98", lang2) == 0)
21564 return "GNU C++98";
21565
21566 if (strcmp ("GNU C11", lang1) == 0 || strcmp ("GNU C11", lang2) == 0)
21567 return "GNU C11";
21568 if (strcmp ("GNU C99", lang1) == 0 || strcmp ("GNU C99", lang2) == 0)
21569 return "GNU C99";
21570 if (strcmp ("GNU C89", lang1) == 0 || strcmp ("GNU C89", lang2) == 0)
21571 return "GNU C89";
21572
21573 gcc_unreachable ();
21574 }
21575
21576
21577 /* Generate the DIE for the compilation unit. */
21578
21579 static dw_die_ref
21580 gen_compile_unit_die (const char *filename)
21581 {
21582 dw_die_ref die;
21583 const char *language_string = lang_hooks.name;
21584 int language;
21585
21586 die = new_die (DW_TAG_compile_unit, NULL, NULL);
21587
21588 if (filename)
21589 {
21590 add_name_attribute (die, filename);
21591 /* Don't add cwd for <built-in>. */
21592 if (!IS_ABSOLUTE_PATH (filename) && filename[0] != '<')
21593 add_comp_dir_attribute (die);
21594 }
21595
21596 add_AT_string (die, DW_AT_producer, producer_string ? producer_string : "");
21597
21598 /* If our producer is LTO try to figure out a common language to use
21599 from the global list of translation units. */
21600 if (strcmp (language_string, "GNU GIMPLE") == 0)
21601 {
21602 unsigned i;
21603 tree t;
21604 const char *common_lang = NULL;
21605
21606 FOR_EACH_VEC_SAFE_ELT (all_translation_units, i, t)
21607 {
21608 if (!TRANSLATION_UNIT_LANGUAGE (t))
21609 continue;
21610 if (!common_lang)
21611 common_lang = TRANSLATION_UNIT_LANGUAGE (t);
21612 else if (strcmp (common_lang, TRANSLATION_UNIT_LANGUAGE (t)) == 0)
21613 ;
21614 else if (strncmp (common_lang, "GNU C", 5) == 0
21615 && strncmp (TRANSLATION_UNIT_LANGUAGE (t), "GNU C", 5) == 0)
21616 /* Mixing C and C++ is ok, use C++ in that case. */
21617 common_lang = highest_c_language (common_lang,
21618 TRANSLATION_UNIT_LANGUAGE (t));
21619 else
21620 {
21621 /* Fall back to C. */
21622 common_lang = NULL;
21623 break;
21624 }
21625 }
21626
21627 if (common_lang)
21628 language_string = common_lang;
21629 }
21630
21631 language = DW_LANG_C;
21632 if (strncmp (language_string, "GNU C", 5) == 0
21633 && ISDIGIT (language_string[5]))
21634 {
21635 language = DW_LANG_C89;
21636 if (dwarf_version >= 3 || !dwarf_strict)
21637 {
21638 if (strcmp (language_string, "GNU C89") != 0)
21639 language = DW_LANG_C99;
21640
21641 if (dwarf_version >= 5 /* || !dwarf_strict */)
21642 if (strcmp (language_string, "GNU C11") == 0)
21643 language = DW_LANG_C11;
21644 }
21645 }
21646 else if (strncmp (language_string, "GNU C++", 7) == 0)
21647 {
21648 language = DW_LANG_C_plus_plus;
21649 if (dwarf_version >= 5 /* || !dwarf_strict */)
21650 {
21651 if (strcmp (language_string, "GNU C++11") == 0)
21652 language = DW_LANG_C_plus_plus_11;
21653 else if (strcmp (language_string, "GNU C++14") == 0)
21654 language = DW_LANG_C_plus_plus_14;
21655 }
21656 }
21657 else if (strcmp (language_string, "GNU F77") == 0)
21658 language = DW_LANG_Fortran77;
21659 else if (strcmp (language_string, "GNU Pascal") == 0)
21660 language = DW_LANG_Pascal83;
21661 else if (dwarf_version >= 3 || !dwarf_strict)
21662 {
21663 if (strcmp (language_string, "GNU Ada") == 0)
21664 language = DW_LANG_Ada95;
21665 else if (strncmp (language_string, "GNU Fortran", 11) == 0)
21666 {
21667 language = DW_LANG_Fortran95;
21668 if (dwarf_version >= 5 /* || !dwarf_strict */)
21669 {
21670 if (strcmp (language_string, "GNU Fortran2003") == 0)
21671 language = DW_LANG_Fortran03;
21672 else if (strcmp (language_string, "GNU Fortran2008") == 0)
21673 language = DW_LANG_Fortran08;
21674 }
21675 }
21676 else if (strcmp (language_string, "GNU Java") == 0)
21677 language = DW_LANG_Java;
21678 else if (strcmp (language_string, "GNU Objective-C") == 0)
21679 language = DW_LANG_ObjC;
21680 else if (strcmp (language_string, "GNU Objective-C++") == 0)
21681 language = DW_LANG_ObjC_plus_plus;
21682 else if (dwarf_version >= 5 || !dwarf_strict)
21683 {
21684 if (strcmp (language_string, "GNU Go") == 0)
21685 language = DW_LANG_Go;
21686 }
21687 }
21688 /* Use a degraded Fortran setting in strict DWARF2 so is_fortran works. */
21689 else if (strncmp (language_string, "GNU Fortran", 11) == 0)
21690 language = DW_LANG_Fortran90;
21691
21692 add_AT_unsigned (die, DW_AT_language, language);
21693
21694 switch (language)
21695 {
21696 case DW_LANG_Fortran77:
21697 case DW_LANG_Fortran90:
21698 case DW_LANG_Fortran95:
21699 case DW_LANG_Fortran03:
21700 case DW_LANG_Fortran08:
21701 /* Fortran has case insensitive identifiers and the front-end
21702 lowercases everything. */
21703 add_AT_unsigned (die, DW_AT_identifier_case, DW_ID_down_case);
21704 break;
21705 default:
21706 /* The default DW_ID_case_sensitive doesn't need to be specified. */
21707 break;
21708 }
21709 return die;
21710 }
21711
21712 /* Generate the DIE for a base class. */
21713
21714 static void
21715 gen_inheritance_die (tree binfo, tree access, tree type,
21716 dw_die_ref context_die)
21717 {
21718 dw_die_ref die = new_die (DW_TAG_inheritance, context_die, binfo);
21719 struct vlr_context ctx = { type, NULL };
21720
21721 add_type_attribute (die, BINFO_TYPE (binfo), TYPE_UNQUALIFIED, context_die);
21722 add_data_member_location_attribute (die, binfo, &ctx);
21723
21724 if (BINFO_VIRTUAL_P (binfo))
21725 add_AT_unsigned (die, DW_AT_virtuality, DW_VIRTUALITY_virtual);
21726
21727 /* In DWARF3+ the default is DW_ACCESS_private only in DW_TAG_class_type
21728 children, otherwise the default is DW_ACCESS_public. In DWARF2
21729 the default has always been DW_ACCESS_private. */
21730 if (access == access_public_node)
21731 {
21732 if (dwarf_version == 2
21733 || context_die->die_tag == DW_TAG_class_type)
21734 add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_public);
21735 }
21736 else if (access == access_protected_node)
21737 add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_protected);
21738 else if (dwarf_version > 2
21739 && context_die->die_tag != DW_TAG_class_type)
21740 add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_private);
21741 }
21742
21743 /* Return whether DECL is a FIELD_DECL that represents the variant part of a
21744 structure. */
21745 static bool
21746 is_variant_part (tree decl)
21747 {
21748 return (TREE_CODE (decl) == FIELD_DECL
21749 && TREE_CODE (TREE_TYPE (decl)) == QUAL_UNION_TYPE);
21750 }
21751
21752 /* Check that OPERAND is a reference to a field in STRUCT_TYPE. If it is,
21753 return the FIELD_DECL. Return NULL_TREE otherwise. */
21754
21755 static tree
21756 analyze_discr_in_predicate (tree operand, tree struct_type)
21757 {
21758 bool continue_stripping = true;
21759 while (continue_stripping)
21760 switch (TREE_CODE (operand))
21761 {
21762 CASE_CONVERT:
21763 operand = TREE_OPERAND (operand, 0);
21764 break;
21765 default:
21766 continue_stripping = false;
21767 break;
21768 }
21769
21770 /* Match field access to members of struct_type only. */
21771 if (TREE_CODE (operand) == COMPONENT_REF
21772 && TREE_CODE (TREE_OPERAND (operand, 0)) == PLACEHOLDER_EXPR
21773 && TREE_TYPE (TREE_OPERAND (operand, 0)) == struct_type
21774 && TREE_CODE (TREE_OPERAND (operand, 1)) == FIELD_DECL)
21775 return TREE_OPERAND (operand, 1);
21776 else
21777 return NULL_TREE;
21778 }
21779
21780 /* Check that SRC is a constant integer that can be represented as a native
21781 integer constant (either signed or unsigned). If so, store it into DEST and
21782 return true. Return false otherwise. */
21783
21784 static bool
21785 get_discr_value (tree src, dw_discr_value *dest)
21786 {
21787 bool is_unsigned = TYPE_UNSIGNED (TREE_TYPE (src));
21788
21789 if (TREE_CODE (src) != INTEGER_CST
21790 || !(is_unsigned ? tree_fits_uhwi_p (src) : tree_fits_shwi_p (src)))
21791 return false;
21792
21793 dest->pos = is_unsigned;
21794 if (is_unsigned)
21795 dest->v.uval = tree_to_uhwi (src);
21796 else
21797 dest->v.sval = tree_to_shwi (src);
21798
21799 return true;
21800 }
21801
21802 /* Try to extract synthetic properties out of VARIANT_PART_DECL, which is a
21803 FIELD_DECL in STRUCT_TYPE that represents a variant part. If unsuccessful,
21804 store NULL_TREE in DISCR_DECL. Otherwise:
21805
21806 - store the discriminant field in STRUCT_TYPE that controls the variant
21807 part to *DISCR_DECL
21808
21809 - put in *DISCR_LISTS_P an array where for each variant, the item
21810 represents the corresponding matching list of discriminant values.
21811
21812 - put in *DISCR_LISTS_LENGTH the number of variants, which is the size of
21813 the above array.
21814
21815 Note that when the array is allocated (i.e. when the analysis is
21816 successful), it is up to the caller to free the array. */
21817
21818 static void
21819 analyze_variants_discr (tree variant_part_decl,
21820 tree struct_type,
21821 tree *discr_decl,
21822 dw_discr_list_ref **discr_lists_p,
21823 unsigned *discr_lists_length)
21824 {
21825 tree variant_part_type = TREE_TYPE (variant_part_decl);
21826 tree variant;
21827 dw_discr_list_ref *discr_lists;
21828 unsigned i;
21829
21830 /* Compute how many variants there are in this variant part. */
21831 *discr_lists_length = 0;
21832 for (variant = TYPE_FIELDS (variant_part_type);
21833 variant != NULL_TREE;
21834 variant = DECL_CHAIN (variant))
21835 ++*discr_lists_length;
21836
21837 *discr_decl = NULL_TREE;
21838 *discr_lists_p
21839 = (dw_discr_list_ref *) xcalloc (*discr_lists_length,
21840 sizeof (**discr_lists_p));
21841 discr_lists = *discr_lists_p;
21842
21843 /* And then analyze all variants to extract discriminant information for all
21844 of them. This analysis is conservative: as soon as we detect something we
21845 do not support, abort everything and pretend we found nothing. */
21846 for (variant = TYPE_FIELDS (variant_part_type), i = 0;
21847 variant != NULL_TREE;
21848 variant = DECL_CHAIN (variant), ++i)
21849 {
21850 tree match_expr = DECL_QUALIFIER (variant);
21851
21852 /* Now, try to analyze the predicate and deduce a discriminant for
21853 it. */
21854 if (match_expr == boolean_true_node)
21855 /* Typically happens for the default variant: it matches all cases that
21856 previous variants rejected. Don't output any matching value for
21857 this one. */
21858 continue;
21859
21860 /* The following loop tries to iterate over each discriminant
21861 possibility: single values or ranges. */
21862 while (match_expr != NULL_TREE)
21863 {
21864 tree next_round_match_expr;
21865 tree candidate_discr = NULL_TREE;
21866 dw_discr_list_ref new_node = NULL;
21867
21868 /* Possibilities are matched one after the other by nested
21869 TRUTH_ORIF_EXPR expressions. Process the current possibility and
21870 continue with the rest at next iteration. */
21871 if (TREE_CODE (match_expr) == TRUTH_ORIF_EXPR)
21872 {
21873 next_round_match_expr = TREE_OPERAND (match_expr, 0);
21874 match_expr = TREE_OPERAND (match_expr, 1);
21875 }
21876 else
21877 next_round_match_expr = NULL_TREE;
21878
21879 if (match_expr == boolean_false_node)
21880 /* This sub-expression matches nothing: just wait for the next
21881 one. */
21882 ;
21883
21884 else if (TREE_CODE (match_expr) == EQ_EXPR)
21885 {
21886 /* We are matching: <discr_field> == <integer_cst>
21887 This sub-expression matches a single value. */
21888 tree integer_cst = TREE_OPERAND (match_expr, 1);
21889
21890 candidate_discr
21891 = analyze_discr_in_predicate (TREE_OPERAND (match_expr, 0),
21892 struct_type);
21893
21894 new_node = ggc_cleared_alloc<dw_discr_list_node> ();
21895 if (!get_discr_value (integer_cst,
21896 &new_node->dw_discr_lower_bound))
21897 goto abort;
21898 new_node->dw_discr_range = false;
21899 }
21900
21901 else if (TREE_CODE (match_expr) == TRUTH_ANDIF_EXPR)
21902 {
21903 /* We are matching:
21904 <discr_field> > <integer_cst>
21905 && <discr_field> < <integer_cst>.
21906 This sub-expression matches the range of values between the
21907 two matched integer constants. Note that comparisons can be
21908 inclusive or exclusive. */
21909 tree candidate_discr_1, candidate_discr_2;
21910 tree lower_cst, upper_cst;
21911 bool lower_cst_included, upper_cst_included;
21912 tree lower_op = TREE_OPERAND (match_expr, 0);
21913 tree upper_op = TREE_OPERAND (match_expr, 1);
21914
21915 /* When the comparison is exclusive, the integer constant is not
21916 the discriminant range bound we are looking for: we will have
21917 to increment or decrement it. */
21918 if (TREE_CODE (lower_op) == GE_EXPR)
21919 lower_cst_included = true;
21920 else if (TREE_CODE (lower_op) == GT_EXPR)
21921 lower_cst_included = false;
21922 else
21923 goto abort;
21924
21925 if (TREE_CODE (upper_op) == LE_EXPR)
21926 upper_cst_included = true;
21927 else if (TREE_CODE (upper_op) == LT_EXPR)
21928 upper_cst_included = false;
21929 else
21930 goto abort;
21931
21932 /* Extract the discriminant from the first operand and check it
21933 is consistant with the same analysis in the second
21934 operand. */
21935 candidate_discr_1
21936 = analyze_discr_in_predicate (TREE_OPERAND (lower_op, 0),
21937 struct_type);
21938 candidate_discr_2
21939 = analyze_discr_in_predicate (TREE_OPERAND (upper_op, 0),
21940 struct_type);
21941 if (candidate_discr_1 == candidate_discr_2)
21942 candidate_discr = candidate_discr_1;
21943 else
21944 goto abort;
21945
21946 /* Extract bounds from both. */
21947 new_node = ggc_cleared_alloc<dw_discr_list_node> ();
21948 lower_cst = TREE_OPERAND (lower_op, 1);
21949 upper_cst = TREE_OPERAND (upper_op, 1);
21950
21951 if (!lower_cst_included)
21952 lower_cst
21953 = fold (build2 (PLUS_EXPR, TREE_TYPE (lower_cst),
21954 lower_cst,
21955 build_int_cst (TREE_TYPE (lower_cst), 1)));
21956 if (!upper_cst_included)
21957 upper_cst
21958 = fold (build2 (MINUS_EXPR, TREE_TYPE (upper_cst),
21959 upper_cst,
21960 build_int_cst (TREE_TYPE (upper_cst), 1)));
21961
21962 if (!get_discr_value (lower_cst,
21963 &new_node->dw_discr_lower_bound)
21964 || !get_discr_value (upper_cst,
21965 &new_node->dw_discr_upper_bound))
21966 goto abort;
21967
21968 new_node->dw_discr_range = true;
21969 }
21970
21971 else
21972 /* Unsupported sub-expression: we cannot determine the set of
21973 matching discriminant values. Abort everything. */
21974 goto abort;
21975
21976 /* If the discriminant info is not consistant with what we saw so
21977 far, consider the analysis failed and abort everything. */
21978 if (candidate_discr == NULL_TREE
21979 || (*discr_decl != NULL_TREE && candidate_discr != *discr_decl))
21980 goto abort;
21981 else
21982 *discr_decl = candidate_discr;
21983
21984 if (new_node != NULL)
21985 {
21986 new_node->dw_discr_next = discr_lists[i];
21987 discr_lists[i] = new_node;
21988 }
21989 match_expr = next_round_match_expr;
21990 }
21991 }
21992
21993 /* If we reach this point, we could match everything we were interested
21994 in. */
21995 return;
21996
21997 abort:
21998 /* Clean all data structure and return no result. */
21999 free (*discr_lists_p);
22000 *discr_lists_p = NULL;
22001 *discr_decl = NULL_TREE;
22002 }
22003
22004 /* Generate a DIE to represent VARIANT_PART_DECL, a variant part that is part
22005 of STRUCT_TYPE, a record type. This new DIE is emitted as the next child
22006 under CONTEXT_DIE.
22007
22008 Variant parts are supposed to be implemented as a FIELD_DECL whose type is a
22009 QUAL_UNION_TYPE: this is the VARIANT_PART_DECL parameter. The members for
22010 this type, which are record types, represent the available variants and each
22011 has a DECL_QUALIFIER attribute. The discriminant and the discriminant
22012 values are inferred from these attributes.
22013
22014 In trees, the offsets for the fields inside these sub-records are relative
22015 to the variant part itself, whereas the corresponding DIEs should have
22016 offset attributes that are relative to the embedding record base address.
22017 This is why the caller must provide a VARIANT_PART_OFFSET expression: it
22018 must be an expression that computes the offset of the variant part to
22019 describe in DWARF. */
22020
22021 static void
22022 gen_variant_part (tree variant_part_decl, struct vlr_context *vlr_ctx,
22023 dw_die_ref context_die)
22024 {
22025 const tree variant_part_type = TREE_TYPE (variant_part_decl);
22026 tree variant_part_offset = vlr_ctx->variant_part_offset;
22027 struct loc_descr_context ctx = {
22028 vlr_ctx->struct_type, /* context_type */
22029 NULL_TREE, /* base_decl */
22030 NULL /* dpi */
22031 };
22032
22033 /* The FIELD_DECL node in STRUCT_TYPE that acts as the discriminant, or
22034 NULL_TREE if there is no such field. */
22035 tree discr_decl = NULL_TREE;
22036 dw_discr_list_ref *discr_lists;
22037 unsigned discr_lists_length = 0;
22038 unsigned i;
22039
22040 dw_die_ref dwarf_proc_die = NULL;
22041 dw_die_ref variant_part_die
22042 = new_die (DW_TAG_variant_part, context_die, variant_part_type);
22043
22044 equate_decl_number_to_die (variant_part_decl, variant_part_die);
22045
22046 analyze_variants_discr (variant_part_decl, vlr_ctx->struct_type,
22047 &discr_decl, &discr_lists, &discr_lists_length);
22048
22049 if (discr_decl != NULL_TREE)
22050 {
22051 dw_die_ref discr_die = lookup_decl_die (discr_decl);
22052
22053 if (discr_die)
22054 add_AT_die_ref (variant_part_die, DW_AT_discr, discr_die);
22055 else
22056 /* We have no DIE for the discriminant, so just discard all
22057 discrimimant information in the output. */
22058 discr_decl = NULL_TREE;
22059 }
22060
22061 /* If the offset for this variant part is more complex than a constant,
22062 create a DWARF procedure for it so that we will not have to generate DWARF
22063 expressions for it for each member. */
22064 if (TREE_CODE (variant_part_offset) != INTEGER_CST
22065 && (dwarf_version >= 3 || !dwarf_strict))
22066 {
22067 const tree dwarf_proc_fndecl
22068 = build_decl (UNKNOWN_LOCATION, FUNCTION_DECL, NULL_TREE,
22069 build_function_type (TREE_TYPE (variant_part_offset),
22070 NULL_TREE));
22071 const tree dwarf_proc_call = build_call_expr (dwarf_proc_fndecl, 0);
22072 const dw_loc_descr_ref dwarf_proc_body
22073 = loc_descriptor_from_tree (variant_part_offset, 0, &ctx);
22074
22075 dwarf_proc_die = new_dwarf_proc_die (dwarf_proc_body,
22076 dwarf_proc_fndecl, context_die);
22077 if (dwarf_proc_die != NULL)
22078 variant_part_offset = dwarf_proc_call;
22079 }
22080
22081 /* Output DIEs for all variants. */
22082 i = 0;
22083 for (tree variant = TYPE_FIELDS (variant_part_type);
22084 variant != NULL_TREE;
22085 variant = DECL_CHAIN (variant), ++i)
22086 {
22087 tree variant_type = TREE_TYPE (variant);
22088 dw_die_ref variant_die;
22089
22090 /* All variants (i.e. members of a variant part) are supposed to be
22091 encoded as structures. Sub-variant parts are QUAL_UNION_TYPE fields
22092 under these records. */
22093 gcc_assert (TREE_CODE (variant_type) == RECORD_TYPE);
22094
22095 variant_die = new_die (DW_TAG_variant, variant_part_die, variant_type);
22096 equate_decl_number_to_die (variant, variant_die);
22097
22098 /* Output discriminant values this variant matches, if any. */
22099 if (discr_decl == NULL || discr_lists[i] == NULL)
22100 /* In the case we have discriminant information at all, this is
22101 probably the default variant: as the standard says, don't
22102 output any discriminant value/list attribute. */
22103 ;
22104 else if (discr_lists[i]->dw_discr_next == NULL
22105 && !discr_lists[i]->dw_discr_range)
22106 /* If there is only one accepted value, don't bother outputting a
22107 list. */
22108 add_discr_value (variant_die, &discr_lists[i]->dw_discr_lower_bound);
22109 else
22110 add_discr_list (variant_die, discr_lists[i]);
22111
22112 for (tree member = TYPE_FIELDS (variant_type);
22113 member != NULL_TREE;
22114 member = DECL_CHAIN (member))
22115 {
22116 struct vlr_context vlr_sub_ctx = {
22117 vlr_ctx->struct_type, /* struct_type */
22118 NULL /* variant_part_offset */
22119 };
22120 if (is_variant_part (member))
22121 {
22122 /* All offsets for fields inside variant parts are relative to
22123 the top-level embedding RECORD_TYPE's base address. On the
22124 other hand, offsets in GCC's types are relative to the
22125 nested-most variant part. So we have to sum offsets each time
22126 we recurse. */
22127
22128 vlr_sub_ctx.variant_part_offset
22129 = fold (build2 (PLUS_EXPR, TREE_TYPE (variant_part_offset),
22130 variant_part_offset, byte_position (member)));
22131 gen_variant_part (member, &vlr_sub_ctx, variant_die);
22132 }
22133 else
22134 {
22135 vlr_sub_ctx.variant_part_offset = variant_part_offset;
22136 gen_decl_die (member, NULL, &vlr_sub_ctx, variant_die);
22137 }
22138 }
22139 }
22140
22141 free (discr_lists);
22142 }
22143
22144 /* Generate a DIE for a class member. */
22145
22146 static void
22147 gen_member_die (tree type, dw_die_ref context_die)
22148 {
22149 tree member;
22150 tree binfo = TYPE_BINFO (type);
22151 dw_die_ref child;
22152
22153 /* If this is not an incomplete type, output descriptions of each of its
22154 members. Note that as we output the DIEs necessary to represent the
22155 members of this record or union type, we will also be trying to output
22156 DIEs to represent the *types* of those members. However the `type'
22157 function (above) will specifically avoid generating type DIEs for member
22158 types *within* the list of member DIEs for this (containing) type except
22159 for those types (of members) which are explicitly marked as also being
22160 members of this (containing) type themselves. The g++ front- end can
22161 force any given type to be treated as a member of some other (containing)
22162 type by setting the TYPE_CONTEXT of the given (member) type to point to
22163 the TREE node representing the appropriate (containing) type. */
22164
22165 /* First output info about the base classes. */
22166 if (binfo)
22167 {
22168 vec<tree, va_gc> *accesses = BINFO_BASE_ACCESSES (binfo);
22169 int i;
22170 tree base;
22171
22172 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base); i++)
22173 gen_inheritance_die (base,
22174 (accesses ? (*accesses)[i] : access_public_node),
22175 type,
22176 context_die);
22177 }
22178
22179 /* Now output info about the data members and type members. */
22180 for (member = TYPE_FIELDS (type); member; member = DECL_CHAIN (member))
22181 {
22182 struct vlr_context vlr_ctx = { type, NULL_TREE };
22183
22184 /* If we thought we were generating minimal debug info for TYPE
22185 and then changed our minds, some of the member declarations
22186 may have already been defined. Don't define them again, but
22187 do put them in the right order. */
22188
22189 child = lookup_decl_die (member);
22190 if (child)
22191 splice_child_die (context_die, child);
22192
22193 /* Do not generate standard DWARF for variant parts if we are generating
22194 the corresponding GNAT encodings: DIEs generated for both would
22195 conflict in our mappings. */
22196 else if (is_variant_part (member)
22197 && gnat_encodings == DWARF_GNAT_ENCODINGS_MINIMAL)
22198 {
22199 vlr_ctx.variant_part_offset = byte_position (member);
22200 gen_variant_part (member, &vlr_ctx, context_die);
22201 }
22202 else
22203 {
22204 vlr_ctx.variant_part_offset = NULL_TREE;
22205 gen_decl_die (member, NULL, &vlr_ctx, context_die);
22206 }
22207 }
22208
22209 /* We do not keep type methods in type variants. */
22210 gcc_assert (TYPE_MAIN_VARIANT (type) == type);
22211 /* Now output info about the function members (if any). */
22212 if (TYPE_METHODS (type) != error_mark_node)
22213 for (member = TYPE_METHODS (type); member; member = DECL_CHAIN (member))
22214 {
22215 /* Don't include clones in the member list. */
22216 if (DECL_ABSTRACT_ORIGIN (member))
22217 continue;
22218 /* Nor constructors for anonymous classes. */
22219 if (DECL_ARTIFICIAL (member)
22220 && dwarf2_name (member, 0) == NULL)
22221 continue;
22222
22223 child = lookup_decl_die (member);
22224 if (child)
22225 splice_child_die (context_die, child);
22226 else
22227 gen_decl_die (member, NULL, NULL, context_die);
22228 }
22229 }
22230
22231 /* Generate a DIE for a structure or union type. If TYPE_DECL_SUPPRESS_DEBUG
22232 is set, we pretend that the type was never defined, so we only get the
22233 member DIEs needed by later specification DIEs. */
22234
22235 static void
22236 gen_struct_or_union_type_die (tree type, dw_die_ref context_die,
22237 enum debug_info_usage usage)
22238 {
22239 if (TREE_ASM_WRITTEN (type))
22240 {
22241 /* Fill in the bound of variable-length fields in late dwarf if
22242 still incomplete. */
22243 if (!early_dwarf && variably_modified_type_p (type, NULL))
22244 for (tree member = TYPE_FIELDS (type);
22245 member;
22246 member = DECL_CHAIN (member))
22247 fill_variable_array_bounds (TREE_TYPE (member));
22248 return;
22249 }
22250
22251 dw_die_ref type_die = lookup_type_die (type);
22252 dw_die_ref scope_die = 0;
22253 int nested = 0;
22254 int complete = (TYPE_SIZE (type)
22255 && (! TYPE_STUB_DECL (type)
22256 || ! TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type))));
22257 int ns_decl = (context_die && context_die->die_tag == DW_TAG_namespace);
22258 complete = complete && should_emit_struct_debug (type, usage);
22259
22260 if (type_die && ! complete)
22261 return;
22262
22263 if (TYPE_CONTEXT (type) != NULL_TREE
22264 && (AGGREGATE_TYPE_P (TYPE_CONTEXT (type))
22265 || TREE_CODE (TYPE_CONTEXT (type)) == NAMESPACE_DECL))
22266 nested = 1;
22267
22268 scope_die = scope_die_for (type, context_die);
22269
22270 /* Generate child dies for template paramaters. */
22271 if (!type_die && debug_info_level > DINFO_LEVEL_TERSE)
22272 schedule_generic_params_dies_gen (type);
22273
22274 if (! type_die || (nested && is_cu_die (scope_die)))
22275 /* First occurrence of type or toplevel definition of nested class. */
22276 {
22277 dw_die_ref old_die = type_die;
22278
22279 type_die = new_die (TREE_CODE (type) == RECORD_TYPE
22280 ? record_type_tag (type) : DW_TAG_union_type,
22281 scope_die, type);
22282 equate_type_number_to_die (type, type_die);
22283 if (old_die)
22284 add_AT_specification (type_die, old_die);
22285 else
22286 add_name_attribute (type_die, type_tag (type));
22287 }
22288 else
22289 remove_AT (type_die, DW_AT_declaration);
22290
22291 /* If this type has been completed, then give it a byte_size attribute and
22292 then give a list of members. */
22293 if (complete && !ns_decl)
22294 {
22295 /* Prevent infinite recursion in cases where the type of some member of
22296 this type is expressed in terms of this type itself. */
22297 TREE_ASM_WRITTEN (type) = 1;
22298 add_byte_size_attribute (type_die, type);
22299 if (TYPE_STUB_DECL (type) != NULL_TREE)
22300 {
22301 add_src_coords_attributes (type_die, TYPE_STUB_DECL (type));
22302 add_accessibility_attribute (type_die, TYPE_STUB_DECL (type));
22303 }
22304
22305 /* If the first reference to this type was as the return type of an
22306 inline function, then it may not have a parent. Fix this now. */
22307 if (type_die->die_parent == NULL)
22308 add_child_die (scope_die, type_die);
22309
22310 push_decl_scope (type);
22311 gen_member_die (type, type_die);
22312 pop_decl_scope ();
22313
22314 add_gnat_descriptive_type_attribute (type_die, type, context_die);
22315 if (TYPE_ARTIFICIAL (type))
22316 add_AT_flag (type_die, DW_AT_artificial, 1);
22317
22318 /* GNU extension: Record what type our vtable lives in. */
22319 if (TYPE_VFIELD (type))
22320 {
22321 tree vtype = DECL_FCONTEXT (TYPE_VFIELD (type));
22322
22323 gen_type_die (vtype, context_die);
22324 add_AT_die_ref (type_die, DW_AT_containing_type,
22325 lookup_type_die (vtype));
22326 }
22327 }
22328 else
22329 {
22330 add_AT_flag (type_die, DW_AT_declaration, 1);
22331
22332 /* We don't need to do this for function-local types. */
22333 if (TYPE_STUB_DECL (type)
22334 && ! decl_function_context (TYPE_STUB_DECL (type)))
22335 vec_safe_push (incomplete_types, type);
22336 }
22337
22338 if (get_AT (type_die, DW_AT_name))
22339 add_pubtype (type, type_die);
22340 }
22341
22342 /* Generate a DIE for a subroutine _type_. */
22343
22344 static void
22345 gen_subroutine_type_die (tree type, dw_die_ref context_die)
22346 {
22347 tree return_type = TREE_TYPE (type);
22348 dw_die_ref subr_die
22349 = new_die (DW_TAG_subroutine_type,
22350 scope_die_for (type, context_die), type);
22351
22352 equate_type_number_to_die (type, subr_die);
22353 add_prototyped_attribute (subr_die, type);
22354 add_type_attribute (subr_die, return_type, TYPE_UNQUALIFIED, context_die);
22355 gen_formal_types_die (type, subr_die);
22356
22357 if (get_AT (subr_die, DW_AT_name))
22358 add_pubtype (type, subr_die);
22359 }
22360
22361 /* Generate a DIE for a type definition. */
22362
22363 static void
22364 gen_typedef_die (tree decl, dw_die_ref context_die)
22365 {
22366 dw_die_ref type_die;
22367 tree origin;
22368
22369 if (TREE_ASM_WRITTEN (decl))
22370 {
22371 if (DECL_ORIGINAL_TYPE (decl))
22372 fill_variable_array_bounds (DECL_ORIGINAL_TYPE (decl));
22373 return;
22374 }
22375
22376 TREE_ASM_WRITTEN (decl) = 1;
22377 type_die = new_die (DW_TAG_typedef, context_die, decl);
22378 origin = decl_ultimate_origin (decl);
22379 if (origin != NULL)
22380 add_abstract_origin_attribute (type_die, origin);
22381 else
22382 {
22383 tree type;
22384
22385 add_name_and_src_coords_attributes (type_die, decl);
22386 if (DECL_ORIGINAL_TYPE (decl))
22387 {
22388 type = DECL_ORIGINAL_TYPE (decl);
22389
22390 if (type == error_mark_node)
22391 return;
22392
22393 gcc_assert (type != TREE_TYPE (decl));
22394 equate_type_number_to_die (TREE_TYPE (decl), type_die);
22395 }
22396 else
22397 {
22398 type = TREE_TYPE (decl);
22399
22400 if (type == error_mark_node)
22401 return;
22402
22403 if (is_naming_typedef_decl (TYPE_NAME (type)))
22404 {
22405 /* Here, we are in the case of decl being a typedef naming
22406 an anonymous type, e.g:
22407 typedef struct {...} foo;
22408 In that case TREE_TYPE (decl) is not a typedef variant
22409 type and TYPE_NAME of the anonymous type is set to the
22410 TYPE_DECL of the typedef. This construct is emitted by
22411 the C++ FE.
22412
22413 TYPE is the anonymous struct named by the typedef
22414 DECL. As we need the DW_AT_type attribute of the
22415 DW_TAG_typedef to point to the DIE of TYPE, let's
22416 generate that DIE right away. add_type_attribute
22417 called below will then pick (via lookup_type_die) that
22418 anonymous struct DIE. */
22419 if (!TREE_ASM_WRITTEN (type))
22420 gen_tagged_type_die (type, context_die, DINFO_USAGE_DIR_USE);
22421
22422 /* This is a GNU Extension. We are adding a
22423 DW_AT_linkage_name attribute to the DIE of the
22424 anonymous struct TYPE. The value of that attribute
22425 is the name of the typedef decl naming the anonymous
22426 struct. This greatly eases the work of consumers of
22427 this debug info. */
22428 add_linkage_attr (lookup_type_die (type), decl);
22429 }
22430 }
22431
22432 add_type_attribute (type_die, type, decl_quals (decl), context_die);
22433
22434 if (is_naming_typedef_decl (decl))
22435 /* We want that all subsequent calls to lookup_type_die with
22436 TYPE in argument yield the DW_TAG_typedef we have just
22437 created. */
22438 equate_type_number_to_die (type, type_die);
22439
22440 add_accessibility_attribute (type_die, decl);
22441 }
22442
22443 if (DECL_ABSTRACT_P (decl))
22444 equate_decl_number_to_die (decl, type_die);
22445
22446 if (get_AT (type_die, DW_AT_name))
22447 add_pubtype (decl, type_die);
22448 }
22449
22450 /* Generate a DIE for a struct, class, enum or union type. */
22451
22452 static void
22453 gen_tagged_type_die (tree type,
22454 dw_die_ref context_die,
22455 enum debug_info_usage usage)
22456 {
22457 int need_pop;
22458
22459 if (type == NULL_TREE
22460 || !is_tagged_type (type))
22461 return;
22462
22463 if (TREE_ASM_WRITTEN (type))
22464 need_pop = 0;
22465 /* If this is a nested type whose containing class hasn't been written
22466 out yet, writing it out will cover this one, too. This does not apply
22467 to instantiations of member class templates; they need to be added to
22468 the containing class as they are generated. FIXME: This hurts the
22469 idea of combining type decls from multiple TUs, since we can't predict
22470 what set of template instantiations we'll get. */
22471 else if (TYPE_CONTEXT (type)
22472 && AGGREGATE_TYPE_P (TYPE_CONTEXT (type))
22473 && ! TREE_ASM_WRITTEN (TYPE_CONTEXT (type)))
22474 {
22475 gen_type_die_with_usage (TYPE_CONTEXT (type), context_die, usage);
22476
22477 if (TREE_ASM_WRITTEN (type))
22478 return;
22479
22480 /* If that failed, attach ourselves to the stub. */
22481 push_decl_scope (TYPE_CONTEXT (type));
22482 context_die = lookup_type_die (TYPE_CONTEXT (type));
22483 need_pop = 1;
22484 }
22485 else if (TYPE_CONTEXT (type) != NULL_TREE
22486 && (TREE_CODE (TYPE_CONTEXT (type)) == FUNCTION_DECL))
22487 {
22488 /* If this type is local to a function that hasn't been written
22489 out yet, use a NULL context for now; it will be fixed up in
22490 decls_for_scope. */
22491 context_die = lookup_decl_die (TYPE_CONTEXT (type));
22492 /* A declaration DIE doesn't count; nested types need to go in the
22493 specification. */
22494 if (context_die && is_declaration_die (context_die))
22495 context_die = NULL;
22496 need_pop = 0;
22497 }
22498 else
22499 {
22500 context_die = declare_in_namespace (type, context_die);
22501 need_pop = 0;
22502 }
22503
22504 if (TREE_CODE (type) == ENUMERAL_TYPE)
22505 {
22506 /* This might have been written out by the call to
22507 declare_in_namespace. */
22508 if (!TREE_ASM_WRITTEN (type))
22509 gen_enumeration_type_die (type, context_die);
22510 }
22511 else
22512 gen_struct_or_union_type_die (type, context_die, usage);
22513
22514 if (need_pop)
22515 pop_decl_scope ();
22516
22517 /* Don't set TREE_ASM_WRITTEN on an incomplete struct; we want to fix
22518 it up if it is ever completed. gen_*_type_die will set it for us
22519 when appropriate. */
22520 }
22521
22522 /* Generate a type description DIE. */
22523
22524 static void
22525 gen_type_die_with_usage (tree type, dw_die_ref context_die,
22526 enum debug_info_usage usage)
22527 {
22528 struct array_descr_info info;
22529
22530 if (type == NULL_TREE || type == error_mark_node)
22531 return;
22532
22533 if (flag_checking && type)
22534 verify_type (type);
22535
22536 if (TYPE_NAME (type) != NULL_TREE
22537 && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
22538 && is_redundant_typedef (TYPE_NAME (type))
22539 && DECL_ORIGINAL_TYPE (TYPE_NAME (type)))
22540 /* The DECL of this type is a typedef we don't want to emit debug
22541 info for but we want debug info for its underlying typedef.
22542 This can happen for e.g, the injected-class-name of a C++
22543 type. */
22544 type = DECL_ORIGINAL_TYPE (TYPE_NAME (type));
22545
22546 /* If TYPE is a typedef type variant, let's generate debug info
22547 for the parent typedef which TYPE is a type of. */
22548 if (typedef_variant_p (type))
22549 {
22550 if (TREE_ASM_WRITTEN (type))
22551 return;
22552
22553 /* Prevent broken recursion; we can't hand off to the same type. */
22554 gcc_assert (DECL_ORIGINAL_TYPE (TYPE_NAME (type)) != type);
22555
22556 /* Give typedefs the right scope. */
22557 context_die = scope_die_for (type, context_die);
22558
22559 TREE_ASM_WRITTEN (type) = 1;
22560
22561 gen_decl_die (TYPE_NAME (type), NULL, NULL, context_die);
22562 return;
22563 }
22564
22565 /* If type is an anonymous tagged type named by a typedef, let's
22566 generate debug info for the typedef. */
22567 if (is_naming_typedef_decl (TYPE_NAME (type)))
22568 {
22569 /* Use the DIE of the containing namespace as the parent DIE of
22570 the type description DIE we want to generate. */
22571 if (DECL_CONTEXT (TYPE_NAME (type))
22572 && TREE_CODE (DECL_CONTEXT (TYPE_NAME (type))) == NAMESPACE_DECL)
22573 context_die = get_context_die (DECL_CONTEXT (TYPE_NAME (type)));
22574
22575 gen_decl_die (TYPE_NAME (type), NULL, NULL, context_die);
22576 return;
22577 }
22578
22579 /* We are going to output a DIE to represent the unqualified version
22580 of this type (i.e. without any const or volatile qualifiers) so
22581 get the main variant (i.e. the unqualified version) of this type
22582 now. (Vectors and arrays are special because the debugging info is in the
22583 cloned type itself). */
22584 if (TREE_CODE (type) != VECTOR_TYPE
22585 && TREE_CODE (type) != ARRAY_TYPE)
22586 type = type_main_variant (type);
22587
22588 /* If this is an array type with hidden descriptor, handle it first. */
22589 if (!TREE_ASM_WRITTEN (type)
22590 && lang_hooks.types.get_array_descr_info)
22591 {
22592 memset (&info, 0, sizeof (info));
22593 if (lang_hooks.types.get_array_descr_info (type, &info))
22594 {
22595 /* Fortran sometimes emits array types with no dimension. */
22596 gcc_assert (info.ndimensions >= 0
22597 && (info.ndimensions
22598 <= DWARF2OUT_ARRAY_DESCR_INFO_MAX_DIMEN));
22599 gen_descr_array_type_die (type, &info, context_die);
22600 TREE_ASM_WRITTEN (type) = 1;
22601 return;
22602 }
22603 }
22604
22605 if (TREE_ASM_WRITTEN (type))
22606 {
22607 /* Variable-length types may be incomplete even if
22608 TREE_ASM_WRITTEN. For such types, fall through to
22609 gen_array_type_die() and possibly fill in
22610 DW_AT_{upper,lower}_bound attributes. */
22611 if ((TREE_CODE (type) != ARRAY_TYPE
22612 && TREE_CODE (type) != RECORD_TYPE
22613 && TREE_CODE (type) != UNION_TYPE
22614 && TREE_CODE (type) != QUAL_UNION_TYPE)
22615 || !variably_modified_type_p (type, NULL))
22616 return;
22617 }
22618
22619 switch (TREE_CODE (type))
22620 {
22621 case ERROR_MARK:
22622 break;
22623
22624 case POINTER_TYPE:
22625 case REFERENCE_TYPE:
22626 /* We must set TREE_ASM_WRITTEN in case this is a recursive type. This
22627 ensures that the gen_type_die recursion will terminate even if the
22628 type is recursive. Recursive types are possible in Ada. */
22629 /* ??? We could perhaps do this for all types before the switch
22630 statement. */
22631 TREE_ASM_WRITTEN (type) = 1;
22632
22633 /* For these types, all that is required is that we output a DIE (or a
22634 set of DIEs) to represent the "basis" type. */
22635 gen_type_die_with_usage (TREE_TYPE (type), context_die,
22636 DINFO_USAGE_IND_USE);
22637 break;
22638
22639 case OFFSET_TYPE:
22640 /* This code is used for C++ pointer-to-data-member types.
22641 Output a description of the relevant class type. */
22642 gen_type_die_with_usage (TYPE_OFFSET_BASETYPE (type), context_die,
22643 DINFO_USAGE_IND_USE);
22644
22645 /* Output a description of the type of the object pointed to. */
22646 gen_type_die_with_usage (TREE_TYPE (type), context_die,
22647 DINFO_USAGE_IND_USE);
22648
22649 /* Now output a DIE to represent this pointer-to-data-member type
22650 itself. */
22651 gen_ptr_to_mbr_type_die (type, context_die);
22652 break;
22653
22654 case FUNCTION_TYPE:
22655 /* Force out return type (in case it wasn't forced out already). */
22656 gen_type_die_with_usage (TREE_TYPE (type), context_die,
22657 DINFO_USAGE_DIR_USE);
22658 gen_subroutine_type_die (type, context_die);
22659 break;
22660
22661 case METHOD_TYPE:
22662 /* Force out return type (in case it wasn't forced out already). */
22663 gen_type_die_with_usage (TREE_TYPE (type), context_die,
22664 DINFO_USAGE_DIR_USE);
22665 gen_subroutine_type_die (type, context_die);
22666 break;
22667
22668 case ARRAY_TYPE:
22669 case VECTOR_TYPE:
22670 gen_array_type_die (type, context_die);
22671 break;
22672
22673 case ENUMERAL_TYPE:
22674 case RECORD_TYPE:
22675 case UNION_TYPE:
22676 case QUAL_UNION_TYPE:
22677 gen_tagged_type_die (type, context_die, usage);
22678 return;
22679
22680 case VOID_TYPE:
22681 case INTEGER_TYPE:
22682 case REAL_TYPE:
22683 case FIXED_POINT_TYPE:
22684 case COMPLEX_TYPE:
22685 case BOOLEAN_TYPE:
22686 case POINTER_BOUNDS_TYPE:
22687 /* No DIEs needed for fundamental types. */
22688 break;
22689
22690 case NULLPTR_TYPE:
22691 case LANG_TYPE:
22692 /* Just use DW_TAG_unspecified_type. */
22693 {
22694 dw_die_ref type_die = lookup_type_die (type);
22695 if (type_die == NULL)
22696 {
22697 tree name = TYPE_IDENTIFIER (type);
22698 type_die = new_die (DW_TAG_unspecified_type, comp_unit_die (),
22699 type);
22700 add_name_attribute (type_die, IDENTIFIER_POINTER (name));
22701 equate_type_number_to_die (type, type_die);
22702 }
22703 }
22704 break;
22705
22706 default:
22707 if (is_cxx_auto (type))
22708 {
22709 tree name = TYPE_IDENTIFIER (type);
22710 dw_die_ref *die = (name == get_identifier ("auto")
22711 ? &auto_die : &decltype_auto_die);
22712 if (!*die)
22713 {
22714 *die = new_die (DW_TAG_unspecified_type,
22715 comp_unit_die (), NULL_TREE);
22716 add_name_attribute (*die, IDENTIFIER_POINTER (name));
22717 }
22718 equate_type_number_to_die (type, *die);
22719 break;
22720 }
22721 gcc_unreachable ();
22722 }
22723
22724 TREE_ASM_WRITTEN (type) = 1;
22725 }
22726
22727 static void
22728 gen_type_die (tree type, dw_die_ref context_die)
22729 {
22730 if (type != error_mark_node)
22731 {
22732 gen_type_die_with_usage (type, context_die, DINFO_USAGE_DIR_USE);
22733 if (flag_checking)
22734 {
22735 dw_die_ref die = lookup_type_die (type);
22736 if (die)
22737 check_die (die);
22738 }
22739 }
22740 }
22741
22742 /* Generate a DW_TAG_lexical_block DIE followed by DIEs to represent all of the
22743 things which are local to the given block. */
22744
22745 static void
22746 gen_block_die (tree stmt, dw_die_ref context_die)
22747 {
22748 int must_output_die = 0;
22749 bool inlined_func;
22750
22751 /* Ignore blocks that are NULL. */
22752 if (stmt == NULL_TREE)
22753 return;
22754
22755 inlined_func = inlined_function_outer_scope_p (stmt);
22756
22757 /* If the block is one fragment of a non-contiguous block, do not
22758 process the variables, since they will have been done by the
22759 origin block. Do process subblocks. */
22760 if (BLOCK_FRAGMENT_ORIGIN (stmt))
22761 {
22762 tree sub;
22763
22764 for (sub = BLOCK_SUBBLOCKS (stmt); sub; sub = BLOCK_CHAIN (sub))
22765 gen_block_die (sub, context_die);
22766
22767 return;
22768 }
22769
22770 /* Determine if we need to output any Dwarf DIEs at all to represent this
22771 block. */
22772 if (inlined_func)
22773 /* The outer scopes for inlinings *must* always be represented. We
22774 generate DW_TAG_inlined_subroutine DIEs for them. (See below.) */
22775 must_output_die = 1;
22776 else
22777 {
22778 /* Determine if this block directly contains any "significant"
22779 local declarations which we will need to output DIEs for. */
22780 if (debug_info_level > DINFO_LEVEL_TERSE)
22781 /* We are not in terse mode so *any* local declaration counts
22782 as being a "significant" one. */
22783 must_output_die = ((BLOCK_VARS (stmt) != NULL
22784 || BLOCK_NUM_NONLOCALIZED_VARS (stmt))
22785 && (TREE_USED (stmt)
22786 || TREE_ASM_WRITTEN (stmt)
22787 || BLOCK_ABSTRACT (stmt)));
22788 else if ((TREE_USED (stmt)
22789 || TREE_ASM_WRITTEN (stmt)
22790 || BLOCK_ABSTRACT (stmt))
22791 && !dwarf2out_ignore_block (stmt))
22792 must_output_die = 1;
22793 }
22794
22795 /* It would be a waste of space to generate a Dwarf DW_TAG_lexical_block
22796 DIE for any block which contains no significant local declarations at
22797 all. Rather, in such cases we just call `decls_for_scope' so that any
22798 needed Dwarf info for any sub-blocks will get properly generated. Note
22799 that in terse mode, our definition of what constitutes a "significant"
22800 local declaration gets restricted to include only inlined function
22801 instances and local (nested) function definitions. */
22802 if (must_output_die)
22803 {
22804 if (inlined_func)
22805 {
22806 /* If STMT block is abstract, that means we have been called
22807 indirectly from dwarf2out_abstract_function.
22808 That function rightfully marks the descendent blocks (of
22809 the abstract function it is dealing with) as being abstract,
22810 precisely to prevent us from emitting any
22811 DW_TAG_inlined_subroutine DIE as a descendent
22812 of an abstract function instance. So in that case, we should
22813 not call gen_inlined_subroutine_die.
22814
22815 Later though, when cgraph asks dwarf2out to emit info
22816 for the concrete instance of the function decl into which
22817 the concrete instance of STMT got inlined, the later will lead
22818 to the generation of a DW_TAG_inlined_subroutine DIE. */
22819 if (! BLOCK_ABSTRACT (stmt))
22820 gen_inlined_subroutine_die (stmt, context_die);
22821 }
22822 else
22823 gen_lexical_block_die (stmt, context_die);
22824 }
22825 else
22826 decls_for_scope (stmt, context_die);
22827 }
22828
22829 /* Process variable DECL (or variable with origin ORIGIN) within
22830 block STMT and add it to CONTEXT_DIE. */
22831 static void
22832 process_scope_var (tree stmt, tree decl, tree origin, dw_die_ref context_die)
22833 {
22834 dw_die_ref die;
22835 tree decl_or_origin = decl ? decl : origin;
22836
22837 if (TREE_CODE (decl_or_origin) == FUNCTION_DECL)
22838 die = lookup_decl_die (decl_or_origin);
22839 else if (TREE_CODE (decl_or_origin) == TYPE_DECL
22840 && TYPE_DECL_IS_STUB (decl_or_origin))
22841 die = lookup_type_die (TREE_TYPE (decl_or_origin));
22842 else
22843 die = NULL;
22844
22845 if (die != NULL && die->die_parent == NULL)
22846 add_child_die (context_die, die);
22847 else if (TREE_CODE (decl_or_origin) == IMPORTED_DECL)
22848 {
22849 if (early_dwarf)
22850 dwarf2out_imported_module_or_decl_1 (decl_or_origin, DECL_NAME (decl_or_origin),
22851 stmt, context_die);
22852 }
22853 else
22854 gen_decl_die (decl, origin, NULL, context_die);
22855 }
22856
22857 /* Generate all of the decls declared within a given scope and (recursively)
22858 all of its sub-blocks. */
22859
22860 static void
22861 decls_for_scope (tree stmt, dw_die_ref context_die)
22862 {
22863 tree decl;
22864 unsigned int i;
22865 tree subblocks;
22866
22867 /* Ignore NULL blocks. */
22868 if (stmt == NULL_TREE)
22869 return;
22870
22871 /* Output the DIEs to represent all of the data objects and typedefs
22872 declared directly within this block but not within any nested
22873 sub-blocks. Also, nested function and tag DIEs have been
22874 generated with a parent of NULL; fix that up now. We don't
22875 have to do this if we're at -g1. */
22876 if (debug_info_level > DINFO_LEVEL_TERSE)
22877 {
22878 for (decl = BLOCK_VARS (stmt); decl != NULL; decl = DECL_CHAIN (decl))
22879 process_scope_var (stmt, decl, NULL_TREE, context_die);
22880 for (i = 0; i < BLOCK_NUM_NONLOCALIZED_VARS (stmt); i++)
22881 process_scope_var (stmt, NULL, BLOCK_NONLOCALIZED_VAR (stmt, i),
22882 context_die);
22883 }
22884
22885 /* Even if we're at -g1, we need to process the subblocks in order to get
22886 inlined call information. */
22887
22888 /* Output the DIEs to represent all sub-blocks (and the items declared
22889 therein) of this block. */
22890 for (subblocks = BLOCK_SUBBLOCKS (stmt);
22891 subblocks != NULL;
22892 subblocks = BLOCK_CHAIN (subblocks))
22893 gen_block_die (subblocks, context_die);
22894 }
22895
22896 /* Is this a typedef we can avoid emitting? */
22897
22898 bool
22899 is_redundant_typedef (const_tree decl)
22900 {
22901 if (TYPE_DECL_IS_STUB (decl))
22902 return true;
22903
22904 if (DECL_ARTIFICIAL (decl)
22905 && DECL_CONTEXT (decl)
22906 && is_tagged_type (DECL_CONTEXT (decl))
22907 && TREE_CODE (TYPE_NAME (DECL_CONTEXT (decl))) == TYPE_DECL
22908 && DECL_NAME (decl) == DECL_NAME (TYPE_NAME (DECL_CONTEXT (decl))))
22909 /* Also ignore the artificial member typedef for the class name. */
22910 return true;
22911
22912 return false;
22913 }
22914
22915 /* Return TRUE if TYPE is a typedef that names a type for linkage
22916 purposes. This kind of typedefs is produced by the C++ FE for
22917 constructs like:
22918
22919 typedef struct {...} foo;
22920
22921 In that case, there is no typedef variant type produced for foo.
22922 Rather, the TREE_TYPE of the TYPE_DECL of foo is the anonymous
22923 struct type. */
22924
22925 static bool
22926 is_naming_typedef_decl (const_tree decl)
22927 {
22928 if (decl == NULL_TREE
22929 || TREE_CODE (decl) != TYPE_DECL
22930 || !is_tagged_type (TREE_TYPE (decl))
22931 || DECL_IS_BUILTIN (decl)
22932 || is_redundant_typedef (decl)
22933 /* It looks like Ada produces TYPE_DECLs that are very similar
22934 to C++ naming typedefs but that have different
22935 semantics. Let's be specific to c++ for now. */
22936 || !is_cxx ())
22937 return FALSE;
22938
22939 return (DECL_ORIGINAL_TYPE (decl) == NULL_TREE
22940 && TYPE_NAME (TREE_TYPE (decl)) == decl
22941 && (TYPE_STUB_DECL (TREE_TYPE (decl))
22942 != TYPE_NAME (TREE_TYPE (decl))));
22943 }
22944
22945 /* Looks up the DIE for a context. */
22946
22947 static inline dw_die_ref
22948 lookup_context_die (tree context)
22949 {
22950 if (context)
22951 {
22952 /* Find die that represents this context. */
22953 if (TYPE_P (context))
22954 {
22955 context = TYPE_MAIN_VARIANT (context);
22956 dw_die_ref ctx = lookup_type_die (context);
22957 if (!ctx)
22958 return NULL;
22959 return strip_naming_typedef (context, ctx);
22960 }
22961 else
22962 return lookup_decl_die (context);
22963 }
22964 return comp_unit_die ();
22965 }
22966
22967 /* Returns the DIE for a context. */
22968
22969 static inline dw_die_ref
22970 get_context_die (tree context)
22971 {
22972 if (context)
22973 {
22974 /* Find die that represents this context. */
22975 if (TYPE_P (context))
22976 {
22977 context = TYPE_MAIN_VARIANT (context);
22978 return strip_naming_typedef (context, force_type_die (context));
22979 }
22980 else
22981 return force_decl_die (context);
22982 }
22983 return comp_unit_die ();
22984 }
22985
22986 /* Returns the DIE for decl. A DIE will always be returned. */
22987
22988 static dw_die_ref
22989 force_decl_die (tree decl)
22990 {
22991 dw_die_ref decl_die;
22992 unsigned saved_external_flag;
22993 tree save_fn = NULL_TREE;
22994 decl_die = lookup_decl_die (decl);
22995 if (!decl_die)
22996 {
22997 dw_die_ref context_die = get_context_die (DECL_CONTEXT (decl));
22998
22999 decl_die = lookup_decl_die (decl);
23000 if (decl_die)
23001 return decl_die;
23002
23003 switch (TREE_CODE (decl))
23004 {
23005 case FUNCTION_DECL:
23006 /* Clear current_function_decl, so that gen_subprogram_die thinks
23007 that this is a declaration. At this point, we just want to force
23008 declaration die. */
23009 save_fn = current_function_decl;
23010 current_function_decl = NULL_TREE;
23011 gen_subprogram_die (decl, context_die);
23012 current_function_decl = save_fn;
23013 break;
23014
23015 case VAR_DECL:
23016 /* Set external flag to force declaration die. Restore it after
23017 gen_decl_die() call. */
23018 saved_external_flag = DECL_EXTERNAL (decl);
23019 DECL_EXTERNAL (decl) = 1;
23020 gen_decl_die (decl, NULL, NULL, context_die);
23021 DECL_EXTERNAL (decl) = saved_external_flag;
23022 break;
23023
23024 case NAMESPACE_DECL:
23025 if (dwarf_version >= 3 || !dwarf_strict)
23026 dwarf2out_decl (decl);
23027 else
23028 /* DWARF2 has neither DW_TAG_module, nor DW_TAG_namespace. */
23029 decl_die = comp_unit_die ();
23030 break;
23031
23032 case TRANSLATION_UNIT_DECL:
23033 decl_die = comp_unit_die ();
23034 break;
23035
23036 default:
23037 gcc_unreachable ();
23038 }
23039
23040 /* We should be able to find the DIE now. */
23041 if (!decl_die)
23042 decl_die = lookup_decl_die (decl);
23043 gcc_assert (decl_die);
23044 }
23045
23046 return decl_die;
23047 }
23048
23049 /* Returns the DIE for TYPE, that must not be a base type. A DIE is
23050 always returned. */
23051
23052 static dw_die_ref
23053 force_type_die (tree type)
23054 {
23055 dw_die_ref type_die;
23056
23057 type_die = lookup_type_die (type);
23058 if (!type_die)
23059 {
23060 dw_die_ref context_die = get_context_die (TYPE_CONTEXT (type));
23061
23062 type_die = modified_type_die (type, TYPE_QUALS_NO_ADDR_SPACE (type),
23063 context_die);
23064 gcc_assert (type_die);
23065 }
23066 return type_die;
23067 }
23068
23069 /* Force out any required namespaces to be able to output DECL,
23070 and return the new context_die for it, if it's changed. */
23071
23072 static dw_die_ref
23073 setup_namespace_context (tree thing, dw_die_ref context_die)
23074 {
23075 tree context = (DECL_P (thing)
23076 ? DECL_CONTEXT (thing) : TYPE_CONTEXT (thing));
23077 if (context && TREE_CODE (context) == NAMESPACE_DECL)
23078 /* Force out the namespace. */
23079 context_die = force_decl_die (context);
23080
23081 return context_die;
23082 }
23083
23084 /* Emit a declaration DIE for THING (which is either a DECL or a tagged
23085 type) within its namespace, if appropriate.
23086
23087 For compatibility with older debuggers, namespace DIEs only contain
23088 declarations; all definitions are emitted at CU scope, with
23089 DW_AT_specification pointing to the declaration (like with class
23090 members). */
23091
23092 static dw_die_ref
23093 declare_in_namespace (tree thing, dw_die_ref context_die)
23094 {
23095 dw_die_ref ns_context;
23096
23097 if (debug_info_level <= DINFO_LEVEL_TERSE)
23098 return context_die;
23099
23100 /* External declarations in the local scope only need to be emitted
23101 once, not once in the namespace and once in the scope.
23102
23103 This avoids declaring the `extern' below in the
23104 namespace DIE as well as in the innermost scope:
23105
23106 namespace S
23107 {
23108 int i=5;
23109 int foo()
23110 {
23111 int i=8;
23112 extern int i;
23113 return i;
23114 }
23115 }
23116 */
23117 if (DECL_P (thing) && DECL_EXTERNAL (thing) && local_scope_p (context_die))
23118 return context_die;
23119
23120 /* If this decl is from an inlined function, then don't try to emit it in its
23121 namespace, as we will get confused. It would have already been emitted
23122 when the abstract instance of the inline function was emitted anyways. */
23123 if (DECL_P (thing) && DECL_ABSTRACT_ORIGIN (thing))
23124 return context_die;
23125
23126 ns_context = setup_namespace_context (thing, context_die);
23127
23128 if (ns_context != context_die)
23129 {
23130 if (is_fortran ())
23131 return ns_context;
23132 if (DECL_P (thing))
23133 gen_decl_die (thing, NULL, NULL, ns_context);
23134 else
23135 gen_type_die (thing, ns_context);
23136 }
23137 return context_die;
23138 }
23139
23140 /* Generate a DIE for a namespace or namespace alias. */
23141
23142 static void
23143 gen_namespace_die (tree decl, dw_die_ref context_die)
23144 {
23145 dw_die_ref namespace_die;
23146
23147 /* Namespace aliases have a DECL_ABSTRACT_ORIGIN of the namespace
23148 they are an alias of. */
23149 if (DECL_ABSTRACT_ORIGIN (decl) == NULL)
23150 {
23151 /* Output a real namespace or module. */
23152 context_die = setup_namespace_context (decl, comp_unit_die ());
23153 namespace_die = new_die (is_fortran ()
23154 ? DW_TAG_module : DW_TAG_namespace,
23155 context_die, decl);
23156 /* For Fortran modules defined in different CU don't add src coords. */
23157 if (namespace_die->die_tag == DW_TAG_module && DECL_EXTERNAL (decl))
23158 {
23159 const char *name = dwarf2_name (decl, 0);
23160 if (name)
23161 add_name_attribute (namespace_die, name);
23162 }
23163 else
23164 add_name_and_src_coords_attributes (namespace_die, decl);
23165 if (DECL_EXTERNAL (decl))
23166 add_AT_flag (namespace_die, DW_AT_declaration, 1);
23167 equate_decl_number_to_die (decl, namespace_die);
23168 }
23169 else
23170 {
23171 /* Output a namespace alias. */
23172
23173 /* Force out the namespace we are an alias of, if necessary. */
23174 dw_die_ref origin_die
23175 = force_decl_die (DECL_ABSTRACT_ORIGIN (decl));
23176
23177 if (DECL_FILE_SCOPE_P (decl)
23178 || TREE_CODE (DECL_CONTEXT (decl)) == NAMESPACE_DECL)
23179 context_die = setup_namespace_context (decl, comp_unit_die ());
23180 /* Now create the namespace alias DIE. */
23181 namespace_die = new_die (DW_TAG_imported_declaration, context_die, decl);
23182 add_name_and_src_coords_attributes (namespace_die, decl);
23183 add_AT_die_ref (namespace_die, DW_AT_import, origin_die);
23184 equate_decl_number_to_die (decl, namespace_die);
23185 }
23186 /* Bypass dwarf2_name's check for DECL_NAMELESS. */
23187 if (want_pubnames ())
23188 add_pubname_string (lang_hooks.dwarf_name (decl, 1), namespace_die);
23189 }
23190
23191 /* Generate Dwarf debug information for a decl described by DECL.
23192 The return value is currently only meaningful for PARM_DECLs,
23193 for all other decls it returns NULL.
23194
23195 If DECL is a FIELD_DECL, CTX is required: see the comment for VLR_CONTEXT.
23196 It can be NULL otherwise. */
23197
23198 static dw_die_ref
23199 gen_decl_die (tree decl, tree origin, struct vlr_context *ctx,
23200 dw_die_ref context_die)
23201 {
23202 tree decl_or_origin = decl ? decl : origin;
23203 tree class_origin = NULL, ultimate_origin;
23204
23205 if (DECL_P (decl_or_origin) && DECL_IGNORED_P (decl_or_origin))
23206 return NULL;
23207
23208 /* Ignore pointer bounds decls. */
23209 if (DECL_P (decl_or_origin)
23210 && TREE_TYPE (decl_or_origin)
23211 && POINTER_BOUNDS_P (decl_or_origin))
23212 return NULL;
23213
23214 switch (TREE_CODE (decl_or_origin))
23215 {
23216 case ERROR_MARK:
23217 break;
23218
23219 case CONST_DECL:
23220 if (!is_fortran () && !is_ada ())
23221 {
23222 /* The individual enumerators of an enum type get output when we output
23223 the Dwarf representation of the relevant enum type itself. */
23224 break;
23225 }
23226
23227 /* Emit its type. */
23228 gen_type_die (TREE_TYPE (decl), context_die);
23229
23230 /* And its containing namespace. */
23231 context_die = declare_in_namespace (decl, context_die);
23232
23233 gen_const_die (decl, context_die);
23234 break;
23235
23236 case FUNCTION_DECL:
23237 /* Don't output any DIEs to represent mere function declarations,
23238 unless they are class members or explicit block externs. */
23239 if (DECL_INITIAL (decl_or_origin) == NULL_TREE
23240 && DECL_FILE_SCOPE_P (decl_or_origin)
23241 && (current_function_decl == NULL_TREE
23242 || DECL_ARTIFICIAL (decl_or_origin)))
23243 break;
23244
23245 #if 0
23246 /* FIXME */
23247 /* This doesn't work because the C frontend sets DECL_ABSTRACT_ORIGIN
23248 on local redeclarations of global functions. That seems broken. */
23249 if (current_function_decl != decl)
23250 /* This is only a declaration. */;
23251 #endif
23252
23253 /* If we're emitting a clone, emit info for the abstract instance. */
23254 if (origin || DECL_ORIGIN (decl) != decl)
23255 dwarf2out_abstract_function (origin
23256 ? DECL_ORIGIN (origin)
23257 : DECL_ABSTRACT_ORIGIN (decl));
23258
23259 /* If we're emitting an out-of-line copy of an inline function,
23260 emit info for the abstract instance and set up to refer to it. */
23261 else if (cgraph_function_possibly_inlined_p (decl)
23262 && ! DECL_ABSTRACT_P (decl)
23263 && ! class_or_namespace_scope_p (context_die)
23264 /* dwarf2out_abstract_function won't emit a die if this is just
23265 a declaration. We must avoid setting DECL_ABSTRACT_ORIGIN in
23266 that case, because that works only if we have a die. */
23267 && DECL_INITIAL (decl) != NULL_TREE)
23268 {
23269 dwarf2out_abstract_function (decl);
23270 set_decl_origin_self (decl);
23271 }
23272
23273 /* Otherwise we're emitting the primary DIE for this decl. */
23274 else if (debug_info_level > DINFO_LEVEL_TERSE)
23275 {
23276 /* Before we describe the FUNCTION_DECL itself, make sure that we
23277 have its containing type. */
23278 if (!origin)
23279 origin = decl_class_context (decl);
23280 if (origin != NULL_TREE)
23281 gen_type_die (origin, context_die);
23282
23283 /* And its return type. */
23284 gen_type_die (TREE_TYPE (TREE_TYPE (decl)), context_die);
23285
23286 /* And its virtual context. */
23287 if (DECL_VINDEX (decl) != NULL_TREE)
23288 gen_type_die (DECL_CONTEXT (decl), context_die);
23289
23290 /* Make sure we have a member DIE for decl. */
23291 if (origin != NULL_TREE)
23292 gen_type_die_for_member (origin, decl, context_die);
23293
23294 /* And its containing namespace. */
23295 context_die = declare_in_namespace (decl, context_die);
23296 }
23297
23298 /* Now output a DIE to represent the function itself. */
23299 if (decl)
23300 gen_subprogram_die (decl, context_die);
23301 break;
23302
23303 case TYPE_DECL:
23304 /* If we are in terse mode, don't generate any DIEs to represent any
23305 actual typedefs. */
23306 if (debug_info_level <= DINFO_LEVEL_TERSE)
23307 break;
23308
23309 /* In the special case of a TYPE_DECL node representing the declaration
23310 of some type tag, if the given TYPE_DECL is marked as having been
23311 instantiated from some other (original) TYPE_DECL node (e.g. one which
23312 was generated within the original definition of an inline function) we
23313 used to generate a special (abbreviated) DW_TAG_structure_type,
23314 DW_TAG_union_type, or DW_TAG_enumeration_type DIE here. But nothing
23315 should be actually referencing those DIEs, as variable DIEs with that
23316 type would be emitted already in the abstract origin, so it was always
23317 removed during unused type prunning. Don't add anything in this
23318 case. */
23319 if (TYPE_DECL_IS_STUB (decl) && decl_ultimate_origin (decl) != NULL_TREE)
23320 break;
23321
23322 if (is_redundant_typedef (decl))
23323 gen_type_die (TREE_TYPE (decl), context_die);
23324 else
23325 /* Output a DIE to represent the typedef itself. */
23326 gen_typedef_die (decl, context_die);
23327 break;
23328
23329 case LABEL_DECL:
23330 if (debug_info_level >= DINFO_LEVEL_NORMAL)
23331 gen_label_die (decl, context_die);
23332 break;
23333
23334 case VAR_DECL:
23335 case RESULT_DECL:
23336 /* If we are in terse mode, don't generate any DIEs to represent any
23337 variable declarations or definitions. */
23338 if (debug_info_level <= DINFO_LEVEL_TERSE)
23339 break;
23340
23341 /* Output any DIEs that are needed to specify the type of this data
23342 object. */
23343 if (decl_by_reference_p (decl_or_origin))
23344 gen_type_die (TREE_TYPE (TREE_TYPE (decl_or_origin)), context_die);
23345 else
23346 gen_type_die (TREE_TYPE (decl_or_origin), context_die);
23347
23348 /* And its containing type. */
23349 class_origin = decl_class_context (decl_or_origin);
23350 if (class_origin != NULL_TREE)
23351 gen_type_die_for_member (class_origin, decl_or_origin, context_die);
23352
23353 /* And its containing namespace. */
23354 context_die = declare_in_namespace (decl_or_origin, context_die);
23355
23356 /* Now output the DIE to represent the data object itself. This gets
23357 complicated because of the possibility that the VAR_DECL really
23358 represents an inlined instance of a formal parameter for an inline
23359 function. */
23360 ultimate_origin = decl_ultimate_origin (decl_or_origin);
23361 if (ultimate_origin != NULL_TREE
23362 && TREE_CODE (ultimate_origin) == PARM_DECL)
23363 gen_formal_parameter_die (decl, origin,
23364 true /* Emit name attribute. */,
23365 context_die);
23366 else
23367 gen_variable_die (decl, origin, context_die);
23368 break;
23369
23370 case FIELD_DECL:
23371 gcc_assert (ctx != NULL && ctx->struct_type != NULL);
23372 /* Ignore the nameless fields that are used to skip bits but handle C++
23373 anonymous unions and structs. */
23374 if (DECL_NAME (decl) != NULL_TREE
23375 || TREE_CODE (TREE_TYPE (decl)) == UNION_TYPE
23376 || TREE_CODE (TREE_TYPE (decl)) == RECORD_TYPE)
23377 {
23378 gen_type_die (member_declared_type (decl), context_die);
23379 gen_field_die (decl, ctx, context_die);
23380 }
23381 break;
23382
23383 case PARM_DECL:
23384 if (DECL_BY_REFERENCE (decl_or_origin))
23385 gen_type_die (TREE_TYPE (TREE_TYPE (decl_or_origin)), context_die);
23386 else
23387 gen_type_die (TREE_TYPE (decl_or_origin), context_die);
23388 return gen_formal_parameter_die (decl, origin,
23389 true /* Emit name attribute. */,
23390 context_die);
23391
23392 case NAMESPACE_DECL:
23393 if (dwarf_version >= 3 || !dwarf_strict)
23394 gen_namespace_die (decl, context_die);
23395 break;
23396
23397 case IMPORTED_DECL:
23398 dwarf2out_imported_module_or_decl_1 (decl, DECL_NAME (decl),
23399 DECL_CONTEXT (decl), context_die);
23400 break;
23401
23402 case NAMELIST_DECL:
23403 gen_namelist_decl (DECL_NAME (decl), context_die,
23404 NAMELIST_DECL_ASSOCIATED_DECL (decl));
23405 break;
23406
23407 default:
23408 /* Probably some frontend-internal decl. Assume we don't care. */
23409 gcc_assert ((int)TREE_CODE (decl) > NUM_TREE_CODES);
23410 break;
23411 }
23412
23413 return NULL;
23414 }
23415 \f
23416 /* Output initial debug information for global DECL. Called at the
23417 end of the parsing process.
23418
23419 This is the initial debug generation process. As such, the DIEs
23420 generated may be incomplete. A later debug generation pass
23421 (dwarf2out_late_global_decl) will augment the information generated
23422 in this pass (e.g., with complete location info). */
23423
23424 static void
23425 dwarf2out_early_global_decl (tree decl)
23426 {
23427 set_early_dwarf s;
23428
23429 /* gen_decl_die() will set DECL_ABSTRACT because
23430 cgraph_function_possibly_inlined_p() returns true. This is in
23431 turn will cause DW_AT_inline attributes to be set.
23432
23433 This happens because at early dwarf generation, there is no
23434 cgraph information, causing cgraph_function_possibly_inlined_p()
23435 to return true. Trick cgraph_function_possibly_inlined_p()
23436 while we generate dwarf early. */
23437 bool save = symtab->global_info_ready;
23438 symtab->global_info_ready = true;
23439
23440 /* We don't handle TYPE_DECLs. If required, they'll be reached via
23441 other DECLs and they can point to template types or other things
23442 that dwarf2out can't handle when done via dwarf2out_decl. */
23443 if (TREE_CODE (decl) != TYPE_DECL
23444 && TREE_CODE (decl) != PARM_DECL)
23445 {
23446 tree save_fndecl = current_function_decl;
23447 if (TREE_CODE (decl) == FUNCTION_DECL)
23448 {
23449 /* No cfun means the symbol has no body, so there's nothing
23450 to emit. */
23451 if (!DECL_STRUCT_FUNCTION (decl))
23452 goto early_decl_exit;
23453
23454 current_function_decl = decl;
23455 }
23456 dwarf2out_decl (decl);
23457 if (TREE_CODE (decl) == FUNCTION_DECL)
23458 current_function_decl = save_fndecl;
23459 }
23460 early_decl_exit:
23461 symtab->global_info_ready = save;
23462 }
23463
23464 /* Output debug information for global decl DECL. Called from
23465 toplev.c after compilation proper has finished. */
23466
23467 static void
23468 dwarf2out_late_global_decl (tree decl)
23469 {
23470 /* We have to generate early debug late for LTO. */
23471 if (in_lto_p)
23472 dwarf2out_early_global_decl (decl);
23473
23474 /* Fill-in any location information we were unable to determine
23475 on the first pass. */
23476 if (TREE_CODE (decl) == VAR_DECL
23477 && !POINTER_BOUNDS_P (decl))
23478 {
23479 dw_die_ref die = lookup_decl_die (decl);
23480 if (die)
23481 add_location_or_const_value_attribute (die, decl, false);
23482 }
23483 }
23484
23485 /* Output debug information for type decl DECL. Called from toplev.c
23486 and from language front ends (to record built-in types). */
23487 static void
23488 dwarf2out_type_decl (tree decl, int local)
23489 {
23490 if (!local)
23491 {
23492 set_early_dwarf s;
23493 dwarf2out_decl (decl);
23494 }
23495 }
23496
23497 /* Output debug information for imported module or decl DECL.
23498 NAME is non-NULL name in the lexical block if the decl has been renamed.
23499 LEXICAL_BLOCK is the lexical block (which TREE_CODE is a BLOCK)
23500 that DECL belongs to.
23501 LEXICAL_BLOCK_DIE is the DIE of LEXICAL_BLOCK. */
23502 static void
23503 dwarf2out_imported_module_or_decl_1 (tree decl,
23504 tree name,
23505 tree lexical_block,
23506 dw_die_ref lexical_block_die)
23507 {
23508 expanded_location xloc;
23509 dw_die_ref imported_die = NULL;
23510 dw_die_ref at_import_die;
23511
23512 if (TREE_CODE (decl) == IMPORTED_DECL)
23513 {
23514 xloc = expand_location (DECL_SOURCE_LOCATION (decl));
23515 decl = IMPORTED_DECL_ASSOCIATED_DECL (decl);
23516 gcc_assert (decl);
23517 }
23518 else
23519 xloc = expand_location (input_location);
23520
23521 if (TREE_CODE (decl) == TYPE_DECL || TREE_CODE (decl) == CONST_DECL)
23522 {
23523 at_import_die = force_type_die (TREE_TYPE (decl));
23524 /* For namespace N { typedef void T; } using N::T; base_type_die
23525 returns NULL, but DW_TAG_imported_declaration requires
23526 the DW_AT_import tag. Force creation of DW_TAG_typedef. */
23527 if (!at_import_die)
23528 {
23529 gcc_assert (TREE_CODE (decl) == TYPE_DECL);
23530 gen_typedef_die (decl, get_context_die (DECL_CONTEXT (decl)));
23531 at_import_die = lookup_type_die (TREE_TYPE (decl));
23532 gcc_assert (at_import_die);
23533 }
23534 }
23535 else
23536 {
23537 at_import_die = lookup_decl_die (decl);
23538 if (!at_import_die)
23539 {
23540 /* If we're trying to avoid duplicate debug info, we may not have
23541 emitted the member decl for this field. Emit it now. */
23542 if (TREE_CODE (decl) == FIELD_DECL)
23543 {
23544 tree type = DECL_CONTEXT (decl);
23545
23546 if (TYPE_CONTEXT (type)
23547 && TYPE_P (TYPE_CONTEXT (type))
23548 && !should_emit_struct_debug (TYPE_CONTEXT (type),
23549 DINFO_USAGE_DIR_USE))
23550 return;
23551 gen_type_die_for_member (type, decl,
23552 get_context_die (TYPE_CONTEXT (type)));
23553 }
23554 if (TREE_CODE (decl) == NAMELIST_DECL)
23555 at_import_die = gen_namelist_decl (DECL_NAME (decl),
23556 get_context_die (DECL_CONTEXT (decl)),
23557 NULL_TREE);
23558 else
23559 at_import_die = force_decl_die (decl);
23560 }
23561 }
23562
23563 if (TREE_CODE (decl) == NAMESPACE_DECL)
23564 {
23565 if (dwarf_version >= 3 || !dwarf_strict)
23566 imported_die = new_die (DW_TAG_imported_module,
23567 lexical_block_die,
23568 lexical_block);
23569 else
23570 return;
23571 }
23572 else
23573 imported_die = new_die (DW_TAG_imported_declaration,
23574 lexical_block_die,
23575 lexical_block);
23576
23577 add_AT_file (imported_die, DW_AT_decl_file, lookup_filename (xloc.file));
23578 add_AT_unsigned (imported_die, DW_AT_decl_line, xloc.line);
23579 if (name)
23580 add_AT_string (imported_die, DW_AT_name,
23581 IDENTIFIER_POINTER (name));
23582 add_AT_die_ref (imported_die, DW_AT_import, at_import_die);
23583 }
23584
23585 /* Output debug information for imported module or decl DECL.
23586 NAME is non-NULL name in context if the decl has been renamed.
23587 CHILD is true if decl is one of the renamed decls as part of
23588 importing whole module. */
23589
23590 static void
23591 dwarf2out_imported_module_or_decl (tree decl, tree name, tree context,
23592 bool child)
23593 {
23594 /* dw_die_ref at_import_die; */
23595 dw_die_ref scope_die;
23596
23597 if (debug_info_level <= DINFO_LEVEL_TERSE)
23598 return;
23599
23600 gcc_assert (decl);
23601
23602 set_early_dwarf s;
23603
23604 /* To emit DW_TAG_imported_module or DW_TAG_imported_decl, we need two DIEs.
23605 We need decl DIE for reference and scope die. First, get DIE for the decl
23606 itself. */
23607
23608 /* Get the scope die for decl context. Use comp_unit_die for global module
23609 or decl. If die is not found for non globals, force new die. */
23610 if (context
23611 && TYPE_P (context)
23612 && !should_emit_struct_debug (context, DINFO_USAGE_DIR_USE))
23613 return;
23614
23615 if (!(dwarf_version >= 3 || !dwarf_strict))
23616 return;
23617
23618 scope_die = get_context_die (context);
23619
23620 if (child)
23621 {
23622 gcc_assert (scope_die->die_child);
23623 gcc_assert (scope_die->die_child->die_tag == DW_TAG_imported_module);
23624 gcc_assert (TREE_CODE (decl) != NAMESPACE_DECL);
23625 scope_die = scope_die->die_child;
23626 }
23627
23628 /* OK, now we have DIEs for decl as well as scope. Emit imported die. */
23629 dwarf2out_imported_module_or_decl_1 (decl, name, context, scope_die);
23630 }
23631
23632 /* Output debug information for namelists. */
23633
23634 static dw_die_ref
23635 gen_namelist_decl (tree name, dw_die_ref scope_die, tree item_decls)
23636 {
23637 dw_die_ref nml_die, nml_item_die, nml_item_ref_die;
23638 tree value;
23639 unsigned i;
23640
23641 if (debug_info_level <= DINFO_LEVEL_TERSE)
23642 return NULL;
23643
23644 gcc_assert (scope_die != NULL);
23645 nml_die = new_die (DW_TAG_namelist, scope_die, NULL);
23646 add_AT_string (nml_die, DW_AT_name, IDENTIFIER_POINTER (name));
23647
23648 /* If there are no item_decls, we have a nondefining namelist, e.g.
23649 with USE association; hence, set DW_AT_declaration. */
23650 if (item_decls == NULL_TREE)
23651 {
23652 add_AT_flag (nml_die, DW_AT_declaration, 1);
23653 return nml_die;
23654 }
23655
23656 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (item_decls), i, value)
23657 {
23658 nml_item_ref_die = lookup_decl_die (value);
23659 if (!nml_item_ref_die)
23660 nml_item_ref_die = force_decl_die (value);
23661
23662 nml_item_die = new_die (DW_TAG_namelist_item, nml_die, NULL);
23663 add_AT_die_ref (nml_item_die, DW_AT_namelist_items, nml_item_ref_die);
23664 }
23665 return nml_die;
23666 }
23667
23668
23669 /* Write the debugging output for DECL and return the DIE. */
23670
23671 static void
23672 dwarf2out_decl (tree decl)
23673 {
23674 dw_die_ref context_die = comp_unit_die ();
23675
23676 switch (TREE_CODE (decl))
23677 {
23678 case ERROR_MARK:
23679 return;
23680
23681 case FUNCTION_DECL:
23682 /* What we would really like to do here is to filter out all mere
23683 file-scope declarations of file-scope functions which are never
23684 referenced later within this translation unit (and keep all of ones
23685 that *are* referenced later on) but we aren't clairvoyant, so we have
23686 no idea which functions will be referenced in the future (i.e. later
23687 on within the current translation unit). So here we just ignore all
23688 file-scope function declarations which are not also definitions. If
23689 and when the debugger needs to know something about these functions,
23690 it will have to hunt around and find the DWARF information associated
23691 with the definition of the function.
23692
23693 We can't just check DECL_EXTERNAL to find out which FUNCTION_DECL
23694 nodes represent definitions and which ones represent mere
23695 declarations. We have to check DECL_INITIAL instead. That's because
23696 the C front-end supports some weird semantics for "extern inline"
23697 function definitions. These can get inlined within the current
23698 translation unit (and thus, we need to generate Dwarf info for their
23699 abstract instances so that the Dwarf info for the concrete inlined
23700 instances can have something to refer to) but the compiler never
23701 generates any out-of-lines instances of such things (despite the fact
23702 that they *are* definitions).
23703
23704 The important point is that the C front-end marks these "extern
23705 inline" functions as DECL_EXTERNAL, but we need to generate DWARF for
23706 them anyway. Note that the C++ front-end also plays some similar games
23707 for inline function definitions appearing within include files which
23708 also contain `#pragma interface' pragmas.
23709
23710 If we are called from dwarf2out_abstract_function output a DIE
23711 anyway. We can end up here this way with early inlining and LTO
23712 where the inlined function is output in a different LTRANS unit
23713 or not at all. */
23714 if (DECL_INITIAL (decl) == NULL_TREE
23715 && ! DECL_ABSTRACT_P (decl))
23716 return;
23717
23718 /* If we're a nested function, initially use a parent of NULL; if we're
23719 a plain function, this will be fixed up in decls_for_scope. If
23720 we're a method, it will be ignored, since we already have a DIE. */
23721 if (decl_function_context (decl)
23722 /* But if we're in terse mode, we don't care about scope. */
23723 && debug_info_level > DINFO_LEVEL_TERSE)
23724 context_die = NULL;
23725 break;
23726
23727 case VAR_DECL:
23728 /* For local statics lookup proper context die. */
23729 if (local_function_static (decl))
23730 context_die = lookup_decl_die (DECL_CONTEXT (decl));
23731
23732 /* If we are in terse mode, don't generate any DIEs to represent any
23733 variable declarations or definitions. */
23734 if (debug_info_level <= DINFO_LEVEL_TERSE)
23735 return;
23736 break;
23737
23738 case CONST_DECL:
23739 if (debug_info_level <= DINFO_LEVEL_TERSE)
23740 return;
23741 if (!is_fortran () && !is_ada ())
23742 return;
23743 if (TREE_STATIC (decl) && decl_function_context (decl))
23744 context_die = lookup_decl_die (DECL_CONTEXT (decl));
23745 break;
23746
23747 case NAMESPACE_DECL:
23748 case IMPORTED_DECL:
23749 if (debug_info_level <= DINFO_LEVEL_TERSE)
23750 return;
23751 if (lookup_decl_die (decl) != NULL)
23752 return;
23753 break;
23754
23755 case TYPE_DECL:
23756 /* Don't emit stubs for types unless they are needed by other DIEs. */
23757 if (TYPE_DECL_SUPPRESS_DEBUG (decl))
23758 return;
23759
23760 /* Don't bother trying to generate any DIEs to represent any of the
23761 normal built-in types for the language we are compiling. */
23762 if (DECL_IS_BUILTIN (decl))
23763 return;
23764
23765 /* If we are in terse mode, don't generate any DIEs for types. */
23766 if (debug_info_level <= DINFO_LEVEL_TERSE)
23767 return;
23768
23769 /* If we're a function-scope tag, initially use a parent of NULL;
23770 this will be fixed up in decls_for_scope. */
23771 if (decl_function_context (decl))
23772 context_die = NULL;
23773
23774 break;
23775
23776 case NAMELIST_DECL:
23777 break;
23778
23779 default:
23780 return;
23781 }
23782
23783 gen_decl_die (decl, NULL, NULL, context_die);
23784
23785 if (flag_checking)
23786 {
23787 dw_die_ref die = lookup_decl_die (decl);
23788 if (die)
23789 check_die (die);
23790 }
23791 }
23792
23793 /* Write the debugging output for DECL. */
23794
23795 static void
23796 dwarf2out_function_decl (tree decl)
23797 {
23798 dwarf2out_decl (decl);
23799 call_arg_locations = NULL;
23800 call_arg_loc_last = NULL;
23801 call_site_count = -1;
23802 tail_call_site_count = -1;
23803 decl_loc_table->empty ();
23804 cached_dw_loc_list_table->empty ();
23805 }
23806
23807 /* Output a marker (i.e. a label) for the beginning of the generated code for
23808 a lexical block. */
23809
23810 static void
23811 dwarf2out_begin_block (unsigned int line ATTRIBUTE_UNUSED,
23812 unsigned int blocknum)
23813 {
23814 switch_to_section (current_function_section ());
23815 ASM_OUTPUT_DEBUG_LABEL (asm_out_file, BLOCK_BEGIN_LABEL, blocknum);
23816 }
23817
23818 /* Output a marker (i.e. a label) for the end of the generated code for a
23819 lexical block. */
23820
23821 static void
23822 dwarf2out_end_block (unsigned int line ATTRIBUTE_UNUSED, unsigned int blocknum)
23823 {
23824 switch_to_section (current_function_section ());
23825 ASM_OUTPUT_DEBUG_LABEL (asm_out_file, BLOCK_END_LABEL, blocknum);
23826 }
23827
23828 /* Returns nonzero if it is appropriate not to emit any debugging
23829 information for BLOCK, because it doesn't contain any instructions.
23830
23831 Don't allow this for blocks with nested functions or local classes
23832 as we would end up with orphans, and in the presence of scheduling
23833 we may end up calling them anyway. */
23834
23835 static bool
23836 dwarf2out_ignore_block (const_tree block)
23837 {
23838 tree decl;
23839 unsigned int i;
23840
23841 for (decl = BLOCK_VARS (block); decl; decl = DECL_CHAIN (decl))
23842 if (TREE_CODE (decl) == FUNCTION_DECL
23843 || (TREE_CODE (decl) == TYPE_DECL && TYPE_DECL_IS_STUB (decl)))
23844 return 0;
23845 for (i = 0; i < BLOCK_NUM_NONLOCALIZED_VARS (block); i++)
23846 {
23847 decl = BLOCK_NONLOCALIZED_VAR (block, i);
23848 if (TREE_CODE (decl) == FUNCTION_DECL
23849 || (TREE_CODE (decl) == TYPE_DECL && TYPE_DECL_IS_STUB (decl)))
23850 return 0;
23851 }
23852
23853 return 1;
23854 }
23855
23856 /* Hash table routines for file_hash. */
23857
23858 bool
23859 dwarf_file_hasher::equal (dwarf_file_data *p1, const char *p2)
23860 {
23861 return filename_cmp (p1->filename, p2) == 0;
23862 }
23863
23864 hashval_t
23865 dwarf_file_hasher::hash (dwarf_file_data *p)
23866 {
23867 return htab_hash_string (p->filename);
23868 }
23869
23870 /* Lookup FILE_NAME (in the list of filenames that we know about here in
23871 dwarf2out.c) and return its "index". The index of each (known) filename is
23872 just a unique number which is associated with only that one filename. We
23873 need such numbers for the sake of generating labels (in the .debug_sfnames
23874 section) and references to those files numbers (in the .debug_srcinfo
23875 and .debug_macinfo sections). If the filename given as an argument is not
23876 found in our current list, add it to the list and assign it the next
23877 available unique index number. */
23878
23879 static struct dwarf_file_data *
23880 lookup_filename (const char *file_name)
23881 {
23882 struct dwarf_file_data * created;
23883
23884 if (!file_name)
23885 return NULL;
23886
23887 dwarf_file_data **slot
23888 = file_table->find_slot_with_hash (file_name, htab_hash_string (file_name),
23889 INSERT);
23890 if (*slot)
23891 return *slot;
23892
23893 created = ggc_alloc<dwarf_file_data> ();
23894 created->filename = file_name;
23895 created->emitted_number = 0;
23896 *slot = created;
23897 return created;
23898 }
23899
23900 /* If the assembler will construct the file table, then translate the compiler
23901 internal file table number into the assembler file table number, and emit
23902 a .file directive if we haven't already emitted one yet. The file table
23903 numbers are different because we prune debug info for unused variables and
23904 types, which may include filenames. */
23905
23906 static int
23907 maybe_emit_file (struct dwarf_file_data * fd)
23908 {
23909 if (! fd->emitted_number)
23910 {
23911 if (last_emitted_file)
23912 fd->emitted_number = last_emitted_file->emitted_number + 1;
23913 else
23914 fd->emitted_number = 1;
23915 last_emitted_file = fd;
23916
23917 if (DWARF2_ASM_LINE_DEBUG_INFO)
23918 {
23919 fprintf (asm_out_file, "\t.file %u ", fd->emitted_number);
23920 output_quoted_string (asm_out_file,
23921 remap_debug_filename (fd->filename));
23922 fputc ('\n', asm_out_file);
23923 }
23924 }
23925
23926 return fd->emitted_number;
23927 }
23928
23929 /* Schedule generation of a DW_AT_const_value attribute to DIE.
23930 That generation should happen after function debug info has been
23931 generated. The value of the attribute is the constant value of ARG. */
23932
23933 static void
23934 append_entry_to_tmpl_value_parm_die_table (dw_die_ref die, tree arg)
23935 {
23936 die_arg_entry entry;
23937
23938 if (!die || !arg)
23939 return;
23940
23941 gcc_assert (early_dwarf);
23942
23943 if (!tmpl_value_parm_die_table)
23944 vec_alloc (tmpl_value_parm_die_table, 32);
23945
23946 entry.die = die;
23947 entry.arg = arg;
23948 vec_safe_push (tmpl_value_parm_die_table, entry);
23949 }
23950
23951 /* Return TRUE if T is an instance of generic type, FALSE
23952 otherwise. */
23953
23954 static bool
23955 generic_type_p (tree t)
23956 {
23957 if (t == NULL_TREE || !TYPE_P (t))
23958 return false;
23959 return lang_hooks.get_innermost_generic_parms (t) != NULL_TREE;
23960 }
23961
23962 /* Schedule the generation of the generic parameter dies for the
23963 instance of generic type T. The proper generation itself is later
23964 done by gen_scheduled_generic_parms_dies. */
23965
23966 static void
23967 schedule_generic_params_dies_gen (tree t)
23968 {
23969 if (!generic_type_p (t))
23970 return;
23971
23972 gcc_assert (early_dwarf);
23973
23974 if (!generic_type_instances)
23975 vec_alloc (generic_type_instances, 256);
23976
23977 vec_safe_push (generic_type_instances, t);
23978 }
23979
23980 /* Add a DW_AT_const_value attribute to DIEs that were scheduled
23981 by append_entry_to_tmpl_value_parm_die_table. This function must
23982 be called after function DIEs have been generated. */
23983
23984 static void
23985 gen_remaining_tmpl_value_param_die_attribute (void)
23986 {
23987 if (tmpl_value_parm_die_table)
23988 {
23989 unsigned i, j;
23990 die_arg_entry *e;
23991
23992 /* We do this in two phases - first get the cases we can
23993 handle during early-finish, preserving those we cannot
23994 (containing symbolic constants where we don't yet know
23995 whether we are going to output the referenced symbols).
23996 For those we try again at late-finish. */
23997 j = 0;
23998 FOR_EACH_VEC_ELT (*tmpl_value_parm_die_table, i, e)
23999 {
24000 if (!tree_add_const_value_attribute (e->die, e->arg))
24001 (*tmpl_value_parm_die_table)[j++] = *e;
24002 }
24003 tmpl_value_parm_die_table->truncate (j);
24004 }
24005 }
24006
24007 /* Generate generic parameters DIEs for instances of generic types
24008 that have been previously scheduled by
24009 schedule_generic_params_dies_gen. This function must be called
24010 after all the types of the CU have been laid out. */
24011
24012 static void
24013 gen_scheduled_generic_parms_dies (void)
24014 {
24015 unsigned i;
24016 tree t;
24017
24018 if (!generic_type_instances)
24019 return;
24020
24021 /* We end up "recursing" into schedule_generic_params_dies_gen, so
24022 pretend this generation is part of "early dwarf" as well. */
24023 set_early_dwarf s;
24024
24025 FOR_EACH_VEC_ELT (*generic_type_instances, i, t)
24026 if (COMPLETE_TYPE_P (t))
24027 gen_generic_params_dies (t);
24028
24029 generic_type_instances = NULL;
24030 }
24031
24032
24033 /* Replace DW_AT_name for the decl with name. */
24034
24035 static void
24036 dwarf2out_set_name (tree decl, tree name)
24037 {
24038 dw_die_ref die;
24039 dw_attr_node *attr;
24040 const char *dname;
24041
24042 die = TYPE_SYMTAB_DIE (decl);
24043 if (!die)
24044 return;
24045
24046 dname = dwarf2_name (name, 0);
24047 if (!dname)
24048 return;
24049
24050 attr = get_AT (die, DW_AT_name);
24051 if (attr)
24052 {
24053 struct indirect_string_node *node;
24054
24055 node = find_AT_string (dname);
24056 /* replace the string. */
24057 attr->dw_attr_val.v.val_str = node;
24058 }
24059
24060 else
24061 add_name_attribute (die, dname);
24062 }
24063
24064 /* True if before or during processing of the first function being emitted. */
24065 static bool in_first_function_p = true;
24066 /* True if loc_note during dwarf2out_var_location call might still be
24067 before first real instruction at address equal to .Ltext0. */
24068 static bool maybe_at_text_label_p = true;
24069 /* One above highest N where .LVLN label might be equal to .Ltext0 label. */
24070 static unsigned int first_loclabel_num_not_at_text_label;
24071
24072 /* Called by the final INSN scan whenever we see a var location. We
24073 use it to drop labels in the right places, and throw the location in
24074 our lookup table. */
24075
24076 static void
24077 dwarf2out_var_location (rtx_insn *loc_note)
24078 {
24079 char loclabel[MAX_ARTIFICIAL_LABEL_BYTES + 2];
24080 struct var_loc_node *newloc;
24081 rtx_insn *next_real, *next_note;
24082 rtx_insn *call_insn = NULL;
24083 static const char *last_label;
24084 static const char *last_postcall_label;
24085 static bool last_in_cold_section_p;
24086 static rtx_insn *expected_next_loc_note;
24087 tree decl;
24088 bool var_loc_p;
24089
24090 if (!NOTE_P (loc_note))
24091 {
24092 if (CALL_P (loc_note))
24093 {
24094 call_site_count++;
24095 if (SIBLING_CALL_P (loc_note))
24096 tail_call_site_count++;
24097 if (optimize == 0 && !flag_var_tracking)
24098 {
24099 /* When the var-tracking pass is not running, there is no note
24100 for indirect calls whose target is compile-time known. In this
24101 case, process such calls specifically so that we generate call
24102 sites for them anyway. */
24103 rtx x = PATTERN (loc_note);
24104 if (GET_CODE (x) == PARALLEL)
24105 x = XVECEXP (x, 0, 0);
24106 if (GET_CODE (x) == SET)
24107 x = SET_SRC (x);
24108 if (GET_CODE (x) == CALL)
24109 x = XEXP (x, 0);
24110 if (!MEM_P (x)
24111 || GET_CODE (XEXP (x, 0)) != SYMBOL_REF
24112 || !SYMBOL_REF_DECL (XEXP (x, 0))
24113 || (TREE_CODE (SYMBOL_REF_DECL (XEXP (x, 0)))
24114 != FUNCTION_DECL))
24115 {
24116 call_insn = loc_note;
24117 loc_note = NULL;
24118 var_loc_p = false;
24119
24120 next_real = next_real_insn (call_insn);
24121 next_note = NULL;
24122 cached_next_real_insn = NULL;
24123 goto create_label;
24124 }
24125 }
24126 }
24127 return;
24128 }
24129
24130 var_loc_p = NOTE_KIND (loc_note) == NOTE_INSN_VAR_LOCATION;
24131 if (var_loc_p && !DECL_P (NOTE_VAR_LOCATION_DECL (loc_note)))
24132 return;
24133
24134 /* Optimize processing a large consecutive sequence of location
24135 notes so we don't spend too much time in next_real_insn. If the
24136 next insn is another location note, remember the next_real_insn
24137 calculation for next time. */
24138 next_real = cached_next_real_insn;
24139 if (next_real)
24140 {
24141 if (expected_next_loc_note != loc_note)
24142 next_real = NULL;
24143 }
24144
24145 next_note = NEXT_INSN (loc_note);
24146 if (! next_note
24147 || next_note->deleted ()
24148 || ! NOTE_P (next_note)
24149 || (NOTE_KIND (next_note) != NOTE_INSN_VAR_LOCATION
24150 && NOTE_KIND (next_note) != NOTE_INSN_CALL_ARG_LOCATION))
24151 next_note = NULL;
24152
24153 if (! next_real)
24154 next_real = next_real_insn (loc_note);
24155
24156 if (next_note)
24157 {
24158 expected_next_loc_note = next_note;
24159 cached_next_real_insn = next_real;
24160 }
24161 else
24162 cached_next_real_insn = NULL;
24163
24164 /* If there are no instructions which would be affected by this note,
24165 don't do anything. */
24166 if (var_loc_p
24167 && next_real == NULL_RTX
24168 && !NOTE_DURING_CALL_P (loc_note))
24169 return;
24170
24171 create_label:
24172
24173 if (next_real == NULL_RTX)
24174 next_real = get_last_insn ();
24175
24176 /* If there were any real insns between note we processed last time
24177 and this note (or if it is the first note), clear
24178 last_{,postcall_}label so that they are not reused this time. */
24179 if (last_var_location_insn == NULL_RTX
24180 || last_var_location_insn != next_real
24181 || last_in_cold_section_p != in_cold_section_p)
24182 {
24183 last_label = NULL;
24184 last_postcall_label = NULL;
24185 }
24186
24187 if (var_loc_p)
24188 {
24189 decl = NOTE_VAR_LOCATION_DECL (loc_note);
24190 newloc = add_var_loc_to_decl (decl, loc_note,
24191 NOTE_DURING_CALL_P (loc_note)
24192 ? last_postcall_label : last_label);
24193 if (newloc == NULL)
24194 return;
24195 }
24196 else
24197 {
24198 decl = NULL_TREE;
24199 newloc = NULL;
24200 }
24201
24202 /* If there were no real insns between note we processed last time
24203 and this note, use the label we emitted last time. Otherwise
24204 create a new label and emit it. */
24205 if (last_label == NULL)
24206 {
24207 ASM_GENERATE_INTERNAL_LABEL (loclabel, "LVL", loclabel_num);
24208 ASM_OUTPUT_DEBUG_LABEL (asm_out_file, "LVL", loclabel_num);
24209 loclabel_num++;
24210 last_label = ggc_strdup (loclabel);
24211 /* See if loclabel might be equal to .Ltext0. If yes,
24212 bump first_loclabel_num_not_at_text_label. */
24213 if (!have_multiple_function_sections
24214 && in_first_function_p
24215 && maybe_at_text_label_p)
24216 {
24217 static rtx_insn *last_start;
24218 rtx_insn *insn;
24219 for (insn = loc_note; insn; insn = previous_insn (insn))
24220 if (insn == last_start)
24221 break;
24222 else if (!NONDEBUG_INSN_P (insn))
24223 continue;
24224 else
24225 {
24226 rtx body = PATTERN (insn);
24227 if (GET_CODE (body) == USE || GET_CODE (body) == CLOBBER)
24228 continue;
24229 /* Inline asm could occupy zero bytes. */
24230 else if (GET_CODE (body) == ASM_INPUT
24231 || asm_noperands (body) >= 0)
24232 continue;
24233 #ifdef HAVE_attr_length
24234 else if (get_attr_min_length (insn) == 0)
24235 continue;
24236 #endif
24237 else
24238 {
24239 /* Assume insn has non-zero length. */
24240 maybe_at_text_label_p = false;
24241 break;
24242 }
24243 }
24244 if (maybe_at_text_label_p)
24245 {
24246 last_start = loc_note;
24247 first_loclabel_num_not_at_text_label = loclabel_num;
24248 }
24249 }
24250 }
24251
24252 gcc_assert ((loc_note == NULL_RTX && call_insn != NULL_RTX)
24253 || (loc_note != NULL_RTX && call_insn == NULL_RTX));
24254
24255 if (!var_loc_p)
24256 {
24257 struct call_arg_loc_node *ca_loc
24258 = ggc_cleared_alloc<call_arg_loc_node> ();
24259 rtx_insn *prev
24260 = loc_note != NULL_RTX ? prev_real_insn (loc_note) : call_insn;
24261
24262 ca_loc->call_arg_loc_note = loc_note;
24263 ca_loc->next = NULL;
24264 ca_loc->label = last_label;
24265 gcc_assert (prev
24266 && (CALL_P (prev)
24267 || (NONJUMP_INSN_P (prev)
24268 && GET_CODE (PATTERN (prev)) == SEQUENCE
24269 && CALL_P (XVECEXP (PATTERN (prev), 0, 0)))));
24270 if (!CALL_P (prev))
24271 prev = as_a <rtx_sequence *> (PATTERN (prev))->insn (0);
24272 ca_loc->tail_call_p = SIBLING_CALL_P (prev);
24273
24274 /* Look for a SYMBOL_REF in the "prev" instruction. */
24275 rtx x = get_call_rtx_from (PATTERN (prev));
24276 if (x)
24277 {
24278 /* Try to get the call symbol, if any. */
24279 if (MEM_P (XEXP (x, 0)))
24280 x = XEXP (x, 0);
24281 /* First, look for a memory access to a symbol_ref. */
24282 if (GET_CODE (XEXP (x, 0)) == SYMBOL_REF
24283 && SYMBOL_REF_DECL (XEXP (x, 0))
24284 && TREE_CODE (SYMBOL_REF_DECL (XEXP (x, 0))) == FUNCTION_DECL)
24285 ca_loc->symbol_ref = XEXP (x, 0);
24286 /* Otherwise, look at a compile-time known user-level function
24287 declaration. */
24288 else if (MEM_P (x)
24289 && MEM_EXPR (x)
24290 && TREE_CODE (MEM_EXPR (x)) == FUNCTION_DECL)
24291 ca_loc->symbol_ref = XEXP (DECL_RTL (MEM_EXPR (x)), 0);
24292 }
24293
24294 ca_loc->block = insn_scope (prev);
24295 if (call_arg_locations)
24296 call_arg_loc_last->next = ca_loc;
24297 else
24298 call_arg_locations = ca_loc;
24299 call_arg_loc_last = ca_loc;
24300 }
24301 else if (loc_note != NULL_RTX && !NOTE_DURING_CALL_P (loc_note))
24302 newloc->label = last_label;
24303 else
24304 {
24305 if (!last_postcall_label)
24306 {
24307 sprintf (loclabel, "%s-1", last_label);
24308 last_postcall_label = ggc_strdup (loclabel);
24309 }
24310 newloc->label = last_postcall_label;
24311 }
24312
24313 last_var_location_insn = next_real;
24314 last_in_cold_section_p = in_cold_section_p;
24315 }
24316
24317 /* Called from finalize_size_functions for size functions so that their body
24318 can be encoded in the debug info to describe the layout of variable-length
24319 structures. */
24320
24321 static void
24322 dwarf2out_size_function (tree decl)
24323 {
24324 function_to_dwarf_procedure (decl);
24325 }
24326
24327 /* Note in one location list that text section has changed. */
24328
24329 int
24330 var_location_switch_text_section_1 (var_loc_list **slot, void *)
24331 {
24332 var_loc_list *list = *slot;
24333 if (list->first)
24334 list->last_before_switch
24335 = list->last->next ? list->last->next : list->last;
24336 return 1;
24337 }
24338
24339 /* Note in all location lists that text section has changed. */
24340
24341 static void
24342 var_location_switch_text_section (void)
24343 {
24344 if (decl_loc_table == NULL)
24345 return;
24346
24347 decl_loc_table->traverse<void *, var_location_switch_text_section_1> (NULL);
24348 }
24349
24350 /* Create a new line number table. */
24351
24352 static dw_line_info_table *
24353 new_line_info_table (void)
24354 {
24355 dw_line_info_table *table;
24356
24357 table = ggc_cleared_alloc<dw_line_info_table> ();
24358 table->file_num = 1;
24359 table->line_num = 1;
24360 table->is_stmt = DWARF_LINE_DEFAULT_IS_STMT_START;
24361
24362 return table;
24363 }
24364
24365 /* Lookup the "current" table into which we emit line info, so
24366 that we don't have to do it for every source line. */
24367
24368 static void
24369 set_cur_line_info_table (section *sec)
24370 {
24371 dw_line_info_table *table;
24372
24373 if (sec == text_section)
24374 table = text_section_line_info;
24375 else if (sec == cold_text_section)
24376 {
24377 table = cold_text_section_line_info;
24378 if (!table)
24379 {
24380 cold_text_section_line_info = table = new_line_info_table ();
24381 table->end_label = cold_end_label;
24382 }
24383 }
24384 else
24385 {
24386 const char *end_label;
24387
24388 if (flag_reorder_blocks_and_partition)
24389 {
24390 if (in_cold_section_p)
24391 end_label = crtl->subsections.cold_section_end_label;
24392 else
24393 end_label = crtl->subsections.hot_section_end_label;
24394 }
24395 else
24396 {
24397 char label[MAX_ARTIFICIAL_LABEL_BYTES];
24398 ASM_GENERATE_INTERNAL_LABEL (label, FUNC_END_LABEL,
24399 current_function_funcdef_no);
24400 end_label = ggc_strdup (label);
24401 }
24402
24403 table = new_line_info_table ();
24404 table->end_label = end_label;
24405
24406 vec_safe_push (separate_line_info, table);
24407 }
24408
24409 if (DWARF2_ASM_LINE_DEBUG_INFO)
24410 table->is_stmt = (cur_line_info_table
24411 ? cur_line_info_table->is_stmt
24412 : DWARF_LINE_DEFAULT_IS_STMT_START);
24413 cur_line_info_table = table;
24414 }
24415
24416
24417 /* We need to reset the locations at the beginning of each
24418 function. We can't do this in the end_function hook, because the
24419 declarations that use the locations won't have been output when
24420 that hook is called. Also compute have_multiple_function_sections here. */
24421
24422 static void
24423 dwarf2out_begin_function (tree fun)
24424 {
24425 section *sec = function_section (fun);
24426
24427 if (sec != text_section)
24428 have_multiple_function_sections = true;
24429
24430 if (flag_reorder_blocks_and_partition && !cold_text_section)
24431 {
24432 gcc_assert (current_function_decl == fun);
24433 cold_text_section = unlikely_text_section ();
24434 switch_to_section (cold_text_section);
24435 ASM_OUTPUT_LABEL (asm_out_file, cold_text_section_label);
24436 switch_to_section (sec);
24437 }
24438
24439 dwarf2out_note_section_used ();
24440 call_site_count = 0;
24441 tail_call_site_count = 0;
24442
24443 set_cur_line_info_table (sec);
24444 }
24445
24446 /* Helper function of dwarf2out_end_function, called only after emitting
24447 the very first function into assembly. Check if some .debug_loc range
24448 might end with a .LVL* label that could be equal to .Ltext0.
24449 In that case we must force using absolute addresses in .debug_loc ranges,
24450 because this range could be .LVLN-.Ltext0 .. .LVLM-.Ltext0 for
24451 .LVLN == .LVLM == .Ltext0, thus 0 .. 0, which is a .debug_loc
24452 list terminator.
24453 Set have_multiple_function_sections to true in that case and
24454 terminate htab traversal. */
24455
24456 int
24457 find_empty_loc_ranges_at_text_label (var_loc_list **slot, int)
24458 {
24459 var_loc_list *entry = *slot;
24460 struct var_loc_node *node;
24461
24462 node = entry->first;
24463 if (node && node->next && node->next->label)
24464 {
24465 unsigned int i;
24466 const char *label = node->next->label;
24467 char loclabel[MAX_ARTIFICIAL_LABEL_BYTES];
24468
24469 for (i = 0; i < first_loclabel_num_not_at_text_label; i++)
24470 {
24471 ASM_GENERATE_INTERNAL_LABEL (loclabel, "LVL", i);
24472 if (strcmp (label, loclabel) == 0)
24473 {
24474 have_multiple_function_sections = true;
24475 return 0;
24476 }
24477 }
24478 }
24479 return 1;
24480 }
24481
24482 /* Hook called after emitting a function into assembly.
24483 This does something only for the very first function emitted. */
24484
24485 static void
24486 dwarf2out_end_function (unsigned int)
24487 {
24488 if (in_first_function_p
24489 && !have_multiple_function_sections
24490 && first_loclabel_num_not_at_text_label
24491 && decl_loc_table)
24492 decl_loc_table->traverse<int, find_empty_loc_ranges_at_text_label> (0);
24493 in_first_function_p = false;
24494 maybe_at_text_label_p = false;
24495 }
24496
24497 /* Temporary holder for dwarf2out_register_main_translation_unit. Used to let
24498 front-ends register a translation unit even before dwarf2out_init is
24499 called. */
24500 static tree main_translation_unit = NULL_TREE;
24501
24502 /* Hook called by front-ends after they built their main translation unit.
24503 Associate comp_unit_die to UNIT. */
24504
24505 static void
24506 dwarf2out_register_main_translation_unit (tree unit)
24507 {
24508 gcc_assert (TREE_CODE (unit) == TRANSLATION_UNIT_DECL
24509 && main_translation_unit == NULL_TREE);
24510 main_translation_unit = unit;
24511 /* If dwarf2out_init has not been called yet, it will perform the association
24512 itself looking at main_translation_unit. */
24513 if (decl_die_table != NULL)
24514 equate_decl_number_to_die (unit, comp_unit_die ());
24515 }
24516
24517 /* Add OPCODE+VAL as an entry at the end of the opcode array in TABLE. */
24518
24519 static void
24520 push_dw_line_info_entry (dw_line_info_table *table,
24521 enum dw_line_info_opcode opcode, unsigned int val)
24522 {
24523 dw_line_info_entry e;
24524 e.opcode = opcode;
24525 e.val = val;
24526 vec_safe_push (table->entries, e);
24527 }
24528
24529 /* Output a label to mark the beginning of a source code line entry
24530 and record information relating to this source line, in
24531 'line_info_table' for later output of the .debug_line section. */
24532 /* ??? The discriminator parameter ought to be unsigned. */
24533
24534 static void
24535 dwarf2out_source_line (unsigned int line, const char *filename,
24536 int discriminator, bool is_stmt)
24537 {
24538 unsigned int file_num;
24539 dw_line_info_table *table;
24540
24541 if (debug_info_level < DINFO_LEVEL_TERSE || line == 0)
24542 return;
24543
24544 /* The discriminator column was added in dwarf4. Simplify the below
24545 by simply removing it if we're not supposed to output it. */
24546 if (dwarf_version < 4 && dwarf_strict)
24547 discriminator = 0;
24548
24549 table = cur_line_info_table;
24550 file_num = maybe_emit_file (lookup_filename (filename));
24551
24552 /* ??? TODO: Elide duplicate line number entries. Traditionally,
24553 the debugger has used the second (possibly duplicate) line number
24554 at the beginning of the function to mark the end of the prologue.
24555 We could eliminate any other duplicates within the function. For
24556 Dwarf3, we ought to include the DW_LNS_set_prologue_end mark in
24557 that second line number entry. */
24558 /* Recall that this end-of-prologue indication is *not* the same thing
24559 as the end_prologue debug hook. The NOTE_INSN_PROLOGUE_END note,
24560 to which the hook corresponds, follows the last insn that was
24561 emitted by gen_prologue. What we need is to precede the first insn
24562 that had been emitted after NOTE_INSN_FUNCTION_BEG, i.e. the first
24563 insn that corresponds to something the user wrote. These may be
24564 very different locations once scheduling is enabled. */
24565
24566 if (0 && file_num == table->file_num
24567 && line == table->line_num
24568 && discriminator == table->discrim_num
24569 && is_stmt == table->is_stmt)
24570 return;
24571
24572 switch_to_section (current_function_section ());
24573
24574 /* If requested, emit something human-readable. */
24575 if (flag_debug_asm)
24576 fprintf (asm_out_file, "\t%s %s:%d\n", ASM_COMMENT_START, filename, line);
24577
24578 if (DWARF2_ASM_LINE_DEBUG_INFO)
24579 {
24580 /* Emit the .loc directive understood by GNU as. */
24581 /* "\t.loc %u %u 0 is_stmt %u discriminator %u",
24582 file_num, line, is_stmt, discriminator */
24583 fputs ("\t.loc ", asm_out_file);
24584 fprint_ul (asm_out_file, file_num);
24585 putc (' ', asm_out_file);
24586 fprint_ul (asm_out_file, line);
24587 putc (' ', asm_out_file);
24588 putc ('0', asm_out_file);
24589
24590 if (is_stmt != table->is_stmt)
24591 {
24592 fputs (" is_stmt ", asm_out_file);
24593 putc (is_stmt ? '1' : '0', asm_out_file);
24594 }
24595 if (SUPPORTS_DISCRIMINATOR && discriminator != 0)
24596 {
24597 gcc_assert (discriminator > 0);
24598 fputs (" discriminator ", asm_out_file);
24599 fprint_ul (asm_out_file, (unsigned long) discriminator);
24600 }
24601 putc ('\n', asm_out_file);
24602 }
24603 else
24604 {
24605 unsigned int label_num = ++line_info_label_num;
24606
24607 targetm.asm_out.internal_label (asm_out_file, LINE_CODE_LABEL, label_num);
24608
24609 push_dw_line_info_entry (table, LI_set_address, label_num);
24610 if (file_num != table->file_num)
24611 push_dw_line_info_entry (table, LI_set_file, file_num);
24612 if (discriminator != table->discrim_num)
24613 push_dw_line_info_entry (table, LI_set_discriminator, discriminator);
24614 if (is_stmt != table->is_stmt)
24615 push_dw_line_info_entry (table, LI_negate_stmt, 0);
24616 push_dw_line_info_entry (table, LI_set_line, line);
24617 }
24618
24619 table->file_num = file_num;
24620 table->line_num = line;
24621 table->discrim_num = discriminator;
24622 table->is_stmt = is_stmt;
24623 table->in_use = true;
24624 }
24625
24626 /* Record the beginning of a new source file. */
24627
24628 static void
24629 dwarf2out_start_source_file (unsigned int lineno, const char *filename)
24630 {
24631 if (flag_eliminate_dwarf2_dups)
24632 {
24633 /* Record the beginning of the file for break_out_includes. */
24634 dw_die_ref bincl_die;
24635
24636 bincl_die = new_die (DW_TAG_GNU_BINCL, comp_unit_die (), NULL);
24637 add_AT_string (bincl_die, DW_AT_name, remap_debug_filename (filename));
24638 }
24639
24640 if (debug_info_level >= DINFO_LEVEL_VERBOSE)
24641 {
24642 macinfo_entry e;
24643 e.code = DW_MACINFO_start_file;
24644 e.lineno = lineno;
24645 e.info = ggc_strdup (filename);
24646 vec_safe_push (macinfo_table, e);
24647 }
24648 }
24649
24650 /* Record the end of a source file. */
24651
24652 static void
24653 dwarf2out_end_source_file (unsigned int lineno ATTRIBUTE_UNUSED)
24654 {
24655 if (flag_eliminate_dwarf2_dups)
24656 /* Record the end of the file for break_out_includes. */
24657 new_die (DW_TAG_GNU_EINCL, comp_unit_die (), NULL);
24658
24659 if (debug_info_level >= DINFO_LEVEL_VERBOSE)
24660 {
24661 macinfo_entry e;
24662 e.code = DW_MACINFO_end_file;
24663 e.lineno = lineno;
24664 e.info = NULL;
24665 vec_safe_push (macinfo_table, e);
24666 }
24667 }
24668
24669 /* Called from debug_define in toplev.c. The `buffer' parameter contains
24670 the tail part of the directive line, i.e. the part which is past the
24671 initial whitespace, #, whitespace, directive-name, whitespace part. */
24672
24673 static void
24674 dwarf2out_define (unsigned int lineno ATTRIBUTE_UNUSED,
24675 const char *buffer ATTRIBUTE_UNUSED)
24676 {
24677 if (debug_info_level >= DINFO_LEVEL_VERBOSE)
24678 {
24679 macinfo_entry e;
24680 /* Insert a dummy first entry to be able to optimize the whole
24681 predefined macro block using DW_MACRO_GNU_transparent_include. */
24682 if (macinfo_table->is_empty () && lineno <= 1)
24683 {
24684 e.code = 0;
24685 e.lineno = 0;
24686 e.info = NULL;
24687 vec_safe_push (macinfo_table, e);
24688 }
24689 e.code = DW_MACINFO_define;
24690 e.lineno = lineno;
24691 e.info = ggc_strdup (buffer);
24692 vec_safe_push (macinfo_table, e);
24693 }
24694 }
24695
24696 /* Called from debug_undef in toplev.c. The `buffer' parameter contains
24697 the tail part of the directive line, i.e. the part which is past the
24698 initial whitespace, #, whitespace, directive-name, whitespace part. */
24699
24700 static void
24701 dwarf2out_undef (unsigned int lineno ATTRIBUTE_UNUSED,
24702 const char *buffer ATTRIBUTE_UNUSED)
24703 {
24704 if (debug_info_level >= DINFO_LEVEL_VERBOSE)
24705 {
24706 macinfo_entry e;
24707 /* Insert a dummy first entry to be able to optimize the whole
24708 predefined macro block using DW_MACRO_GNU_transparent_include. */
24709 if (macinfo_table->is_empty () && lineno <= 1)
24710 {
24711 e.code = 0;
24712 e.lineno = 0;
24713 e.info = NULL;
24714 vec_safe_push (macinfo_table, e);
24715 }
24716 e.code = DW_MACINFO_undef;
24717 e.lineno = lineno;
24718 e.info = ggc_strdup (buffer);
24719 vec_safe_push (macinfo_table, e);
24720 }
24721 }
24722
24723 /* Helpers to manipulate hash table of CUs. */
24724
24725 struct macinfo_entry_hasher : nofree_ptr_hash <macinfo_entry>
24726 {
24727 static inline hashval_t hash (const macinfo_entry *);
24728 static inline bool equal (const macinfo_entry *, const macinfo_entry *);
24729 };
24730
24731 inline hashval_t
24732 macinfo_entry_hasher::hash (const macinfo_entry *entry)
24733 {
24734 return htab_hash_string (entry->info);
24735 }
24736
24737 inline bool
24738 macinfo_entry_hasher::equal (const macinfo_entry *entry1,
24739 const macinfo_entry *entry2)
24740 {
24741 return !strcmp (entry1->info, entry2->info);
24742 }
24743
24744 typedef hash_table<macinfo_entry_hasher> macinfo_hash_type;
24745
24746 /* Output a single .debug_macinfo entry. */
24747
24748 static void
24749 output_macinfo_op (macinfo_entry *ref)
24750 {
24751 int file_num;
24752 size_t len;
24753 struct indirect_string_node *node;
24754 char label[MAX_ARTIFICIAL_LABEL_BYTES];
24755 struct dwarf_file_data *fd;
24756
24757 switch (ref->code)
24758 {
24759 case DW_MACINFO_start_file:
24760 fd = lookup_filename (ref->info);
24761 file_num = maybe_emit_file (fd);
24762 dw2_asm_output_data (1, DW_MACINFO_start_file, "Start new file");
24763 dw2_asm_output_data_uleb128 (ref->lineno,
24764 "Included from line number %lu",
24765 (unsigned long) ref->lineno);
24766 dw2_asm_output_data_uleb128 (file_num, "file %s", ref->info);
24767 break;
24768 case DW_MACINFO_end_file:
24769 dw2_asm_output_data (1, DW_MACINFO_end_file, "End file");
24770 break;
24771 case DW_MACINFO_define:
24772 case DW_MACINFO_undef:
24773 len = strlen (ref->info) + 1;
24774 if (!dwarf_strict
24775 && len > DWARF_OFFSET_SIZE
24776 && !DWARF2_INDIRECT_STRING_SUPPORT_MISSING_ON_TARGET
24777 && (debug_str_section->common.flags & SECTION_MERGE) != 0)
24778 {
24779 ref->code = ref->code == DW_MACINFO_define
24780 ? DW_MACRO_GNU_define_indirect
24781 : DW_MACRO_GNU_undef_indirect;
24782 output_macinfo_op (ref);
24783 return;
24784 }
24785 dw2_asm_output_data (1, ref->code,
24786 ref->code == DW_MACINFO_define
24787 ? "Define macro" : "Undefine macro");
24788 dw2_asm_output_data_uleb128 (ref->lineno, "At line number %lu",
24789 (unsigned long) ref->lineno);
24790 dw2_asm_output_nstring (ref->info, -1, "The macro");
24791 break;
24792 case DW_MACRO_GNU_define_indirect:
24793 case DW_MACRO_GNU_undef_indirect:
24794 node = find_AT_string (ref->info);
24795 gcc_assert (node
24796 && ((node->form == DW_FORM_strp)
24797 || (node->form == DW_FORM_GNU_str_index)));
24798 dw2_asm_output_data (1, ref->code,
24799 ref->code == DW_MACRO_GNU_define_indirect
24800 ? "Define macro indirect"
24801 : "Undefine macro indirect");
24802 dw2_asm_output_data_uleb128 (ref->lineno, "At line number %lu",
24803 (unsigned long) ref->lineno);
24804 if (node->form == DW_FORM_strp)
24805 dw2_asm_output_offset (DWARF_OFFSET_SIZE, node->label,
24806 debug_str_section, "The macro: \"%s\"",
24807 ref->info);
24808 else
24809 dw2_asm_output_data_uleb128 (node->index, "The macro: \"%s\"",
24810 ref->info);
24811 break;
24812 case DW_MACRO_GNU_transparent_include:
24813 dw2_asm_output_data (1, ref->code, "Transparent include");
24814 ASM_GENERATE_INTERNAL_LABEL (label,
24815 DEBUG_MACRO_SECTION_LABEL, ref->lineno);
24816 dw2_asm_output_offset (DWARF_OFFSET_SIZE, label, NULL, NULL);
24817 break;
24818 default:
24819 fprintf (asm_out_file, "%s unrecognized macinfo code %lu\n",
24820 ASM_COMMENT_START, (unsigned long) ref->code);
24821 break;
24822 }
24823 }
24824
24825 /* Attempt to make a sequence of define/undef macinfo ops shareable with
24826 other compilation unit .debug_macinfo sections. IDX is the first
24827 index of a define/undef, return the number of ops that should be
24828 emitted in a comdat .debug_macinfo section and emit
24829 a DW_MACRO_GNU_transparent_include entry referencing it.
24830 If the define/undef entry should be emitted normally, return 0. */
24831
24832 static unsigned
24833 optimize_macinfo_range (unsigned int idx, vec<macinfo_entry, va_gc> *files,
24834 macinfo_hash_type **macinfo_htab)
24835 {
24836 macinfo_entry *first, *second, *cur, *inc;
24837 char linebuf[sizeof (HOST_WIDE_INT) * 3 + 1];
24838 unsigned char checksum[16];
24839 struct md5_ctx ctx;
24840 char *grp_name, *tail;
24841 const char *base;
24842 unsigned int i, count, encoded_filename_len, linebuf_len;
24843 macinfo_entry **slot;
24844
24845 first = &(*macinfo_table)[idx];
24846 second = &(*macinfo_table)[idx + 1];
24847
24848 /* Optimize only if there are at least two consecutive define/undef ops,
24849 and either all of them are before first DW_MACINFO_start_file
24850 with lineno {0,1} (i.e. predefined macro block), or all of them are
24851 in some included header file. */
24852 if (second->code != DW_MACINFO_define && second->code != DW_MACINFO_undef)
24853 return 0;
24854 if (vec_safe_is_empty (files))
24855 {
24856 if (first->lineno > 1 || second->lineno > 1)
24857 return 0;
24858 }
24859 else if (first->lineno == 0)
24860 return 0;
24861
24862 /* Find the last define/undef entry that can be grouped together
24863 with first and at the same time compute md5 checksum of their
24864 codes, linenumbers and strings. */
24865 md5_init_ctx (&ctx);
24866 for (i = idx; macinfo_table->iterate (i, &cur); i++)
24867 if (cur->code != DW_MACINFO_define && cur->code != DW_MACINFO_undef)
24868 break;
24869 else if (vec_safe_is_empty (files) && cur->lineno > 1)
24870 break;
24871 else
24872 {
24873 unsigned char code = cur->code;
24874 md5_process_bytes (&code, 1, &ctx);
24875 checksum_uleb128 (cur->lineno, &ctx);
24876 md5_process_bytes (cur->info, strlen (cur->info) + 1, &ctx);
24877 }
24878 md5_finish_ctx (&ctx, checksum);
24879 count = i - idx;
24880
24881 /* From the containing include filename (if any) pick up just
24882 usable characters from its basename. */
24883 if (vec_safe_is_empty (files))
24884 base = "";
24885 else
24886 base = lbasename (files->last ().info);
24887 for (encoded_filename_len = 0, i = 0; base[i]; i++)
24888 if (ISIDNUM (base[i]) || base[i] == '.')
24889 encoded_filename_len++;
24890 /* Count . at the end. */
24891 if (encoded_filename_len)
24892 encoded_filename_len++;
24893
24894 sprintf (linebuf, HOST_WIDE_INT_PRINT_UNSIGNED, first->lineno);
24895 linebuf_len = strlen (linebuf);
24896
24897 /* The group name format is: wmN.[<encoded filename>.]<lineno>.<md5sum> */
24898 grp_name = XALLOCAVEC (char, 4 + encoded_filename_len + linebuf_len + 1
24899 + 16 * 2 + 1);
24900 memcpy (grp_name, DWARF_OFFSET_SIZE == 4 ? "wm4." : "wm8.", 4);
24901 tail = grp_name + 4;
24902 if (encoded_filename_len)
24903 {
24904 for (i = 0; base[i]; i++)
24905 if (ISIDNUM (base[i]) || base[i] == '.')
24906 *tail++ = base[i];
24907 *tail++ = '.';
24908 }
24909 memcpy (tail, linebuf, linebuf_len);
24910 tail += linebuf_len;
24911 *tail++ = '.';
24912 for (i = 0; i < 16; i++)
24913 sprintf (tail + i * 2, "%02x", checksum[i] & 0xff);
24914
24915 /* Construct a macinfo_entry for DW_MACRO_GNU_transparent_include
24916 in the empty vector entry before the first define/undef. */
24917 inc = &(*macinfo_table)[idx - 1];
24918 inc->code = DW_MACRO_GNU_transparent_include;
24919 inc->lineno = 0;
24920 inc->info = ggc_strdup (grp_name);
24921 if (!*macinfo_htab)
24922 *macinfo_htab = new macinfo_hash_type (10);
24923 /* Avoid emitting duplicates. */
24924 slot = (*macinfo_htab)->find_slot (inc, INSERT);
24925 if (*slot != NULL)
24926 {
24927 inc->code = 0;
24928 inc->info = NULL;
24929 /* If such an entry has been used before, just emit
24930 a DW_MACRO_GNU_transparent_include op. */
24931 inc = *slot;
24932 output_macinfo_op (inc);
24933 /* And clear all macinfo_entry in the range to avoid emitting them
24934 in the second pass. */
24935 for (i = idx; macinfo_table->iterate (i, &cur) && i < idx + count; i++)
24936 {
24937 cur->code = 0;
24938 cur->info = NULL;
24939 }
24940 }
24941 else
24942 {
24943 *slot = inc;
24944 inc->lineno = (*macinfo_htab)->elements ();
24945 output_macinfo_op (inc);
24946 }
24947 return count;
24948 }
24949
24950 /* Save any strings needed by the macinfo table in the debug str
24951 table. All strings must be collected into the table by the time
24952 index_string is called. */
24953
24954 static void
24955 save_macinfo_strings (void)
24956 {
24957 unsigned len;
24958 unsigned i;
24959 macinfo_entry *ref;
24960
24961 for (i = 0; macinfo_table && macinfo_table->iterate (i, &ref); i++)
24962 {
24963 switch (ref->code)
24964 {
24965 /* Match the logic in output_macinfo_op to decide on
24966 indirect strings. */
24967 case DW_MACINFO_define:
24968 case DW_MACINFO_undef:
24969 len = strlen (ref->info) + 1;
24970 if (!dwarf_strict
24971 && len > DWARF_OFFSET_SIZE
24972 && !DWARF2_INDIRECT_STRING_SUPPORT_MISSING_ON_TARGET
24973 && (debug_str_section->common.flags & SECTION_MERGE) != 0)
24974 set_indirect_string (find_AT_string (ref->info));
24975 break;
24976 case DW_MACRO_GNU_define_indirect:
24977 case DW_MACRO_GNU_undef_indirect:
24978 set_indirect_string (find_AT_string (ref->info));
24979 break;
24980 default:
24981 break;
24982 }
24983 }
24984 }
24985
24986 /* Output macinfo section(s). */
24987
24988 static void
24989 output_macinfo (void)
24990 {
24991 unsigned i;
24992 unsigned long length = vec_safe_length (macinfo_table);
24993 macinfo_entry *ref;
24994 vec<macinfo_entry, va_gc> *files = NULL;
24995 macinfo_hash_type *macinfo_htab = NULL;
24996
24997 if (! length)
24998 return;
24999
25000 /* output_macinfo* uses these interchangeably. */
25001 gcc_assert ((int) DW_MACINFO_define == (int) DW_MACRO_GNU_define
25002 && (int) DW_MACINFO_undef == (int) DW_MACRO_GNU_undef
25003 && (int) DW_MACINFO_start_file == (int) DW_MACRO_GNU_start_file
25004 && (int) DW_MACINFO_end_file == (int) DW_MACRO_GNU_end_file);
25005
25006 /* For .debug_macro emit the section header. */
25007 if (!dwarf_strict)
25008 {
25009 dw2_asm_output_data (2, 4, "DWARF macro version number");
25010 if (DWARF_OFFSET_SIZE == 8)
25011 dw2_asm_output_data (1, 3, "Flags: 64-bit, lineptr present");
25012 else
25013 dw2_asm_output_data (1, 2, "Flags: 32-bit, lineptr present");
25014 dw2_asm_output_offset (DWARF_OFFSET_SIZE,
25015 (!dwarf_split_debug_info ? debug_line_section_label
25016 : debug_skeleton_line_section_label),
25017 debug_line_section, NULL);
25018 }
25019
25020 /* In the first loop, it emits the primary .debug_macinfo section
25021 and after each emitted op the macinfo_entry is cleared.
25022 If a longer range of define/undef ops can be optimized using
25023 DW_MACRO_GNU_transparent_include, the
25024 DW_MACRO_GNU_transparent_include op is emitted and kept in
25025 the vector before the first define/undef in the range and the
25026 whole range of define/undef ops is not emitted and kept. */
25027 for (i = 0; macinfo_table->iterate (i, &ref); i++)
25028 {
25029 switch (ref->code)
25030 {
25031 case DW_MACINFO_start_file:
25032 vec_safe_push (files, *ref);
25033 break;
25034 case DW_MACINFO_end_file:
25035 if (!vec_safe_is_empty (files))
25036 files->pop ();
25037 break;
25038 case DW_MACINFO_define:
25039 case DW_MACINFO_undef:
25040 if (!dwarf_strict
25041 && HAVE_COMDAT_GROUP
25042 && vec_safe_length (files) != 1
25043 && i > 0
25044 && i + 1 < length
25045 && (*macinfo_table)[i - 1].code == 0)
25046 {
25047 unsigned count = optimize_macinfo_range (i, files, &macinfo_htab);
25048 if (count)
25049 {
25050 i += count - 1;
25051 continue;
25052 }
25053 }
25054 break;
25055 case 0:
25056 /* A dummy entry may be inserted at the beginning to be able
25057 to optimize the whole block of predefined macros. */
25058 if (i == 0)
25059 continue;
25060 default:
25061 break;
25062 }
25063 output_macinfo_op (ref);
25064 ref->info = NULL;
25065 ref->code = 0;
25066 }
25067
25068 if (!macinfo_htab)
25069 return;
25070
25071 delete macinfo_htab;
25072 macinfo_htab = NULL;
25073
25074 /* If any DW_MACRO_GNU_transparent_include were used, on those
25075 DW_MACRO_GNU_transparent_include entries terminate the
25076 current chain and switch to a new comdat .debug_macinfo
25077 section and emit the define/undef entries within it. */
25078 for (i = 0; macinfo_table->iterate (i, &ref); i++)
25079 switch (ref->code)
25080 {
25081 case 0:
25082 continue;
25083 case DW_MACRO_GNU_transparent_include:
25084 {
25085 char label[MAX_ARTIFICIAL_LABEL_BYTES];
25086 tree comdat_key = get_identifier (ref->info);
25087 /* Terminate the previous .debug_macinfo section. */
25088 dw2_asm_output_data (1, 0, "End compilation unit");
25089 targetm.asm_out.named_section (DEBUG_MACRO_SECTION,
25090 SECTION_DEBUG
25091 | SECTION_LINKONCE,
25092 comdat_key);
25093 ASM_GENERATE_INTERNAL_LABEL (label,
25094 DEBUG_MACRO_SECTION_LABEL,
25095 ref->lineno);
25096 ASM_OUTPUT_LABEL (asm_out_file, label);
25097 ref->code = 0;
25098 ref->info = NULL;
25099 dw2_asm_output_data (2, 4, "DWARF macro version number");
25100 if (DWARF_OFFSET_SIZE == 8)
25101 dw2_asm_output_data (1, 1, "Flags: 64-bit");
25102 else
25103 dw2_asm_output_data (1, 0, "Flags: 32-bit");
25104 }
25105 break;
25106 case DW_MACINFO_define:
25107 case DW_MACINFO_undef:
25108 output_macinfo_op (ref);
25109 ref->code = 0;
25110 ref->info = NULL;
25111 break;
25112 default:
25113 gcc_unreachable ();
25114 }
25115 }
25116
25117 /* Set up for Dwarf output at the start of compilation. */
25118
25119 static void
25120 dwarf2out_init (const char *filename ATTRIBUTE_UNUSED)
25121 {
25122 /* This option is currently broken, see (PR53118 and PR46102). */
25123 if (flag_eliminate_dwarf2_dups
25124 && strstr (lang_hooks.name, "C++"))
25125 {
25126 warning (0, "-feliminate-dwarf2-dups is broken for C++, ignoring");
25127 flag_eliminate_dwarf2_dups = 0;
25128 }
25129
25130 /* Allocate the file_table. */
25131 file_table = hash_table<dwarf_file_hasher>::create_ggc (50);
25132
25133 #ifndef DWARF2_LINENO_DEBUGGING_INFO
25134 /* Allocate the decl_die_table. */
25135 decl_die_table = hash_table<decl_die_hasher>::create_ggc (10);
25136
25137 /* Allocate the decl_loc_table. */
25138 decl_loc_table = hash_table<decl_loc_hasher>::create_ggc (10);
25139
25140 /* Allocate the cached_dw_loc_list_table. */
25141 cached_dw_loc_list_table = hash_table<dw_loc_list_hasher>::create_ggc (10);
25142
25143 /* Allocate the initial hunk of the decl_scope_table. */
25144 vec_alloc (decl_scope_table, 256);
25145
25146 /* Allocate the initial hunk of the abbrev_die_table. */
25147 abbrev_die_table = ggc_cleared_vec_alloc<dw_die_ref>
25148 (ABBREV_DIE_TABLE_INCREMENT);
25149 abbrev_die_table_allocated = ABBREV_DIE_TABLE_INCREMENT;
25150 /* Zero-th entry is allocated, but unused. */
25151 abbrev_die_table_in_use = 1;
25152
25153 /* Allocate the dwarf_proc_stack_usage_map. */
25154 dwarf_proc_stack_usage_map = new hash_map<dw_die_ref, int>;
25155
25156 /* Allocate the pubtypes and pubnames vectors. */
25157 vec_alloc (pubname_table, 32);
25158 vec_alloc (pubtype_table, 32);
25159
25160 vec_alloc (incomplete_types, 64);
25161
25162 vec_alloc (used_rtx_array, 32);
25163
25164 if (!dwarf_split_debug_info)
25165 {
25166 debug_info_section = get_section (DEBUG_INFO_SECTION,
25167 SECTION_DEBUG, NULL);
25168 debug_abbrev_section = get_section (DEBUG_ABBREV_SECTION,
25169 SECTION_DEBUG, NULL);
25170 debug_loc_section = get_section (DEBUG_LOC_SECTION,
25171 SECTION_DEBUG, NULL);
25172 }
25173 else
25174 {
25175 debug_info_section = get_section (DEBUG_DWO_INFO_SECTION,
25176 SECTION_DEBUG | SECTION_EXCLUDE, NULL);
25177 debug_abbrev_section = get_section (DEBUG_DWO_ABBREV_SECTION,
25178 SECTION_DEBUG | SECTION_EXCLUDE,
25179 NULL);
25180 debug_addr_section = get_section (DEBUG_ADDR_SECTION,
25181 SECTION_DEBUG, NULL);
25182 debug_skeleton_info_section = get_section (DEBUG_INFO_SECTION,
25183 SECTION_DEBUG, NULL);
25184 debug_skeleton_abbrev_section = get_section (DEBUG_ABBREV_SECTION,
25185 SECTION_DEBUG, NULL);
25186 ASM_GENERATE_INTERNAL_LABEL (debug_skeleton_abbrev_section_label,
25187 DEBUG_SKELETON_ABBREV_SECTION_LABEL, 0);
25188
25189 /* Somewhat confusing detail: The skeleton_[abbrev|info] sections stay in
25190 the main .o, but the skeleton_line goes into the split off dwo. */
25191 debug_skeleton_line_section
25192 = get_section (DEBUG_DWO_LINE_SECTION,
25193 SECTION_DEBUG | SECTION_EXCLUDE, NULL);
25194 ASM_GENERATE_INTERNAL_LABEL (debug_skeleton_line_section_label,
25195 DEBUG_SKELETON_LINE_SECTION_LABEL, 0);
25196 debug_str_offsets_section = get_section (DEBUG_STR_OFFSETS_SECTION,
25197 SECTION_DEBUG | SECTION_EXCLUDE,
25198 NULL);
25199 ASM_GENERATE_INTERNAL_LABEL (debug_skeleton_info_section_label,
25200 DEBUG_SKELETON_INFO_SECTION_LABEL, 0);
25201 debug_loc_section = get_section (DEBUG_DWO_LOC_SECTION,
25202 SECTION_DEBUG | SECTION_EXCLUDE, NULL);
25203 debug_str_dwo_section = get_section (DEBUG_STR_DWO_SECTION,
25204 DEBUG_STR_DWO_SECTION_FLAGS, NULL);
25205 }
25206 debug_aranges_section = get_section (DEBUG_ARANGES_SECTION,
25207 SECTION_DEBUG, NULL);
25208 debug_macinfo_section = get_section (dwarf_strict
25209 ? DEBUG_MACINFO_SECTION
25210 : DEBUG_MACRO_SECTION,
25211 DEBUG_MACRO_SECTION_FLAGS, NULL);
25212 debug_line_section = get_section (DEBUG_LINE_SECTION,
25213 SECTION_DEBUG, NULL);
25214 debug_pubnames_section = get_section (DEBUG_PUBNAMES_SECTION,
25215 SECTION_DEBUG, NULL);
25216 debug_pubtypes_section = get_section (DEBUG_PUBTYPES_SECTION,
25217 SECTION_DEBUG, NULL);
25218 debug_str_section = get_section (DEBUG_STR_SECTION,
25219 DEBUG_STR_SECTION_FLAGS, NULL);
25220 debug_ranges_section = get_section (DEBUG_RANGES_SECTION,
25221 SECTION_DEBUG, NULL);
25222 debug_frame_section = get_section (DEBUG_FRAME_SECTION,
25223 SECTION_DEBUG, NULL);
25224
25225 ASM_GENERATE_INTERNAL_LABEL (text_end_label, TEXT_END_LABEL, 0);
25226 ASM_GENERATE_INTERNAL_LABEL (abbrev_section_label,
25227 DEBUG_ABBREV_SECTION_LABEL, 0);
25228 ASM_GENERATE_INTERNAL_LABEL (text_section_label, TEXT_SECTION_LABEL, 0);
25229 ASM_GENERATE_INTERNAL_LABEL (cold_text_section_label,
25230 COLD_TEXT_SECTION_LABEL, 0);
25231 ASM_GENERATE_INTERNAL_LABEL (cold_end_label, COLD_END_LABEL, 0);
25232
25233 ASM_GENERATE_INTERNAL_LABEL (debug_info_section_label,
25234 DEBUG_INFO_SECTION_LABEL, 0);
25235 ASM_GENERATE_INTERNAL_LABEL (debug_line_section_label,
25236 DEBUG_LINE_SECTION_LABEL, 0);
25237 ASM_GENERATE_INTERNAL_LABEL (ranges_section_label,
25238 DEBUG_RANGES_SECTION_LABEL, 0);
25239 ASM_GENERATE_INTERNAL_LABEL (debug_addr_section_label,
25240 DEBUG_ADDR_SECTION_LABEL, 0);
25241 ASM_GENERATE_INTERNAL_LABEL (macinfo_section_label,
25242 dwarf_strict
25243 ? DEBUG_MACINFO_SECTION_LABEL
25244 : DEBUG_MACRO_SECTION_LABEL, 0);
25245 ASM_GENERATE_INTERNAL_LABEL (loc_section_label, DEBUG_LOC_SECTION_LABEL, 0);
25246
25247 if (debug_info_level >= DINFO_LEVEL_VERBOSE)
25248 vec_alloc (macinfo_table, 64);
25249
25250 switch_to_section (text_section);
25251 ASM_OUTPUT_LABEL (asm_out_file, text_section_label);
25252 #endif
25253
25254 /* Make sure the line number table for .text always exists. */
25255 text_section_line_info = new_line_info_table ();
25256 text_section_line_info->end_label = text_end_label;
25257
25258 #ifdef DWARF2_LINENO_DEBUGGING_INFO
25259 cur_line_info_table = text_section_line_info;
25260 #endif
25261
25262 /* If front-ends already registered a main translation unit but we were not
25263 ready to perform the association, do this now. */
25264 if (main_translation_unit != NULL_TREE)
25265 equate_decl_number_to_die (main_translation_unit, comp_unit_die ());
25266 }
25267
25268 /* Called before compile () starts outputtting functions, variables
25269 and toplevel asms into assembly. */
25270
25271 static void
25272 dwarf2out_assembly_start (void)
25273 {
25274 if (HAVE_GAS_CFI_SECTIONS_DIRECTIVE
25275 && dwarf2out_do_cfi_asm ()
25276 && (!(flag_unwind_tables || flag_exceptions)
25277 || targetm_common.except_unwind_info (&global_options) != UI_DWARF2))
25278 fprintf (asm_out_file, "\t.cfi_sections\t.debug_frame\n");
25279 }
25280
25281 /* A helper function for dwarf2out_finish called through
25282 htab_traverse. Assign a string its index. All strings must be
25283 collected into the table by the time index_string is called,
25284 because the indexing code relies on htab_traverse to traverse nodes
25285 in the same order for each run. */
25286
25287 int
25288 index_string (indirect_string_node **h, unsigned int *index)
25289 {
25290 indirect_string_node *node = *h;
25291
25292 find_string_form (node);
25293 if (node->form == DW_FORM_GNU_str_index && node->refcount > 0)
25294 {
25295 gcc_assert (node->index == NO_INDEX_ASSIGNED);
25296 node->index = *index;
25297 *index += 1;
25298 }
25299 return 1;
25300 }
25301
25302 /* A helper function for output_indirect_strings called through
25303 htab_traverse. Output the offset to a string and update the
25304 current offset. */
25305
25306 int
25307 output_index_string_offset (indirect_string_node **h, unsigned int *offset)
25308 {
25309 indirect_string_node *node = *h;
25310
25311 if (node->form == DW_FORM_GNU_str_index && node->refcount > 0)
25312 {
25313 /* Assert that this node has been assigned an index. */
25314 gcc_assert (node->index != NO_INDEX_ASSIGNED
25315 && node->index != NOT_INDEXED);
25316 dw2_asm_output_data (DWARF_OFFSET_SIZE, *offset,
25317 "indexed string 0x%x: %s", node->index, node->str);
25318 *offset += strlen (node->str) + 1;
25319 }
25320 return 1;
25321 }
25322
25323 /* A helper function for dwarf2out_finish called through
25324 htab_traverse. Output the indexed string. */
25325
25326 int
25327 output_index_string (indirect_string_node **h, unsigned int *cur_idx)
25328 {
25329 struct indirect_string_node *node = *h;
25330
25331 if (node->form == DW_FORM_GNU_str_index && node->refcount > 0)
25332 {
25333 /* Assert that the strings are output in the same order as their
25334 indexes were assigned. */
25335 gcc_assert (*cur_idx == node->index);
25336 assemble_string (node->str, strlen (node->str) + 1);
25337 *cur_idx += 1;
25338 }
25339 return 1;
25340 }
25341
25342 /* A helper function for dwarf2out_finish called through
25343 htab_traverse. Emit one queued .debug_str string. */
25344
25345 int
25346 output_indirect_string (indirect_string_node **h, void *)
25347 {
25348 struct indirect_string_node *node = *h;
25349
25350 node->form = find_string_form (node);
25351 if (node->form == DW_FORM_strp && node->refcount > 0)
25352 {
25353 ASM_OUTPUT_LABEL (asm_out_file, node->label);
25354 assemble_string (node->str, strlen (node->str) + 1);
25355 }
25356
25357 return 1;
25358 }
25359
25360 /* Output the indexed string table. */
25361
25362 static void
25363 output_indirect_strings (void)
25364 {
25365 switch_to_section (debug_str_section);
25366 if (!dwarf_split_debug_info)
25367 debug_str_hash->traverse<void *, output_indirect_string> (NULL);
25368 else
25369 {
25370 unsigned int offset = 0;
25371 unsigned int cur_idx = 0;
25372
25373 skeleton_debug_str_hash->traverse<void *, output_indirect_string> (NULL);
25374
25375 switch_to_section (debug_str_offsets_section);
25376 debug_str_hash->traverse_noresize
25377 <unsigned int *, output_index_string_offset> (&offset);
25378 switch_to_section (debug_str_dwo_section);
25379 debug_str_hash->traverse_noresize<unsigned int *, output_index_string>
25380 (&cur_idx);
25381 }
25382 }
25383
25384 /* Callback for htab_traverse to assign an index to an entry in the
25385 table, and to write that entry to the .debug_addr section. */
25386
25387 int
25388 output_addr_table_entry (addr_table_entry **slot, unsigned int *cur_index)
25389 {
25390 addr_table_entry *entry = *slot;
25391
25392 if (entry->refcount == 0)
25393 {
25394 gcc_assert (entry->index == NO_INDEX_ASSIGNED
25395 || entry->index == NOT_INDEXED);
25396 return 1;
25397 }
25398
25399 gcc_assert (entry->index == *cur_index);
25400 (*cur_index)++;
25401
25402 switch (entry->kind)
25403 {
25404 case ate_kind_rtx:
25405 dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE, entry->addr.rtl,
25406 "0x%x", entry->index);
25407 break;
25408 case ate_kind_rtx_dtprel:
25409 gcc_assert (targetm.asm_out.output_dwarf_dtprel);
25410 targetm.asm_out.output_dwarf_dtprel (asm_out_file,
25411 DWARF2_ADDR_SIZE,
25412 entry->addr.rtl);
25413 fputc ('\n', asm_out_file);
25414 break;
25415 case ate_kind_label:
25416 dw2_asm_output_addr (DWARF2_ADDR_SIZE, entry->addr.label,
25417 "0x%x", entry->index);
25418 break;
25419 default:
25420 gcc_unreachable ();
25421 }
25422 return 1;
25423 }
25424
25425 /* Produce the .debug_addr section. */
25426
25427 static void
25428 output_addr_table (void)
25429 {
25430 unsigned int index = 0;
25431 if (addr_index_table == NULL || addr_index_table->size () == 0)
25432 return;
25433
25434 switch_to_section (debug_addr_section);
25435 addr_index_table
25436 ->traverse_noresize<unsigned int *, output_addr_table_entry> (&index);
25437 }
25438
25439 #if ENABLE_ASSERT_CHECKING
25440 /* Verify that all marks are clear. */
25441
25442 static void
25443 verify_marks_clear (dw_die_ref die)
25444 {
25445 dw_die_ref c;
25446
25447 gcc_assert (! die->die_mark);
25448 FOR_EACH_CHILD (die, c, verify_marks_clear (c));
25449 }
25450 #endif /* ENABLE_ASSERT_CHECKING */
25451
25452 /* Clear the marks for a die and its children.
25453 Be cool if the mark isn't set. */
25454
25455 static void
25456 prune_unmark_dies (dw_die_ref die)
25457 {
25458 dw_die_ref c;
25459
25460 if (die->die_mark)
25461 die->die_mark = 0;
25462 FOR_EACH_CHILD (die, c, prune_unmark_dies (c));
25463 }
25464
25465 /* Given LOC that is referenced by a DIE we're marking as used, find all
25466 referenced DWARF procedures it references and mark them as used. */
25467
25468 static void
25469 prune_unused_types_walk_loc_descr (dw_loc_descr_ref loc)
25470 {
25471 for (; loc != NULL; loc = loc->dw_loc_next)
25472 switch (loc->dw_loc_opc)
25473 {
25474 case DW_OP_call2:
25475 case DW_OP_call4:
25476 case DW_OP_call_ref:
25477 prune_unused_types_mark (loc->dw_loc_oprnd1.v.val_die_ref.die, 1);
25478 break;
25479 default:
25480 break;
25481 }
25482 }
25483
25484 /* Given DIE that we're marking as used, find any other dies
25485 it references as attributes and mark them as used. */
25486
25487 static void
25488 prune_unused_types_walk_attribs (dw_die_ref die)
25489 {
25490 dw_attr_node *a;
25491 unsigned ix;
25492
25493 FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
25494 {
25495 switch (AT_class (a))
25496 {
25497 /* Make sure DWARF procedures referenced by location descriptions will
25498 get emitted. */
25499 case dw_val_class_loc:
25500 prune_unused_types_walk_loc_descr (AT_loc (a));
25501 break;
25502 case dw_val_class_loc_list:
25503 for (dw_loc_list_ref list = AT_loc_list (a);
25504 list != NULL;
25505 list = list->dw_loc_next)
25506 prune_unused_types_walk_loc_descr (list->expr);
25507 break;
25508
25509 case dw_val_class_die_ref:
25510 /* A reference to another DIE.
25511 Make sure that it will get emitted.
25512 If it was broken out into a comdat group, don't follow it. */
25513 if (! AT_ref (a)->comdat_type_p
25514 || a->dw_attr == DW_AT_specification)
25515 prune_unused_types_mark (a->dw_attr_val.v.val_die_ref.die, 1);
25516 break;
25517
25518 case dw_val_class_str:
25519 /* Set the string's refcount to 0 so that prune_unused_types_mark
25520 accounts properly for it. */
25521 a->dw_attr_val.v.val_str->refcount = 0;
25522 break;
25523
25524 default:
25525 break;
25526 }
25527 }
25528 }
25529
25530 /* Mark the generic parameters and arguments children DIEs of DIE. */
25531
25532 static void
25533 prune_unused_types_mark_generic_parms_dies (dw_die_ref die)
25534 {
25535 dw_die_ref c;
25536
25537 if (die == NULL || die->die_child == NULL)
25538 return;
25539 c = die->die_child;
25540 do
25541 {
25542 if (is_template_parameter (c))
25543 prune_unused_types_mark (c, 1);
25544 c = c->die_sib;
25545 } while (c && c != die->die_child);
25546 }
25547
25548 /* Mark DIE as being used. If DOKIDS is true, then walk down
25549 to DIE's children. */
25550
25551 static void
25552 prune_unused_types_mark (dw_die_ref die, int dokids)
25553 {
25554 dw_die_ref c;
25555
25556 if (die->die_mark == 0)
25557 {
25558 /* We haven't done this node yet. Mark it as used. */
25559 die->die_mark = 1;
25560 /* If this is the DIE of a generic type instantiation,
25561 mark the children DIEs that describe its generic parms and
25562 args. */
25563 prune_unused_types_mark_generic_parms_dies (die);
25564
25565 /* We also have to mark its parents as used.
25566 (But we don't want to mark our parent's kids due to this,
25567 unless it is a class.) */
25568 if (die->die_parent)
25569 prune_unused_types_mark (die->die_parent,
25570 class_scope_p (die->die_parent));
25571
25572 /* Mark any referenced nodes. */
25573 prune_unused_types_walk_attribs (die);
25574
25575 /* If this node is a specification,
25576 also mark the definition, if it exists. */
25577 if (get_AT_flag (die, DW_AT_declaration) && die->die_definition)
25578 prune_unused_types_mark (die->die_definition, 1);
25579 }
25580
25581 if (dokids && die->die_mark != 2)
25582 {
25583 /* We need to walk the children, but haven't done so yet.
25584 Remember that we've walked the kids. */
25585 die->die_mark = 2;
25586
25587 /* If this is an array type, we need to make sure our
25588 kids get marked, even if they're types. If we're
25589 breaking out types into comdat sections, do this
25590 for all type definitions. */
25591 if (die->die_tag == DW_TAG_array_type
25592 || (use_debug_types
25593 && is_type_die (die) && ! is_declaration_die (die)))
25594 FOR_EACH_CHILD (die, c, prune_unused_types_mark (c, 1));
25595 else
25596 FOR_EACH_CHILD (die, c, prune_unused_types_walk (c));
25597 }
25598 }
25599
25600 /* For local classes, look if any static member functions were emitted
25601 and if so, mark them. */
25602
25603 static void
25604 prune_unused_types_walk_local_classes (dw_die_ref die)
25605 {
25606 dw_die_ref c;
25607
25608 if (die->die_mark == 2)
25609 return;
25610
25611 switch (die->die_tag)
25612 {
25613 case DW_TAG_structure_type:
25614 case DW_TAG_union_type:
25615 case DW_TAG_class_type:
25616 break;
25617
25618 case DW_TAG_subprogram:
25619 if (!get_AT_flag (die, DW_AT_declaration)
25620 || die->die_definition != NULL)
25621 prune_unused_types_mark (die, 1);
25622 return;
25623
25624 default:
25625 return;
25626 }
25627
25628 /* Mark children. */
25629 FOR_EACH_CHILD (die, c, prune_unused_types_walk_local_classes (c));
25630 }
25631
25632 /* Walk the tree DIE and mark types that we actually use. */
25633
25634 static void
25635 prune_unused_types_walk (dw_die_ref die)
25636 {
25637 dw_die_ref c;
25638
25639 /* Don't do anything if this node is already marked and
25640 children have been marked as well. */
25641 if (die->die_mark == 2)
25642 return;
25643
25644 switch (die->die_tag)
25645 {
25646 case DW_TAG_structure_type:
25647 case DW_TAG_union_type:
25648 case DW_TAG_class_type:
25649 if (die->die_perennial_p)
25650 break;
25651
25652 for (c = die->die_parent; c; c = c->die_parent)
25653 if (c->die_tag == DW_TAG_subprogram)
25654 break;
25655
25656 /* Finding used static member functions inside of classes
25657 is needed just for local classes, because for other classes
25658 static member function DIEs with DW_AT_specification
25659 are emitted outside of the DW_TAG_*_type. If we ever change
25660 it, we'd need to call this even for non-local classes. */
25661 if (c)
25662 prune_unused_types_walk_local_classes (die);
25663
25664 /* It's a type node --- don't mark it. */
25665 return;
25666
25667 case DW_TAG_const_type:
25668 case DW_TAG_packed_type:
25669 case DW_TAG_pointer_type:
25670 case DW_TAG_reference_type:
25671 case DW_TAG_rvalue_reference_type:
25672 case DW_TAG_volatile_type:
25673 case DW_TAG_typedef:
25674 case DW_TAG_array_type:
25675 case DW_TAG_interface_type:
25676 case DW_TAG_friend:
25677 case DW_TAG_enumeration_type:
25678 case DW_TAG_subroutine_type:
25679 case DW_TAG_string_type:
25680 case DW_TAG_set_type:
25681 case DW_TAG_subrange_type:
25682 case DW_TAG_ptr_to_member_type:
25683 case DW_TAG_file_type:
25684 /* Type nodes are useful only when other DIEs reference them --- don't
25685 mark them. */
25686 /* FALLTHROUGH */
25687
25688 case DW_TAG_dwarf_procedure:
25689 /* Likewise for DWARF procedures. */
25690
25691 if (die->die_perennial_p)
25692 break;
25693
25694 return;
25695
25696 default:
25697 /* Mark everything else. */
25698 break;
25699 }
25700
25701 if (die->die_mark == 0)
25702 {
25703 die->die_mark = 1;
25704
25705 /* Now, mark any dies referenced from here. */
25706 prune_unused_types_walk_attribs (die);
25707 }
25708
25709 die->die_mark = 2;
25710
25711 /* Mark children. */
25712 FOR_EACH_CHILD (die, c, prune_unused_types_walk (c));
25713 }
25714
25715 /* Increment the string counts on strings referred to from DIE's
25716 attributes. */
25717
25718 static void
25719 prune_unused_types_update_strings (dw_die_ref die)
25720 {
25721 dw_attr_node *a;
25722 unsigned ix;
25723
25724 FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
25725 if (AT_class (a) == dw_val_class_str)
25726 {
25727 struct indirect_string_node *s = a->dw_attr_val.v.val_str;
25728 s->refcount++;
25729 /* Avoid unnecessarily putting strings that are used less than
25730 twice in the hash table. */
25731 if (s->refcount
25732 == ((DEBUG_STR_SECTION_FLAGS & SECTION_MERGE) ? 1 : 2))
25733 {
25734 indirect_string_node **slot
25735 = debug_str_hash->find_slot_with_hash (s->str,
25736 htab_hash_string (s->str),
25737 INSERT);
25738 gcc_assert (*slot == NULL);
25739 *slot = s;
25740 }
25741 }
25742 }
25743
25744 /* Remove from the tree DIE any dies that aren't marked. */
25745
25746 static void
25747 prune_unused_types_prune (dw_die_ref die)
25748 {
25749 dw_die_ref c;
25750
25751 gcc_assert (die->die_mark);
25752 prune_unused_types_update_strings (die);
25753
25754 if (! die->die_child)
25755 return;
25756
25757 c = die->die_child;
25758 do {
25759 dw_die_ref prev = c;
25760 for (c = c->die_sib; ! c->die_mark; c = c->die_sib)
25761 if (c == die->die_child)
25762 {
25763 /* No marked children between 'prev' and the end of the list. */
25764 if (prev == c)
25765 /* No marked children at all. */
25766 die->die_child = NULL;
25767 else
25768 {
25769 prev->die_sib = c->die_sib;
25770 die->die_child = prev;
25771 }
25772 return;
25773 }
25774
25775 if (c != prev->die_sib)
25776 prev->die_sib = c;
25777 prune_unused_types_prune (c);
25778 } while (c != die->die_child);
25779 }
25780
25781 /* Remove dies representing declarations that we never use. */
25782
25783 static void
25784 prune_unused_types (void)
25785 {
25786 unsigned int i;
25787 limbo_die_node *node;
25788 comdat_type_node *ctnode;
25789 pubname_entry *pub;
25790 dw_die_ref base_type;
25791
25792 #if ENABLE_ASSERT_CHECKING
25793 /* All the marks should already be clear. */
25794 verify_marks_clear (comp_unit_die ());
25795 for (node = limbo_die_list; node; node = node->next)
25796 verify_marks_clear (node->die);
25797 for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next)
25798 verify_marks_clear (ctnode->root_die);
25799 #endif /* ENABLE_ASSERT_CHECKING */
25800
25801 /* Mark types that are used in global variables. */
25802 premark_types_used_by_global_vars ();
25803
25804 /* Set the mark on nodes that are actually used. */
25805 prune_unused_types_walk (comp_unit_die ());
25806 for (node = limbo_die_list; node; node = node->next)
25807 prune_unused_types_walk (node->die);
25808 for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next)
25809 {
25810 prune_unused_types_walk (ctnode->root_die);
25811 prune_unused_types_mark (ctnode->type_die, 1);
25812 }
25813
25814 /* Also set the mark on nodes referenced from the pubname_table. Enumerators
25815 are unusual in that they are pubnames that are the children of pubtypes.
25816 They should only be marked via their parent DW_TAG_enumeration_type die,
25817 not as roots in themselves. */
25818 FOR_EACH_VEC_ELT (*pubname_table, i, pub)
25819 if (pub->die->die_tag != DW_TAG_enumerator)
25820 prune_unused_types_mark (pub->die, 1);
25821 for (i = 0; base_types.iterate (i, &base_type); i++)
25822 prune_unused_types_mark (base_type, 1);
25823
25824 if (debug_str_hash)
25825 debug_str_hash->empty ();
25826 if (skeleton_debug_str_hash)
25827 skeleton_debug_str_hash->empty ();
25828 prune_unused_types_prune (comp_unit_die ());
25829 for (limbo_die_node **pnode = &limbo_die_list; *pnode; )
25830 {
25831 node = *pnode;
25832 if (!node->die->die_mark)
25833 *pnode = node->next;
25834 else
25835 {
25836 prune_unused_types_prune (node->die);
25837 pnode = &node->next;
25838 }
25839 }
25840 for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next)
25841 prune_unused_types_prune (ctnode->root_die);
25842
25843 /* Leave the marks clear. */
25844 prune_unmark_dies (comp_unit_die ());
25845 for (node = limbo_die_list; node; node = node->next)
25846 prune_unmark_dies (node->die);
25847 for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next)
25848 prune_unmark_dies (ctnode->root_die);
25849 }
25850
25851 /* Set the parameter to true if there are any relative pathnames in
25852 the file table. */
25853 int
25854 file_table_relative_p (dwarf_file_data **slot, bool *p)
25855 {
25856 struct dwarf_file_data *d = *slot;
25857 if (!IS_ABSOLUTE_PATH (d->filename))
25858 {
25859 *p = true;
25860 return 0;
25861 }
25862 return 1;
25863 }
25864
25865 /* Helpers to manipulate hash table of comdat type units. */
25866
25867 struct comdat_type_hasher : nofree_ptr_hash <comdat_type_node>
25868 {
25869 static inline hashval_t hash (const comdat_type_node *);
25870 static inline bool equal (const comdat_type_node *, const comdat_type_node *);
25871 };
25872
25873 inline hashval_t
25874 comdat_type_hasher::hash (const comdat_type_node *type_node)
25875 {
25876 hashval_t h;
25877 memcpy (&h, type_node->signature, sizeof (h));
25878 return h;
25879 }
25880
25881 inline bool
25882 comdat_type_hasher::equal (const comdat_type_node *type_node_1,
25883 const comdat_type_node *type_node_2)
25884 {
25885 return (! memcmp (type_node_1->signature, type_node_2->signature,
25886 DWARF_TYPE_SIGNATURE_SIZE));
25887 }
25888
25889 /* Move a DW_AT_{,MIPS_}linkage_name attribute just added to dw_die_ref
25890 to the location it would have been added, should we know its
25891 DECL_ASSEMBLER_NAME when we added other attributes. This will
25892 probably improve compactness of debug info, removing equivalent
25893 abbrevs, and hide any differences caused by deferring the
25894 computation of the assembler name, triggered by e.g. PCH. */
25895
25896 static inline void
25897 move_linkage_attr (dw_die_ref die)
25898 {
25899 unsigned ix = vec_safe_length (die->die_attr);
25900 dw_attr_node linkage = (*die->die_attr)[ix - 1];
25901
25902 gcc_assert (linkage.dw_attr == DW_AT_linkage_name
25903 || linkage.dw_attr == DW_AT_MIPS_linkage_name);
25904
25905 while (--ix > 0)
25906 {
25907 dw_attr_node *prev = &(*die->die_attr)[ix - 1];
25908
25909 if (prev->dw_attr == DW_AT_decl_line || prev->dw_attr == DW_AT_name)
25910 break;
25911 }
25912
25913 if (ix != vec_safe_length (die->die_attr) - 1)
25914 {
25915 die->die_attr->pop ();
25916 die->die_attr->quick_insert (ix, linkage);
25917 }
25918 }
25919
25920 /* Helper function for resolve_addr, mark DW_TAG_base_type nodes
25921 referenced from typed stack ops and count how often they are used. */
25922
25923 static void
25924 mark_base_types (dw_loc_descr_ref loc)
25925 {
25926 dw_die_ref base_type = NULL;
25927
25928 for (; loc; loc = loc->dw_loc_next)
25929 {
25930 switch (loc->dw_loc_opc)
25931 {
25932 case DW_OP_GNU_regval_type:
25933 case DW_OP_GNU_deref_type:
25934 base_type = loc->dw_loc_oprnd2.v.val_die_ref.die;
25935 break;
25936 case DW_OP_GNU_convert:
25937 case DW_OP_GNU_reinterpret:
25938 if (loc->dw_loc_oprnd1.val_class == dw_val_class_unsigned_const)
25939 continue;
25940 /* FALLTHRU */
25941 case DW_OP_GNU_const_type:
25942 base_type = loc->dw_loc_oprnd1.v.val_die_ref.die;
25943 break;
25944 case DW_OP_GNU_entry_value:
25945 mark_base_types (loc->dw_loc_oprnd1.v.val_loc);
25946 continue;
25947 default:
25948 continue;
25949 }
25950 gcc_assert (base_type->die_parent == comp_unit_die ());
25951 if (base_type->die_mark)
25952 base_type->die_mark++;
25953 else
25954 {
25955 base_types.safe_push (base_type);
25956 base_type->die_mark = 1;
25957 }
25958 }
25959 }
25960
25961 /* Comparison function for sorting marked base types. */
25962
25963 static int
25964 base_type_cmp (const void *x, const void *y)
25965 {
25966 dw_die_ref dx = *(const dw_die_ref *) x;
25967 dw_die_ref dy = *(const dw_die_ref *) y;
25968 unsigned int byte_size1, byte_size2;
25969 unsigned int encoding1, encoding2;
25970 if (dx->die_mark > dy->die_mark)
25971 return -1;
25972 if (dx->die_mark < dy->die_mark)
25973 return 1;
25974 byte_size1 = get_AT_unsigned (dx, DW_AT_byte_size);
25975 byte_size2 = get_AT_unsigned (dy, DW_AT_byte_size);
25976 if (byte_size1 < byte_size2)
25977 return 1;
25978 if (byte_size1 > byte_size2)
25979 return -1;
25980 encoding1 = get_AT_unsigned (dx, DW_AT_encoding);
25981 encoding2 = get_AT_unsigned (dy, DW_AT_encoding);
25982 if (encoding1 < encoding2)
25983 return 1;
25984 if (encoding1 > encoding2)
25985 return -1;
25986 return 0;
25987 }
25988
25989 /* Move base types marked by mark_base_types as early as possible
25990 in the CU, sorted by decreasing usage count both to make the
25991 uleb128 references as small as possible and to make sure they
25992 will have die_offset already computed by calc_die_sizes when
25993 sizes of typed stack loc ops is computed. */
25994
25995 static void
25996 move_marked_base_types (void)
25997 {
25998 unsigned int i;
25999 dw_die_ref base_type, die, c;
26000
26001 if (base_types.is_empty ())
26002 return;
26003
26004 /* Sort by decreasing usage count, they will be added again in that
26005 order later on. */
26006 base_types.qsort (base_type_cmp);
26007 die = comp_unit_die ();
26008 c = die->die_child;
26009 do
26010 {
26011 dw_die_ref prev = c;
26012 c = c->die_sib;
26013 while (c->die_mark)
26014 {
26015 remove_child_with_prev (c, prev);
26016 /* As base types got marked, there must be at least
26017 one node other than DW_TAG_base_type. */
26018 gcc_assert (c != c->die_sib);
26019 c = c->die_sib;
26020 }
26021 }
26022 while (c != die->die_child);
26023 gcc_assert (die->die_child);
26024 c = die->die_child;
26025 for (i = 0; base_types.iterate (i, &base_type); i++)
26026 {
26027 base_type->die_mark = 0;
26028 base_type->die_sib = c->die_sib;
26029 c->die_sib = base_type;
26030 c = base_type;
26031 }
26032 }
26033
26034 /* Helper function for resolve_addr, attempt to resolve
26035 one CONST_STRING, return true if successful. Similarly verify that
26036 SYMBOL_REFs refer to variables emitted in the current CU. */
26037
26038 static bool
26039 resolve_one_addr (rtx *addr)
26040 {
26041 rtx rtl = *addr;
26042
26043 if (GET_CODE (rtl) == CONST_STRING)
26044 {
26045 size_t len = strlen (XSTR (rtl, 0)) + 1;
26046 tree t = build_string (len, XSTR (rtl, 0));
26047 tree tlen = size_int (len - 1);
26048 TREE_TYPE (t)
26049 = build_array_type (char_type_node, build_index_type (tlen));
26050 rtl = lookup_constant_def (t);
26051 if (!rtl || !MEM_P (rtl))
26052 return false;
26053 rtl = XEXP (rtl, 0);
26054 if (GET_CODE (rtl) == SYMBOL_REF
26055 && SYMBOL_REF_DECL (rtl)
26056 && !TREE_ASM_WRITTEN (SYMBOL_REF_DECL (rtl)))
26057 return false;
26058 vec_safe_push (used_rtx_array, rtl);
26059 *addr = rtl;
26060 return true;
26061 }
26062
26063 if (GET_CODE (rtl) == SYMBOL_REF
26064 && SYMBOL_REF_DECL (rtl))
26065 {
26066 if (TREE_CONSTANT_POOL_ADDRESS_P (rtl))
26067 {
26068 if (!TREE_ASM_WRITTEN (DECL_INITIAL (SYMBOL_REF_DECL (rtl))))
26069 return false;
26070 }
26071 else if (!TREE_ASM_WRITTEN (SYMBOL_REF_DECL (rtl)))
26072 return false;
26073 }
26074
26075 if (GET_CODE (rtl) == CONST)
26076 {
26077 subrtx_ptr_iterator::array_type array;
26078 FOR_EACH_SUBRTX_PTR (iter, array, &XEXP (rtl, 0), ALL)
26079 if (!resolve_one_addr (*iter))
26080 return false;
26081 }
26082
26083 return true;
26084 }
26085
26086 /* For STRING_CST, return SYMBOL_REF of its constant pool entry,
26087 if possible, and create DW_TAG_dwarf_procedure that can be referenced
26088 from DW_OP_GNU_implicit_pointer if the string hasn't been seen yet. */
26089
26090 static rtx
26091 string_cst_pool_decl (tree t)
26092 {
26093 rtx rtl = output_constant_def (t, 1);
26094 unsigned char *array;
26095 dw_loc_descr_ref l;
26096 tree decl;
26097 size_t len;
26098 dw_die_ref ref;
26099
26100 if (!rtl || !MEM_P (rtl))
26101 return NULL_RTX;
26102 rtl = XEXP (rtl, 0);
26103 if (GET_CODE (rtl) != SYMBOL_REF
26104 || SYMBOL_REF_DECL (rtl) == NULL_TREE)
26105 return NULL_RTX;
26106
26107 decl = SYMBOL_REF_DECL (rtl);
26108 if (!lookup_decl_die (decl))
26109 {
26110 len = TREE_STRING_LENGTH (t);
26111 vec_safe_push (used_rtx_array, rtl);
26112 ref = new_die (DW_TAG_dwarf_procedure, comp_unit_die (), decl);
26113 array = ggc_vec_alloc<unsigned char> (len);
26114 memcpy (array, TREE_STRING_POINTER (t), len);
26115 l = new_loc_descr (DW_OP_implicit_value, len, 0);
26116 l->dw_loc_oprnd2.val_class = dw_val_class_vec;
26117 l->dw_loc_oprnd2.v.val_vec.length = len;
26118 l->dw_loc_oprnd2.v.val_vec.elt_size = 1;
26119 l->dw_loc_oprnd2.v.val_vec.array = array;
26120 add_AT_loc (ref, DW_AT_location, l);
26121 equate_decl_number_to_die (decl, ref);
26122 }
26123 return rtl;
26124 }
26125
26126 /* Helper function of resolve_addr_in_expr. LOC is
26127 a DW_OP_addr followed by DW_OP_stack_value, either at the start
26128 of exprloc or after DW_OP_{,bit_}piece, and val_addr can't be
26129 resolved. Replace it (both DW_OP_addr and DW_OP_stack_value)
26130 with DW_OP_GNU_implicit_pointer if possible
26131 and return true, if unsuccessful, return false. */
26132
26133 static bool
26134 optimize_one_addr_into_implicit_ptr (dw_loc_descr_ref loc)
26135 {
26136 rtx rtl = loc->dw_loc_oprnd1.v.val_addr;
26137 HOST_WIDE_INT offset = 0;
26138 dw_die_ref ref = NULL;
26139 tree decl;
26140
26141 if (GET_CODE (rtl) == CONST
26142 && GET_CODE (XEXP (rtl, 0)) == PLUS
26143 && CONST_INT_P (XEXP (XEXP (rtl, 0), 1)))
26144 {
26145 offset = INTVAL (XEXP (XEXP (rtl, 0), 1));
26146 rtl = XEXP (XEXP (rtl, 0), 0);
26147 }
26148 if (GET_CODE (rtl) == CONST_STRING)
26149 {
26150 size_t len = strlen (XSTR (rtl, 0)) + 1;
26151 tree t = build_string (len, XSTR (rtl, 0));
26152 tree tlen = size_int (len - 1);
26153
26154 TREE_TYPE (t)
26155 = build_array_type (char_type_node, build_index_type (tlen));
26156 rtl = string_cst_pool_decl (t);
26157 if (!rtl)
26158 return false;
26159 }
26160 if (GET_CODE (rtl) == SYMBOL_REF && SYMBOL_REF_DECL (rtl))
26161 {
26162 decl = SYMBOL_REF_DECL (rtl);
26163 if (TREE_CODE (decl) == VAR_DECL && !DECL_EXTERNAL (decl))
26164 {
26165 ref = lookup_decl_die (decl);
26166 if (ref && (get_AT (ref, DW_AT_location)
26167 || get_AT (ref, DW_AT_const_value)))
26168 {
26169 loc->dw_loc_opc = DW_OP_GNU_implicit_pointer;
26170 loc->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
26171 loc->dw_loc_oprnd1.val_entry = NULL;
26172 loc->dw_loc_oprnd1.v.val_die_ref.die = ref;
26173 loc->dw_loc_oprnd1.v.val_die_ref.external = 0;
26174 loc->dw_loc_next = loc->dw_loc_next->dw_loc_next;
26175 loc->dw_loc_oprnd2.v.val_int = offset;
26176 return true;
26177 }
26178 }
26179 }
26180 return false;
26181 }
26182
26183 /* Helper function for resolve_addr, handle one location
26184 expression, return false if at least one CONST_STRING or SYMBOL_REF in
26185 the location list couldn't be resolved. */
26186
26187 static bool
26188 resolve_addr_in_expr (dw_loc_descr_ref loc)
26189 {
26190 dw_loc_descr_ref keep = NULL;
26191 for (dw_loc_descr_ref prev = NULL; loc; prev = loc, loc = loc->dw_loc_next)
26192 switch (loc->dw_loc_opc)
26193 {
26194 case DW_OP_addr:
26195 if (!resolve_one_addr (&loc->dw_loc_oprnd1.v.val_addr))
26196 {
26197 if ((prev == NULL
26198 || prev->dw_loc_opc == DW_OP_piece
26199 || prev->dw_loc_opc == DW_OP_bit_piece)
26200 && loc->dw_loc_next
26201 && loc->dw_loc_next->dw_loc_opc == DW_OP_stack_value
26202 && !dwarf_strict
26203 && optimize_one_addr_into_implicit_ptr (loc))
26204 break;
26205 return false;
26206 }
26207 break;
26208 case DW_OP_GNU_addr_index:
26209 case DW_OP_GNU_const_index:
26210 if (loc->dw_loc_opc == DW_OP_GNU_addr_index
26211 || (loc->dw_loc_opc == DW_OP_GNU_const_index && loc->dtprel))
26212 {
26213 rtx rtl = loc->dw_loc_oprnd1.val_entry->addr.rtl;
26214 if (!resolve_one_addr (&rtl))
26215 return false;
26216 remove_addr_table_entry (loc->dw_loc_oprnd1.val_entry);
26217 loc->dw_loc_oprnd1.val_entry =
26218 add_addr_table_entry (rtl, ate_kind_rtx);
26219 }
26220 break;
26221 case DW_OP_const4u:
26222 case DW_OP_const8u:
26223 if (loc->dtprel
26224 && !resolve_one_addr (&loc->dw_loc_oprnd1.v.val_addr))
26225 return false;
26226 break;
26227 case DW_OP_plus_uconst:
26228 if (size_of_loc_descr (loc)
26229 > size_of_int_loc_descriptor (loc->dw_loc_oprnd1.v.val_unsigned)
26230 + 1
26231 && loc->dw_loc_oprnd1.v.val_unsigned > 0)
26232 {
26233 dw_loc_descr_ref repl
26234 = int_loc_descriptor (loc->dw_loc_oprnd1.v.val_unsigned);
26235 add_loc_descr (&repl, new_loc_descr (DW_OP_plus, 0, 0));
26236 add_loc_descr (&repl, loc->dw_loc_next);
26237 *loc = *repl;
26238 }
26239 break;
26240 case DW_OP_implicit_value:
26241 if (loc->dw_loc_oprnd2.val_class == dw_val_class_addr
26242 && !resolve_one_addr (&loc->dw_loc_oprnd2.v.val_addr))
26243 return false;
26244 break;
26245 case DW_OP_GNU_implicit_pointer:
26246 case DW_OP_GNU_parameter_ref:
26247 if (loc->dw_loc_oprnd1.val_class == dw_val_class_decl_ref)
26248 {
26249 dw_die_ref ref
26250 = lookup_decl_die (loc->dw_loc_oprnd1.v.val_decl_ref);
26251 if (ref == NULL)
26252 return false;
26253 loc->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
26254 loc->dw_loc_oprnd1.v.val_die_ref.die = ref;
26255 loc->dw_loc_oprnd1.v.val_die_ref.external = 0;
26256 }
26257 break;
26258 case DW_OP_GNU_const_type:
26259 case DW_OP_GNU_regval_type:
26260 case DW_OP_GNU_deref_type:
26261 case DW_OP_GNU_convert:
26262 case DW_OP_GNU_reinterpret:
26263 while (loc->dw_loc_next
26264 && loc->dw_loc_next->dw_loc_opc == DW_OP_GNU_convert)
26265 {
26266 dw_die_ref base1, base2;
26267 unsigned enc1, enc2, size1, size2;
26268 if (loc->dw_loc_opc == DW_OP_GNU_regval_type
26269 || loc->dw_loc_opc == DW_OP_GNU_deref_type)
26270 base1 = loc->dw_loc_oprnd2.v.val_die_ref.die;
26271 else if (loc->dw_loc_oprnd1.val_class
26272 == dw_val_class_unsigned_const)
26273 break;
26274 else
26275 base1 = loc->dw_loc_oprnd1.v.val_die_ref.die;
26276 if (loc->dw_loc_next->dw_loc_oprnd1.val_class
26277 == dw_val_class_unsigned_const)
26278 break;
26279 base2 = loc->dw_loc_next->dw_loc_oprnd1.v.val_die_ref.die;
26280 gcc_assert (base1->die_tag == DW_TAG_base_type
26281 && base2->die_tag == DW_TAG_base_type);
26282 enc1 = get_AT_unsigned (base1, DW_AT_encoding);
26283 enc2 = get_AT_unsigned (base2, DW_AT_encoding);
26284 size1 = get_AT_unsigned (base1, DW_AT_byte_size);
26285 size2 = get_AT_unsigned (base2, DW_AT_byte_size);
26286 if (size1 == size2
26287 && (((enc1 == DW_ATE_unsigned || enc1 == DW_ATE_signed)
26288 && (enc2 == DW_ATE_unsigned || enc2 == DW_ATE_signed)
26289 && loc != keep)
26290 || enc1 == enc2))
26291 {
26292 /* Optimize away next DW_OP_GNU_convert after
26293 adjusting LOC's base type die reference. */
26294 if (loc->dw_loc_opc == DW_OP_GNU_regval_type
26295 || loc->dw_loc_opc == DW_OP_GNU_deref_type)
26296 loc->dw_loc_oprnd2.v.val_die_ref.die = base2;
26297 else
26298 loc->dw_loc_oprnd1.v.val_die_ref.die = base2;
26299 loc->dw_loc_next = loc->dw_loc_next->dw_loc_next;
26300 continue;
26301 }
26302 /* Don't change integer DW_OP_GNU_convert after e.g. floating
26303 point typed stack entry. */
26304 else if (enc1 != DW_ATE_unsigned && enc1 != DW_ATE_signed)
26305 keep = loc->dw_loc_next;
26306 break;
26307 }
26308 break;
26309 default:
26310 break;
26311 }
26312 return true;
26313 }
26314
26315 /* Helper function of resolve_addr. DIE had DW_AT_location of
26316 DW_OP_addr alone, which referred to DECL in DW_OP_addr's operand
26317 and DW_OP_addr couldn't be resolved. resolve_addr has already
26318 removed the DW_AT_location attribute. This function attempts to
26319 add a new DW_AT_location attribute with DW_OP_GNU_implicit_pointer
26320 to it or DW_AT_const_value attribute, if possible. */
26321
26322 static void
26323 optimize_location_into_implicit_ptr (dw_die_ref die, tree decl)
26324 {
26325 if (TREE_CODE (decl) != VAR_DECL
26326 || lookup_decl_die (decl) != die
26327 || DECL_EXTERNAL (decl)
26328 || !TREE_STATIC (decl)
26329 || DECL_INITIAL (decl) == NULL_TREE
26330 || DECL_P (DECL_INITIAL (decl))
26331 || get_AT (die, DW_AT_const_value))
26332 return;
26333
26334 tree init = DECL_INITIAL (decl);
26335 HOST_WIDE_INT offset = 0;
26336 /* For variables that have been optimized away and thus
26337 don't have a memory location, see if we can emit
26338 DW_AT_const_value instead. */
26339 if (tree_add_const_value_attribute (die, init))
26340 return;
26341 if (dwarf_strict)
26342 return;
26343 /* If init is ADDR_EXPR or POINTER_PLUS_EXPR of ADDR_EXPR,
26344 and ADDR_EXPR refers to a decl that has DW_AT_location or
26345 DW_AT_const_value (but isn't addressable, otherwise
26346 resolving the original DW_OP_addr wouldn't fail), see if
26347 we can add DW_OP_GNU_implicit_pointer. */
26348 STRIP_NOPS (init);
26349 if (TREE_CODE (init) == POINTER_PLUS_EXPR
26350 && tree_fits_shwi_p (TREE_OPERAND (init, 1)))
26351 {
26352 offset = tree_to_shwi (TREE_OPERAND (init, 1));
26353 init = TREE_OPERAND (init, 0);
26354 STRIP_NOPS (init);
26355 }
26356 if (TREE_CODE (init) != ADDR_EXPR)
26357 return;
26358 if ((TREE_CODE (TREE_OPERAND (init, 0)) == STRING_CST
26359 && !TREE_ASM_WRITTEN (TREE_OPERAND (init, 0)))
26360 || (TREE_CODE (TREE_OPERAND (init, 0)) == VAR_DECL
26361 && !DECL_EXTERNAL (TREE_OPERAND (init, 0))
26362 && TREE_OPERAND (init, 0) != decl))
26363 {
26364 dw_die_ref ref;
26365 dw_loc_descr_ref l;
26366
26367 if (TREE_CODE (TREE_OPERAND (init, 0)) == STRING_CST)
26368 {
26369 rtx rtl = string_cst_pool_decl (TREE_OPERAND (init, 0));
26370 if (!rtl)
26371 return;
26372 decl = SYMBOL_REF_DECL (rtl);
26373 }
26374 else
26375 decl = TREE_OPERAND (init, 0);
26376 ref = lookup_decl_die (decl);
26377 if (ref == NULL
26378 || (!get_AT (ref, DW_AT_location)
26379 && !get_AT (ref, DW_AT_const_value)))
26380 return;
26381 l = new_loc_descr (DW_OP_GNU_implicit_pointer, 0, offset);
26382 l->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
26383 l->dw_loc_oprnd1.v.val_die_ref.die = ref;
26384 l->dw_loc_oprnd1.v.val_die_ref.external = 0;
26385 add_AT_loc (die, DW_AT_location, l);
26386 }
26387 }
26388
26389 /* Resolve DW_OP_addr and DW_AT_const_value CONST_STRING arguments to
26390 an address in .rodata section if the string literal is emitted there,
26391 or remove the containing location list or replace DW_AT_const_value
26392 with DW_AT_location and empty location expression, if it isn't found
26393 in .rodata. Similarly for SYMBOL_REFs, keep only those that refer
26394 to something that has been emitted in the current CU. */
26395
26396 static void
26397 resolve_addr (dw_die_ref die)
26398 {
26399 dw_die_ref c;
26400 dw_attr_node *a;
26401 dw_loc_list_ref *curr, *start, loc;
26402 unsigned ix;
26403
26404 FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
26405 switch (AT_class (a))
26406 {
26407 case dw_val_class_loc_list:
26408 start = curr = AT_loc_list_ptr (a);
26409 loc = *curr;
26410 gcc_assert (loc);
26411 /* The same list can be referenced more than once. See if we have
26412 already recorded the result from a previous pass. */
26413 if (loc->replaced)
26414 *curr = loc->dw_loc_next;
26415 else if (!loc->resolved_addr)
26416 {
26417 /* As things stand, we do not expect or allow one die to
26418 reference a suffix of another die's location list chain.
26419 References must be identical or completely separate.
26420 There is therefore no need to cache the result of this
26421 pass on any list other than the first; doing so
26422 would lead to unnecessary writes. */
26423 while (*curr)
26424 {
26425 gcc_assert (!(*curr)->replaced && !(*curr)->resolved_addr);
26426 if (!resolve_addr_in_expr ((*curr)->expr))
26427 {
26428 dw_loc_list_ref next = (*curr)->dw_loc_next;
26429 dw_loc_descr_ref l = (*curr)->expr;
26430
26431 if (next && (*curr)->ll_symbol)
26432 {
26433 gcc_assert (!next->ll_symbol);
26434 next->ll_symbol = (*curr)->ll_symbol;
26435 }
26436 if (dwarf_split_debug_info)
26437 remove_loc_list_addr_table_entries (l);
26438 *curr = next;
26439 }
26440 else
26441 {
26442 mark_base_types ((*curr)->expr);
26443 curr = &(*curr)->dw_loc_next;
26444 }
26445 }
26446 if (loc == *start)
26447 loc->resolved_addr = 1;
26448 else
26449 {
26450 loc->replaced = 1;
26451 loc->dw_loc_next = *start;
26452 }
26453 }
26454 if (!*start)
26455 {
26456 remove_AT (die, a->dw_attr);
26457 ix--;
26458 }
26459 break;
26460 case dw_val_class_loc:
26461 {
26462 dw_loc_descr_ref l = AT_loc (a);
26463 /* For -gdwarf-2 don't attempt to optimize
26464 DW_AT_data_member_location containing
26465 DW_OP_plus_uconst - older consumers might
26466 rely on it being that op instead of a more complex,
26467 but shorter, location description. */
26468 if ((dwarf_version > 2
26469 || a->dw_attr != DW_AT_data_member_location
26470 || l == NULL
26471 || l->dw_loc_opc != DW_OP_plus_uconst
26472 || l->dw_loc_next != NULL)
26473 && !resolve_addr_in_expr (l))
26474 {
26475 if (dwarf_split_debug_info)
26476 remove_loc_list_addr_table_entries (l);
26477 if (l != NULL
26478 && l->dw_loc_next == NULL
26479 && l->dw_loc_opc == DW_OP_addr
26480 && GET_CODE (l->dw_loc_oprnd1.v.val_addr) == SYMBOL_REF
26481 && SYMBOL_REF_DECL (l->dw_loc_oprnd1.v.val_addr)
26482 && a->dw_attr == DW_AT_location)
26483 {
26484 tree decl = SYMBOL_REF_DECL (l->dw_loc_oprnd1.v.val_addr);
26485 remove_AT (die, a->dw_attr);
26486 ix--;
26487 optimize_location_into_implicit_ptr (die, decl);
26488 break;
26489 }
26490 remove_AT (die, a->dw_attr);
26491 ix--;
26492 }
26493 else
26494 mark_base_types (l);
26495 }
26496 break;
26497 case dw_val_class_addr:
26498 if (a->dw_attr == DW_AT_const_value
26499 && !resolve_one_addr (&a->dw_attr_val.v.val_addr))
26500 {
26501 if (AT_index (a) != NOT_INDEXED)
26502 remove_addr_table_entry (a->dw_attr_val.val_entry);
26503 remove_AT (die, a->dw_attr);
26504 ix--;
26505 }
26506 if (die->die_tag == DW_TAG_GNU_call_site
26507 && a->dw_attr == DW_AT_abstract_origin)
26508 {
26509 tree tdecl = SYMBOL_REF_DECL (a->dw_attr_val.v.val_addr);
26510 dw_die_ref tdie = lookup_decl_die (tdecl);
26511 dw_die_ref cdie;
26512 if (tdie == NULL
26513 && DECL_EXTERNAL (tdecl)
26514 && DECL_ABSTRACT_ORIGIN (tdecl) == NULL_TREE
26515 && (cdie = lookup_context_die (DECL_CONTEXT (tdecl))))
26516 {
26517 /* Creating a full DIE for tdecl is overly expensive and
26518 at this point even wrong when in the LTO phase
26519 as it can end up generating new type DIEs we didn't
26520 output and thus optimize_external_refs will crash. */
26521 tdie = new_die (DW_TAG_subprogram, cdie, NULL_TREE);
26522 add_AT_flag (tdie, DW_AT_external, 1);
26523 add_AT_flag (tdie, DW_AT_declaration, 1);
26524 add_linkage_attr (tdie, tdecl);
26525 add_name_and_src_coords_attributes (tdie, tdecl);
26526 equate_decl_number_to_die (tdecl, tdie);
26527 }
26528 if (tdie)
26529 {
26530 a->dw_attr_val.val_class = dw_val_class_die_ref;
26531 a->dw_attr_val.v.val_die_ref.die = tdie;
26532 a->dw_attr_val.v.val_die_ref.external = 0;
26533 }
26534 else
26535 {
26536 if (AT_index (a) != NOT_INDEXED)
26537 remove_addr_table_entry (a->dw_attr_val.val_entry);
26538 remove_AT (die, a->dw_attr);
26539 ix--;
26540 }
26541 }
26542 break;
26543 default:
26544 break;
26545 }
26546
26547 FOR_EACH_CHILD (die, c, resolve_addr (c));
26548 }
26549 \f
26550 /* Helper routines for optimize_location_lists.
26551 This pass tries to share identical local lists in .debug_loc
26552 section. */
26553
26554 /* Iteratively hash operands of LOC opcode into HSTATE. */
26555
26556 static void
26557 hash_loc_operands (dw_loc_descr_ref loc, inchash::hash &hstate)
26558 {
26559 dw_val_ref val1 = &loc->dw_loc_oprnd1;
26560 dw_val_ref val2 = &loc->dw_loc_oprnd2;
26561
26562 switch (loc->dw_loc_opc)
26563 {
26564 case DW_OP_const4u:
26565 case DW_OP_const8u:
26566 if (loc->dtprel)
26567 goto hash_addr;
26568 /* FALLTHRU */
26569 case DW_OP_const1u:
26570 case DW_OP_const1s:
26571 case DW_OP_const2u:
26572 case DW_OP_const2s:
26573 case DW_OP_const4s:
26574 case DW_OP_const8s:
26575 case DW_OP_constu:
26576 case DW_OP_consts:
26577 case DW_OP_pick:
26578 case DW_OP_plus_uconst:
26579 case DW_OP_breg0:
26580 case DW_OP_breg1:
26581 case DW_OP_breg2:
26582 case DW_OP_breg3:
26583 case DW_OP_breg4:
26584 case DW_OP_breg5:
26585 case DW_OP_breg6:
26586 case DW_OP_breg7:
26587 case DW_OP_breg8:
26588 case DW_OP_breg9:
26589 case DW_OP_breg10:
26590 case DW_OP_breg11:
26591 case DW_OP_breg12:
26592 case DW_OP_breg13:
26593 case DW_OP_breg14:
26594 case DW_OP_breg15:
26595 case DW_OP_breg16:
26596 case DW_OP_breg17:
26597 case DW_OP_breg18:
26598 case DW_OP_breg19:
26599 case DW_OP_breg20:
26600 case DW_OP_breg21:
26601 case DW_OP_breg22:
26602 case DW_OP_breg23:
26603 case DW_OP_breg24:
26604 case DW_OP_breg25:
26605 case DW_OP_breg26:
26606 case DW_OP_breg27:
26607 case DW_OP_breg28:
26608 case DW_OP_breg29:
26609 case DW_OP_breg30:
26610 case DW_OP_breg31:
26611 case DW_OP_regx:
26612 case DW_OP_fbreg:
26613 case DW_OP_piece:
26614 case DW_OP_deref_size:
26615 case DW_OP_xderef_size:
26616 hstate.add_object (val1->v.val_int);
26617 break;
26618 case DW_OP_skip:
26619 case DW_OP_bra:
26620 {
26621 int offset;
26622
26623 gcc_assert (val1->val_class == dw_val_class_loc);
26624 offset = val1->v.val_loc->dw_loc_addr - (loc->dw_loc_addr + 3);
26625 hstate.add_object (offset);
26626 }
26627 break;
26628 case DW_OP_implicit_value:
26629 hstate.add_object (val1->v.val_unsigned);
26630 switch (val2->val_class)
26631 {
26632 case dw_val_class_const:
26633 hstate.add_object (val2->v.val_int);
26634 break;
26635 case dw_val_class_vec:
26636 {
26637 unsigned int elt_size = val2->v.val_vec.elt_size;
26638 unsigned int len = val2->v.val_vec.length;
26639
26640 hstate.add_int (elt_size);
26641 hstate.add_int (len);
26642 hstate.add (val2->v.val_vec.array, len * elt_size);
26643 }
26644 break;
26645 case dw_val_class_const_double:
26646 hstate.add_object (val2->v.val_double.low);
26647 hstate.add_object (val2->v.val_double.high);
26648 break;
26649 case dw_val_class_wide_int:
26650 hstate.add (val2->v.val_wide->get_val (),
26651 get_full_len (*val2->v.val_wide)
26652 * HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR);
26653 break;
26654 case dw_val_class_addr:
26655 inchash::add_rtx (val2->v.val_addr, hstate);
26656 break;
26657 default:
26658 gcc_unreachable ();
26659 }
26660 break;
26661 case DW_OP_bregx:
26662 case DW_OP_bit_piece:
26663 hstate.add_object (val1->v.val_int);
26664 hstate.add_object (val2->v.val_int);
26665 break;
26666 case DW_OP_addr:
26667 hash_addr:
26668 if (loc->dtprel)
26669 {
26670 unsigned char dtprel = 0xd1;
26671 hstate.add_object (dtprel);
26672 }
26673 inchash::add_rtx (val1->v.val_addr, hstate);
26674 break;
26675 case DW_OP_GNU_addr_index:
26676 case DW_OP_GNU_const_index:
26677 {
26678 if (loc->dtprel)
26679 {
26680 unsigned char dtprel = 0xd1;
26681 hstate.add_object (dtprel);
26682 }
26683 inchash::add_rtx (val1->val_entry->addr.rtl, hstate);
26684 }
26685 break;
26686 case DW_OP_GNU_implicit_pointer:
26687 hstate.add_int (val2->v.val_int);
26688 break;
26689 case DW_OP_GNU_entry_value:
26690 hstate.add_object (val1->v.val_loc);
26691 break;
26692 case DW_OP_GNU_regval_type:
26693 case DW_OP_GNU_deref_type:
26694 {
26695 unsigned int byte_size
26696 = get_AT_unsigned (val2->v.val_die_ref.die, DW_AT_byte_size);
26697 unsigned int encoding
26698 = get_AT_unsigned (val2->v.val_die_ref.die, DW_AT_encoding);
26699 hstate.add_object (val1->v.val_int);
26700 hstate.add_object (byte_size);
26701 hstate.add_object (encoding);
26702 }
26703 break;
26704 case DW_OP_GNU_convert:
26705 case DW_OP_GNU_reinterpret:
26706 if (val1->val_class == dw_val_class_unsigned_const)
26707 {
26708 hstate.add_object (val1->v.val_unsigned);
26709 break;
26710 }
26711 /* FALLTHRU */
26712 case DW_OP_GNU_const_type:
26713 {
26714 unsigned int byte_size
26715 = get_AT_unsigned (val1->v.val_die_ref.die, DW_AT_byte_size);
26716 unsigned int encoding
26717 = get_AT_unsigned (val1->v.val_die_ref.die, DW_AT_encoding);
26718 hstate.add_object (byte_size);
26719 hstate.add_object (encoding);
26720 if (loc->dw_loc_opc != DW_OP_GNU_const_type)
26721 break;
26722 hstate.add_object (val2->val_class);
26723 switch (val2->val_class)
26724 {
26725 case dw_val_class_const:
26726 hstate.add_object (val2->v.val_int);
26727 break;
26728 case dw_val_class_vec:
26729 {
26730 unsigned int elt_size = val2->v.val_vec.elt_size;
26731 unsigned int len = val2->v.val_vec.length;
26732
26733 hstate.add_object (elt_size);
26734 hstate.add_object (len);
26735 hstate.add (val2->v.val_vec.array, len * elt_size);
26736 }
26737 break;
26738 case dw_val_class_const_double:
26739 hstate.add_object (val2->v.val_double.low);
26740 hstate.add_object (val2->v.val_double.high);
26741 break;
26742 case dw_val_class_wide_int:
26743 hstate.add (val2->v.val_wide->get_val (),
26744 get_full_len (*val2->v.val_wide)
26745 * HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR);
26746 break;
26747 default:
26748 gcc_unreachable ();
26749 }
26750 }
26751 break;
26752
26753 default:
26754 /* Other codes have no operands. */
26755 break;
26756 }
26757 }
26758
26759 /* Iteratively hash the whole DWARF location expression LOC into HSTATE. */
26760
26761 static inline void
26762 hash_locs (dw_loc_descr_ref loc, inchash::hash &hstate)
26763 {
26764 dw_loc_descr_ref l;
26765 bool sizes_computed = false;
26766 /* Compute sizes, so that DW_OP_skip/DW_OP_bra can be checksummed. */
26767 size_of_locs (loc);
26768
26769 for (l = loc; l != NULL; l = l->dw_loc_next)
26770 {
26771 enum dwarf_location_atom opc = l->dw_loc_opc;
26772 hstate.add_object (opc);
26773 if ((opc == DW_OP_skip || opc == DW_OP_bra) && !sizes_computed)
26774 {
26775 size_of_locs (loc);
26776 sizes_computed = true;
26777 }
26778 hash_loc_operands (l, hstate);
26779 }
26780 }
26781
26782 /* Compute hash of the whole location list LIST_HEAD. */
26783
26784 static inline void
26785 hash_loc_list (dw_loc_list_ref list_head)
26786 {
26787 dw_loc_list_ref curr = list_head;
26788 inchash::hash hstate;
26789
26790 for (curr = list_head; curr != NULL; curr = curr->dw_loc_next)
26791 {
26792 hstate.add (curr->begin, strlen (curr->begin) + 1);
26793 hstate.add (curr->end, strlen (curr->end) + 1);
26794 if (curr->section)
26795 hstate.add (curr->section, strlen (curr->section) + 1);
26796 hash_locs (curr->expr, hstate);
26797 }
26798 list_head->hash = hstate.end ();
26799 }
26800
26801 /* Return true if X and Y opcodes have the same operands. */
26802
26803 static inline bool
26804 compare_loc_operands (dw_loc_descr_ref x, dw_loc_descr_ref y)
26805 {
26806 dw_val_ref valx1 = &x->dw_loc_oprnd1;
26807 dw_val_ref valx2 = &x->dw_loc_oprnd2;
26808 dw_val_ref valy1 = &y->dw_loc_oprnd1;
26809 dw_val_ref valy2 = &y->dw_loc_oprnd2;
26810
26811 switch (x->dw_loc_opc)
26812 {
26813 case DW_OP_const4u:
26814 case DW_OP_const8u:
26815 if (x->dtprel)
26816 goto hash_addr;
26817 /* FALLTHRU */
26818 case DW_OP_const1u:
26819 case DW_OP_const1s:
26820 case DW_OP_const2u:
26821 case DW_OP_const2s:
26822 case DW_OP_const4s:
26823 case DW_OP_const8s:
26824 case DW_OP_constu:
26825 case DW_OP_consts:
26826 case DW_OP_pick:
26827 case DW_OP_plus_uconst:
26828 case DW_OP_breg0:
26829 case DW_OP_breg1:
26830 case DW_OP_breg2:
26831 case DW_OP_breg3:
26832 case DW_OP_breg4:
26833 case DW_OP_breg5:
26834 case DW_OP_breg6:
26835 case DW_OP_breg7:
26836 case DW_OP_breg8:
26837 case DW_OP_breg9:
26838 case DW_OP_breg10:
26839 case DW_OP_breg11:
26840 case DW_OP_breg12:
26841 case DW_OP_breg13:
26842 case DW_OP_breg14:
26843 case DW_OP_breg15:
26844 case DW_OP_breg16:
26845 case DW_OP_breg17:
26846 case DW_OP_breg18:
26847 case DW_OP_breg19:
26848 case DW_OP_breg20:
26849 case DW_OP_breg21:
26850 case DW_OP_breg22:
26851 case DW_OP_breg23:
26852 case DW_OP_breg24:
26853 case DW_OP_breg25:
26854 case DW_OP_breg26:
26855 case DW_OP_breg27:
26856 case DW_OP_breg28:
26857 case DW_OP_breg29:
26858 case DW_OP_breg30:
26859 case DW_OP_breg31:
26860 case DW_OP_regx:
26861 case DW_OP_fbreg:
26862 case DW_OP_piece:
26863 case DW_OP_deref_size:
26864 case DW_OP_xderef_size:
26865 return valx1->v.val_int == valy1->v.val_int;
26866 case DW_OP_skip:
26867 case DW_OP_bra:
26868 /* If splitting debug info, the use of DW_OP_GNU_addr_index
26869 can cause irrelevant differences in dw_loc_addr. */
26870 gcc_assert (valx1->val_class == dw_val_class_loc
26871 && valy1->val_class == dw_val_class_loc
26872 && (dwarf_split_debug_info
26873 || x->dw_loc_addr == y->dw_loc_addr));
26874 return valx1->v.val_loc->dw_loc_addr == valy1->v.val_loc->dw_loc_addr;
26875 case DW_OP_implicit_value:
26876 if (valx1->v.val_unsigned != valy1->v.val_unsigned
26877 || valx2->val_class != valy2->val_class)
26878 return false;
26879 switch (valx2->val_class)
26880 {
26881 case dw_val_class_const:
26882 return valx2->v.val_int == valy2->v.val_int;
26883 case dw_val_class_vec:
26884 return valx2->v.val_vec.elt_size == valy2->v.val_vec.elt_size
26885 && valx2->v.val_vec.length == valy2->v.val_vec.length
26886 && memcmp (valx2->v.val_vec.array, valy2->v.val_vec.array,
26887 valx2->v.val_vec.elt_size
26888 * valx2->v.val_vec.length) == 0;
26889 case dw_val_class_const_double:
26890 return valx2->v.val_double.low == valy2->v.val_double.low
26891 && valx2->v.val_double.high == valy2->v.val_double.high;
26892 case dw_val_class_wide_int:
26893 return *valx2->v.val_wide == *valy2->v.val_wide;
26894 case dw_val_class_addr:
26895 return rtx_equal_p (valx2->v.val_addr, valy2->v.val_addr);
26896 default:
26897 gcc_unreachable ();
26898 }
26899 case DW_OP_bregx:
26900 case DW_OP_bit_piece:
26901 return valx1->v.val_int == valy1->v.val_int
26902 && valx2->v.val_int == valy2->v.val_int;
26903 case DW_OP_addr:
26904 hash_addr:
26905 return rtx_equal_p (valx1->v.val_addr, valy1->v.val_addr);
26906 case DW_OP_GNU_addr_index:
26907 case DW_OP_GNU_const_index:
26908 {
26909 rtx ax1 = valx1->val_entry->addr.rtl;
26910 rtx ay1 = valy1->val_entry->addr.rtl;
26911 return rtx_equal_p (ax1, ay1);
26912 }
26913 case DW_OP_GNU_implicit_pointer:
26914 return valx1->val_class == dw_val_class_die_ref
26915 && valx1->val_class == valy1->val_class
26916 && valx1->v.val_die_ref.die == valy1->v.val_die_ref.die
26917 && valx2->v.val_int == valy2->v.val_int;
26918 case DW_OP_GNU_entry_value:
26919 return compare_loc_operands (valx1->v.val_loc, valy1->v.val_loc);
26920 case DW_OP_GNU_const_type:
26921 if (valx1->v.val_die_ref.die != valy1->v.val_die_ref.die
26922 || valx2->val_class != valy2->val_class)
26923 return false;
26924 switch (valx2->val_class)
26925 {
26926 case dw_val_class_const:
26927 return valx2->v.val_int == valy2->v.val_int;
26928 case dw_val_class_vec:
26929 return valx2->v.val_vec.elt_size == valy2->v.val_vec.elt_size
26930 && valx2->v.val_vec.length == valy2->v.val_vec.length
26931 && memcmp (valx2->v.val_vec.array, valy2->v.val_vec.array,
26932 valx2->v.val_vec.elt_size
26933 * valx2->v.val_vec.length) == 0;
26934 case dw_val_class_const_double:
26935 return valx2->v.val_double.low == valy2->v.val_double.low
26936 && valx2->v.val_double.high == valy2->v.val_double.high;
26937 case dw_val_class_wide_int:
26938 return *valx2->v.val_wide == *valy2->v.val_wide;
26939 default:
26940 gcc_unreachable ();
26941 }
26942 case DW_OP_GNU_regval_type:
26943 case DW_OP_GNU_deref_type:
26944 return valx1->v.val_int == valy1->v.val_int
26945 && valx2->v.val_die_ref.die == valy2->v.val_die_ref.die;
26946 case DW_OP_GNU_convert:
26947 case DW_OP_GNU_reinterpret:
26948 if (valx1->val_class != valy1->val_class)
26949 return false;
26950 if (valx1->val_class == dw_val_class_unsigned_const)
26951 return valx1->v.val_unsigned == valy1->v.val_unsigned;
26952 return valx1->v.val_die_ref.die == valy1->v.val_die_ref.die;
26953 case DW_OP_GNU_parameter_ref:
26954 return valx1->val_class == dw_val_class_die_ref
26955 && valx1->val_class == valy1->val_class
26956 && valx1->v.val_die_ref.die == valy1->v.val_die_ref.die;
26957 default:
26958 /* Other codes have no operands. */
26959 return true;
26960 }
26961 }
26962
26963 /* Return true if DWARF location expressions X and Y are the same. */
26964
26965 static inline bool
26966 compare_locs (dw_loc_descr_ref x, dw_loc_descr_ref y)
26967 {
26968 for (; x != NULL && y != NULL; x = x->dw_loc_next, y = y->dw_loc_next)
26969 if (x->dw_loc_opc != y->dw_loc_opc
26970 || x->dtprel != y->dtprel
26971 || !compare_loc_operands (x, y))
26972 break;
26973 return x == NULL && y == NULL;
26974 }
26975
26976 /* Hashtable helpers. */
26977
26978 struct loc_list_hasher : nofree_ptr_hash <dw_loc_list_struct>
26979 {
26980 static inline hashval_t hash (const dw_loc_list_struct *);
26981 static inline bool equal (const dw_loc_list_struct *,
26982 const dw_loc_list_struct *);
26983 };
26984
26985 /* Return precomputed hash of location list X. */
26986
26987 inline hashval_t
26988 loc_list_hasher::hash (const dw_loc_list_struct *x)
26989 {
26990 return x->hash;
26991 }
26992
26993 /* Return true if location lists A and B are the same. */
26994
26995 inline bool
26996 loc_list_hasher::equal (const dw_loc_list_struct *a,
26997 const dw_loc_list_struct *b)
26998 {
26999 if (a == b)
27000 return 1;
27001 if (a->hash != b->hash)
27002 return 0;
27003 for (; a != NULL && b != NULL; a = a->dw_loc_next, b = b->dw_loc_next)
27004 if (strcmp (a->begin, b->begin) != 0
27005 || strcmp (a->end, b->end) != 0
27006 || (a->section == NULL) != (b->section == NULL)
27007 || (a->section && strcmp (a->section, b->section) != 0)
27008 || !compare_locs (a->expr, b->expr))
27009 break;
27010 return a == NULL && b == NULL;
27011 }
27012
27013 typedef hash_table<loc_list_hasher> loc_list_hash_type;
27014
27015
27016 /* Recursively optimize location lists referenced from DIE
27017 children and share them whenever possible. */
27018
27019 static void
27020 optimize_location_lists_1 (dw_die_ref die, loc_list_hash_type *htab)
27021 {
27022 dw_die_ref c;
27023 dw_attr_node *a;
27024 unsigned ix;
27025 dw_loc_list_struct **slot;
27026
27027 FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
27028 if (AT_class (a) == dw_val_class_loc_list)
27029 {
27030 dw_loc_list_ref list = AT_loc_list (a);
27031 /* TODO: perform some optimizations here, before hashing
27032 it and storing into the hash table. */
27033 hash_loc_list (list);
27034 slot = htab->find_slot_with_hash (list, list->hash, INSERT);
27035 if (*slot == NULL)
27036 *slot = list;
27037 else
27038 a->dw_attr_val.v.val_loc_list = *slot;
27039 }
27040
27041 FOR_EACH_CHILD (die, c, optimize_location_lists_1 (c, htab));
27042 }
27043
27044
27045 /* Recursively assign each location list a unique index into the debug_addr
27046 section. */
27047
27048 static void
27049 index_location_lists (dw_die_ref die)
27050 {
27051 dw_die_ref c;
27052 dw_attr_node *a;
27053 unsigned ix;
27054
27055 FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
27056 if (AT_class (a) == dw_val_class_loc_list)
27057 {
27058 dw_loc_list_ref list = AT_loc_list (a);
27059 dw_loc_list_ref curr;
27060 for (curr = list; curr != NULL; curr = curr->dw_loc_next)
27061 {
27062 /* Don't index an entry that has already been indexed
27063 or won't be output. */
27064 if (curr->begin_entry != NULL
27065 || (strcmp (curr->begin, curr->end) == 0 && !curr->force))
27066 continue;
27067
27068 curr->begin_entry
27069 = add_addr_table_entry (xstrdup (curr->begin),
27070 ate_kind_label);
27071 }
27072 }
27073
27074 FOR_EACH_CHILD (die, c, index_location_lists (c));
27075 }
27076
27077 /* Optimize location lists referenced from DIE
27078 children and share them whenever possible. */
27079
27080 static void
27081 optimize_location_lists (dw_die_ref die)
27082 {
27083 loc_list_hash_type htab (500);
27084 optimize_location_lists_1 (die, &htab);
27085 }
27086 \f
27087 /* Traverse the limbo die list, and add parent/child links. The only
27088 dies without parents that should be here are concrete instances of
27089 inline functions, and the comp_unit_die. We can ignore the comp_unit_die.
27090 For concrete instances, we can get the parent die from the abstract
27091 instance. */
27092
27093 static void
27094 flush_limbo_die_list (void)
27095 {
27096 limbo_die_node *node, *next_node;
27097
27098 for (node = limbo_die_list; node; node = next_node)
27099 {
27100 dw_die_ref die = node->die;
27101 next_node = node->next;
27102
27103 if (die->die_parent == NULL)
27104 {
27105 dw_die_ref origin = get_AT_ref (die, DW_AT_abstract_origin);
27106
27107 if (origin && origin->die_parent)
27108 add_child_die (origin->die_parent, die);
27109 else if (is_cu_die (die))
27110 ;
27111 else if (seen_error ())
27112 /* It's OK to be confused by errors in the input. */
27113 add_child_die (comp_unit_die (), die);
27114 else
27115 {
27116 /* In certain situations, the lexical block containing a
27117 nested function can be optimized away, which results
27118 in the nested function die being orphaned. Likewise
27119 with the return type of that nested function. Force
27120 this to be a child of the containing function.
27121
27122 It may happen that even the containing function got fully
27123 inlined and optimized out. In that case we are lost and
27124 assign the empty child. This should not be big issue as
27125 the function is likely unreachable too. */
27126 gcc_assert (node->created_for);
27127
27128 if (DECL_P (node->created_for))
27129 origin = get_context_die (DECL_CONTEXT (node->created_for));
27130 else if (TYPE_P (node->created_for))
27131 origin = scope_die_for (node->created_for, comp_unit_die ());
27132 else
27133 origin = comp_unit_die ();
27134
27135 add_child_die (origin, die);
27136 }
27137 }
27138 }
27139
27140 limbo_die_list = NULL;
27141 }
27142
27143 /* Output stuff that dwarf requires at the end of every file,
27144 and generate the DWARF-2 debugging info. */
27145
27146 static void
27147 dwarf2out_finish (const char *filename)
27148 {
27149 comdat_type_node *ctnode;
27150 dw_die_ref main_comp_unit_die;
27151
27152 /* Flush out any latecomers to the limbo party. */
27153 flush_limbo_die_list ();
27154
27155 /* We shouldn't have any symbols with delayed asm names for
27156 DIEs generated after early finish. */
27157 gcc_assert (deferred_asm_name == NULL);
27158
27159 /* PCH might result in DW_AT_producer string being restored from the
27160 header compilation, so always fill it with empty string initially
27161 and overwrite only here. */
27162 dw_attr_node *producer = get_AT (comp_unit_die (), DW_AT_producer);
27163 producer_string = gen_producer_string ();
27164 producer->dw_attr_val.v.val_str->refcount--;
27165 producer->dw_attr_val.v.val_str = find_AT_string (producer_string);
27166
27167 gen_remaining_tmpl_value_param_die_attribute ();
27168
27169 /* Add the name for the main input file now. We delayed this from
27170 dwarf2out_init to avoid complications with PCH.
27171 For LTO produced units use a fixed artificial name to avoid
27172 leaking tempfile names into the dwarf. */
27173 if (!in_lto_p)
27174 add_name_attribute (comp_unit_die (), remap_debug_filename (filename));
27175 else
27176 add_name_attribute (comp_unit_die (), "<artificial>");
27177 if (!IS_ABSOLUTE_PATH (filename) || targetm.force_at_comp_dir)
27178 add_comp_dir_attribute (comp_unit_die ());
27179 else if (get_AT (comp_unit_die (), DW_AT_comp_dir) == NULL)
27180 {
27181 bool p = false;
27182 file_table->traverse<bool *, file_table_relative_p> (&p);
27183 if (p)
27184 add_comp_dir_attribute (comp_unit_die ());
27185 }
27186
27187 #if ENABLE_ASSERT_CHECKING
27188 {
27189 dw_die_ref die = comp_unit_die (), c;
27190 FOR_EACH_CHILD (die, c, gcc_assert (! c->die_mark));
27191 }
27192 #endif
27193 resolve_addr (comp_unit_die ());
27194 move_marked_base_types ();
27195
27196 /* Walk through the list of incomplete types again, trying once more to
27197 emit full debugging info for them. */
27198 retry_incomplete_types ();
27199
27200 if (flag_eliminate_unused_debug_types)
27201 prune_unused_types ();
27202
27203 /* Generate separate COMDAT sections for type DIEs. */
27204 if (use_debug_types)
27205 {
27206 break_out_comdat_types (comp_unit_die ());
27207
27208 /* Each new type_unit DIE was added to the limbo die list when created.
27209 Since these have all been added to comdat_type_list, clear the
27210 limbo die list. */
27211 limbo_die_list = NULL;
27212
27213 /* For each new comdat type unit, copy declarations for incomplete
27214 types to make the new unit self-contained (i.e., no direct
27215 references to the main compile unit). */
27216 for (ctnode = comdat_type_list; ctnode != NULL; ctnode = ctnode->next)
27217 copy_decls_for_unworthy_types (ctnode->root_die);
27218 copy_decls_for_unworthy_types (comp_unit_die ());
27219
27220 /* In the process of copying declarations from one unit to another,
27221 we may have left some declarations behind that are no longer
27222 referenced. Prune them. */
27223 prune_unused_types ();
27224 }
27225
27226 /* Generate separate CUs for each of the include files we've seen.
27227 They will go into limbo_die_list. */
27228 if (flag_eliminate_dwarf2_dups)
27229 break_out_includes (comp_unit_die ());
27230
27231 /* Traverse the DIE's and add sibling attributes to those DIE's that
27232 have children. */
27233 add_sibling_attributes (comp_unit_die ());
27234 limbo_die_node *node;
27235 for (node = limbo_die_list; node; node = node->next)
27236 add_sibling_attributes (node->die);
27237 for (ctnode = comdat_type_list; ctnode != NULL; ctnode = ctnode->next)
27238 add_sibling_attributes (ctnode->root_die);
27239
27240 /* When splitting DWARF info, we put some attributes in the
27241 skeleton compile_unit DIE that remains in the .o, while
27242 most attributes go in the DWO compile_unit_die. */
27243 if (dwarf_split_debug_info)
27244 main_comp_unit_die = gen_compile_unit_die (NULL);
27245 else
27246 main_comp_unit_die = comp_unit_die ();
27247
27248 /* Output a terminator label for the .text section. */
27249 switch_to_section (text_section);
27250 targetm.asm_out.internal_label (asm_out_file, TEXT_END_LABEL, 0);
27251 if (cold_text_section)
27252 {
27253 switch_to_section (cold_text_section);
27254 targetm.asm_out.internal_label (asm_out_file, COLD_END_LABEL, 0);
27255 }
27256
27257 /* We can only use the low/high_pc attributes if all of the code was
27258 in .text. */
27259 if (!have_multiple_function_sections
27260 || (dwarf_version < 3 && dwarf_strict))
27261 {
27262 /* Don't add if the CU has no associated code. */
27263 if (text_section_used)
27264 add_AT_low_high_pc (main_comp_unit_die, text_section_label,
27265 text_end_label, true);
27266 }
27267 else
27268 {
27269 unsigned fde_idx;
27270 dw_fde_ref fde;
27271 bool range_list_added = false;
27272
27273 if (text_section_used)
27274 add_ranges_by_labels (main_comp_unit_die, text_section_label,
27275 text_end_label, &range_list_added, true);
27276 if (cold_text_section_used)
27277 add_ranges_by_labels (main_comp_unit_die, cold_text_section_label,
27278 cold_end_label, &range_list_added, true);
27279
27280 FOR_EACH_VEC_ELT (*fde_vec, fde_idx, fde)
27281 {
27282 if (DECL_IGNORED_P (fde->decl))
27283 continue;
27284 if (!fde->in_std_section)
27285 add_ranges_by_labels (main_comp_unit_die, fde->dw_fde_begin,
27286 fde->dw_fde_end, &range_list_added,
27287 true);
27288 if (fde->dw_fde_second_begin && !fde->second_in_std_section)
27289 add_ranges_by_labels (main_comp_unit_die, fde->dw_fde_second_begin,
27290 fde->dw_fde_second_end, &range_list_added,
27291 true);
27292 }
27293
27294 if (range_list_added)
27295 {
27296 /* We need to give .debug_loc and .debug_ranges an appropriate
27297 "base address". Use zero so that these addresses become
27298 absolute. Historically, we've emitted the unexpected
27299 DW_AT_entry_pc instead of DW_AT_low_pc for this purpose.
27300 Emit both to give time for other tools to adapt. */
27301 add_AT_addr (main_comp_unit_die, DW_AT_low_pc, const0_rtx, true);
27302 if (! dwarf_strict && dwarf_version < 4)
27303 add_AT_addr (main_comp_unit_die, DW_AT_entry_pc, const0_rtx, true);
27304
27305 add_ranges (NULL);
27306 }
27307 }
27308
27309 if (debug_info_level >= DINFO_LEVEL_TERSE)
27310 add_AT_lineptr (main_comp_unit_die, DW_AT_stmt_list,
27311 debug_line_section_label);
27312
27313 if (have_macinfo)
27314 add_AT_macptr (comp_unit_die (),
27315 dwarf_strict ? DW_AT_macro_info : DW_AT_GNU_macros,
27316 macinfo_section_label);
27317
27318 if (dwarf_split_debug_info)
27319 {
27320 /* optimize_location_lists calculates the size of the lists,
27321 so index them first, and assign indices to the entries.
27322 Although optimize_location_lists will remove entries from
27323 the table, it only does so for duplicates, and therefore
27324 only reduces ref_counts to 1. */
27325 index_location_lists (comp_unit_die ());
27326
27327 if (addr_index_table != NULL)
27328 {
27329 unsigned int index = 0;
27330 addr_index_table
27331 ->traverse_noresize<unsigned int *, index_addr_table_entry>
27332 (&index);
27333 }
27334 }
27335
27336 if (have_location_lists)
27337 optimize_location_lists (comp_unit_die ());
27338
27339 save_macinfo_strings ();
27340
27341 if (dwarf_split_debug_info)
27342 {
27343 unsigned int index = 0;
27344
27345 /* Add attributes common to skeleton compile_units and
27346 type_units. Because these attributes include strings, it
27347 must be done before freezing the string table. Top-level
27348 skeleton die attrs are added when the skeleton type unit is
27349 created, so ensure it is created by this point. */
27350 add_top_level_skeleton_die_attrs (main_comp_unit_die);
27351 debug_str_hash->traverse_noresize<unsigned int *, index_string> (&index);
27352 }
27353
27354 /* Output all of the compilation units. We put the main one last so that
27355 the offsets are available to output_pubnames. */
27356 for (node = limbo_die_list; node; node = node->next)
27357 output_comp_unit (node->die, 0);
27358
27359 hash_table<comdat_type_hasher> comdat_type_table (100);
27360 for (ctnode = comdat_type_list; ctnode != NULL; ctnode = ctnode->next)
27361 {
27362 comdat_type_node **slot = comdat_type_table.find_slot (ctnode, INSERT);
27363
27364 /* Don't output duplicate types. */
27365 if (*slot != HTAB_EMPTY_ENTRY)
27366 continue;
27367
27368 /* Add a pointer to the line table for the main compilation unit
27369 so that the debugger can make sense of DW_AT_decl_file
27370 attributes. */
27371 if (debug_info_level >= DINFO_LEVEL_TERSE)
27372 add_AT_lineptr (ctnode->root_die, DW_AT_stmt_list,
27373 (!dwarf_split_debug_info
27374 ? debug_line_section_label
27375 : debug_skeleton_line_section_label));
27376
27377 output_comdat_type_unit (ctnode);
27378 *slot = ctnode;
27379 }
27380
27381 /* The AT_pubnames attribute needs to go in all skeleton dies, including
27382 both the main_cu and all skeleton TUs. Making this call unconditional
27383 would end up either adding a second copy of the AT_pubnames attribute, or
27384 requiring a special case in add_top_level_skeleton_die_attrs. */
27385 if (!dwarf_split_debug_info)
27386 add_AT_pubnames (comp_unit_die ());
27387
27388 if (dwarf_split_debug_info)
27389 {
27390 int mark;
27391 unsigned char checksum[16];
27392 struct md5_ctx ctx;
27393
27394 /* Compute a checksum of the comp_unit to use as the dwo_id. */
27395 md5_init_ctx (&ctx);
27396 mark = 0;
27397 die_checksum (comp_unit_die (), &ctx, &mark);
27398 unmark_all_dies (comp_unit_die ());
27399 md5_finish_ctx (&ctx, checksum);
27400
27401 /* Use the first 8 bytes of the checksum as the dwo_id,
27402 and add it to both comp-unit DIEs. */
27403 add_AT_data8 (main_comp_unit_die, DW_AT_GNU_dwo_id, checksum);
27404 add_AT_data8 (comp_unit_die (), DW_AT_GNU_dwo_id, checksum);
27405
27406 /* Add the base offset of the ranges table to the skeleton
27407 comp-unit DIE. */
27408 if (ranges_table_in_use)
27409 add_AT_lineptr (main_comp_unit_die, DW_AT_GNU_ranges_base,
27410 ranges_section_label);
27411
27412 switch_to_section (debug_addr_section);
27413 ASM_OUTPUT_LABEL (asm_out_file, debug_addr_section_label);
27414 output_addr_table ();
27415 }
27416
27417 /* Output the main compilation unit if non-empty or if .debug_macinfo
27418 or .debug_macro will be emitted. */
27419 output_comp_unit (comp_unit_die (), have_macinfo);
27420
27421 if (dwarf_split_debug_info && info_section_emitted)
27422 output_skeleton_debug_sections (main_comp_unit_die);
27423
27424 /* Output the abbreviation table. */
27425 if (abbrev_die_table_in_use != 1)
27426 {
27427 switch_to_section (debug_abbrev_section);
27428 ASM_OUTPUT_LABEL (asm_out_file, abbrev_section_label);
27429 output_abbrev_section ();
27430 }
27431
27432 /* Output location list section if necessary. */
27433 if (have_location_lists)
27434 {
27435 /* Output the location lists info. */
27436 switch_to_section (debug_loc_section);
27437 ASM_OUTPUT_LABEL (asm_out_file, loc_section_label);
27438 output_location_lists (comp_unit_die ());
27439 }
27440
27441 output_pubtables ();
27442
27443 /* Output the address range information if a CU (.debug_info section)
27444 was emitted. We output an empty table even if we had no functions
27445 to put in it. This because the consumer has no way to tell the
27446 difference between an empty table that we omitted and failure to
27447 generate a table that would have contained data. */
27448 if (info_section_emitted)
27449 {
27450 switch_to_section (debug_aranges_section);
27451 output_aranges ();
27452 }
27453
27454 /* Output ranges section if necessary. */
27455 if (ranges_table_in_use)
27456 {
27457 switch_to_section (debug_ranges_section);
27458 ASM_OUTPUT_LABEL (asm_out_file, ranges_section_label);
27459 output_ranges ();
27460 }
27461
27462 /* Have to end the macro section. */
27463 if (have_macinfo)
27464 {
27465 switch_to_section (debug_macinfo_section);
27466 ASM_OUTPUT_LABEL (asm_out_file, macinfo_section_label);
27467 output_macinfo ();
27468 dw2_asm_output_data (1, 0, "End compilation unit");
27469 }
27470
27471 /* Output the source line correspondence table. We must do this
27472 even if there is no line information. Otherwise, on an empty
27473 translation unit, we will generate a present, but empty,
27474 .debug_info section. IRIX 6.5 `nm' will then complain when
27475 examining the file. This is done late so that any filenames
27476 used by the debug_info section are marked as 'used'. */
27477 switch_to_section (debug_line_section);
27478 ASM_OUTPUT_LABEL (asm_out_file, debug_line_section_label);
27479 if (! DWARF2_ASM_LINE_DEBUG_INFO)
27480 output_line_info (false);
27481
27482 if (dwarf_split_debug_info && info_section_emitted)
27483 {
27484 switch_to_section (debug_skeleton_line_section);
27485 ASM_OUTPUT_LABEL (asm_out_file, debug_skeleton_line_section_label);
27486 output_line_info (true);
27487 }
27488
27489 /* If we emitted any indirect strings, output the string table too. */
27490 if (debug_str_hash || skeleton_debug_str_hash)
27491 output_indirect_strings ();
27492 }
27493
27494 /* Perform any cleanups needed after the early debug generation pass
27495 has run. */
27496
27497 static void
27498 dwarf2out_early_finish (void)
27499 {
27500 limbo_die_node *node;
27501
27502 /* Add DW_AT_linkage_name for all deferred DIEs. */
27503 for (node = deferred_asm_name; node; node = node->next)
27504 {
27505 tree decl = node->created_for;
27506 if (DECL_ASSEMBLER_NAME (decl) != DECL_NAME (decl)
27507 /* A missing DECL_ASSEMBLER_NAME can be a constant DIE that
27508 ended up in deferred_asm_name before we knew it was
27509 constant and never written to disk. */
27510 && DECL_ASSEMBLER_NAME (decl))
27511 {
27512 add_linkage_attr (node->die, decl);
27513 move_linkage_attr (node->die);
27514 }
27515 }
27516 deferred_asm_name = NULL;
27517
27518 /* The point here is to flush out the limbo list so that it is empty
27519 and we don't need to stream it for LTO. */
27520 flush_limbo_die_list ();
27521
27522 gen_scheduled_generic_parms_dies ();
27523 gen_remaining_tmpl_value_param_die_attribute ();
27524 }
27525
27526 /* Reset all state within dwarf2out.c so that we can rerun the compiler
27527 within the same process. For use by toplev::finalize. */
27528
27529 void
27530 dwarf2out_c_finalize (void)
27531 {
27532 last_var_location_insn = NULL;
27533 cached_next_real_insn = NULL;
27534 used_rtx_array = NULL;
27535 incomplete_types = NULL;
27536 decl_scope_table = NULL;
27537 debug_info_section = NULL;
27538 debug_skeleton_info_section = NULL;
27539 debug_abbrev_section = NULL;
27540 debug_skeleton_abbrev_section = NULL;
27541 debug_aranges_section = NULL;
27542 debug_addr_section = NULL;
27543 debug_macinfo_section = NULL;
27544 debug_line_section = NULL;
27545 debug_skeleton_line_section = NULL;
27546 debug_loc_section = NULL;
27547 debug_pubnames_section = NULL;
27548 debug_pubtypes_section = NULL;
27549 debug_str_section = NULL;
27550 debug_str_dwo_section = NULL;
27551 debug_str_offsets_section = NULL;
27552 debug_ranges_section = NULL;
27553 debug_frame_section = NULL;
27554 fde_vec = NULL;
27555 debug_str_hash = NULL;
27556 skeleton_debug_str_hash = NULL;
27557 dw2_string_counter = 0;
27558 have_multiple_function_sections = false;
27559 text_section_used = false;
27560 cold_text_section_used = false;
27561 cold_text_section = NULL;
27562 current_unit_personality = NULL;
27563
27564 next_die_offset = 0;
27565 single_comp_unit_die = NULL;
27566 comdat_type_list = NULL;
27567 limbo_die_list = NULL;
27568 file_table = NULL;
27569 decl_die_table = NULL;
27570 common_block_die_table = NULL;
27571 decl_loc_table = NULL;
27572 call_arg_locations = NULL;
27573 call_arg_loc_last = NULL;
27574 call_site_count = -1;
27575 tail_call_site_count = -1;
27576 cached_dw_loc_list_table = NULL;
27577 abbrev_die_table = NULL;
27578 abbrev_die_table_allocated = 0;
27579 abbrev_die_table_in_use = 0;
27580 delete dwarf_proc_stack_usage_map;
27581 dwarf_proc_stack_usage_map = NULL;
27582 line_info_label_num = 0;
27583 cur_line_info_table = NULL;
27584 text_section_line_info = NULL;
27585 cold_text_section_line_info = NULL;
27586 separate_line_info = NULL;
27587 info_section_emitted = false;
27588 pubname_table = NULL;
27589 pubtype_table = NULL;
27590 macinfo_table = NULL;
27591 ranges_table = NULL;
27592 ranges_table_allocated = 0;
27593 ranges_table_in_use = 0;
27594 ranges_by_label = 0;
27595 ranges_by_label_allocated = 0;
27596 ranges_by_label_in_use = 0;
27597 have_location_lists = false;
27598 loclabel_num = 0;
27599 poc_label_num = 0;
27600 last_emitted_file = NULL;
27601 label_num = 0;
27602 tmpl_value_parm_die_table = NULL;
27603 generic_type_instances = NULL;
27604 frame_pointer_fb_offset = 0;
27605 frame_pointer_fb_offset_valid = false;
27606 base_types.release ();
27607 XDELETEVEC (producer_string);
27608 producer_string = NULL;
27609 }
27610
27611 #include "gt-dwarf2out.h"