2014-09-18 Vladimir Makarov <vmakarov@redhat.com>
[official-gcc.git] / gcc / dwarf2out.c
blob9dd2f880d07b8f1fddc528997da9b1b58fd6c9ee
1 /* Output Dwarf2 format symbol table information from GCC.
2 Copyright (C) 1992-2014 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).
7 This file is part of GCC.
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.
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.
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/>. */
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. */
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. */
35 /* DWARF2 Abbreviation Glossary:
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.
43 CFI = Call Frame Instruction
44 an instruction for the DWARF2 abstract machine
46 CIE = Common Information Entry
47 information describing information common to one or more FDEs
49 DIE = Debugging Information Entry
51 FDE = Frame Description Entry
52 information describing the stack call frame, in particular,
53 how to restore registers
55 DW_CFA_... = DWARF2 CFA call frame instruction
56 DW_TAG_... = DWARF2 DIE tag */
58 #include "config.h"
59 #include "system.h"
60 #include "coretypes.h"
61 #include "tm.h"
62 #include "rtl.h"
63 #include "tree.h"
64 #include "stringpool.h"
65 #include "stor-layout.h"
66 #include "varasm.h"
67 #include "function.h"
68 #include "emit-rtl.h"
69 #include "hash-table.h"
70 #include "version.h"
71 #include "flags.h"
72 #include "hard-reg-set.h"
73 #include "regs.h"
74 #include "rtlhash.h"
75 #include "insn-config.h"
76 #include "reload.h"
77 #include "function.h"
78 #include "output.h"
79 #include "expr.h"
80 #include "except.h"
81 #include "dwarf2.h"
82 #include "dwarf2out.h"
83 #include "dwarf2asm.h"
84 #include "toplev.h"
85 #include "md5.h"
86 #include "tm_p.h"
87 #include "diagnostic.h"
88 #include "tree-pretty-print.h"
89 #include "debug.h"
90 #include "target.h"
91 #include "common/common-target.h"
92 #include "langhooks.h"
93 #include "cgraph.h"
94 #include "input.h"
95 #include "ira.h"
96 #include "lra.h"
97 #include "dumpfile.h"
98 #include "opts.h"
99 #include "tree-dfa.h"
100 #include "gdb/gdb-index.h"
101 #include "rtl-iter.h"
103 static void dwarf2out_source_line (unsigned int, const char *, int, bool);
104 static rtx_insn *last_var_location_insn;
105 static rtx_insn *cached_next_real_insn;
106 static void dwarf2out_decl (tree);
108 #ifdef VMS_DEBUGGING_INFO
109 int vms_file_stats_name (const char *, long long *, long *, char *, int *);
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
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
132 /* The size of the target's pointer type. */
133 #ifndef PTR_SIZE
134 #define PTR_SIZE (POINTER_SIZE / BITS_PER_UNIT)
135 #endif
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;
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;
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;
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;
173 /* Maximum size (in bytes) of an artificially generated label. */
174 #define MAX_ARTIFICIAL_LABEL_BYTES 30
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.
181 However, the SGI/MIPS ABI uses an initial length which is equal to
182 DWARF_OFFSET_SIZE. It is defined (elsewhere) accordingly. */
184 #ifndef DWARF_INITIAL_LENGTH_SIZE
185 #define DWARF_INITIAL_LENGTH_SIZE (DWARF_OFFSET_SIZE == 4 ? 4 : 12)
186 #endif
188 /* Round SIZE up to the nearest BOUNDARY. */
189 #define DWARF_ROUND(SIZE,BOUNDARY) \
190 ((((SIZE) + (BOUNDARY) - 1) / (BOUNDARY)) * (BOUNDARY))
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
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)
206 static GTY(()) vec<dw_fde_ref, va_gc> *fde_vec;
208 struct GTY(()) indirect_string_node {
209 const char *str;
210 unsigned int refcount;
211 enum dwarf_form form;
212 char *label;
213 unsigned int index;
216 static GTY ((param_is (struct indirect_string_node))) htab_t debug_str_hash;
218 /* With split_debug_info, both the comp_dir and dwo_name go in the
219 main object file, rather than the dwo, similar to the force_direct
220 parameter elsewhere but with additional complications:
222 1) The string is needed in both the main object file and the dwo.
223 That is, the comp_dir and dwo_name will appear in both places.
225 2) Strings can use three forms: DW_FORM_string, DW_FORM_strp or
226 DW_FORM_GNU_str_index.
228 3) GCC chooses the form to use late, depending on the size and
229 reference count.
231 Rather than forcing the all debug string handling functions and
232 callers to deal with these complications, simply use a separate,
233 special-cased string table for any attribute that should go in the
234 main object file. This limits the complexity to just the places
235 that need it. */
237 static GTY ((param_is (struct indirect_string_node)))
238 htab_t skeleton_debug_str_hash;
240 static GTY(()) int dw2_string_counter;
242 /* True if the compilation unit places functions in more than one section. */
243 static GTY(()) bool have_multiple_function_sections = false;
245 /* Whether the default text and cold text sections have been used at all. */
247 static GTY(()) bool text_section_used = false;
248 static GTY(()) bool cold_text_section_used = false;
250 /* The default cold text section. */
251 static GTY(()) section *cold_text_section;
253 /* The DIE for C++14 'auto' in a function return type. */
254 static GTY(()) dw_die_ref auto_die;
256 /* The DIE for C++14 'decltype(auto)' in a function return type. */
257 static GTY(()) dw_die_ref decltype_auto_die;
259 /* Forward declarations for functions defined in this file. */
261 static char *stripattributes (const char *);
262 static void output_call_frame_info (int);
263 static void dwarf2out_note_section_used (void);
265 /* Personality decl of current unit. Used only when assembler does not support
266 personality CFI. */
267 static GTY(()) rtx current_unit_personality;
269 /* Data and reference forms for relocatable data. */
270 #define DW_FORM_data (DWARF_OFFSET_SIZE == 8 ? DW_FORM_data8 : DW_FORM_data4)
271 #define DW_FORM_ref (DWARF_OFFSET_SIZE == 8 ? DW_FORM_ref8 : DW_FORM_ref4)
273 #ifndef DEBUG_FRAME_SECTION
274 #define DEBUG_FRAME_SECTION ".debug_frame"
275 #endif
277 #ifndef FUNC_BEGIN_LABEL
278 #define FUNC_BEGIN_LABEL "LFB"
279 #endif
281 #ifndef FUNC_END_LABEL
282 #define FUNC_END_LABEL "LFE"
283 #endif
285 #ifndef PROLOGUE_END_LABEL
286 #define PROLOGUE_END_LABEL "LPE"
287 #endif
289 #ifndef EPILOGUE_BEGIN_LABEL
290 #define EPILOGUE_BEGIN_LABEL "LEB"
291 #endif
293 #ifndef FRAME_BEGIN_LABEL
294 #define FRAME_BEGIN_LABEL "Lframe"
295 #endif
296 #define CIE_AFTER_SIZE_LABEL "LSCIE"
297 #define CIE_END_LABEL "LECIE"
298 #define FDE_LABEL "LSFDE"
299 #define FDE_AFTER_SIZE_LABEL "LASFDE"
300 #define FDE_END_LABEL "LEFDE"
301 #define LINE_NUMBER_BEGIN_LABEL "LSLT"
302 #define LINE_NUMBER_END_LABEL "LELT"
303 #define LN_PROLOG_AS_LABEL "LASLTP"
304 #define LN_PROLOG_END_LABEL "LELTP"
305 #define DIE_LABEL_PREFIX "DW"
307 /* Match the base name of a file to the base name of a compilation unit. */
309 static int
310 matches_main_base (const char *path)
312 /* Cache the last query. */
313 static const char *last_path = NULL;
314 static int last_match = 0;
315 if (path != last_path)
317 const char *base;
318 int length = base_of_path (path, &base);
319 last_path = path;
320 last_match = (length == main_input_baselength
321 && memcmp (base, main_input_basename, length) == 0);
323 return last_match;
326 #ifdef DEBUG_DEBUG_STRUCT
328 static int
329 dump_struct_debug (tree type, enum debug_info_usage usage,
330 enum debug_struct_file criterion, int generic,
331 int matches, int result)
333 /* Find the type name. */
334 tree type_decl = TYPE_STUB_DECL (type);
335 tree t = type_decl;
336 const char *name = 0;
337 if (TREE_CODE (t) == TYPE_DECL)
338 t = DECL_NAME (t);
339 if (t)
340 name = IDENTIFIER_POINTER (t);
342 fprintf (stderr, " struct %d %s %s %s %s %d %p %s\n",
343 criterion,
344 DECL_IN_SYSTEM_HEADER (type_decl) ? "sys" : "usr",
345 matches ? "bas" : "hdr",
346 generic ? "gen" : "ord",
347 usage == DINFO_USAGE_DFN ? ";" :
348 usage == DINFO_USAGE_DIR_USE ? "." : "*",
349 result,
350 (void*) type_decl, name);
351 return result;
353 #define DUMP_GSTRUCT(type, usage, criterion, generic, matches, result) \
354 dump_struct_debug (type, usage, criterion, generic, matches, result)
356 #else
358 #define DUMP_GSTRUCT(type, usage, criterion, generic, matches, result) \
359 (result)
361 #endif
363 /* Get the number of HOST_WIDE_INTs needed to represent the precision
364 of the number. */
366 static unsigned int
367 get_full_len (const wide_int &op)
369 return ((op.get_precision () + HOST_BITS_PER_WIDE_INT - 1)
370 / HOST_BITS_PER_WIDE_INT);
373 static bool
374 should_emit_struct_debug (tree type, enum debug_info_usage usage)
376 enum debug_struct_file criterion;
377 tree type_decl;
378 bool generic = lang_hooks.types.generic_p (type);
380 if (generic)
381 criterion = debug_struct_generic[usage];
382 else
383 criterion = debug_struct_ordinary[usage];
385 if (criterion == DINFO_STRUCT_FILE_NONE)
386 return DUMP_GSTRUCT (type, usage, criterion, generic, false, false);
387 if (criterion == DINFO_STRUCT_FILE_ANY)
388 return DUMP_GSTRUCT (type, usage, criterion, generic, false, true);
390 type_decl = TYPE_STUB_DECL (TYPE_MAIN_VARIANT (type));
392 if (type_decl != NULL)
394 if (criterion == DINFO_STRUCT_FILE_SYS && DECL_IN_SYSTEM_HEADER (type_decl))
395 return DUMP_GSTRUCT (type, usage, criterion, generic, false, true);
397 if (matches_main_base (DECL_SOURCE_FILE (type_decl)))
398 return DUMP_GSTRUCT (type, usage, criterion, generic, true, true);
401 return DUMP_GSTRUCT (type, usage, criterion, generic, false, false);
404 /* Return a pointer to a copy of the section string name S with all
405 attributes stripped off, and an asterisk prepended (for assemble_name). */
407 static inline char *
408 stripattributes (const char *s)
410 char *stripped = XNEWVEC (char, strlen (s) + 2);
411 char *p = stripped;
413 *p++ = '*';
415 while (*s && *s != ',')
416 *p++ = *s++;
418 *p = '\0';
419 return stripped;
422 /* Switch [BACK] to eh_frame_section. If we don't have an eh_frame_section,
423 switch to the data section instead, and write out a synthetic start label
424 for collect2 the first time around. */
426 static void
427 switch_to_eh_frame_section (bool back)
429 tree label;
431 #ifdef EH_FRAME_SECTION_NAME
432 if (eh_frame_section == 0)
434 int flags;
436 if (EH_TABLES_CAN_BE_READ_ONLY)
438 int fde_encoding;
439 int per_encoding;
440 int lsda_encoding;
442 fde_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/1,
443 /*global=*/0);
444 per_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2,
445 /*global=*/1);
446 lsda_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0,
447 /*global=*/0);
448 flags = ((! flag_pic
449 || ((fde_encoding & 0x70) != DW_EH_PE_absptr
450 && (fde_encoding & 0x70) != DW_EH_PE_aligned
451 && (per_encoding & 0x70) != DW_EH_PE_absptr
452 && (per_encoding & 0x70) != DW_EH_PE_aligned
453 && (lsda_encoding & 0x70) != DW_EH_PE_absptr
454 && (lsda_encoding & 0x70) != DW_EH_PE_aligned))
455 ? 0 : SECTION_WRITE);
457 else
458 flags = SECTION_WRITE;
459 eh_frame_section = get_section (EH_FRAME_SECTION_NAME, flags, NULL);
461 #endif /* EH_FRAME_SECTION_NAME */
463 if (eh_frame_section)
464 switch_to_section (eh_frame_section);
465 else
467 /* We have no special eh_frame section. Put the information in
468 the data section and emit special labels to guide collect2. */
469 switch_to_section (data_section);
471 if (!back)
473 label = get_file_function_name ("F");
474 ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (PTR_SIZE));
475 targetm.asm_out.globalize_label (asm_out_file,
476 IDENTIFIER_POINTER (label));
477 ASM_OUTPUT_LABEL (asm_out_file, IDENTIFIER_POINTER (label));
482 /* Switch [BACK] to the eh or debug frame table section, depending on
483 FOR_EH. */
485 static void
486 switch_to_frame_table_section (int for_eh, bool back)
488 if (for_eh)
489 switch_to_eh_frame_section (back);
490 else
492 if (!debug_frame_section)
493 debug_frame_section = get_section (DEBUG_FRAME_SECTION,
494 SECTION_DEBUG, NULL);
495 switch_to_section (debug_frame_section);
499 /* Describe for the GTY machinery what parts of dw_cfi_oprnd1 are used. */
501 enum dw_cfi_oprnd_type
502 dw_cfi_oprnd1_desc (enum dwarf_call_frame_info cfi)
504 switch (cfi)
506 case DW_CFA_nop:
507 case DW_CFA_GNU_window_save:
508 case DW_CFA_remember_state:
509 case DW_CFA_restore_state:
510 return dw_cfi_oprnd_unused;
512 case DW_CFA_set_loc:
513 case DW_CFA_advance_loc1:
514 case DW_CFA_advance_loc2:
515 case DW_CFA_advance_loc4:
516 case DW_CFA_MIPS_advance_loc8:
517 return dw_cfi_oprnd_addr;
519 case DW_CFA_offset:
520 case DW_CFA_offset_extended:
521 case DW_CFA_def_cfa:
522 case DW_CFA_offset_extended_sf:
523 case DW_CFA_def_cfa_sf:
524 case DW_CFA_restore:
525 case DW_CFA_restore_extended:
526 case DW_CFA_undefined:
527 case DW_CFA_same_value:
528 case DW_CFA_def_cfa_register:
529 case DW_CFA_register:
530 case DW_CFA_expression:
531 return dw_cfi_oprnd_reg_num;
533 case DW_CFA_def_cfa_offset:
534 case DW_CFA_GNU_args_size:
535 case DW_CFA_def_cfa_offset_sf:
536 return dw_cfi_oprnd_offset;
538 case DW_CFA_def_cfa_expression:
539 return dw_cfi_oprnd_loc;
541 default:
542 gcc_unreachable ();
546 /* Describe for the GTY machinery what parts of dw_cfi_oprnd2 are used. */
548 enum dw_cfi_oprnd_type
549 dw_cfi_oprnd2_desc (enum dwarf_call_frame_info cfi)
551 switch (cfi)
553 case DW_CFA_def_cfa:
554 case DW_CFA_def_cfa_sf:
555 case DW_CFA_offset:
556 case DW_CFA_offset_extended_sf:
557 case DW_CFA_offset_extended:
558 return dw_cfi_oprnd_offset;
560 case DW_CFA_register:
561 return dw_cfi_oprnd_reg_num;
563 case DW_CFA_expression:
564 return dw_cfi_oprnd_loc;
566 default:
567 return dw_cfi_oprnd_unused;
571 /* Output one FDE. */
573 static void
574 output_fde (dw_fde_ref fde, bool for_eh, bool second,
575 char *section_start_label, int fde_encoding, char *augmentation,
576 bool any_lsda_needed, int lsda_encoding)
578 const char *begin, *end;
579 static unsigned int j;
580 char l1[20], l2[20];
582 targetm.asm_out.emit_unwind_label (asm_out_file, fde->decl, for_eh,
583 /* empty */ 0);
584 targetm.asm_out.internal_label (asm_out_file, FDE_LABEL,
585 for_eh + j);
586 ASM_GENERATE_INTERNAL_LABEL (l1, FDE_AFTER_SIZE_LABEL, for_eh + j);
587 ASM_GENERATE_INTERNAL_LABEL (l2, FDE_END_LABEL, for_eh + j);
588 if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4 && !for_eh)
589 dw2_asm_output_data (4, 0xffffffff, "Initial length escape value"
590 " indicating 64-bit DWARF extension");
591 dw2_asm_output_delta (for_eh ? 4 : DWARF_OFFSET_SIZE, l2, l1,
592 "FDE Length");
593 ASM_OUTPUT_LABEL (asm_out_file, l1);
595 if (for_eh)
596 dw2_asm_output_delta (4, l1, section_start_label, "FDE CIE offset");
597 else
598 dw2_asm_output_offset (DWARF_OFFSET_SIZE, section_start_label,
599 debug_frame_section, "FDE CIE offset");
601 begin = second ? fde->dw_fde_second_begin : fde->dw_fde_begin;
602 end = second ? fde->dw_fde_second_end : fde->dw_fde_end;
604 if (for_eh)
606 rtx sym_ref = gen_rtx_SYMBOL_REF (Pmode, begin);
607 SYMBOL_REF_FLAGS (sym_ref) |= SYMBOL_FLAG_LOCAL;
608 dw2_asm_output_encoded_addr_rtx (fde_encoding, sym_ref, false,
609 "FDE initial location");
610 dw2_asm_output_delta (size_of_encoded_value (fde_encoding),
611 end, begin, "FDE address range");
613 else
615 dw2_asm_output_addr (DWARF2_ADDR_SIZE, begin, "FDE initial location");
616 dw2_asm_output_delta (DWARF2_ADDR_SIZE, end, begin, "FDE address range");
619 if (augmentation[0])
621 if (any_lsda_needed)
623 int size = size_of_encoded_value (lsda_encoding);
625 if (lsda_encoding == DW_EH_PE_aligned)
627 int offset = ( 4 /* Length */
628 + 4 /* CIE offset */
629 + 2 * size_of_encoded_value (fde_encoding)
630 + 1 /* Augmentation size */ );
631 int pad = -offset & (PTR_SIZE - 1);
633 size += pad;
634 gcc_assert (size_of_uleb128 (size) == 1);
637 dw2_asm_output_data_uleb128 (size, "Augmentation size");
639 if (fde->uses_eh_lsda)
641 ASM_GENERATE_INTERNAL_LABEL (l1, second ? "LLSDAC" : "LLSDA",
642 fde->funcdef_number);
643 dw2_asm_output_encoded_addr_rtx (lsda_encoding,
644 gen_rtx_SYMBOL_REF (Pmode, l1),
645 false,
646 "Language Specific Data Area");
648 else
650 if (lsda_encoding == DW_EH_PE_aligned)
651 ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (PTR_SIZE));
652 dw2_asm_output_data (size_of_encoded_value (lsda_encoding), 0,
653 "Language Specific Data Area (none)");
656 else
657 dw2_asm_output_data_uleb128 (0, "Augmentation size");
660 /* Loop through the Call Frame Instructions associated with this FDE. */
661 fde->dw_fde_current_label = begin;
663 size_t from, until, i;
665 from = 0;
666 until = vec_safe_length (fde->dw_fde_cfi);
668 if (fde->dw_fde_second_begin == NULL)
670 else if (!second)
671 until = fde->dw_fde_switch_cfi_index;
672 else
673 from = fde->dw_fde_switch_cfi_index;
675 for (i = from; i < until; i++)
676 output_cfi ((*fde->dw_fde_cfi)[i], fde, for_eh);
679 /* If we are to emit a ref/link from function bodies to their frame tables,
680 do it now. This is typically performed to make sure that tables
681 associated with functions are dragged with them and not discarded in
682 garbage collecting links. We need to do this on a per function basis to
683 cope with -ffunction-sections. */
685 #ifdef ASM_OUTPUT_DWARF_TABLE_REF
686 /* Switch to the function section, emit the ref to the tables, and
687 switch *back* into the table section. */
688 switch_to_section (function_section (fde->decl));
689 ASM_OUTPUT_DWARF_TABLE_REF (section_start_label);
690 switch_to_frame_table_section (for_eh, true);
691 #endif
693 /* Pad the FDE out to an address sized boundary. */
694 ASM_OUTPUT_ALIGN (asm_out_file,
695 floor_log2 ((for_eh ? PTR_SIZE : DWARF2_ADDR_SIZE)));
696 ASM_OUTPUT_LABEL (asm_out_file, l2);
698 j += 2;
701 /* Return true if frame description entry FDE is needed for EH. */
703 static bool
704 fde_needed_for_eh_p (dw_fde_ref fde)
706 if (flag_asynchronous_unwind_tables)
707 return true;
709 if (TARGET_USES_WEAK_UNWIND_INFO && DECL_WEAK (fde->decl))
710 return true;
712 if (fde->uses_eh_lsda)
713 return true;
715 /* If exceptions are enabled, we have collected nothrow info. */
716 if (flag_exceptions && (fde->all_throwers_are_sibcalls || fde->nothrow))
717 return false;
719 return true;
722 /* Output the call frame information used to record information
723 that relates to calculating the frame pointer, and records the
724 location of saved registers. */
726 static void
727 output_call_frame_info (int for_eh)
729 unsigned int i;
730 dw_fde_ref fde;
731 dw_cfi_ref cfi;
732 char l1[20], l2[20], section_start_label[20];
733 bool any_lsda_needed = false;
734 char augmentation[6];
735 int augmentation_size;
736 int fde_encoding = DW_EH_PE_absptr;
737 int per_encoding = DW_EH_PE_absptr;
738 int lsda_encoding = DW_EH_PE_absptr;
739 int return_reg;
740 rtx personality = NULL;
741 int dw_cie_version;
743 /* Don't emit a CIE if there won't be any FDEs. */
744 if (!fde_vec)
745 return;
747 /* Nothing to do if the assembler's doing it all. */
748 if (dwarf2out_do_cfi_asm ())
749 return;
751 /* If we don't have any functions we'll want to unwind out of, don't emit
752 any EH unwind information. If we make FDEs linkonce, we may have to
753 emit an empty label for an FDE that wouldn't otherwise be emitted. We
754 want to avoid having an FDE kept around when the function it refers to
755 is discarded. Example where this matters: a primary function template
756 in C++ requires EH information, an explicit specialization doesn't. */
757 if (for_eh)
759 bool any_eh_needed = false;
761 FOR_EACH_VEC_ELT (*fde_vec, i, fde)
763 if (fde->uses_eh_lsda)
764 any_eh_needed = any_lsda_needed = true;
765 else if (fde_needed_for_eh_p (fde))
766 any_eh_needed = true;
767 else if (TARGET_USES_WEAK_UNWIND_INFO)
768 targetm.asm_out.emit_unwind_label (asm_out_file, fde->decl, 1, 1);
771 if (!any_eh_needed)
772 return;
775 /* We're going to be generating comments, so turn on app. */
776 if (flag_debug_asm)
777 app_enable ();
779 /* Switch to the proper frame section, first time. */
780 switch_to_frame_table_section (for_eh, false);
782 ASM_GENERATE_INTERNAL_LABEL (section_start_label, FRAME_BEGIN_LABEL, for_eh);
783 ASM_OUTPUT_LABEL (asm_out_file, section_start_label);
785 /* Output the CIE. */
786 ASM_GENERATE_INTERNAL_LABEL (l1, CIE_AFTER_SIZE_LABEL, for_eh);
787 ASM_GENERATE_INTERNAL_LABEL (l2, CIE_END_LABEL, for_eh);
788 if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4 && !for_eh)
789 dw2_asm_output_data (4, 0xffffffff,
790 "Initial length escape value indicating 64-bit DWARF extension");
791 dw2_asm_output_delta (for_eh ? 4 : DWARF_OFFSET_SIZE, l2, l1,
792 "Length of Common Information Entry");
793 ASM_OUTPUT_LABEL (asm_out_file, l1);
795 /* Now that the CIE pointer is PC-relative for EH,
796 use 0 to identify the CIE. */
797 dw2_asm_output_data ((for_eh ? 4 : DWARF_OFFSET_SIZE),
798 (for_eh ? 0 : DWARF_CIE_ID),
799 "CIE Identifier Tag");
801 /* Use the CIE version 3 for DWARF3; allow DWARF2 to continue to
802 use CIE version 1, unless that would produce incorrect results
803 due to overflowing the return register column. */
804 return_reg = DWARF2_FRAME_REG_OUT (DWARF_FRAME_RETURN_COLUMN, for_eh);
805 dw_cie_version = 1;
806 if (return_reg >= 256 || dwarf_version > 2)
807 dw_cie_version = 3;
808 dw2_asm_output_data (1, dw_cie_version, "CIE Version");
810 augmentation[0] = 0;
811 augmentation_size = 0;
813 personality = current_unit_personality;
814 if (for_eh)
816 char *p;
818 /* Augmentation:
819 z Indicates that a uleb128 is present to size the
820 augmentation section.
821 L Indicates the encoding (and thus presence) of
822 an LSDA pointer in the FDE augmentation.
823 R Indicates a non-default pointer encoding for
824 FDE code pointers.
825 P Indicates the presence of an encoding + language
826 personality routine in the CIE augmentation. */
828 fde_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/1, /*global=*/0);
829 per_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2, /*global=*/1);
830 lsda_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0, /*global=*/0);
832 p = augmentation + 1;
833 if (personality)
835 *p++ = 'P';
836 augmentation_size += 1 + size_of_encoded_value (per_encoding);
837 assemble_external_libcall (personality);
839 if (any_lsda_needed)
841 *p++ = 'L';
842 augmentation_size += 1;
844 if (fde_encoding != DW_EH_PE_absptr)
846 *p++ = 'R';
847 augmentation_size += 1;
849 if (p > augmentation + 1)
851 augmentation[0] = 'z';
852 *p = '\0';
855 /* Ug. Some platforms can't do unaligned dynamic relocations at all. */
856 if (personality && per_encoding == DW_EH_PE_aligned)
858 int offset = ( 4 /* Length */
859 + 4 /* CIE Id */
860 + 1 /* CIE version */
861 + strlen (augmentation) + 1 /* Augmentation */
862 + size_of_uleb128 (1) /* Code alignment */
863 + size_of_sleb128 (DWARF_CIE_DATA_ALIGNMENT)
864 + 1 /* RA column */
865 + 1 /* Augmentation size */
866 + 1 /* Personality encoding */ );
867 int pad = -offset & (PTR_SIZE - 1);
869 augmentation_size += pad;
871 /* Augmentations should be small, so there's scarce need to
872 iterate for a solution. Die if we exceed one uleb128 byte. */
873 gcc_assert (size_of_uleb128 (augmentation_size) == 1);
877 dw2_asm_output_nstring (augmentation, -1, "CIE Augmentation");
878 if (dw_cie_version >= 4)
880 dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "CIE Address Size");
881 dw2_asm_output_data (1, 0, "CIE Segment Size");
883 dw2_asm_output_data_uleb128 (1, "CIE Code Alignment Factor");
884 dw2_asm_output_data_sleb128 (DWARF_CIE_DATA_ALIGNMENT,
885 "CIE Data Alignment Factor");
887 if (dw_cie_version == 1)
888 dw2_asm_output_data (1, return_reg, "CIE RA Column");
889 else
890 dw2_asm_output_data_uleb128 (return_reg, "CIE RA Column");
892 if (augmentation[0])
894 dw2_asm_output_data_uleb128 (augmentation_size, "Augmentation size");
895 if (personality)
897 dw2_asm_output_data (1, per_encoding, "Personality (%s)",
898 eh_data_format_name (per_encoding));
899 dw2_asm_output_encoded_addr_rtx (per_encoding,
900 personality,
901 true, NULL);
904 if (any_lsda_needed)
905 dw2_asm_output_data (1, lsda_encoding, "LSDA Encoding (%s)",
906 eh_data_format_name (lsda_encoding));
908 if (fde_encoding != DW_EH_PE_absptr)
909 dw2_asm_output_data (1, fde_encoding, "FDE Encoding (%s)",
910 eh_data_format_name (fde_encoding));
913 FOR_EACH_VEC_ELT (*cie_cfi_vec, i, cfi)
914 output_cfi (cfi, NULL, for_eh);
916 /* Pad the CIE out to an address sized boundary. */
917 ASM_OUTPUT_ALIGN (asm_out_file,
918 floor_log2 (for_eh ? PTR_SIZE : DWARF2_ADDR_SIZE));
919 ASM_OUTPUT_LABEL (asm_out_file, l2);
921 /* Loop through all of the FDE's. */
922 FOR_EACH_VEC_ELT (*fde_vec, i, fde)
924 unsigned int k;
926 /* Don't emit EH unwind info for leaf functions that don't need it. */
927 if (for_eh && !fde_needed_for_eh_p (fde))
928 continue;
930 for (k = 0; k < (fde->dw_fde_second_begin ? 2 : 1); k++)
931 output_fde (fde, for_eh, k, section_start_label, fde_encoding,
932 augmentation, any_lsda_needed, lsda_encoding);
935 if (for_eh && targetm.terminate_dw2_eh_frame_info)
936 dw2_asm_output_data (4, 0, "End of Table");
938 /* Turn off app to make assembly quicker. */
939 if (flag_debug_asm)
940 app_disable ();
943 /* Emit .cfi_startproc and .cfi_personality/.cfi_lsda if needed. */
945 static void
946 dwarf2out_do_cfi_startproc (bool second)
948 int enc;
949 rtx ref;
950 rtx personality = get_personality_function (current_function_decl);
952 fprintf (asm_out_file, "\t.cfi_startproc\n");
954 if (personality)
956 enc = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2, /*global=*/1);
957 ref = personality;
959 /* ??? The GAS support isn't entirely consistent. We have to
960 handle indirect support ourselves, but PC-relative is done
961 in the assembler. Further, the assembler can't handle any
962 of the weirder relocation types. */
963 if (enc & DW_EH_PE_indirect)
964 ref = dw2_force_const_mem (ref, true);
966 fprintf (asm_out_file, "\t.cfi_personality %#x,", enc);
967 output_addr_const (asm_out_file, ref);
968 fputc ('\n', asm_out_file);
971 if (crtl->uses_eh_lsda)
973 char lab[20];
975 enc = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0, /*global=*/0);
976 ASM_GENERATE_INTERNAL_LABEL (lab, second ? "LLSDAC" : "LLSDA",
977 current_function_funcdef_no);
978 ref = gen_rtx_SYMBOL_REF (Pmode, lab);
979 SYMBOL_REF_FLAGS (ref) = SYMBOL_FLAG_LOCAL;
981 if (enc & DW_EH_PE_indirect)
982 ref = dw2_force_const_mem (ref, true);
984 fprintf (asm_out_file, "\t.cfi_lsda %#x,", enc);
985 output_addr_const (asm_out_file, ref);
986 fputc ('\n', asm_out_file);
990 /* Allocate CURRENT_FDE. Immediately initialize all we can, noting that
991 this allocation may be done before pass_final. */
993 dw_fde_ref
994 dwarf2out_alloc_current_fde (void)
996 dw_fde_ref fde;
998 fde = ggc_cleared_alloc<dw_fde_node> ();
999 fde->decl = current_function_decl;
1000 fde->funcdef_number = current_function_funcdef_no;
1001 fde->fde_index = vec_safe_length (fde_vec);
1002 fde->all_throwers_are_sibcalls = crtl->all_throwers_are_sibcalls;
1003 fde->uses_eh_lsda = crtl->uses_eh_lsda;
1004 fde->nothrow = crtl->nothrow;
1005 fde->drap_reg = INVALID_REGNUM;
1006 fde->vdrap_reg = INVALID_REGNUM;
1008 /* Record the FDE associated with this function. */
1009 cfun->fde = fde;
1010 vec_safe_push (fde_vec, fde);
1012 return fde;
1015 /* Output a marker (i.e. a label) for the beginning of a function, before
1016 the prologue. */
1018 void
1019 dwarf2out_begin_prologue (unsigned int line ATTRIBUTE_UNUSED,
1020 const char *file ATTRIBUTE_UNUSED)
1022 char label[MAX_ARTIFICIAL_LABEL_BYTES];
1023 char * dup_label;
1024 dw_fde_ref fde;
1025 section *fnsec;
1026 bool do_frame;
1028 current_function_func_begin_label = NULL;
1030 do_frame = dwarf2out_do_frame ();
1032 /* ??? current_function_func_begin_label is also used by except.c for
1033 call-site information. We must emit this label if it might be used. */
1034 if (!do_frame
1035 && (!flag_exceptions
1036 || targetm_common.except_unwind_info (&global_options) == UI_SJLJ))
1037 return;
1039 fnsec = function_section (current_function_decl);
1040 switch_to_section (fnsec);
1041 ASM_GENERATE_INTERNAL_LABEL (label, FUNC_BEGIN_LABEL,
1042 current_function_funcdef_no);
1043 ASM_OUTPUT_DEBUG_LABEL (asm_out_file, FUNC_BEGIN_LABEL,
1044 current_function_funcdef_no);
1045 dup_label = xstrdup (label);
1046 current_function_func_begin_label = dup_label;
1048 /* We can elide the fde allocation if we're not emitting debug info. */
1049 if (!do_frame)
1050 return;
1052 /* Cater to the various TARGET_ASM_OUTPUT_MI_THUNK implementations that
1053 emit insns as rtx but bypass the bulk of rest_of_compilation, which
1054 would include pass_dwarf2_frame. If we've not created the FDE yet,
1055 do so now. */
1056 fde = cfun->fde;
1057 if (fde == NULL)
1058 fde = dwarf2out_alloc_current_fde ();
1060 /* Initialize the bits of CURRENT_FDE that were not available earlier. */
1061 fde->dw_fde_begin = dup_label;
1062 fde->dw_fde_current_label = dup_label;
1063 fde->in_std_section = (fnsec == text_section
1064 || (cold_text_section && fnsec == cold_text_section));
1066 /* We only want to output line number information for the genuine dwarf2
1067 prologue case, not the eh frame case. */
1068 #ifdef DWARF2_DEBUGGING_INFO
1069 if (file)
1070 dwarf2out_source_line (line, file, 0, true);
1071 #endif
1073 if (dwarf2out_do_cfi_asm ())
1074 dwarf2out_do_cfi_startproc (false);
1075 else
1077 rtx personality = get_personality_function (current_function_decl);
1078 if (!current_unit_personality)
1079 current_unit_personality = personality;
1081 /* We cannot keep a current personality per function as without CFI
1082 asm, at the point where we emit the CFI data, there is no current
1083 function anymore. */
1084 if (personality && current_unit_personality != personality)
1085 sorry ("multiple EH personalities are supported only with assemblers "
1086 "supporting .cfi_personality directive");
1090 /* Output a marker (i.e. a label) for the end of the generated code
1091 for a function prologue. This gets called *after* the prologue code has
1092 been generated. */
1094 void
1095 dwarf2out_vms_end_prologue (unsigned int line ATTRIBUTE_UNUSED,
1096 const char *file ATTRIBUTE_UNUSED)
1098 char label[MAX_ARTIFICIAL_LABEL_BYTES];
1100 /* Output a label to mark the endpoint of the code generated for this
1101 function. */
1102 ASM_GENERATE_INTERNAL_LABEL (label, PROLOGUE_END_LABEL,
1103 current_function_funcdef_no);
1104 ASM_OUTPUT_DEBUG_LABEL (asm_out_file, PROLOGUE_END_LABEL,
1105 current_function_funcdef_no);
1106 cfun->fde->dw_fde_vms_end_prologue = xstrdup (label);
1109 /* Output a marker (i.e. a label) for the beginning of the generated code
1110 for a function epilogue. This gets called *before* the prologue code has
1111 been generated. */
1113 void
1114 dwarf2out_vms_begin_epilogue (unsigned int line ATTRIBUTE_UNUSED,
1115 const char *file ATTRIBUTE_UNUSED)
1117 dw_fde_ref fde = cfun->fde;
1118 char label[MAX_ARTIFICIAL_LABEL_BYTES];
1120 if (fde->dw_fde_vms_begin_epilogue)
1121 return;
1123 /* Output a label to mark the endpoint of the code generated for this
1124 function. */
1125 ASM_GENERATE_INTERNAL_LABEL (label, EPILOGUE_BEGIN_LABEL,
1126 current_function_funcdef_no);
1127 ASM_OUTPUT_DEBUG_LABEL (asm_out_file, EPILOGUE_BEGIN_LABEL,
1128 current_function_funcdef_no);
1129 fde->dw_fde_vms_begin_epilogue = xstrdup (label);
1132 /* Output a marker (i.e. a label) for the absolute end of the generated code
1133 for a function definition. This gets called *after* the epilogue code has
1134 been generated. */
1136 void
1137 dwarf2out_end_epilogue (unsigned int line ATTRIBUTE_UNUSED,
1138 const char *file ATTRIBUTE_UNUSED)
1140 dw_fde_ref fde;
1141 char label[MAX_ARTIFICIAL_LABEL_BYTES];
1143 last_var_location_insn = NULL;
1144 cached_next_real_insn = NULL;
1146 if (dwarf2out_do_cfi_asm ())
1147 fprintf (asm_out_file, "\t.cfi_endproc\n");
1149 /* Output a label to mark the endpoint of the code generated for this
1150 function. */
1151 ASM_GENERATE_INTERNAL_LABEL (label, FUNC_END_LABEL,
1152 current_function_funcdef_no);
1153 ASM_OUTPUT_LABEL (asm_out_file, label);
1154 fde = cfun->fde;
1155 gcc_assert (fde != NULL);
1156 if (fde->dw_fde_second_begin == NULL)
1157 fde->dw_fde_end = xstrdup (label);
1160 void
1161 dwarf2out_frame_finish (void)
1163 /* Output call frame information. */
1164 if (targetm.debug_unwind_info () == UI_DWARF2)
1165 output_call_frame_info (0);
1167 /* Output another copy for the unwinder. */
1168 if ((flag_unwind_tables || flag_exceptions)
1169 && targetm_common.except_unwind_info (&global_options) == UI_DWARF2)
1170 output_call_frame_info (1);
1173 /* Note that the current function section is being used for code. */
1175 static void
1176 dwarf2out_note_section_used (void)
1178 section *sec = current_function_section ();
1179 if (sec == text_section)
1180 text_section_used = true;
1181 else if (sec == cold_text_section)
1182 cold_text_section_used = true;
1185 static void var_location_switch_text_section (void);
1186 static void set_cur_line_info_table (section *);
1188 void
1189 dwarf2out_switch_text_section (void)
1191 section *sect;
1192 dw_fde_ref fde = cfun->fde;
1194 gcc_assert (cfun && fde && fde->dw_fde_second_begin == NULL);
1196 if (!in_cold_section_p)
1198 fde->dw_fde_end = crtl->subsections.cold_section_end_label;
1199 fde->dw_fde_second_begin = crtl->subsections.hot_section_label;
1200 fde->dw_fde_second_end = crtl->subsections.hot_section_end_label;
1202 else
1204 fde->dw_fde_end = crtl->subsections.hot_section_end_label;
1205 fde->dw_fde_second_begin = crtl->subsections.cold_section_label;
1206 fde->dw_fde_second_end = crtl->subsections.cold_section_end_label;
1208 have_multiple_function_sections = true;
1210 /* There is no need to mark used sections when not debugging. */
1211 if (cold_text_section != NULL)
1212 dwarf2out_note_section_used ();
1214 if (dwarf2out_do_cfi_asm ())
1215 fprintf (asm_out_file, "\t.cfi_endproc\n");
1217 /* Now do the real section switch. */
1218 sect = current_function_section ();
1219 switch_to_section (sect);
1221 fde->second_in_std_section
1222 = (sect == text_section
1223 || (cold_text_section && sect == cold_text_section));
1225 if (dwarf2out_do_cfi_asm ())
1226 dwarf2out_do_cfi_startproc (true);
1228 var_location_switch_text_section ();
1230 if (cold_text_section != NULL)
1231 set_cur_line_info_table (sect);
1234 /* And now, the subset of the debugging information support code necessary
1235 for emitting location expressions. */
1237 /* Data about a single source file. */
1238 struct GTY(()) dwarf_file_data {
1239 const char * filename;
1240 int emitted_number;
1243 typedef struct GTY(()) deferred_locations_struct
1245 tree variable;
1246 dw_die_ref die;
1247 } deferred_locations;
1250 static GTY(()) vec<deferred_locations, va_gc> *deferred_locations_list;
1253 /* Describe an entry into the .debug_addr section. */
1255 enum ate_kind {
1256 ate_kind_rtx,
1257 ate_kind_rtx_dtprel,
1258 ate_kind_label
1261 typedef struct GTY(()) addr_table_entry_struct {
1262 enum ate_kind kind;
1263 unsigned int refcount;
1264 unsigned int index;
1265 union addr_table_entry_struct_union
1267 rtx GTY ((tag ("0"))) rtl;
1268 char * GTY ((tag ("1"))) label;
1270 GTY ((desc ("%1.kind"))) addr;
1272 addr_table_entry;
1274 /* Location lists are ranges + location descriptions for that range,
1275 so you can track variables that are in different places over
1276 their entire life. */
1277 typedef struct GTY(()) dw_loc_list_struct {
1278 dw_loc_list_ref dw_loc_next;
1279 const char *begin; /* Label and addr_entry for start of range */
1280 addr_table_entry *begin_entry;
1281 const char *end; /* Label for end of range */
1282 char *ll_symbol; /* Label for beginning of location list.
1283 Only on head of list */
1284 const char *section; /* Section this loclist is relative to */
1285 dw_loc_descr_ref expr;
1286 hashval_t hash;
1287 /* True if all addresses in this and subsequent lists are known to be
1288 resolved. */
1289 bool resolved_addr;
1290 /* True if this list has been replaced by dw_loc_next. */
1291 bool replaced;
1292 bool emitted;
1293 /* True if the range should be emitted even if begin and end
1294 are the same. */
1295 bool force;
1296 } dw_loc_list_node;
1298 static dw_loc_descr_ref int_loc_descriptor (HOST_WIDE_INT);
1300 /* Convert a DWARF stack opcode into its string name. */
1302 static const char *
1303 dwarf_stack_op_name (unsigned int op)
1305 const char *name = get_DW_OP_name (op);
1307 if (name != NULL)
1308 return name;
1310 return "OP_<unknown>";
1313 /* Return a pointer to a newly allocated location description. Location
1314 descriptions are simple expression terms that can be strung
1315 together to form more complicated location (address) descriptions. */
1317 static inline dw_loc_descr_ref
1318 new_loc_descr (enum dwarf_location_atom op, unsigned HOST_WIDE_INT oprnd1,
1319 unsigned HOST_WIDE_INT oprnd2)
1321 dw_loc_descr_ref descr = ggc_cleared_alloc<dw_loc_descr_node> ();
1323 descr->dw_loc_opc = op;
1324 descr->dw_loc_oprnd1.val_class = dw_val_class_unsigned_const;
1325 descr->dw_loc_oprnd1.val_entry = NULL;
1326 descr->dw_loc_oprnd1.v.val_unsigned = oprnd1;
1327 descr->dw_loc_oprnd2.val_class = dw_val_class_unsigned_const;
1328 descr->dw_loc_oprnd2.val_entry = NULL;
1329 descr->dw_loc_oprnd2.v.val_unsigned = oprnd2;
1331 return descr;
1334 /* Return a pointer to a newly allocated location description for
1335 REG and OFFSET. */
1337 static inline dw_loc_descr_ref
1338 new_reg_loc_descr (unsigned int reg, unsigned HOST_WIDE_INT offset)
1340 if (reg <= 31)
1341 return new_loc_descr ((enum dwarf_location_atom) (DW_OP_breg0 + reg),
1342 offset, 0);
1343 else
1344 return new_loc_descr (DW_OP_bregx, reg, offset);
1347 /* Add a location description term to a location description expression. */
1349 static inline void
1350 add_loc_descr (dw_loc_descr_ref *list_head, dw_loc_descr_ref descr)
1352 dw_loc_descr_ref *d;
1354 /* Find the end of the chain. */
1355 for (d = list_head; (*d) != NULL; d = &(*d)->dw_loc_next)
1358 *d = descr;
1361 /* Compare two location operands for exact equality. */
1363 static bool
1364 dw_val_equal_p (dw_val_node *a, dw_val_node *b)
1366 if (a->val_class != b->val_class)
1367 return false;
1368 switch (a->val_class)
1370 case dw_val_class_none:
1371 return true;
1372 case dw_val_class_addr:
1373 return rtx_equal_p (a->v.val_addr, b->v.val_addr);
1375 case dw_val_class_offset:
1376 case dw_val_class_unsigned_const:
1377 case dw_val_class_const:
1378 case dw_val_class_range_list:
1379 case dw_val_class_lineptr:
1380 case dw_val_class_macptr:
1381 /* These are all HOST_WIDE_INT, signed or unsigned. */
1382 return a->v.val_unsigned == b->v.val_unsigned;
1384 case dw_val_class_loc:
1385 return a->v.val_loc == b->v.val_loc;
1386 case dw_val_class_loc_list:
1387 return a->v.val_loc_list == b->v.val_loc_list;
1388 case dw_val_class_die_ref:
1389 return a->v.val_die_ref.die == b->v.val_die_ref.die;
1390 case dw_val_class_fde_ref:
1391 return a->v.val_fde_index == b->v.val_fde_index;
1392 case dw_val_class_lbl_id:
1393 case dw_val_class_high_pc:
1394 return strcmp (a->v.val_lbl_id, b->v.val_lbl_id) == 0;
1395 case dw_val_class_str:
1396 return a->v.val_str == b->v.val_str;
1397 case dw_val_class_flag:
1398 return a->v.val_flag == b->v.val_flag;
1399 case dw_val_class_file:
1400 return a->v.val_file == b->v.val_file;
1401 case dw_val_class_decl_ref:
1402 return a->v.val_decl_ref == b->v.val_decl_ref;
1404 case dw_val_class_const_double:
1405 return (a->v.val_double.high == b->v.val_double.high
1406 && a->v.val_double.low == b->v.val_double.low);
1408 case dw_val_class_wide_int:
1409 return *a->v.val_wide == *b->v.val_wide;
1411 case dw_val_class_vec:
1413 size_t a_len = a->v.val_vec.elt_size * a->v.val_vec.length;
1414 size_t b_len = b->v.val_vec.elt_size * b->v.val_vec.length;
1416 return (a_len == b_len
1417 && !memcmp (a->v.val_vec.array, b->v.val_vec.array, a_len));
1420 case dw_val_class_data8:
1421 return memcmp (a->v.val_data8, b->v.val_data8, 8) == 0;
1423 case dw_val_class_vms_delta:
1424 return (!strcmp (a->v.val_vms_delta.lbl1, b->v.val_vms_delta.lbl1)
1425 && !strcmp (a->v.val_vms_delta.lbl1, b->v.val_vms_delta.lbl1));
1427 gcc_unreachable ();
1430 /* Compare two location atoms for exact equality. */
1432 static bool
1433 loc_descr_equal_p_1 (dw_loc_descr_ref a, dw_loc_descr_ref b)
1435 if (a->dw_loc_opc != b->dw_loc_opc)
1436 return false;
1438 /* ??? This is only ever set for DW_OP_constNu, for N equal to the
1439 address size, but since we always allocate cleared storage it
1440 should be zero for other types of locations. */
1441 if (a->dtprel != b->dtprel)
1442 return false;
1444 return (dw_val_equal_p (&a->dw_loc_oprnd1, &b->dw_loc_oprnd1)
1445 && dw_val_equal_p (&a->dw_loc_oprnd2, &b->dw_loc_oprnd2));
1448 /* Compare two complete location expressions for exact equality. */
1450 bool
1451 loc_descr_equal_p (dw_loc_descr_ref a, dw_loc_descr_ref b)
1453 while (1)
1455 if (a == b)
1456 return true;
1457 if (a == NULL || b == NULL)
1458 return false;
1459 if (!loc_descr_equal_p_1 (a, b))
1460 return false;
1462 a = a->dw_loc_next;
1463 b = b->dw_loc_next;
1468 /* Add a constant OFFSET to a location expression. */
1470 static void
1471 loc_descr_plus_const (dw_loc_descr_ref *list_head, HOST_WIDE_INT offset)
1473 dw_loc_descr_ref loc;
1474 HOST_WIDE_INT *p;
1476 gcc_assert (*list_head != NULL);
1478 if (!offset)
1479 return;
1481 /* Find the end of the chain. */
1482 for (loc = *list_head; loc->dw_loc_next != NULL; loc = loc->dw_loc_next)
1485 p = NULL;
1486 if (loc->dw_loc_opc == DW_OP_fbreg
1487 || (loc->dw_loc_opc >= DW_OP_breg0 && loc->dw_loc_opc <= DW_OP_breg31))
1488 p = &loc->dw_loc_oprnd1.v.val_int;
1489 else if (loc->dw_loc_opc == DW_OP_bregx)
1490 p = &loc->dw_loc_oprnd2.v.val_int;
1492 /* If the last operation is fbreg, breg{0..31,x}, optimize by adjusting its
1493 offset. Don't optimize if an signed integer overflow would happen. */
1494 if (p != NULL
1495 && ((offset > 0 && *p <= INTTYPE_MAXIMUM (HOST_WIDE_INT) - offset)
1496 || (offset < 0 && *p >= INTTYPE_MINIMUM (HOST_WIDE_INT) - offset)))
1497 *p += offset;
1499 else if (offset > 0)
1500 loc->dw_loc_next = new_loc_descr (DW_OP_plus_uconst, offset, 0);
1502 else
1504 loc->dw_loc_next = int_loc_descriptor (-offset);
1505 add_loc_descr (&loc->dw_loc_next, new_loc_descr (DW_OP_minus, 0, 0));
1509 /* Add a constant OFFSET to a location list. */
1511 static void
1512 loc_list_plus_const (dw_loc_list_ref list_head, HOST_WIDE_INT offset)
1514 dw_loc_list_ref d;
1515 for (d = list_head; d != NULL; d = d->dw_loc_next)
1516 loc_descr_plus_const (&d->expr, offset);
1519 #define DWARF_REF_SIZE \
1520 (dwarf_version == 2 ? DWARF2_ADDR_SIZE : DWARF_OFFSET_SIZE)
1522 static unsigned long int get_base_type_offset (dw_die_ref);
1524 /* Return the size of a location descriptor. */
1526 static unsigned long
1527 size_of_loc_descr (dw_loc_descr_ref loc)
1529 unsigned long size = 1;
1531 switch (loc->dw_loc_opc)
1533 case DW_OP_addr:
1534 size += DWARF2_ADDR_SIZE;
1535 break;
1536 case DW_OP_GNU_addr_index:
1537 case DW_OP_GNU_const_index:
1538 gcc_assert (loc->dw_loc_oprnd1.val_entry->index != NO_INDEX_ASSIGNED);
1539 size += size_of_uleb128 (loc->dw_loc_oprnd1.val_entry->index);
1540 break;
1541 case DW_OP_const1u:
1542 case DW_OP_const1s:
1543 size += 1;
1544 break;
1545 case DW_OP_const2u:
1546 case DW_OP_const2s:
1547 size += 2;
1548 break;
1549 case DW_OP_const4u:
1550 case DW_OP_const4s:
1551 size += 4;
1552 break;
1553 case DW_OP_const8u:
1554 case DW_OP_const8s:
1555 size += 8;
1556 break;
1557 case DW_OP_constu:
1558 size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
1559 break;
1560 case DW_OP_consts:
1561 size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
1562 break;
1563 case DW_OP_pick:
1564 size += 1;
1565 break;
1566 case DW_OP_plus_uconst:
1567 size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
1568 break;
1569 case DW_OP_skip:
1570 case DW_OP_bra:
1571 size += 2;
1572 break;
1573 case DW_OP_breg0:
1574 case DW_OP_breg1:
1575 case DW_OP_breg2:
1576 case DW_OP_breg3:
1577 case DW_OP_breg4:
1578 case DW_OP_breg5:
1579 case DW_OP_breg6:
1580 case DW_OP_breg7:
1581 case DW_OP_breg8:
1582 case DW_OP_breg9:
1583 case DW_OP_breg10:
1584 case DW_OP_breg11:
1585 case DW_OP_breg12:
1586 case DW_OP_breg13:
1587 case DW_OP_breg14:
1588 case DW_OP_breg15:
1589 case DW_OP_breg16:
1590 case DW_OP_breg17:
1591 case DW_OP_breg18:
1592 case DW_OP_breg19:
1593 case DW_OP_breg20:
1594 case DW_OP_breg21:
1595 case DW_OP_breg22:
1596 case DW_OP_breg23:
1597 case DW_OP_breg24:
1598 case DW_OP_breg25:
1599 case DW_OP_breg26:
1600 case DW_OP_breg27:
1601 case DW_OP_breg28:
1602 case DW_OP_breg29:
1603 case DW_OP_breg30:
1604 case DW_OP_breg31:
1605 size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
1606 break;
1607 case DW_OP_regx:
1608 size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
1609 break;
1610 case DW_OP_fbreg:
1611 size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
1612 break;
1613 case DW_OP_bregx:
1614 size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
1615 size += size_of_sleb128 (loc->dw_loc_oprnd2.v.val_int);
1616 break;
1617 case DW_OP_piece:
1618 size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
1619 break;
1620 case DW_OP_bit_piece:
1621 size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
1622 size += size_of_uleb128 (loc->dw_loc_oprnd2.v.val_unsigned);
1623 break;
1624 case DW_OP_deref_size:
1625 case DW_OP_xderef_size:
1626 size += 1;
1627 break;
1628 case DW_OP_call2:
1629 size += 2;
1630 break;
1631 case DW_OP_call4:
1632 size += 4;
1633 break;
1634 case DW_OP_call_ref:
1635 size += DWARF_REF_SIZE;
1636 break;
1637 case DW_OP_implicit_value:
1638 size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned)
1639 + loc->dw_loc_oprnd1.v.val_unsigned;
1640 break;
1641 case DW_OP_GNU_implicit_pointer:
1642 size += DWARF_REF_SIZE + size_of_sleb128 (loc->dw_loc_oprnd2.v.val_int);
1643 break;
1644 case DW_OP_GNU_entry_value:
1646 unsigned long op_size = size_of_locs (loc->dw_loc_oprnd1.v.val_loc);
1647 size += size_of_uleb128 (op_size) + op_size;
1648 break;
1650 case DW_OP_GNU_const_type:
1652 unsigned long o
1653 = get_base_type_offset (loc->dw_loc_oprnd1.v.val_die_ref.die);
1654 size += size_of_uleb128 (o) + 1;
1655 switch (loc->dw_loc_oprnd2.val_class)
1657 case dw_val_class_vec:
1658 size += loc->dw_loc_oprnd2.v.val_vec.length
1659 * loc->dw_loc_oprnd2.v.val_vec.elt_size;
1660 break;
1661 case dw_val_class_const:
1662 size += HOST_BITS_PER_WIDE_INT / BITS_PER_UNIT;
1663 break;
1664 case dw_val_class_const_double:
1665 size += HOST_BITS_PER_DOUBLE_INT / BITS_PER_UNIT;
1666 break;
1667 case dw_val_class_wide_int:
1668 size += (get_full_len (*loc->dw_loc_oprnd2.v.val_wide)
1669 * HOST_BITS_PER_WIDE_INT / BITS_PER_UNIT);
1670 break;
1671 default:
1672 gcc_unreachable ();
1674 break;
1676 case DW_OP_GNU_regval_type:
1678 unsigned long o
1679 = get_base_type_offset (loc->dw_loc_oprnd2.v.val_die_ref.die);
1680 size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned)
1681 + size_of_uleb128 (o);
1683 break;
1684 case DW_OP_GNU_deref_type:
1686 unsigned long o
1687 = get_base_type_offset (loc->dw_loc_oprnd2.v.val_die_ref.die);
1688 size += 1 + size_of_uleb128 (o);
1690 break;
1691 case DW_OP_GNU_convert:
1692 case DW_OP_GNU_reinterpret:
1693 if (loc->dw_loc_oprnd1.val_class == dw_val_class_unsigned_const)
1694 size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
1695 else
1697 unsigned long o
1698 = get_base_type_offset (loc->dw_loc_oprnd1.v.val_die_ref.die);
1699 size += size_of_uleb128 (o);
1701 break;
1702 case DW_OP_GNU_parameter_ref:
1703 size += 4;
1704 break;
1705 default:
1706 break;
1709 return size;
1712 /* Return the size of a series of location descriptors. */
1714 unsigned long
1715 size_of_locs (dw_loc_descr_ref loc)
1717 dw_loc_descr_ref l;
1718 unsigned long size;
1720 /* If there are no skip or bra opcodes, don't fill in the dw_loc_addr
1721 field, to avoid writing to a PCH file. */
1722 for (size = 0, l = loc; l != NULL; l = l->dw_loc_next)
1724 if (l->dw_loc_opc == DW_OP_skip || l->dw_loc_opc == DW_OP_bra)
1725 break;
1726 size += size_of_loc_descr (l);
1728 if (! l)
1729 return size;
1731 for (size = 0, l = loc; l != NULL; l = l->dw_loc_next)
1733 l->dw_loc_addr = size;
1734 size += size_of_loc_descr (l);
1737 return size;
1740 static HOST_WIDE_INT extract_int (const unsigned char *, unsigned);
1741 static void get_ref_die_offset_label (char *, dw_die_ref);
1742 static unsigned long int get_ref_die_offset (dw_die_ref);
1744 /* Output location description stack opcode's operands (if any).
1745 The for_eh_or_skip parameter controls whether register numbers are
1746 converted using DWARF2_FRAME_REG_OUT, which is needed in the case that
1747 hard reg numbers have been processed via DWARF_FRAME_REGNUM (i.e. for unwind
1748 info). This should be suppressed for the cases that have not been converted
1749 (i.e. symbolic debug info), by setting the parameter < 0. See PR47324. */
1751 static void
1752 output_loc_operands (dw_loc_descr_ref loc, int for_eh_or_skip)
1754 dw_val_ref val1 = &loc->dw_loc_oprnd1;
1755 dw_val_ref val2 = &loc->dw_loc_oprnd2;
1757 switch (loc->dw_loc_opc)
1759 #ifdef DWARF2_DEBUGGING_INFO
1760 case DW_OP_const2u:
1761 case DW_OP_const2s:
1762 dw2_asm_output_data (2, val1->v.val_int, NULL);
1763 break;
1764 case DW_OP_const4u:
1765 if (loc->dtprel)
1767 gcc_assert (targetm.asm_out.output_dwarf_dtprel);
1768 targetm.asm_out.output_dwarf_dtprel (asm_out_file, 4,
1769 val1->v.val_addr);
1770 fputc ('\n', asm_out_file);
1771 break;
1773 /* FALLTHRU */
1774 case DW_OP_const4s:
1775 dw2_asm_output_data (4, val1->v.val_int, NULL);
1776 break;
1777 case DW_OP_const8u:
1778 if (loc->dtprel)
1780 gcc_assert (targetm.asm_out.output_dwarf_dtprel);
1781 targetm.asm_out.output_dwarf_dtprel (asm_out_file, 8,
1782 val1->v.val_addr);
1783 fputc ('\n', asm_out_file);
1784 break;
1786 /* FALLTHRU */
1787 case DW_OP_const8s:
1788 gcc_assert (HOST_BITS_PER_WIDE_INT >= 64);
1789 dw2_asm_output_data (8, val1->v.val_int, NULL);
1790 break;
1791 case DW_OP_skip:
1792 case DW_OP_bra:
1794 int offset;
1796 gcc_assert (val1->val_class == dw_val_class_loc);
1797 offset = val1->v.val_loc->dw_loc_addr - (loc->dw_loc_addr + 3);
1799 dw2_asm_output_data (2, offset, NULL);
1801 break;
1802 case DW_OP_implicit_value:
1803 dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
1804 switch (val2->val_class)
1806 case dw_val_class_const:
1807 dw2_asm_output_data (val1->v.val_unsigned, val2->v.val_int, NULL);
1808 break;
1809 case dw_val_class_vec:
1811 unsigned int elt_size = val2->v.val_vec.elt_size;
1812 unsigned int len = val2->v.val_vec.length;
1813 unsigned int i;
1814 unsigned char *p;
1816 if (elt_size > sizeof (HOST_WIDE_INT))
1818 elt_size /= 2;
1819 len *= 2;
1821 for (i = 0, p = val2->v.val_vec.array;
1822 i < len;
1823 i++, p += elt_size)
1824 dw2_asm_output_data (elt_size, extract_int (p, elt_size),
1825 "fp or vector constant word %u", i);
1827 break;
1828 case dw_val_class_const_double:
1830 unsigned HOST_WIDE_INT first, second;
1832 if (WORDS_BIG_ENDIAN)
1834 first = val2->v.val_double.high;
1835 second = val2->v.val_double.low;
1837 else
1839 first = val2->v.val_double.low;
1840 second = val2->v.val_double.high;
1842 dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR,
1843 first, NULL);
1844 dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR,
1845 second, NULL);
1847 break;
1848 case dw_val_class_wide_int:
1850 int i;
1851 int len = get_full_len (*val2->v.val_wide);
1852 if (WORDS_BIG_ENDIAN)
1853 for (i = len - 1; i >= 0; --i)
1854 dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR,
1855 val2->v.val_wide->elt (i), NULL);
1856 else
1857 for (i = 0; i < len; ++i)
1858 dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR,
1859 val2->v.val_wide->elt (i), NULL);
1861 break;
1862 case dw_val_class_addr:
1863 gcc_assert (val1->v.val_unsigned == DWARF2_ADDR_SIZE);
1864 dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE, val2->v.val_addr, NULL);
1865 break;
1866 default:
1867 gcc_unreachable ();
1869 break;
1870 #else
1871 case DW_OP_const2u:
1872 case DW_OP_const2s:
1873 case DW_OP_const4u:
1874 case DW_OP_const4s:
1875 case DW_OP_const8u:
1876 case DW_OP_const8s:
1877 case DW_OP_skip:
1878 case DW_OP_bra:
1879 case DW_OP_implicit_value:
1880 /* We currently don't make any attempt to make sure these are
1881 aligned properly like we do for the main unwind info, so
1882 don't support emitting things larger than a byte if we're
1883 only doing unwinding. */
1884 gcc_unreachable ();
1885 #endif
1886 case DW_OP_const1u:
1887 case DW_OP_const1s:
1888 dw2_asm_output_data (1, val1->v.val_int, NULL);
1889 break;
1890 case DW_OP_constu:
1891 dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
1892 break;
1893 case DW_OP_consts:
1894 dw2_asm_output_data_sleb128 (val1->v.val_int, NULL);
1895 break;
1896 case DW_OP_pick:
1897 dw2_asm_output_data (1, val1->v.val_int, NULL);
1898 break;
1899 case DW_OP_plus_uconst:
1900 dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
1901 break;
1902 case DW_OP_breg0:
1903 case DW_OP_breg1:
1904 case DW_OP_breg2:
1905 case DW_OP_breg3:
1906 case DW_OP_breg4:
1907 case DW_OP_breg5:
1908 case DW_OP_breg6:
1909 case DW_OP_breg7:
1910 case DW_OP_breg8:
1911 case DW_OP_breg9:
1912 case DW_OP_breg10:
1913 case DW_OP_breg11:
1914 case DW_OP_breg12:
1915 case DW_OP_breg13:
1916 case DW_OP_breg14:
1917 case DW_OP_breg15:
1918 case DW_OP_breg16:
1919 case DW_OP_breg17:
1920 case DW_OP_breg18:
1921 case DW_OP_breg19:
1922 case DW_OP_breg20:
1923 case DW_OP_breg21:
1924 case DW_OP_breg22:
1925 case DW_OP_breg23:
1926 case DW_OP_breg24:
1927 case DW_OP_breg25:
1928 case DW_OP_breg26:
1929 case DW_OP_breg27:
1930 case DW_OP_breg28:
1931 case DW_OP_breg29:
1932 case DW_OP_breg30:
1933 case DW_OP_breg31:
1934 dw2_asm_output_data_sleb128 (val1->v.val_int, NULL);
1935 break;
1936 case DW_OP_regx:
1938 unsigned r = val1->v.val_unsigned;
1939 if (for_eh_or_skip >= 0)
1940 r = DWARF2_FRAME_REG_OUT (r, for_eh_or_skip);
1941 gcc_assert (size_of_uleb128 (r)
1942 == size_of_uleb128 (val1->v.val_unsigned));
1943 dw2_asm_output_data_uleb128 (r, NULL);
1945 break;
1946 case DW_OP_fbreg:
1947 dw2_asm_output_data_sleb128 (val1->v.val_int, NULL);
1948 break;
1949 case DW_OP_bregx:
1951 unsigned r = val1->v.val_unsigned;
1952 if (for_eh_or_skip >= 0)
1953 r = DWARF2_FRAME_REG_OUT (r, for_eh_or_skip);
1954 gcc_assert (size_of_uleb128 (r)
1955 == size_of_uleb128 (val1->v.val_unsigned));
1956 dw2_asm_output_data_uleb128 (r, NULL);
1957 dw2_asm_output_data_sleb128 (val2->v.val_int, NULL);
1959 break;
1960 case DW_OP_piece:
1961 dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
1962 break;
1963 case DW_OP_bit_piece:
1964 dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
1965 dw2_asm_output_data_uleb128 (val2->v.val_unsigned, NULL);
1966 break;
1967 case DW_OP_deref_size:
1968 case DW_OP_xderef_size:
1969 dw2_asm_output_data (1, val1->v.val_int, NULL);
1970 break;
1972 case DW_OP_addr:
1973 if (loc->dtprel)
1975 if (targetm.asm_out.output_dwarf_dtprel)
1977 targetm.asm_out.output_dwarf_dtprel (asm_out_file,
1978 DWARF2_ADDR_SIZE,
1979 val1->v.val_addr);
1980 fputc ('\n', asm_out_file);
1982 else
1983 gcc_unreachable ();
1985 else
1987 #ifdef DWARF2_DEBUGGING_INFO
1988 dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE, val1->v.val_addr, NULL);
1989 #else
1990 gcc_unreachable ();
1991 #endif
1993 break;
1995 case DW_OP_GNU_addr_index:
1996 case DW_OP_GNU_const_index:
1997 gcc_assert (loc->dw_loc_oprnd1.val_entry->index != NO_INDEX_ASSIGNED);
1998 dw2_asm_output_data_uleb128 (loc->dw_loc_oprnd1.val_entry->index,
1999 "(index into .debug_addr)");
2000 break;
2002 case DW_OP_GNU_implicit_pointer:
2004 char label[MAX_ARTIFICIAL_LABEL_BYTES
2005 + HOST_BITS_PER_WIDE_INT / 2 + 2];
2006 gcc_assert (val1->val_class == dw_val_class_die_ref);
2007 get_ref_die_offset_label (label, val1->v.val_die_ref.die);
2008 dw2_asm_output_offset (DWARF_REF_SIZE, label, debug_info_section, NULL);
2009 dw2_asm_output_data_sleb128 (val2->v.val_int, NULL);
2011 break;
2013 case DW_OP_GNU_entry_value:
2014 dw2_asm_output_data_uleb128 (size_of_locs (val1->v.val_loc), NULL);
2015 output_loc_sequence (val1->v.val_loc, for_eh_or_skip);
2016 break;
2018 case DW_OP_GNU_const_type:
2020 unsigned long o = get_base_type_offset (val1->v.val_die_ref.die), l;
2021 gcc_assert (o);
2022 dw2_asm_output_data_uleb128 (o, NULL);
2023 switch (val2->val_class)
2025 case dw_val_class_const:
2026 l = HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR;
2027 dw2_asm_output_data (1, l, NULL);
2028 dw2_asm_output_data (l, val2->v.val_int, NULL);
2029 break;
2030 case dw_val_class_vec:
2032 unsigned int elt_size = val2->v.val_vec.elt_size;
2033 unsigned int len = val2->v.val_vec.length;
2034 unsigned int i;
2035 unsigned char *p;
2037 l = len * elt_size;
2038 dw2_asm_output_data (1, l, NULL);
2039 if (elt_size > sizeof (HOST_WIDE_INT))
2041 elt_size /= 2;
2042 len *= 2;
2044 for (i = 0, p = val2->v.val_vec.array;
2045 i < len;
2046 i++, p += elt_size)
2047 dw2_asm_output_data (elt_size, extract_int (p, elt_size),
2048 "fp or vector constant word %u", i);
2050 break;
2051 case dw_val_class_const_double:
2053 unsigned HOST_WIDE_INT first, second;
2054 l = HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR;
2056 dw2_asm_output_data (1, 2 * l, NULL);
2057 if (WORDS_BIG_ENDIAN)
2059 first = val2->v.val_double.high;
2060 second = val2->v.val_double.low;
2062 else
2064 first = val2->v.val_double.low;
2065 second = val2->v.val_double.high;
2067 dw2_asm_output_data (l, first, NULL);
2068 dw2_asm_output_data (l, second, NULL);
2070 break;
2071 case dw_val_class_wide_int:
2073 int i;
2074 int len = get_full_len (*val2->v.val_wide);
2075 l = HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR;
2077 dw2_asm_output_data (1, len * l, NULL);
2078 if (WORDS_BIG_ENDIAN)
2079 for (i = len - 1; i >= 0; --i)
2080 dw2_asm_output_data (l, val2->v.val_wide->elt (i), NULL);
2081 else
2082 for (i = 0; i < len; ++i)
2083 dw2_asm_output_data (l, val2->v.val_wide->elt (i), NULL);
2085 break;
2086 default:
2087 gcc_unreachable ();
2090 break;
2091 case DW_OP_GNU_regval_type:
2093 unsigned r = val1->v.val_unsigned;
2094 unsigned long o = get_base_type_offset (val2->v.val_die_ref.die);
2095 gcc_assert (o);
2096 if (for_eh_or_skip >= 0)
2098 r = DWARF2_FRAME_REG_OUT (r, for_eh_or_skip);
2099 gcc_assert (size_of_uleb128 (r)
2100 == size_of_uleb128 (val1->v.val_unsigned));
2102 dw2_asm_output_data_uleb128 (r, NULL);
2103 dw2_asm_output_data_uleb128 (o, NULL);
2105 break;
2106 case DW_OP_GNU_deref_type:
2108 unsigned long o = get_base_type_offset (val2->v.val_die_ref.die);
2109 gcc_assert (o);
2110 dw2_asm_output_data (1, val1->v.val_int, NULL);
2111 dw2_asm_output_data_uleb128 (o, NULL);
2113 break;
2114 case DW_OP_GNU_convert:
2115 case DW_OP_GNU_reinterpret:
2116 if (loc->dw_loc_oprnd1.val_class == dw_val_class_unsigned_const)
2117 dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
2118 else
2120 unsigned long o = get_base_type_offset (val1->v.val_die_ref.die);
2121 gcc_assert (o);
2122 dw2_asm_output_data_uleb128 (o, NULL);
2124 break;
2126 case DW_OP_GNU_parameter_ref:
2128 unsigned long o;
2129 gcc_assert (val1->val_class == dw_val_class_die_ref);
2130 o = get_ref_die_offset (val1->v.val_die_ref.die);
2131 dw2_asm_output_data (4, o, NULL);
2133 break;
2135 default:
2136 /* Other codes have no operands. */
2137 break;
2141 /* Output a sequence of location operations.
2142 The for_eh_or_skip parameter controls whether register numbers are
2143 converted using DWARF2_FRAME_REG_OUT, which is needed in the case that
2144 hard reg numbers have been processed via DWARF_FRAME_REGNUM (i.e. for unwind
2145 info). This should be suppressed for the cases that have not been converted
2146 (i.e. symbolic debug info), by setting the parameter < 0. See PR47324. */
2148 void
2149 output_loc_sequence (dw_loc_descr_ref loc, int for_eh_or_skip)
2151 for (; loc != NULL; loc = loc->dw_loc_next)
2153 enum dwarf_location_atom opc = loc->dw_loc_opc;
2154 /* Output the opcode. */
2155 if (for_eh_or_skip >= 0
2156 && opc >= DW_OP_breg0 && opc <= DW_OP_breg31)
2158 unsigned r = (opc - DW_OP_breg0);
2159 r = DWARF2_FRAME_REG_OUT (r, for_eh_or_skip);
2160 gcc_assert (r <= 31);
2161 opc = (enum dwarf_location_atom) (DW_OP_breg0 + r);
2163 else if (for_eh_or_skip >= 0
2164 && opc >= DW_OP_reg0 && opc <= DW_OP_reg31)
2166 unsigned r = (opc - DW_OP_reg0);
2167 r = DWARF2_FRAME_REG_OUT (r, for_eh_or_skip);
2168 gcc_assert (r <= 31);
2169 opc = (enum dwarf_location_atom) (DW_OP_reg0 + r);
2172 dw2_asm_output_data (1, opc,
2173 "%s", dwarf_stack_op_name (opc));
2175 /* Output the operand(s) (if any). */
2176 output_loc_operands (loc, for_eh_or_skip);
2180 /* Output location description stack opcode's operands (if any).
2181 The output is single bytes on a line, suitable for .cfi_escape. */
2183 static void
2184 output_loc_operands_raw (dw_loc_descr_ref loc)
2186 dw_val_ref val1 = &loc->dw_loc_oprnd1;
2187 dw_val_ref val2 = &loc->dw_loc_oprnd2;
2189 switch (loc->dw_loc_opc)
2191 case DW_OP_addr:
2192 case DW_OP_GNU_addr_index:
2193 case DW_OP_GNU_const_index:
2194 case DW_OP_implicit_value:
2195 /* We cannot output addresses in .cfi_escape, only bytes. */
2196 gcc_unreachable ();
2198 case DW_OP_const1u:
2199 case DW_OP_const1s:
2200 case DW_OP_pick:
2201 case DW_OP_deref_size:
2202 case DW_OP_xderef_size:
2203 fputc (',', asm_out_file);
2204 dw2_asm_output_data_raw (1, val1->v.val_int);
2205 break;
2207 case DW_OP_const2u:
2208 case DW_OP_const2s:
2209 fputc (',', asm_out_file);
2210 dw2_asm_output_data_raw (2, val1->v.val_int);
2211 break;
2213 case DW_OP_const4u:
2214 case DW_OP_const4s:
2215 fputc (',', asm_out_file);
2216 dw2_asm_output_data_raw (4, val1->v.val_int);
2217 break;
2219 case DW_OP_const8u:
2220 case DW_OP_const8s:
2221 gcc_assert (HOST_BITS_PER_WIDE_INT >= 64);
2222 fputc (',', asm_out_file);
2223 dw2_asm_output_data_raw (8, val1->v.val_int);
2224 break;
2226 case DW_OP_skip:
2227 case DW_OP_bra:
2229 int offset;
2231 gcc_assert (val1->val_class == dw_val_class_loc);
2232 offset = val1->v.val_loc->dw_loc_addr - (loc->dw_loc_addr + 3);
2234 fputc (',', asm_out_file);
2235 dw2_asm_output_data_raw (2, offset);
2237 break;
2239 case DW_OP_regx:
2241 unsigned r = DWARF2_FRAME_REG_OUT (val1->v.val_unsigned, 1);
2242 gcc_assert (size_of_uleb128 (r)
2243 == size_of_uleb128 (val1->v.val_unsigned));
2244 fputc (',', asm_out_file);
2245 dw2_asm_output_data_uleb128_raw (r);
2247 break;
2249 case DW_OP_constu:
2250 case DW_OP_plus_uconst:
2251 case DW_OP_piece:
2252 fputc (',', asm_out_file);
2253 dw2_asm_output_data_uleb128_raw (val1->v.val_unsigned);
2254 break;
2256 case DW_OP_bit_piece:
2257 fputc (',', asm_out_file);
2258 dw2_asm_output_data_uleb128_raw (val1->v.val_unsigned);
2259 dw2_asm_output_data_uleb128_raw (val2->v.val_unsigned);
2260 break;
2262 case DW_OP_consts:
2263 case DW_OP_breg0:
2264 case DW_OP_breg1:
2265 case DW_OP_breg2:
2266 case DW_OP_breg3:
2267 case DW_OP_breg4:
2268 case DW_OP_breg5:
2269 case DW_OP_breg6:
2270 case DW_OP_breg7:
2271 case DW_OP_breg8:
2272 case DW_OP_breg9:
2273 case DW_OP_breg10:
2274 case DW_OP_breg11:
2275 case DW_OP_breg12:
2276 case DW_OP_breg13:
2277 case DW_OP_breg14:
2278 case DW_OP_breg15:
2279 case DW_OP_breg16:
2280 case DW_OP_breg17:
2281 case DW_OP_breg18:
2282 case DW_OP_breg19:
2283 case DW_OP_breg20:
2284 case DW_OP_breg21:
2285 case DW_OP_breg22:
2286 case DW_OP_breg23:
2287 case DW_OP_breg24:
2288 case DW_OP_breg25:
2289 case DW_OP_breg26:
2290 case DW_OP_breg27:
2291 case DW_OP_breg28:
2292 case DW_OP_breg29:
2293 case DW_OP_breg30:
2294 case DW_OP_breg31:
2295 case DW_OP_fbreg:
2296 fputc (',', asm_out_file);
2297 dw2_asm_output_data_sleb128_raw (val1->v.val_int);
2298 break;
2300 case DW_OP_bregx:
2302 unsigned r = DWARF2_FRAME_REG_OUT (val1->v.val_unsigned, 1);
2303 gcc_assert (size_of_uleb128 (r)
2304 == size_of_uleb128 (val1->v.val_unsigned));
2305 fputc (',', asm_out_file);
2306 dw2_asm_output_data_uleb128_raw (r);
2307 fputc (',', asm_out_file);
2308 dw2_asm_output_data_sleb128_raw (val2->v.val_int);
2310 break;
2312 case DW_OP_GNU_implicit_pointer:
2313 case DW_OP_GNU_entry_value:
2314 case DW_OP_GNU_const_type:
2315 case DW_OP_GNU_regval_type:
2316 case DW_OP_GNU_deref_type:
2317 case DW_OP_GNU_convert:
2318 case DW_OP_GNU_reinterpret:
2319 case DW_OP_GNU_parameter_ref:
2320 gcc_unreachable ();
2321 break;
2323 default:
2324 /* Other codes have no operands. */
2325 break;
2329 void
2330 output_loc_sequence_raw (dw_loc_descr_ref loc)
2332 while (1)
2334 enum dwarf_location_atom opc = loc->dw_loc_opc;
2335 /* Output the opcode. */
2336 if (opc >= DW_OP_breg0 && opc <= DW_OP_breg31)
2338 unsigned r = (opc - DW_OP_breg0);
2339 r = DWARF2_FRAME_REG_OUT (r, 1);
2340 gcc_assert (r <= 31);
2341 opc = (enum dwarf_location_atom) (DW_OP_breg0 + r);
2343 else if (opc >= DW_OP_reg0 && opc <= DW_OP_reg31)
2345 unsigned r = (opc - DW_OP_reg0);
2346 r = DWARF2_FRAME_REG_OUT (r, 1);
2347 gcc_assert (r <= 31);
2348 opc = (enum dwarf_location_atom) (DW_OP_reg0 + r);
2350 /* Output the opcode. */
2351 fprintf (asm_out_file, "%#x", opc);
2352 output_loc_operands_raw (loc);
2354 if (!loc->dw_loc_next)
2355 break;
2356 loc = loc->dw_loc_next;
2358 fputc (',', asm_out_file);
2362 /* This function builds a dwarf location descriptor sequence from a
2363 dw_cfa_location, adding the given OFFSET to the result of the
2364 expression. */
2366 struct dw_loc_descr_node *
2367 build_cfa_loc (dw_cfa_location *cfa, HOST_WIDE_INT offset)
2369 struct dw_loc_descr_node *head, *tmp;
2371 offset += cfa->offset;
2373 if (cfa->indirect)
2375 head = new_reg_loc_descr (cfa->reg, cfa->base_offset);
2376 head->dw_loc_oprnd1.val_class = dw_val_class_const;
2377 head->dw_loc_oprnd1.val_entry = NULL;
2378 tmp = new_loc_descr (DW_OP_deref, 0, 0);
2379 add_loc_descr (&head, tmp);
2380 if (offset != 0)
2382 tmp = new_loc_descr (DW_OP_plus_uconst, offset, 0);
2383 add_loc_descr (&head, tmp);
2386 else
2387 head = new_reg_loc_descr (cfa->reg, offset);
2389 return head;
2392 /* This function builds a dwarf location descriptor sequence for
2393 the address at OFFSET from the CFA when stack is aligned to
2394 ALIGNMENT byte. */
2396 struct dw_loc_descr_node *
2397 build_cfa_aligned_loc (dw_cfa_location *cfa,
2398 HOST_WIDE_INT offset, HOST_WIDE_INT alignment)
2400 struct dw_loc_descr_node *head;
2401 unsigned int dwarf_fp
2402 = DWARF_FRAME_REGNUM (HARD_FRAME_POINTER_REGNUM);
2404 /* When CFA is defined as FP+OFFSET, emulate stack alignment. */
2405 if (cfa->reg == HARD_FRAME_POINTER_REGNUM && cfa->indirect == 0)
2407 head = new_reg_loc_descr (dwarf_fp, 0);
2408 add_loc_descr (&head, int_loc_descriptor (alignment));
2409 add_loc_descr (&head, new_loc_descr (DW_OP_and, 0, 0));
2410 loc_descr_plus_const (&head, offset);
2412 else
2413 head = new_reg_loc_descr (dwarf_fp, offset);
2414 return head;
2417 /* And now, the support for symbolic debugging information. */
2419 /* .debug_str support. */
2420 static int output_indirect_string (void **, void *);
2422 static void dwarf2out_init (const char *);
2423 static void dwarf2out_finish (const char *);
2424 static void dwarf2out_assembly_start (void);
2425 static void dwarf2out_define (unsigned int, const char *);
2426 static void dwarf2out_undef (unsigned int, const char *);
2427 static void dwarf2out_start_source_file (unsigned, const char *);
2428 static void dwarf2out_end_source_file (unsigned);
2429 static void dwarf2out_function_decl (tree);
2430 static void dwarf2out_begin_block (unsigned, unsigned);
2431 static void dwarf2out_end_block (unsigned, unsigned);
2432 static bool dwarf2out_ignore_block (const_tree);
2433 static void dwarf2out_global_decl (tree);
2434 static void dwarf2out_type_decl (tree, int);
2435 static void dwarf2out_imported_module_or_decl (tree, tree, tree, bool);
2436 static void dwarf2out_imported_module_or_decl_1 (tree, tree, tree,
2437 dw_die_ref);
2438 static void dwarf2out_abstract_function (tree);
2439 static void dwarf2out_var_location (rtx_insn *);
2440 static void dwarf2out_begin_function (tree);
2441 static void dwarf2out_end_function (unsigned int);
2442 static void dwarf2out_set_name (tree, tree);
2444 /* The debug hooks structure. */
2446 const struct gcc_debug_hooks dwarf2_debug_hooks =
2448 dwarf2out_init,
2449 dwarf2out_finish,
2450 dwarf2out_assembly_start,
2451 dwarf2out_define,
2452 dwarf2out_undef,
2453 dwarf2out_start_source_file,
2454 dwarf2out_end_source_file,
2455 dwarf2out_begin_block,
2456 dwarf2out_end_block,
2457 dwarf2out_ignore_block,
2458 dwarf2out_source_line,
2459 dwarf2out_begin_prologue,
2460 #if VMS_DEBUGGING_INFO
2461 dwarf2out_vms_end_prologue,
2462 dwarf2out_vms_begin_epilogue,
2463 #else
2464 debug_nothing_int_charstar,
2465 debug_nothing_int_charstar,
2466 #endif
2467 dwarf2out_end_epilogue,
2468 dwarf2out_begin_function,
2469 dwarf2out_end_function, /* end_function */
2470 dwarf2out_function_decl, /* function_decl */
2471 dwarf2out_global_decl,
2472 dwarf2out_type_decl, /* type_decl */
2473 dwarf2out_imported_module_or_decl,
2474 debug_nothing_tree, /* deferred_inline_function */
2475 /* The DWARF 2 backend tries to reduce debugging bloat by not
2476 emitting the abstract description of inline functions until
2477 something tries to reference them. */
2478 dwarf2out_abstract_function, /* outlining_inline_function */
2479 debug_nothing_rtx_code_label, /* label */
2480 debug_nothing_int, /* handle_pch */
2481 dwarf2out_var_location,
2482 dwarf2out_switch_text_section,
2483 dwarf2out_set_name,
2484 1, /* start_end_main_source_file */
2485 TYPE_SYMTAB_IS_DIE /* tree_type_symtab_field */
2488 /* NOTE: In the comments in this file, many references are made to
2489 "Debugging Information Entries". This term is abbreviated as `DIE'
2490 throughout the remainder of this file. */
2492 /* An internal representation of the DWARF output is built, and then
2493 walked to generate the DWARF debugging info. The walk of the internal
2494 representation is done after the entire program has been compiled.
2495 The types below are used to describe the internal representation. */
2497 /* Whether to put type DIEs into their own section .debug_types instead
2498 of making them part of the .debug_info section. Only supported for
2499 Dwarf V4 or higher and the user didn't disable them through
2500 -fno-debug-types-section. It is more efficient to put them in a
2501 separate comdat sections since the linker will then be able to
2502 remove duplicates. But not all tools support .debug_types sections
2503 yet. */
2505 #define use_debug_types (dwarf_version >= 4 && flag_debug_types_section)
2507 /* Various DIE's use offsets relative to the beginning of the
2508 .debug_info section to refer to each other. */
2510 typedef long int dw_offset;
2512 /* Define typedefs here to avoid circular dependencies. */
2514 typedef struct dw_attr_struct *dw_attr_ref;
2515 typedef struct dw_line_info_struct *dw_line_info_ref;
2516 typedef struct pubname_struct *pubname_ref;
2517 typedef struct dw_ranges_struct *dw_ranges_ref;
2518 typedef struct dw_ranges_by_label_struct *dw_ranges_by_label_ref;
2519 typedef struct comdat_type_struct *comdat_type_node_ref;
2521 /* The entries in the line_info table more-or-less mirror the opcodes
2522 that are used in the real dwarf line table. Arrays of these entries
2523 are collected per section when DWARF2_ASM_LINE_DEBUG_INFO is not
2524 supported. */
2526 enum dw_line_info_opcode {
2527 /* Emit DW_LNE_set_address; the operand is the label index. */
2528 LI_set_address,
2530 /* Emit a row to the matrix with the given line. This may be done
2531 via any combination of DW_LNS_copy, DW_LNS_advance_line, and
2532 special opcodes. */
2533 LI_set_line,
2535 /* Emit a DW_LNS_set_file. */
2536 LI_set_file,
2538 /* Emit a DW_LNS_set_column. */
2539 LI_set_column,
2541 /* Emit a DW_LNS_negate_stmt; the operand is ignored. */
2542 LI_negate_stmt,
2544 /* Emit a DW_LNS_set_prologue_end/epilogue_begin; the operand is ignored. */
2545 LI_set_prologue_end,
2546 LI_set_epilogue_begin,
2548 /* Emit a DW_LNE_set_discriminator. */
2549 LI_set_discriminator
2552 typedef struct GTY(()) dw_line_info_struct {
2553 enum dw_line_info_opcode opcode;
2554 unsigned int val;
2555 } dw_line_info_entry;
2558 typedef struct GTY(()) dw_line_info_table_struct {
2559 /* The label that marks the end of this section. */
2560 const char *end_label;
2562 /* The values for the last row of the matrix, as collected in the table.
2563 These are used to minimize the changes to the next row. */
2564 unsigned int file_num;
2565 unsigned int line_num;
2566 unsigned int column_num;
2567 int discrim_num;
2568 bool is_stmt;
2569 bool in_use;
2571 vec<dw_line_info_entry, va_gc> *entries;
2572 } dw_line_info_table;
2574 typedef dw_line_info_table *dw_line_info_table_p;
2577 /* Each DIE attribute has a field specifying the attribute kind,
2578 a link to the next attribute in the chain, and an attribute value.
2579 Attributes are typically linked below the DIE they modify. */
2581 typedef struct GTY(()) dw_attr_struct {
2582 enum dwarf_attribute dw_attr;
2583 dw_val_node dw_attr_val;
2585 dw_attr_node;
2588 /* The Debugging Information Entry (DIE) structure. DIEs form a tree.
2589 The children of each node form a circular list linked by
2590 die_sib. die_child points to the node *before* the "first" child node. */
2592 typedef struct GTY((chain_circular ("%h.die_sib"))) die_struct {
2593 union die_symbol_or_type_node
2595 const char * GTY ((tag ("0"))) die_symbol;
2596 comdat_type_node_ref GTY ((tag ("1"))) die_type_node;
2598 GTY ((desc ("%0.comdat_type_p"))) die_id;
2599 vec<dw_attr_node, va_gc> *die_attr;
2600 dw_die_ref die_parent;
2601 dw_die_ref die_child;
2602 dw_die_ref die_sib;
2603 dw_die_ref die_definition; /* ref from a specification to its definition */
2604 dw_offset die_offset;
2605 unsigned long die_abbrev;
2606 int die_mark;
2607 unsigned int decl_id;
2608 enum dwarf_tag die_tag;
2609 /* Die is used and must not be pruned as unused. */
2610 BOOL_BITFIELD die_perennial_p : 1;
2611 BOOL_BITFIELD comdat_type_p : 1; /* DIE has a type signature */
2612 /* Lots of spare bits. */
2614 die_node;
2616 /* Evaluate 'expr' while 'c' is set to each child of DIE in order. */
2617 #define FOR_EACH_CHILD(die, c, expr) do { \
2618 c = die->die_child; \
2619 if (c) do { \
2620 c = c->die_sib; \
2621 expr; \
2622 } while (c != die->die_child); \
2623 } while (0)
2625 /* The pubname structure */
2627 typedef struct GTY(()) pubname_struct {
2628 dw_die_ref die;
2629 const char *name;
2631 pubname_entry;
2634 struct GTY(()) dw_ranges_struct {
2635 /* If this is positive, it's a block number, otherwise it's a
2636 bitwise-negated index into dw_ranges_by_label. */
2637 int num;
2640 /* A structure to hold a macinfo entry. */
2642 typedef struct GTY(()) macinfo_struct {
2643 unsigned char code;
2644 unsigned HOST_WIDE_INT lineno;
2645 const char *info;
2647 macinfo_entry;
2650 struct GTY(()) dw_ranges_by_label_struct {
2651 const char *begin;
2652 const char *end;
2655 /* The comdat type node structure. */
2656 typedef struct GTY(()) comdat_type_struct
2658 dw_die_ref root_die;
2659 dw_die_ref type_die;
2660 dw_die_ref skeleton_die;
2661 char signature[DWARF_TYPE_SIGNATURE_SIZE];
2662 struct comdat_type_struct *next;
2664 comdat_type_node;
2666 /* The limbo die list structure. */
2667 typedef struct GTY(()) limbo_die_struct {
2668 dw_die_ref die;
2669 tree created_for;
2670 struct limbo_die_struct *next;
2672 limbo_die_node;
2674 typedef struct skeleton_chain_struct
2676 dw_die_ref old_die;
2677 dw_die_ref new_die;
2678 struct skeleton_chain_struct *parent;
2680 skeleton_chain_node;
2682 /* Define a macro which returns nonzero for a TYPE_DECL which was
2683 implicitly generated for a type.
2685 Note that, unlike the C front-end (which generates a NULL named
2686 TYPE_DECL node for each complete tagged type, each array type,
2687 and each function type node created) the C++ front-end generates
2688 a _named_ TYPE_DECL node for each tagged type node created.
2689 These TYPE_DECLs have DECL_ARTIFICIAL set, so we know not to
2690 generate a DW_TAG_typedef DIE for them. Likewise with the Ada
2691 front-end, but for each type, tagged or not. */
2693 #define TYPE_DECL_IS_STUB(decl) \
2694 (DECL_NAME (decl) == NULL_TREE \
2695 || (DECL_ARTIFICIAL (decl) \
2696 && ((decl == TYPE_STUB_DECL (TREE_TYPE (decl))) \
2697 /* This is necessary for stub decls that \
2698 appear in nested inline functions. */ \
2699 || (DECL_ABSTRACT_ORIGIN (decl) != NULL_TREE \
2700 && (decl_ultimate_origin (decl) \
2701 == TYPE_STUB_DECL (TREE_TYPE (decl)))))))
2703 /* Information concerning the compilation unit's programming
2704 language, and compiler version. */
2706 /* Fixed size portion of the DWARF compilation unit header. */
2707 #define DWARF_COMPILE_UNIT_HEADER_SIZE \
2708 (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 3)
2710 /* Fixed size portion of the DWARF comdat type unit header. */
2711 #define DWARF_COMDAT_TYPE_UNIT_HEADER_SIZE \
2712 (DWARF_COMPILE_UNIT_HEADER_SIZE + DWARF_TYPE_SIGNATURE_SIZE \
2713 + DWARF_OFFSET_SIZE)
2715 /* Fixed size portion of public names info. */
2716 #define DWARF_PUBNAMES_HEADER_SIZE (2 * DWARF_OFFSET_SIZE + 2)
2718 /* Fixed size portion of the address range info. */
2719 #define DWARF_ARANGES_HEADER_SIZE \
2720 (DWARF_ROUND (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 4, \
2721 DWARF2_ADDR_SIZE * 2) \
2722 - DWARF_INITIAL_LENGTH_SIZE)
2724 /* Size of padding portion in the address range info. It must be
2725 aligned to twice the pointer size. */
2726 #define DWARF_ARANGES_PAD_SIZE \
2727 (DWARF_ROUND (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 4, \
2728 DWARF2_ADDR_SIZE * 2) \
2729 - (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 4))
2731 /* Use assembler line directives if available. */
2732 #ifndef DWARF2_ASM_LINE_DEBUG_INFO
2733 #ifdef HAVE_AS_DWARF2_DEBUG_LINE
2734 #define DWARF2_ASM_LINE_DEBUG_INFO 1
2735 #else
2736 #define DWARF2_ASM_LINE_DEBUG_INFO 0
2737 #endif
2738 #endif
2740 /* Minimum line offset in a special line info. opcode.
2741 This value was chosen to give a reasonable range of values. */
2742 #define DWARF_LINE_BASE -10
2744 /* First special line opcode - leave room for the standard opcodes. */
2745 #define DWARF_LINE_OPCODE_BASE ((int)DW_LNS_set_isa + 1)
2747 /* Range of line offsets in a special line info. opcode. */
2748 #define DWARF_LINE_RANGE (254-DWARF_LINE_OPCODE_BASE+1)
2750 /* Flag that indicates the initial value of the is_stmt_start flag.
2751 In the present implementation, we do not mark any lines as
2752 the beginning of a source statement, because that information
2753 is not made available by the GCC front-end. */
2754 #define DWARF_LINE_DEFAULT_IS_STMT_START 1
2756 /* Maximum number of operations per instruction bundle. */
2757 #ifndef DWARF_LINE_DEFAULT_MAX_OPS_PER_INSN
2758 #define DWARF_LINE_DEFAULT_MAX_OPS_PER_INSN 1
2759 #endif
2761 /* This location is used by calc_die_sizes() to keep track
2762 the offset of each DIE within the .debug_info section. */
2763 static unsigned long next_die_offset;
2765 /* Record the root of the DIE's built for the current compilation unit. */
2766 static GTY(()) dw_die_ref single_comp_unit_die;
2768 /* A list of type DIEs that have been separated into comdat sections. */
2769 static GTY(()) comdat_type_node *comdat_type_list;
2771 /* A list of DIEs with a NULL parent waiting to be relocated. */
2772 static GTY(()) limbo_die_node *limbo_die_list;
2774 /* A list of DIEs for which we may have to generate
2775 DW_AT_{,MIPS_}linkage_name once their DECL_ASSEMBLER_NAMEs are set. */
2776 static GTY(()) limbo_die_node *deferred_asm_name;
2778 /* Filenames referenced by this compilation unit. */
2779 static GTY((param_is (struct dwarf_file_data))) htab_t file_table;
2781 /* A hash table of references to DIE's that describe declarations.
2782 The key is a DECL_UID() which is a unique number identifying each decl. */
2783 static GTY ((param_is (struct die_struct))) htab_t decl_die_table;
2785 /* A hash table of references to DIE's that describe COMMON blocks.
2786 The key is DECL_UID() ^ die_parent. */
2787 static GTY ((param_is (struct die_struct))) htab_t common_block_die_table;
2789 typedef struct GTY(()) die_arg_entry_struct {
2790 dw_die_ref die;
2791 tree arg;
2792 } die_arg_entry;
2795 /* Node of the variable location list. */
2796 struct GTY ((chain_next ("%h.next"))) var_loc_node {
2797 /* Either NOTE_INSN_VAR_LOCATION, or, for SRA optimized variables,
2798 EXPR_LIST chain. For small bitsizes, bitsize is encoded
2799 in mode of the EXPR_LIST node and first EXPR_LIST operand
2800 is either NOTE_INSN_VAR_LOCATION for a piece with a known
2801 location or NULL for padding. For larger bitsizes,
2802 mode is 0 and first operand is a CONCAT with bitsize
2803 as first CONCAT operand and NOTE_INSN_VAR_LOCATION resp.
2804 NULL as second operand. */
2805 rtx GTY (()) loc;
2806 const char * GTY (()) label;
2807 struct var_loc_node * GTY (()) next;
2810 /* Variable location list. */
2811 struct GTY (()) var_loc_list_def {
2812 struct var_loc_node * GTY (()) first;
2814 /* Pointer to the last but one or last element of the
2815 chained list. If the list is empty, both first and
2816 last are NULL, if the list contains just one node
2817 or the last node certainly is not redundant, it points
2818 to the last node, otherwise points to the last but one.
2819 Do not mark it for GC because it is marked through the chain. */
2820 struct var_loc_node * GTY ((skip ("%h"))) last;
2822 /* Pointer to the last element before section switch,
2823 if NULL, either sections weren't switched or first
2824 is after section switch. */
2825 struct var_loc_node * GTY ((skip ("%h"))) last_before_switch;
2827 /* DECL_UID of the variable decl. */
2828 unsigned int decl_id;
2830 typedef struct var_loc_list_def var_loc_list;
2832 /* Call argument location list. */
2833 struct GTY ((chain_next ("%h.next"))) call_arg_loc_node {
2834 rtx GTY (()) call_arg_loc_note;
2835 const char * GTY (()) label;
2836 tree GTY (()) block;
2837 bool tail_call_p;
2838 rtx GTY (()) symbol_ref;
2839 struct call_arg_loc_node * GTY (()) next;
2843 /* Table of decl location linked lists. */
2844 static GTY ((param_is (var_loc_list))) htab_t decl_loc_table;
2846 /* Head and tail of call_arg_loc chain. */
2847 static GTY (()) struct call_arg_loc_node *call_arg_locations;
2848 static struct call_arg_loc_node *call_arg_loc_last;
2850 /* Number of call sites in the current function. */
2851 static int call_site_count = -1;
2852 /* Number of tail call sites in the current function. */
2853 static int tail_call_site_count = -1;
2855 /* Vector mapping block numbers to DW_TAG_{lexical_block,inlined_subroutine}
2856 DIEs. */
2857 static vec<dw_die_ref> block_map;
2859 /* A cached location list. */
2860 struct GTY (()) cached_dw_loc_list_def {
2861 /* The DECL_UID of the decl that this entry describes. */
2862 unsigned int decl_id;
2864 /* The cached location list. */
2865 dw_loc_list_ref loc_list;
2867 typedef struct cached_dw_loc_list_def cached_dw_loc_list;
2869 /* Table of cached location lists. */
2870 static GTY ((param_is (cached_dw_loc_list))) htab_t cached_dw_loc_list_table;
2872 /* A pointer to the base of a list of references to DIE's that
2873 are uniquely identified by their tag, presence/absence of
2874 children DIE's, and list of attribute/value pairs. */
2875 static GTY((length ("abbrev_die_table_allocated")))
2876 dw_die_ref *abbrev_die_table;
2878 /* Number of elements currently allocated for abbrev_die_table. */
2879 static GTY(()) unsigned abbrev_die_table_allocated;
2881 /* Number of elements in type_die_table currently in use. */
2882 static GTY(()) unsigned abbrev_die_table_in_use;
2884 /* Size (in elements) of increments by which we may expand the
2885 abbrev_die_table. */
2886 #define ABBREV_DIE_TABLE_INCREMENT 256
2888 /* A global counter for generating labels for line number data. */
2889 static unsigned int line_info_label_num;
2891 /* The current table to which we should emit line number information
2892 for the current function. This will be set up at the beginning of
2893 assembly for the function. */
2894 static dw_line_info_table *cur_line_info_table;
2896 /* The two default tables of line number info. */
2897 static GTY(()) dw_line_info_table *text_section_line_info;
2898 static GTY(()) dw_line_info_table *cold_text_section_line_info;
2900 /* The set of all non-default tables of line number info. */
2901 static GTY(()) vec<dw_line_info_table_p, va_gc> *separate_line_info;
2903 /* A flag to tell pubnames/types export if there is an info section to
2904 refer to. */
2905 static bool info_section_emitted;
2907 /* A pointer to the base of a table that contains a list of publicly
2908 accessible names. */
2909 static GTY (()) vec<pubname_entry, va_gc> *pubname_table;
2911 /* A pointer to the base of a table that contains a list of publicly
2912 accessible types. */
2913 static GTY (()) vec<pubname_entry, va_gc> *pubtype_table;
2915 /* A pointer to the base of a table that contains a list of macro
2916 defines/undefines (and file start/end markers). */
2917 static GTY (()) vec<macinfo_entry, va_gc> *macinfo_table;
2919 /* True if .debug_macinfo or .debug_macros section is going to be
2920 emitted. */
2921 #define have_macinfo \
2922 (debug_info_level >= DINFO_LEVEL_VERBOSE \
2923 && !macinfo_table->is_empty ())
2925 /* Array of dies for which we should generate .debug_ranges info. */
2926 static GTY ((length ("ranges_table_allocated"))) dw_ranges_ref ranges_table;
2928 /* Number of elements currently allocated for ranges_table. */
2929 static GTY(()) unsigned ranges_table_allocated;
2931 /* Number of elements in ranges_table currently in use. */
2932 static GTY(()) unsigned ranges_table_in_use;
2934 /* Array of pairs of labels referenced in ranges_table. */
2935 static GTY ((length ("ranges_by_label_allocated")))
2936 dw_ranges_by_label_ref ranges_by_label;
2938 /* Number of elements currently allocated for ranges_by_label. */
2939 static GTY(()) unsigned ranges_by_label_allocated;
2941 /* Number of elements in ranges_by_label currently in use. */
2942 static GTY(()) unsigned ranges_by_label_in_use;
2944 /* Size (in elements) of increments by which we may expand the
2945 ranges_table. */
2946 #define RANGES_TABLE_INCREMENT 64
2948 /* Whether we have location lists that need outputting */
2949 static GTY(()) bool have_location_lists;
2951 /* Unique label counter. */
2952 static GTY(()) unsigned int loclabel_num;
2954 /* Unique label counter for point-of-call tables. */
2955 static GTY(()) unsigned int poc_label_num;
2957 /* Record whether the function being analyzed contains inlined functions. */
2958 static int current_function_has_inlines;
2960 /* The last file entry emitted by maybe_emit_file(). */
2961 static GTY(()) struct dwarf_file_data * last_emitted_file;
2963 /* Number of internal labels generated by gen_internal_sym(). */
2964 static GTY(()) int label_num;
2966 /* Cached result of previous call to lookup_filename. */
2967 static GTY(()) struct dwarf_file_data * file_table_last_lookup;
2969 static GTY(()) vec<die_arg_entry, va_gc> *tmpl_value_parm_die_table;
2971 /* Instances of generic types for which we need to generate debug
2972 info that describe their generic parameters and arguments. That
2973 generation needs to happen once all types are properly laid out so
2974 we do it at the end of compilation. */
2975 static GTY(()) vec<tree, va_gc> *generic_type_instances;
2977 /* Offset from the "steady-state frame pointer" to the frame base,
2978 within the current function. */
2979 static HOST_WIDE_INT frame_pointer_fb_offset;
2980 static bool frame_pointer_fb_offset_valid;
2982 static vec<dw_die_ref> base_types;
2984 /* Forward declarations for functions defined in this file. */
2986 static int is_pseudo_reg (const_rtx);
2987 static tree type_main_variant (tree);
2988 static int is_tagged_type (const_tree);
2989 static const char *dwarf_tag_name (unsigned);
2990 static const char *dwarf_attr_name (unsigned);
2991 static const char *dwarf_form_name (unsigned);
2992 static tree decl_ultimate_origin (const_tree);
2993 static tree decl_class_context (tree);
2994 static void add_dwarf_attr (dw_die_ref, dw_attr_ref);
2995 static inline enum dw_val_class AT_class (dw_attr_ref);
2996 static inline unsigned int AT_index (dw_attr_ref);
2997 static void add_AT_flag (dw_die_ref, enum dwarf_attribute, unsigned);
2998 static inline unsigned AT_flag (dw_attr_ref);
2999 static void add_AT_int (dw_die_ref, enum dwarf_attribute, HOST_WIDE_INT);
3000 static inline HOST_WIDE_INT AT_int (dw_attr_ref);
3001 static void add_AT_unsigned (dw_die_ref, enum dwarf_attribute, unsigned HOST_WIDE_INT);
3002 static inline unsigned HOST_WIDE_INT AT_unsigned (dw_attr_ref);
3003 static void add_AT_double (dw_die_ref, enum dwarf_attribute,
3004 HOST_WIDE_INT, unsigned HOST_WIDE_INT);
3005 static inline void add_AT_vec (dw_die_ref, enum dwarf_attribute, unsigned int,
3006 unsigned int, unsigned char *);
3007 static void add_AT_data8 (dw_die_ref, enum dwarf_attribute, unsigned char *);
3008 static hashval_t debug_str_do_hash (const void *);
3009 static int debug_str_eq (const void *, const void *);
3010 static void add_AT_string (dw_die_ref, enum dwarf_attribute, const char *);
3011 static inline const char *AT_string (dw_attr_ref);
3012 static enum dwarf_form AT_string_form (dw_attr_ref);
3013 static void add_AT_die_ref (dw_die_ref, enum dwarf_attribute, dw_die_ref);
3014 static void add_AT_specification (dw_die_ref, dw_die_ref);
3015 static inline dw_die_ref AT_ref (dw_attr_ref);
3016 static inline int AT_ref_external (dw_attr_ref);
3017 static inline void set_AT_ref_external (dw_attr_ref, int);
3018 static void add_AT_fde_ref (dw_die_ref, enum dwarf_attribute, unsigned);
3019 static void add_AT_loc (dw_die_ref, enum dwarf_attribute, dw_loc_descr_ref);
3020 static inline dw_loc_descr_ref AT_loc (dw_attr_ref);
3021 static void add_AT_loc_list (dw_die_ref, enum dwarf_attribute,
3022 dw_loc_list_ref);
3023 static inline dw_loc_list_ref AT_loc_list (dw_attr_ref);
3024 static addr_table_entry *add_addr_table_entry (void *, enum ate_kind);
3025 static void remove_addr_table_entry (addr_table_entry *);
3026 static void add_AT_addr (dw_die_ref, enum dwarf_attribute, rtx, bool);
3027 static inline rtx AT_addr (dw_attr_ref);
3028 static void add_AT_lbl_id (dw_die_ref, enum dwarf_attribute, const char *);
3029 static void add_AT_lineptr (dw_die_ref, enum dwarf_attribute, const char *);
3030 static void add_AT_macptr (dw_die_ref, enum dwarf_attribute, const char *);
3031 static void add_AT_offset (dw_die_ref, enum dwarf_attribute,
3032 unsigned HOST_WIDE_INT);
3033 static void add_AT_range_list (dw_die_ref, enum dwarf_attribute,
3034 unsigned long, bool);
3035 static inline const char *AT_lbl (dw_attr_ref);
3036 static dw_attr_ref get_AT (dw_die_ref, enum dwarf_attribute);
3037 static const char *get_AT_low_pc (dw_die_ref);
3038 static const char *get_AT_hi_pc (dw_die_ref);
3039 static const char *get_AT_string (dw_die_ref, enum dwarf_attribute);
3040 static int get_AT_flag (dw_die_ref, enum dwarf_attribute);
3041 static unsigned get_AT_unsigned (dw_die_ref, enum dwarf_attribute);
3042 static inline dw_die_ref get_AT_ref (dw_die_ref, enum dwarf_attribute);
3043 static bool is_cxx (void);
3044 static bool is_fortran (void);
3045 static bool is_ada (void);
3046 static void remove_AT (dw_die_ref, enum dwarf_attribute);
3047 static void remove_child_TAG (dw_die_ref, enum dwarf_tag);
3048 static void add_child_die (dw_die_ref, dw_die_ref);
3049 static dw_die_ref new_die (enum dwarf_tag, dw_die_ref, tree);
3050 static dw_die_ref lookup_type_die (tree);
3051 static dw_die_ref strip_naming_typedef (tree, dw_die_ref);
3052 static dw_die_ref lookup_type_die_strip_naming_typedef (tree);
3053 static void equate_type_number_to_die (tree, dw_die_ref);
3054 static hashval_t decl_die_table_hash (const void *);
3055 static int decl_die_table_eq (const void *, const void *);
3056 static dw_die_ref lookup_decl_die (tree);
3057 static hashval_t common_block_die_table_hash (const void *);
3058 static int common_block_die_table_eq (const void *, const void *);
3059 static hashval_t decl_loc_table_hash (const void *);
3060 static int decl_loc_table_eq (const void *, const void *);
3061 static var_loc_list *lookup_decl_loc (const_tree);
3062 static void equate_decl_number_to_die (tree, dw_die_ref);
3063 static struct var_loc_node *add_var_loc_to_decl (tree, rtx, const char *);
3064 static void print_spaces (FILE *);
3065 static void print_die (dw_die_ref, FILE *);
3066 static dw_die_ref push_new_compile_unit (dw_die_ref, dw_die_ref);
3067 static dw_die_ref pop_compile_unit (dw_die_ref);
3068 static void loc_checksum (dw_loc_descr_ref, struct md5_ctx *);
3069 static void attr_checksum (dw_attr_ref, struct md5_ctx *, int *);
3070 static void die_checksum (dw_die_ref, struct md5_ctx *, int *);
3071 static void checksum_sleb128 (HOST_WIDE_INT, struct md5_ctx *);
3072 static void checksum_uleb128 (unsigned HOST_WIDE_INT, struct md5_ctx *);
3073 static void loc_checksum_ordered (dw_loc_descr_ref, struct md5_ctx *);
3074 static void attr_checksum_ordered (enum dwarf_tag, dw_attr_ref,
3075 struct md5_ctx *, int *);
3076 struct checksum_attributes;
3077 static void collect_checksum_attributes (struct checksum_attributes *, dw_die_ref);
3078 static void die_checksum_ordered (dw_die_ref, struct md5_ctx *, int *);
3079 static void checksum_die_context (dw_die_ref, struct md5_ctx *);
3080 static void generate_type_signature (dw_die_ref, comdat_type_node *);
3081 static int same_loc_p (dw_loc_descr_ref, dw_loc_descr_ref, int *);
3082 static int same_dw_val_p (const dw_val_node *, const dw_val_node *, int *);
3083 static int same_attr_p (dw_attr_ref, dw_attr_ref, int *);
3084 static int same_die_p (dw_die_ref, dw_die_ref, int *);
3085 static int same_die_p_wrap (dw_die_ref, dw_die_ref);
3086 static void compute_section_prefix (dw_die_ref);
3087 static int is_type_die (dw_die_ref);
3088 static int is_comdat_die (dw_die_ref);
3089 static int is_symbol_die (dw_die_ref);
3090 static inline bool is_template_instantiation (dw_die_ref);
3091 static void assign_symbol_names (dw_die_ref);
3092 static void break_out_includes (dw_die_ref);
3093 static int is_declaration_die (dw_die_ref);
3094 static int should_move_die_to_comdat (dw_die_ref);
3095 static dw_die_ref clone_as_declaration (dw_die_ref);
3096 static dw_die_ref clone_die (dw_die_ref);
3097 static dw_die_ref clone_tree (dw_die_ref);
3098 static dw_die_ref copy_declaration_context (dw_die_ref, dw_die_ref);
3099 static void generate_skeleton_ancestor_tree (skeleton_chain_node *);
3100 static void generate_skeleton_bottom_up (skeleton_chain_node *);
3101 static dw_die_ref generate_skeleton (dw_die_ref);
3102 static dw_die_ref remove_child_or_replace_with_skeleton (dw_die_ref,
3103 dw_die_ref,
3104 dw_die_ref);
3105 static void break_out_comdat_types (dw_die_ref);
3106 static void copy_decls_for_unworthy_types (dw_die_ref);
3108 static void add_sibling_attributes (dw_die_ref);
3109 static void output_location_lists (dw_die_ref);
3110 static int constant_size (unsigned HOST_WIDE_INT);
3111 static unsigned long size_of_die (dw_die_ref);
3112 static void calc_die_sizes (dw_die_ref);
3113 static void calc_base_type_die_sizes (void);
3114 static void mark_dies (dw_die_ref);
3115 static void unmark_dies (dw_die_ref);
3116 static void unmark_all_dies (dw_die_ref);
3117 static unsigned long size_of_pubnames (vec<pubname_entry, va_gc> *);
3118 static unsigned long size_of_aranges (void);
3119 static enum dwarf_form value_format (dw_attr_ref);
3120 static void output_value_format (dw_attr_ref);
3121 static void output_abbrev_section (void);
3122 static void output_die_abbrevs (unsigned long, dw_die_ref);
3123 static void output_die_symbol (dw_die_ref);
3124 static void output_die (dw_die_ref);
3125 static void output_compilation_unit_header (void);
3126 static void output_comp_unit (dw_die_ref, int);
3127 static void output_comdat_type_unit (comdat_type_node *);
3128 static const char *dwarf2_name (tree, int);
3129 static void add_pubname (tree, dw_die_ref);
3130 static void add_enumerator_pubname (const char *, dw_die_ref);
3131 static void add_pubname_string (const char *, dw_die_ref);
3132 static void add_pubtype (tree, dw_die_ref);
3133 static void output_pubnames (vec<pubname_entry, va_gc> *);
3134 static void output_aranges (unsigned long);
3135 static unsigned int add_ranges_num (int);
3136 static unsigned int add_ranges (const_tree);
3137 static void add_ranges_by_labels (dw_die_ref, const char *, const char *,
3138 bool *, bool);
3139 static void output_ranges (void);
3140 static dw_line_info_table *new_line_info_table (void);
3141 static void output_line_info (bool);
3142 static void output_file_names (void);
3143 static dw_die_ref base_type_die (tree);
3144 static int is_base_type (tree);
3145 static dw_die_ref subrange_type_die (tree, tree, tree, dw_die_ref);
3146 static int decl_quals (const_tree);
3147 static dw_die_ref modified_type_die (tree, int, dw_die_ref);
3148 static dw_die_ref generic_parameter_die (tree, tree, bool, dw_die_ref);
3149 static dw_die_ref template_parameter_pack_die (tree, tree, dw_die_ref);
3150 static int type_is_enum (const_tree);
3151 static unsigned int dbx_reg_number (const_rtx);
3152 static void add_loc_descr_op_piece (dw_loc_descr_ref *, int);
3153 static dw_loc_descr_ref reg_loc_descriptor (rtx, enum var_init_status);
3154 static dw_loc_descr_ref one_reg_loc_descriptor (unsigned int,
3155 enum var_init_status);
3156 static dw_loc_descr_ref multiple_reg_loc_descriptor (rtx, rtx,
3157 enum var_init_status);
3158 static dw_loc_descr_ref based_loc_descr (rtx, HOST_WIDE_INT,
3159 enum var_init_status);
3160 static int is_based_loc (const_rtx);
3161 static bool resolve_one_addr (rtx *);
3162 static dw_loc_descr_ref concat_loc_descriptor (rtx, rtx,
3163 enum var_init_status);
3164 static dw_loc_descr_ref loc_descriptor (rtx, enum machine_mode mode,
3165 enum var_init_status);
3166 static dw_loc_list_ref loc_list_from_tree (tree, int);
3167 static dw_loc_descr_ref loc_descriptor_from_tree (tree, int);
3168 static HOST_WIDE_INT ceiling (HOST_WIDE_INT, unsigned int);
3169 static tree field_type (const_tree);
3170 static unsigned int simple_type_align_in_bits (const_tree);
3171 static unsigned int simple_decl_align_in_bits (const_tree);
3172 static unsigned HOST_WIDE_INT simple_type_size_in_bits (const_tree);
3173 static HOST_WIDE_INT field_byte_offset (const_tree);
3174 static void add_AT_location_description (dw_die_ref, enum dwarf_attribute,
3175 dw_loc_list_ref);
3176 static void add_data_member_location_attribute (dw_die_ref, tree);
3177 static bool add_const_value_attribute (dw_die_ref, rtx);
3178 static void insert_int (HOST_WIDE_INT, unsigned, unsigned char *);
3179 static void insert_wide_int (const wide_int &, unsigned char *, int);
3180 static void insert_float (const_rtx, unsigned char *);
3181 static rtx rtl_for_decl_location (tree);
3182 static bool add_location_or_const_value_attribute (dw_die_ref, tree, bool,
3183 enum dwarf_attribute);
3184 static bool tree_add_const_value_attribute (dw_die_ref, tree);
3185 static bool tree_add_const_value_attribute_for_decl (dw_die_ref, tree);
3186 static void add_name_attribute (dw_die_ref, const char *);
3187 static void add_gnat_descriptive_type_attribute (dw_die_ref, tree, dw_die_ref);
3188 static void add_comp_dir_attribute (dw_die_ref);
3189 static void add_bound_info (dw_die_ref, enum dwarf_attribute, tree);
3190 static void add_subscript_info (dw_die_ref, tree, bool);
3191 static void add_byte_size_attribute (dw_die_ref, tree);
3192 static void add_bit_offset_attribute (dw_die_ref, tree);
3193 static void add_bit_size_attribute (dw_die_ref, tree);
3194 static void add_prototyped_attribute (dw_die_ref, tree);
3195 static dw_die_ref add_abstract_origin_attribute (dw_die_ref, tree);
3196 static void add_pure_or_virtual_attribute (dw_die_ref, tree);
3197 static void add_src_coords_attributes (dw_die_ref, tree);
3198 static void add_name_and_src_coords_attributes (dw_die_ref, tree);
3199 static void push_decl_scope (tree);
3200 static void pop_decl_scope (void);
3201 static dw_die_ref scope_die_for (tree, dw_die_ref);
3202 static inline int local_scope_p (dw_die_ref);
3203 static inline int class_scope_p (dw_die_ref);
3204 static inline int class_or_namespace_scope_p (dw_die_ref);
3205 static void add_type_attribute (dw_die_ref, tree, int, dw_die_ref);
3206 static void add_calling_convention_attribute (dw_die_ref, tree);
3207 static const char *type_tag (const_tree);
3208 static tree member_declared_type (const_tree);
3209 #if 0
3210 static const char *decl_start_label (tree);
3211 #endif
3212 static void gen_array_type_die (tree, dw_die_ref);
3213 static void gen_descr_array_type_die (tree, struct array_descr_info *, dw_die_ref);
3214 #if 0
3215 static void gen_entry_point_die (tree, dw_die_ref);
3216 #endif
3217 static dw_die_ref gen_enumeration_type_die (tree, dw_die_ref);
3218 static dw_die_ref gen_formal_parameter_die (tree, tree, bool, dw_die_ref);
3219 static dw_die_ref gen_formal_parameter_pack_die (tree, tree, dw_die_ref, tree*);
3220 static void gen_unspecified_parameters_die (tree, dw_die_ref);
3221 static void gen_formal_types_die (tree, dw_die_ref);
3222 static void gen_subprogram_die (tree, dw_die_ref);
3223 static void gen_variable_die (tree, tree, dw_die_ref);
3224 static void gen_const_die (tree, dw_die_ref);
3225 static void gen_label_die (tree, dw_die_ref);
3226 static void gen_lexical_block_die (tree, dw_die_ref, int);
3227 static void gen_inlined_subroutine_die (tree, dw_die_ref, int);
3228 static void gen_field_die (tree, dw_die_ref);
3229 static void gen_ptr_to_mbr_type_die (tree, dw_die_ref);
3230 static dw_die_ref gen_compile_unit_die (const char *);
3231 static void gen_inheritance_die (tree, tree, dw_die_ref);
3232 static void gen_member_die (tree, dw_die_ref);
3233 static void gen_struct_or_union_type_die (tree, dw_die_ref,
3234 enum debug_info_usage);
3235 static void gen_subroutine_type_die (tree, dw_die_ref);
3236 static void gen_typedef_die (tree, dw_die_ref);
3237 static void gen_type_die (tree, dw_die_ref);
3238 static void gen_block_die (tree, dw_die_ref, int);
3239 static void decls_for_scope (tree, dw_die_ref, int);
3240 static inline int is_redundant_typedef (const_tree);
3241 static bool is_naming_typedef_decl (const_tree);
3242 static inline dw_die_ref get_context_die (tree);
3243 static void gen_namespace_die (tree, dw_die_ref);
3244 static dw_die_ref gen_namelist_decl (tree, dw_die_ref, tree);
3245 static dw_die_ref gen_decl_die (tree, tree, dw_die_ref);
3246 static dw_die_ref force_decl_die (tree);
3247 static dw_die_ref force_type_die (tree);
3248 static dw_die_ref setup_namespace_context (tree, dw_die_ref);
3249 static dw_die_ref declare_in_namespace (tree, dw_die_ref);
3250 static struct dwarf_file_data * lookup_filename (const char *);
3251 static void retry_incomplete_types (void);
3252 static void gen_type_die_for_member (tree, tree, dw_die_ref);
3253 static void gen_generic_params_dies (tree);
3254 static void gen_tagged_type_die (tree, dw_die_ref, enum debug_info_usage);
3255 static void gen_type_die_with_usage (tree, dw_die_ref, enum debug_info_usage);
3256 static void splice_child_die (dw_die_ref, dw_die_ref);
3257 static int file_info_cmp (const void *, const void *);
3258 static dw_loc_list_ref new_loc_list (dw_loc_descr_ref, const char *,
3259 const char *, const char *);
3260 static void output_loc_list (dw_loc_list_ref);
3261 static char *gen_internal_sym (const char *);
3262 static bool want_pubnames (void);
3264 static void prune_unmark_dies (dw_die_ref);
3265 static void prune_unused_types_mark_generic_parms_dies (dw_die_ref);
3266 static void prune_unused_types_mark (dw_die_ref, int);
3267 static void prune_unused_types_walk (dw_die_ref);
3268 static void prune_unused_types_walk_attribs (dw_die_ref);
3269 static void prune_unused_types_prune (dw_die_ref);
3270 static void prune_unused_types (void);
3271 static int maybe_emit_file (struct dwarf_file_data *fd);
3272 static inline const char *AT_vms_delta1 (dw_attr_ref);
3273 static inline const char *AT_vms_delta2 (dw_attr_ref);
3274 static inline void add_AT_vms_delta (dw_die_ref, enum dwarf_attribute,
3275 const char *, const char *);
3276 static void append_entry_to_tmpl_value_parm_die_table (dw_die_ref, tree);
3277 static void gen_remaining_tmpl_value_param_die_attribute (void);
3278 static bool generic_type_p (tree);
3279 static void schedule_generic_params_dies_gen (tree t);
3280 static void gen_scheduled_generic_parms_dies (void);
3282 static const char *comp_dir_string (void);
3284 static void hash_loc_operands (dw_loc_descr_ref, inchash::hash &);
3286 /* enum for tracking thread-local variables whose address is really an offset
3287 relative to the TLS pointer, which will need link-time relocation, but will
3288 not need relocation by the DWARF consumer. */
3290 enum dtprel_bool
3292 dtprel_false = 0,
3293 dtprel_true = 1
3296 /* Return the operator to use for an address of a variable. For dtprel_true, we
3297 use DW_OP_const*. For regular variables, which need both link-time
3298 relocation and consumer-level relocation (e.g., to account for shared objects
3299 loaded at a random address), we use DW_OP_addr*. */
3301 static inline enum dwarf_location_atom
3302 dw_addr_op (enum dtprel_bool dtprel)
3304 if (dtprel == dtprel_true)
3305 return (dwarf_split_debug_info ? DW_OP_GNU_const_index
3306 : (DWARF2_ADDR_SIZE == 4 ? DW_OP_const4u : DW_OP_const8u));
3307 else
3308 return dwarf_split_debug_info ? DW_OP_GNU_addr_index : DW_OP_addr;
3311 /* Return a pointer to a newly allocated address location description. If
3312 dwarf_split_debug_info is true, then record the address with the appropriate
3313 relocation. */
3314 static inline dw_loc_descr_ref
3315 new_addr_loc_descr (rtx addr, enum dtprel_bool dtprel)
3317 dw_loc_descr_ref ref = new_loc_descr (dw_addr_op (dtprel), 0, 0);
3319 ref->dw_loc_oprnd1.val_class = dw_val_class_addr;
3320 ref->dw_loc_oprnd1.v.val_addr = addr;
3321 ref->dtprel = dtprel;
3322 if (dwarf_split_debug_info)
3323 ref->dw_loc_oprnd1.val_entry
3324 = add_addr_table_entry (addr,
3325 dtprel ? ate_kind_rtx_dtprel : ate_kind_rtx);
3326 else
3327 ref->dw_loc_oprnd1.val_entry = NULL;
3329 return ref;
3332 /* Section names used to hold DWARF debugging information. */
3334 #ifndef DEBUG_INFO_SECTION
3335 #define DEBUG_INFO_SECTION ".debug_info"
3336 #endif
3337 #ifndef DEBUG_DWO_INFO_SECTION
3338 #define DEBUG_DWO_INFO_SECTION ".debug_info.dwo"
3339 #endif
3340 #ifndef DEBUG_ABBREV_SECTION
3341 #define DEBUG_ABBREV_SECTION ".debug_abbrev"
3342 #endif
3343 #ifndef DEBUG_DWO_ABBREV_SECTION
3344 #define DEBUG_DWO_ABBREV_SECTION ".debug_abbrev.dwo"
3345 #endif
3346 #ifndef DEBUG_ARANGES_SECTION
3347 #define DEBUG_ARANGES_SECTION ".debug_aranges"
3348 #endif
3349 #ifndef DEBUG_ADDR_SECTION
3350 #define DEBUG_ADDR_SECTION ".debug_addr"
3351 #endif
3352 #ifndef DEBUG_NORM_MACINFO_SECTION
3353 #define DEBUG_NORM_MACINFO_SECTION ".debug_macinfo"
3354 #endif
3355 #ifndef DEBUG_DWO_MACINFO_SECTION
3356 #define DEBUG_DWO_MACINFO_SECTION ".debug_macinfo.dwo"
3357 #endif
3358 #ifndef DEBUG_MACINFO_SECTION
3359 #define DEBUG_MACINFO_SECTION \
3360 (!dwarf_split_debug_info \
3361 ? (DEBUG_NORM_MACINFO_SECTION) : (DEBUG_DWO_MACINFO_SECTION))
3362 #endif
3363 #ifndef DEBUG_NORM_MACRO_SECTION
3364 #define DEBUG_NORM_MACRO_SECTION ".debug_macro"
3365 #endif
3366 #ifndef DEBUG_DWO_MACRO_SECTION
3367 #define DEBUG_DWO_MACRO_SECTION ".debug_macro.dwo"
3368 #endif
3369 #ifndef DEBUG_MACRO_SECTION
3370 #define DEBUG_MACRO_SECTION \
3371 (!dwarf_split_debug_info \
3372 ? (DEBUG_NORM_MACRO_SECTION) : (DEBUG_DWO_MACRO_SECTION))
3373 #endif
3374 #ifndef DEBUG_LINE_SECTION
3375 #define DEBUG_LINE_SECTION ".debug_line"
3376 #endif
3377 #ifndef DEBUG_DWO_LINE_SECTION
3378 #define DEBUG_DWO_LINE_SECTION ".debug_line.dwo"
3379 #endif
3380 #ifndef DEBUG_LOC_SECTION
3381 #define DEBUG_LOC_SECTION ".debug_loc"
3382 #endif
3383 #ifndef DEBUG_DWO_LOC_SECTION
3384 #define DEBUG_DWO_LOC_SECTION ".debug_loc.dwo"
3385 #endif
3386 #ifndef DEBUG_PUBNAMES_SECTION
3387 #define DEBUG_PUBNAMES_SECTION \
3388 ((debug_generate_pub_sections == 2) \
3389 ? ".debug_gnu_pubnames" : ".debug_pubnames")
3390 #endif
3391 #ifndef DEBUG_PUBTYPES_SECTION
3392 #define DEBUG_PUBTYPES_SECTION \
3393 ((debug_generate_pub_sections == 2) \
3394 ? ".debug_gnu_pubtypes" : ".debug_pubtypes")
3395 #endif
3396 #define DEBUG_NORM_STR_OFFSETS_SECTION ".debug_str_offsets"
3397 #define DEBUG_DWO_STR_OFFSETS_SECTION ".debug_str_offsets.dwo"
3398 #ifndef DEBUG_STR_OFFSETS_SECTION
3399 #define DEBUG_STR_OFFSETS_SECTION \
3400 (!dwarf_split_debug_info \
3401 ? (DEBUG_NORM_STR_OFFSETS_SECTION) : (DEBUG_DWO_STR_OFFSETS_SECTION))
3402 #endif
3403 #ifndef DEBUG_STR_DWO_SECTION
3404 #define DEBUG_STR_DWO_SECTION ".debug_str.dwo"
3405 #endif
3406 #ifndef DEBUG_STR_SECTION
3407 #define DEBUG_STR_SECTION ".debug_str"
3408 #endif
3409 #ifndef DEBUG_RANGES_SECTION
3410 #define DEBUG_RANGES_SECTION ".debug_ranges"
3411 #endif
3413 /* Standard ELF section names for compiled code and data. */
3414 #ifndef TEXT_SECTION_NAME
3415 #define TEXT_SECTION_NAME ".text"
3416 #endif
3418 /* Section flags for .debug_macinfo/.debug_macro section. */
3419 #define DEBUG_MACRO_SECTION_FLAGS \
3420 (dwarf_split_debug_info ? SECTION_DEBUG | SECTION_EXCLUDE : SECTION_DEBUG)
3422 /* Section flags for .debug_str section. */
3423 #define DEBUG_STR_SECTION_FLAGS \
3424 (HAVE_GAS_SHF_MERGE && flag_merge_debug_strings \
3425 ? SECTION_DEBUG | SECTION_MERGE | SECTION_STRINGS | 1 \
3426 : SECTION_DEBUG)
3428 /* Section flags for .debug_str.dwo section. */
3429 #define DEBUG_STR_DWO_SECTION_FLAGS (SECTION_DEBUG | SECTION_EXCLUDE)
3431 /* Labels we insert at beginning sections we can reference instead of
3432 the section names themselves. */
3434 #ifndef TEXT_SECTION_LABEL
3435 #define TEXT_SECTION_LABEL "Ltext"
3436 #endif
3437 #ifndef COLD_TEXT_SECTION_LABEL
3438 #define COLD_TEXT_SECTION_LABEL "Ltext_cold"
3439 #endif
3440 #ifndef DEBUG_LINE_SECTION_LABEL
3441 #define DEBUG_LINE_SECTION_LABEL "Ldebug_line"
3442 #endif
3443 #ifndef DEBUG_SKELETON_LINE_SECTION_LABEL
3444 #define DEBUG_SKELETON_LINE_SECTION_LABEL "Lskeleton_debug_line"
3445 #endif
3446 #ifndef DEBUG_INFO_SECTION_LABEL
3447 #define DEBUG_INFO_SECTION_LABEL "Ldebug_info"
3448 #endif
3449 #ifndef DEBUG_SKELETON_INFO_SECTION_LABEL
3450 #define DEBUG_SKELETON_INFO_SECTION_LABEL "Lskeleton_debug_info"
3451 #endif
3452 #ifndef DEBUG_ABBREV_SECTION_LABEL
3453 #define DEBUG_ABBREV_SECTION_LABEL "Ldebug_abbrev"
3454 #endif
3455 #ifndef DEBUG_SKELETON_ABBREV_SECTION_LABEL
3456 #define DEBUG_SKELETON_ABBREV_SECTION_LABEL "Lskeleton_debug_abbrev"
3457 #endif
3458 #ifndef DEBUG_ADDR_SECTION_LABEL
3459 #define DEBUG_ADDR_SECTION_LABEL "Ldebug_addr"
3460 #endif
3461 #ifndef DEBUG_LOC_SECTION_LABEL
3462 #define DEBUG_LOC_SECTION_LABEL "Ldebug_loc"
3463 #endif
3464 #ifndef DEBUG_RANGES_SECTION_LABEL
3465 #define DEBUG_RANGES_SECTION_LABEL "Ldebug_ranges"
3466 #endif
3467 #ifndef DEBUG_MACINFO_SECTION_LABEL
3468 #define DEBUG_MACINFO_SECTION_LABEL "Ldebug_macinfo"
3469 #endif
3470 #ifndef DEBUG_MACRO_SECTION_LABEL
3471 #define DEBUG_MACRO_SECTION_LABEL "Ldebug_macro"
3472 #endif
3473 #define SKELETON_COMP_DIE_ABBREV 1
3474 #define SKELETON_TYPE_DIE_ABBREV 2
3476 /* Definitions of defaults for formats and names of various special
3477 (artificial) labels which may be generated within this file (when the -g
3478 options is used and DWARF2_DEBUGGING_INFO is in effect.
3479 If necessary, these may be overridden from within the tm.h file, but
3480 typically, overriding these defaults is unnecessary. */
3482 static char text_end_label[MAX_ARTIFICIAL_LABEL_BYTES];
3483 static char text_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3484 static char cold_text_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3485 static char cold_end_label[MAX_ARTIFICIAL_LABEL_BYTES];
3486 static char abbrev_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3487 static char debug_info_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3488 static char debug_skeleton_info_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3489 static char debug_skeleton_abbrev_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3490 static char debug_line_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3491 static char debug_addr_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3492 static char debug_skeleton_line_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3493 static char macinfo_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3494 static char loc_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3495 static char ranges_section_label[2 * MAX_ARTIFICIAL_LABEL_BYTES];
3497 #ifndef TEXT_END_LABEL
3498 #define TEXT_END_LABEL "Letext"
3499 #endif
3500 #ifndef COLD_END_LABEL
3501 #define COLD_END_LABEL "Letext_cold"
3502 #endif
3503 #ifndef BLOCK_BEGIN_LABEL
3504 #define BLOCK_BEGIN_LABEL "LBB"
3505 #endif
3506 #ifndef BLOCK_END_LABEL
3507 #define BLOCK_END_LABEL "LBE"
3508 #endif
3509 #ifndef LINE_CODE_LABEL
3510 #define LINE_CODE_LABEL "LM"
3511 #endif
3514 /* Return the root of the DIE's built for the current compilation unit. */
3515 static dw_die_ref
3516 comp_unit_die (void)
3518 if (!single_comp_unit_die)
3519 single_comp_unit_die = gen_compile_unit_die (NULL);
3520 return single_comp_unit_die;
3523 /* We allow a language front-end to designate a function that is to be
3524 called to "demangle" any name before it is put into a DIE. */
3526 static const char *(*demangle_name_func) (const char *);
3528 void
3529 dwarf2out_set_demangle_name_func (const char *(*func) (const char *))
3531 demangle_name_func = func;
3534 /* Test if rtl node points to a pseudo register. */
3536 static inline int
3537 is_pseudo_reg (const_rtx rtl)
3539 return ((REG_P (rtl) && REGNO (rtl) >= FIRST_PSEUDO_REGISTER)
3540 || (GET_CODE (rtl) == SUBREG
3541 && REGNO (SUBREG_REG (rtl)) >= FIRST_PSEUDO_REGISTER));
3544 /* Return a reference to a type, with its const and volatile qualifiers
3545 removed. */
3547 static inline tree
3548 type_main_variant (tree type)
3550 type = TYPE_MAIN_VARIANT (type);
3552 /* ??? There really should be only one main variant among any group of
3553 variants of a given type (and all of the MAIN_VARIANT values for all
3554 members of the group should point to that one type) but sometimes the C
3555 front-end messes this up for array types, so we work around that bug
3556 here. */
3557 if (TREE_CODE (type) == ARRAY_TYPE)
3558 while (type != TYPE_MAIN_VARIANT (type))
3559 type = TYPE_MAIN_VARIANT (type);
3561 return type;
3564 /* Return nonzero if the given type node represents a tagged type. */
3566 static inline int
3567 is_tagged_type (const_tree type)
3569 enum tree_code code = TREE_CODE (type);
3571 return (code == RECORD_TYPE || code == UNION_TYPE
3572 || code == QUAL_UNION_TYPE || code == ENUMERAL_TYPE);
3575 /* Set label to debug_info_section_label + die_offset of a DIE reference. */
3577 static void
3578 get_ref_die_offset_label (char *label, dw_die_ref ref)
3580 sprintf (label, "%s+%ld", debug_info_section_label, ref->die_offset);
3583 /* Return die_offset of a DIE reference to a base type. */
3585 static unsigned long int
3586 get_base_type_offset (dw_die_ref ref)
3588 if (ref->die_offset)
3589 return ref->die_offset;
3590 if (comp_unit_die ()->die_abbrev)
3592 calc_base_type_die_sizes ();
3593 gcc_assert (ref->die_offset);
3595 return ref->die_offset;
3598 /* Return die_offset of a DIE reference other than base type. */
3600 static unsigned long int
3601 get_ref_die_offset (dw_die_ref ref)
3603 gcc_assert (ref->die_offset);
3604 return ref->die_offset;
3607 /* Convert a DIE tag into its string name. */
3609 static const char *
3610 dwarf_tag_name (unsigned int tag)
3612 const char *name = get_DW_TAG_name (tag);
3614 if (name != NULL)
3615 return name;
3617 return "DW_TAG_<unknown>";
3620 /* Convert a DWARF attribute code into its string name. */
3622 static const char *
3623 dwarf_attr_name (unsigned int attr)
3625 const char *name;
3627 switch (attr)
3629 #if VMS_DEBUGGING_INFO
3630 case DW_AT_HP_prologue:
3631 return "DW_AT_HP_prologue";
3632 #else
3633 case DW_AT_MIPS_loop_unroll_factor:
3634 return "DW_AT_MIPS_loop_unroll_factor";
3635 #endif
3637 #if VMS_DEBUGGING_INFO
3638 case DW_AT_HP_epilogue:
3639 return "DW_AT_HP_epilogue";
3640 #else
3641 case DW_AT_MIPS_stride:
3642 return "DW_AT_MIPS_stride";
3643 #endif
3646 name = get_DW_AT_name (attr);
3648 if (name != NULL)
3649 return name;
3651 return "DW_AT_<unknown>";
3654 /* Convert a DWARF value form code into its string name. */
3656 static const char *
3657 dwarf_form_name (unsigned int form)
3659 const char *name = get_DW_FORM_name (form);
3661 if (name != NULL)
3662 return name;
3664 return "DW_FORM_<unknown>";
3667 /* Determine the "ultimate origin" of a decl. The decl may be an inlined
3668 instance of an inlined instance of a decl which is local to an inline
3669 function, so we have to trace all of the way back through the origin chain
3670 to find out what sort of node actually served as the original seed for the
3671 given block. */
3673 static tree
3674 decl_ultimate_origin (const_tree decl)
3676 if (!CODE_CONTAINS_STRUCT (TREE_CODE (decl), TS_DECL_COMMON))
3677 return NULL_TREE;
3679 /* output_inline_function sets DECL_ABSTRACT_ORIGIN for all the
3680 nodes in the function to point to themselves; ignore that if
3681 we're trying to output the abstract instance of this function. */
3682 if (DECL_ABSTRACT (decl) && DECL_ABSTRACT_ORIGIN (decl) == decl)
3683 return NULL_TREE;
3685 /* Since the DECL_ABSTRACT_ORIGIN for a DECL is supposed to be the
3686 most distant ancestor, this should never happen. */
3687 gcc_assert (!DECL_FROM_INLINE (DECL_ORIGIN (decl)));
3689 return DECL_ABSTRACT_ORIGIN (decl);
3692 /* Get the class to which DECL belongs, if any. In g++, the DECL_CONTEXT
3693 of a virtual function may refer to a base class, so we check the 'this'
3694 parameter. */
3696 static tree
3697 decl_class_context (tree decl)
3699 tree context = NULL_TREE;
3701 if (TREE_CODE (decl) != FUNCTION_DECL || ! DECL_VINDEX (decl))
3702 context = DECL_CONTEXT (decl);
3703 else
3704 context = TYPE_MAIN_VARIANT
3705 (TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (decl)))));
3707 if (context && !TYPE_P (context))
3708 context = NULL_TREE;
3710 return context;
3713 /* Add an attribute/value pair to a DIE. */
3715 static inline void
3716 add_dwarf_attr (dw_die_ref die, dw_attr_ref attr)
3718 /* Maybe this should be an assert? */
3719 if (die == NULL)
3720 return;
3722 vec_safe_reserve (die->die_attr, 1);
3723 vec_safe_push (die->die_attr, *attr);
3726 static inline enum dw_val_class
3727 AT_class (dw_attr_ref a)
3729 return a->dw_attr_val.val_class;
3732 /* Return the index for any attribute that will be referenced with a
3733 DW_FORM_GNU_addr_index or DW_FORM_GNU_str_index. String indices
3734 are stored in dw_attr_val.v.val_str for reference counting
3735 pruning. */
3737 static inline unsigned int
3738 AT_index (dw_attr_ref a)
3740 if (AT_class (a) == dw_val_class_str)
3741 return a->dw_attr_val.v.val_str->index;
3742 else if (a->dw_attr_val.val_entry != NULL)
3743 return a->dw_attr_val.val_entry->index;
3744 return NOT_INDEXED;
3747 /* Add a flag value attribute to a DIE. */
3749 static inline void
3750 add_AT_flag (dw_die_ref die, enum dwarf_attribute attr_kind, unsigned int flag)
3752 dw_attr_node attr;
3754 attr.dw_attr = attr_kind;
3755 attr.dw_attr_val.val_class = dw_val_class_flag;
3756 attr.dw_attr_val.val_entry = NULL;
3757 attr.dw_attr_val.v.val_flag = flag;
3758 add_dwarf_attr (die, &attr);
3761 static inline unsigned
3762 AT_flag (dw_attr_ref a)
3764 gcc_assert (a && AT_class (a) == dw_val_class_flag);
3765 return a->dw_attr_val.v.val_flag;
3768 /* Add a signed integer attribute value to a DIE. */
3770 static inline void
3771 add_AT_int (dw_die_ref die, enum dwarf_attribute attr_kind, HOST_WIDE_INT int_val)
3773 dw_attr_node attr;
3775 attr.dw_attr = attr_kind;
3776 attr.dw_attr_val.val_class = dw_val_class_const;
3777 attr.dw_attr_val.val_entry = NULL;
3778 attr.dw_attr_val.v.val_int = int_val;
3779 add_dwarf_attr (die, &attr);
3782 static inline HOST_WIDE_INT
3783 AT_int (dw_attr_ref a)
3785 gcc_assert (a && AT_class (a) == dw_val_class_const);
3786 return a->dw_attr_val.v.val_int;
3789 /* Add an unsigned integer attribute value to a DIE. */
3791 static inline void
3792 add_AT_unsigned (dw_die_ref die, enum dwarf_attribute attr_kind,
3793 unsigned HOST_WIDE_INT unsigned_val)
3795 dw_attr_node attr;
3797 attr.dw_attr = attr_kind;
3798 attr.dw_attr_val.val_class = dw_val_class_unsigned_const;
3799 attr.dw_attr_val.val_entry = NULL;
3800 attr.dw_attr_val.v.val_unsigned = unsigned_val;
3801 add_dwarf_attr (die, &attr);
3804 static inline unsigned HOST_WIDE_INT
3805 AT_unsigned (dw_attr_ref a)
3807 gcc_assert (a && AT_class (a) == dw_val_class_unsigned_const);
3808 return a->dw_attr_val.v.val_unsigned;
3811 /* Add an unsigned wide integer attribute value to a DIE. */
3813 static inline void
3814 add_AT_wide (dw_die_ref die, enum dwarf_attribute attr_kind,
3815 const wide_int& w)
3817 dw_attr_node attr;
3819 attr.dw_attr = attr_kind;
3820 attr.dw_attr_val.val_class = dw_val_class_wide_int;
3821 attr.dw_attr_val.v.val_wide = ggc_cleared_alloc<wide_int> ();
3822 *attr.dw_attr_val.v.val_wide = w;
3823 add_dwarf_attr (die, &attr);
3826 /* Add an unsigned double integer attribute value to a DIE. */
3828 static inline void
3829 add_AT_double (dw_die_ref die, enum dwarf_attribute attr_kind,
3830 HOST_WIDE_INT high, unsigned HOST_WIDE_INT low)
3832 dw_attr_node attr;
3834 attr.dw_attr = attr_kind;
3835 attr.dw_attr_val.val_class = dw_val_class_const_double;
3836 attr.dw_attr_val.val_entry = NULL;
3837 attr.dw_attr_val.v.val_double.high = high;
3838 attr.dw_attr_val.v.val_double.low = low;
3839 add_dwarf_attr (die, &attr);
3842 /* Add a floating point attribute value to a DIE and return it. */
3844 static inline void
3845 add_AT_vec (dw_die_ref die, enum dwarf_attribute attr_kind,
3846 unsigned int length, unsigned int elt_size, unsigned char *array)
3848 dw_attr_node attr;
3850 attr.dw_attr = attr_kind;
3851 attr.dw_attr_val.val_class = dw_val_class_vec;
3852 attr.dw_attr_val.val_entry = NULL;
3853 attr.dw_attr_val.v.val_vec.length = length;
3854 attr.dw_attr_val.v.val_vec.elt_size = elt_size;
3855 attr.dw_attr_val.v.val_vec.array = array;
3856 add_dwarf_attr (die, &attr);
3859 /* Add an 8-byte data attribute value to a DIE. */
3861 static inline void
3862 add_AT_data8 (dw_die_ref die, enum dwarf_attribute attr_kind,
3863 unsigned char data8[8])
3865 dw_attr_node attr;
3867 attr.dw_attr = attr_kind;
3868 attr.dw_attr_val.val_class = dw_val_class_data8;
3869 attr.dw_attr_val.val_entry = NULL;
3870 memcpy (attr.dw_attr_val.v.val_data8, data8, 8);
3871 add_dwarf_attr (die, &attr);
3874 /* Add DW_AT_low_pc and DW_AT_high_pc to a DIE. When using
3875 dwarf_split_debug_info, address attributes in dies destined for the
3876 final executable have force_direct set to avoid using indexed
3877 references. */
3879 static inline void
3880 add_AT_low_high_pc (dw_die_ref die, const char *lbl_low, const char *lbl_high,
3881 bool force_direct)
3883 dw_attr_node attr;
3884 char * lbl_id;
3886 lbl_id = xstrdup (lbl_low);
3887 attr.dw_attr = DW_AT_low_pc;
3888 attr.dw_attr_val.val_class = dw_val_class_lbl_id;
3889 attr.dw_attr_val.v.val_lbl_id = lbl_id;
3890 if (dwarf_split_debug_info && !force_direct)
3891 attr.dw_attr_val.val_entry
3892 = add_addr_table_entry (lbl_id, ate_kind_label);
3893 else
3894 attr.dw_attr_val.val_entry = NULL;
3895 add_dwarf_attr (die, &attr);
3897 attr.dw_attr = DW_AT_high_pc;
3898 if (dwarf_version < 4)
3899 attr.dw_attr_val.val_class = dw_val_class_lbl_id;
3900 else
3901 attr.dw_attr_val.val_class = dw_val_class_high_pc;
3902 lbl_id = xstrdup (lbl_high);
3903 attr.dw_attr_val.v.val_lbl_id = lbl_id;
3904 if (attr.dw_attr_val.val_class == dw_val_class_lbl_id
3905 && dwarf_split_debug_info && !force_direct)
3906 attr.dw_attr_val.val_entry
3907 = add_addr_table_entry (lbl_id, ate_kind_label);
3908 else
3909 attr.dw_attr_val.val_entry = NULL;
3910 add_dwarf_attr (die, &attr);
3913 /* Hash and equality functions for debug_str_hash. */
3915 static hashval_t
3916 debug_str_do_hash (const void *x)
3918 return htab_hash_string (((const struct indirect_string_node *)x)->str);
3921 static int
3922 debug_str_eq (const void *x1, const void *x2)
3924 return strcmp ((((const struct indirect_string_node *)x1)->str),
3925 (const char *)x2) == 0;
3928 /* Add STR to the given string hash table. */
3930 static struct indirect_string_node *
3931 find_AT_string_in_table (const char *str, htab_t table)
3933 struct indirect_string_node *node;
3934 void **slot;
3936 slot = htab_find_slot_with_hash (table, str,
3937 htab_hash_string (str), INSERT);
3938 if (*slot == NULL)
3940 node = ggc_cleared_alloc<indirect_string_node> ();
3941 node->str = ggc_strdup (str);
3942 *slot = node;
3944 else
3945 node = (struct indirect_string_node *) *slot;
3947 node->refcount++;
3948 return node;
3951 /* Add STR to the indirect string hash table. */
3953 static struct indirect_string_node *
3954 find_AT_string (const char *str)
3956 if (! debug_str_hash)
3957 debug_str_hash = htab_create_ggc (10, debug_str_do_hash,
3958 debug_str_eq, NULL);
3960 return find_AT_string_in_table (str, debug_str_hash);
3963 /* Add a string attribute value to a DIE. */
3965 static inline void
3966 add_AT_string (dw_die_ref die, enum dwarf_attribute attr_kind, const char *str)
3968 dw_attr_node attr;
3969 struct indirect_string_node *node;
3971 node = find_AT_string (str);
3973 attr.dw_attr = attr_kind;
3974 attr.dw_attr_val.val_class = dw_val_class_str;
3975 attr.dw_attr_val.val_entry = NULL;
3976 attr.dw_attr_val.v.val_str = node;
3977 add_dwarf_attr (die, &attr);
3980 static inline const char *
3981 AT_string (dw_attr_ref a)
3983 gcc_assert (a && AT_class (a) == dw_val_class_str);
3984 return a->dw_attr_val.v.val_str->str;
3987 /* Call this function directly to bypass AT_string_form's logic to put
3988 the string inline in the die. */
3990 static void
3991 set_indirect_string (struct indirect_string_node *node)
3993 char label[32];
3994 /* Already indirect is a no op. */
3995 if (node->form == DW_FORM_strp || node->form == DW_FORM_GNU_str_index)
3997 gcc_assert (node->label);
3998 return;
4000 ASM_GENERATE_INTERNAL_LABEL (label, "LASF", dw2_string_counter);
4001 ++dw2_string_counter;
4002 node->label = xstrdup (label);
4004 if (!dwarf_split_debug_info)
4006 node->form = DW_FORM_strp;
4007 node->index = NOT_INDEXED;
4009 else
4011 node->form = DW_FORM_GNU_str_index;
4012 node->index = NO_INDEX_ASSIGNED;
4016 /* Find out whether a string should be output inline in DIE
4017 or out-of-line in .debug_str section. */
4019 static enum dwarf_form
4020 find_string_form (struct indirect_string_node *node)
4022 unsigned int len;
4024 if (node->form)
4025 return node->form;
4027 len = strlen (node->str) + 1;
4029 /* If the string is shorter or equal to the size of the reference, it is
4030 always better to put it inline. */
4031 if (len <= DWARF_OFFSET_SIZE || node->refcount == 0)
4032 return node->form = DW_FORM_string;
4034 /* If we cannot expect the linker to merge strings in .debug_str
4035 section, only put it into .debug_str if it is worth even in this
4036 single module. */
4037 if (DWARF2_INDIRECT_STRING_SUPPORT_MISSING_ON_TARGET
4038 || ((debug_str_section->common.flags & SECTION_MERGE) == 0
4039 && (len - DWARF_OFFSET_SIZE) * node->refcount <= len))
4040 return node->form = DW_FORM_string;
4042 set_indirect_string (node);
4044 return node->form;
4047 /* Find out whether the string referenced from the attribute should be
4048 output inline in DIE or out-of-line in .debug_str section. */
4050 static enum dwarf_form
4051 AT_string_form (dw_attr_ref a)
4053 gcc_assert (a && AT_class (a) == dw_val_class_str);
4054 return find_string_form (a->dw_attr_val.v.val_str);
4057 /* Add a DIE reference attribute value to a DIE. */
4059 static inline void
4060 add_AT_die_ref (dw_die_ref die, enum dwarf_attribute attr_kind, dw_die_ref targ_die)
4062 dw_attr_node attr;
4064 #ifdef ENABLE_CHECKING
4065 gcc_assert (targ_die != NULL);
4066 #else
4067 /* With LTO we can end up trying to reference something we didn't create
4068 a DIE for. Avoid crashing later on a NULL referenced DIE. */
4069 if (targ_die == NULL)
4070 return;
4071 #endif
4073 attr.dw_attr = attr_kind;
4074 attr.dw_attr_val.val_class = dw_val_class_die_ref;
4075 attr.dw_attr_val.val_entry = NULL;
4076 attr.dw_attr_val.v.val_die_ref.die = targ_die;
4077 attr.dw_attr_val.v.val_die_ref.external = 0;
4078 add_dwarf_attr (die, &attr);
4081 /* Change DIE reference REF to point to NEW_DIE instead. */
4083 static inline void
4084 change_AT_die_ref (dw_attr_ref ref, dw_die_ref new_die)
4086 gcc_assert (ref->dw_attr_val.val_class == dw_val_class_die_ref);
4087 ref->dw_attr_val.v.val_die_ref.die = new_die;
4088 ref->dw_attr_val.v.val_die_ref.external = 0;
4091 /* Add an AT_specification attribute to a DIE, and also make the back
4092 pointer from the specification to the definition. */
4094 static inline void
4095 add_AT_specification (dw_die_ref die, dw_die_ref targ_die)
4097 add_AT_die_ref (die, DW_AT_specification, targ_die);
4098 gcc_assert (!targ_die->die_definition);
4099 targ_die->die_definition = die;
4102 static inline dw_die_ref
4103 AT_ref (dw_attr_ref a)
4105 gcc_assert (a && AT_class (a) == dw_val_class_die_ref);
4106 return a->dw_attr_val.v.val_die_ref.die;
4109 static inline int
4110 AT_ref_external (dw_attr_ref a)
4112 if (a && AT_class (a) == dw_val_class_die_ref)
4113 return a->dw_attr_val.v.val_die_ref.external;
4115 return 0;
4118 static inline void
4119 set_AT_ref_external (dw_attr_ref a, int i)
4121 gcc_assert (a && AT_class (a) == dw_val_class_die_ref);
4122 a->dw_attr_val.v.val_die_ref.external = i;
4125 /* Add an FDE reference attribute value to a DIE. */
4127 static inline void
4128 add_AT_fde_ref (dw_die_ref die, enum dwarf_attribute attr_kind, unsigned int targ_fde)
4130 dw_attr_node attr;
4132 attr.dw_attr = attr_kind;
4133 attr.dw_attr_val.val_class = dw_val_class_fde_ref;
4134 attr.dw_attr_val.val_entry = NULL;
4135 attr.dw_attr_val.v.val_fde_index = targ_fde;
4136 add_dwarf_attr (die, &attr);
4139 /* Add a location description attribute value to a DIE. */
4141 static inline void
4142 add_AT_loc (dw_die_ref die, enum dwarf_attribute attr_kind, dw_loc_descr_ref loc)
4144 dw_attr_node attr;
4146 attr.dw_attr = attr_kind;
4147 attr.dw_attr_val.val_class = dw_val_class_loc;
4148 attr.dw_attr_val.val_entry = NULL;
4149 attr.dw_attr_val.v.val_loc = loc;
4150 add_dwarf_attr (die, &attr);
4153 static inline dw_loc_descr_ref
4154 AT_loc (dw_attr_ref a)
4156 gcc_assert (a && AT_class (a) == dw_val_class_loc);
4157 return a->dw_attr_val.v.val_loc;
4160 static inline void
4161 add_AT_loc_list (dw_die_ref die, enum dwarf_attribute attr_kind, dw_loc_list_ref loc_list)
4163 dw_attr_node attr;
4165 attr.dw_attr = attr_kind;
4166 attr.dw_attr_val.val_class = dw_val_class_loc_list;
4167 attr.dw_attr_val.val_entry = NULL;
4168 attr.dw_attr_val.v.val_loc_list = loc_list;
4169 add_dwarf_attr (die, &attr);
4170 have_location_lists = true;
4173 static inline dw_loc_list_ref
4174 AT_loc_list (dw_attr_ref a)
4176 gcc_assert (a && AT_class (a) == dw_val_class_loc_list);
4177 return a->dw_attr_val.v.val_loc_list;
4180 static inline dw_loc_list_ref *
4181 AT_loc_list_ptr (dw_attr_ref a)
4183 gcc_assert (a && AT_class (a) == dw_val_class_loc_list);
4184 return &a->dw_attr_val.v.val_loc_list;
4187 /* Table of entries into the .debug_addr section. */
4189 static GTY ((param_is (addr_table_entry))) htab_t addr_index_table;
4191 /* Hash an address_table_entry. */
4193 static hashval_t
4194 addr_table_entry_do_hash (const void *x)
4196 const addr_table_entry *a = (const addr_table_entry *) x;
4197 inchash::hash hstate;
4198 switch (a->kind)
4200 case ate_kind_rtx:
4201 hstate.add_int (0);
4202 break;
4203 case ate_kind_rtx_dtprel:
4204 hstate.add_int (1);
4205 break;
4206 case ate_kind_label:
4207 return htab_hash_string (a->addr.label);
4208 default:
4209 gcc_unreachable ();
4211 inchash::add_rtx (a->addr.rtl, hstate);
4212 return hstate.end ();
4215 /* Determine equality for two address_table_entries. */
4217 static int
4218 addr_table_entry_eq (const void *x1, const void *x2)
4220 const addr_table_entry *a1 = (const addr_table_entry *) x1;
4221 const addr_table_entry *a2 = (const addr_table_entry *) x2;
4223 if (a1->kind != a2->kind)
4224 return 0;
4225 switch (a1->kind)
4227 case ate_kind_rtx:
4228 case ate_kind_rtx_dtprel:
4229 return rtx_equal_p (a1->addr.rtl, a2->addr.rtl);
4230 case ate_kind_label:
4231 return strcmp (a1->addr.label, a2->addr.label) == 0;
4232 default:
4233 gcc_unreachable ();
4237 /* Initialize an addr_table_entry. */
4239 void
4240 init_addr_table_entry (addr_table_entry *e, enum ate_kind kind, void *addr)
4242 e->kind = kind;
4243 switch (kind)
4245 case ate_kind_rtx:
4246 case ate_kind_rtx_dtprel:
4247 e->addr.rtl = (rtx) addr;
4248 break;
4249 case ate_kind_label:
4250 e->addr.label = (char *) addr;
4251 break;
4253 e->refcount = 0;
4254 e->index = NO_INDEX_ASSIGNED;
4257 /* Add attr to the address table entry to the table. Defer setting an
4258 index until output time. */
4260 static addr_table_entry *
4261 add_addr_table_entry (void *addr, enum ate_kind kind)
4263 addr_table_entry *node;
4264 addr_table_entry finder;
4265 void **slot;
4267 gcc_assert (dwarf_split_debug_info);
4268 if (! addr_index_table)
4269 addr_index_table = htab_create_ggc (10, addr_table_entry_do_hash,
4270 addr_table_entry_eq, NULL);
4271 init_addr_table_entry (&finder, kind, addr);
4272 slot = htab_find_slot (addr_index_table, &finder, INSERT);
4274 if (*slot == HTAB_EMPTY_ENTRY)
4276 node = ggc_cleared_alloc<addr_table_entry> ();
4277 init_addr_table_entry (node, kind, addr);
4278 *slot = node;
4280 else
4281 node = (addr_table_entry *) *slot;
4283 node->refcount++;
4284 return node;
4287 /* Remove an entry from the addr table by decrementing its refcount.
4288 Strictly, decrementing the refcount would be enough, but the
4289 assertion that the entry is actually in the table has found
4290 bugs. */
4292 static void
4293 remove_addr_table_entry (addr_table_entry *entry)
4295 gcc_assert (dwarf_split_debug_info && addr_index_table);
4296 /* After an index is assigned, the table is frozen. */
4297 gcc_assert (entry->refcount > 0 && entry->index == NO_INDEX_ASSIGNED);
4298 entry->refcount--;
4301 /* Given a location list, remove all addresses it refers to from the
4302 address_table. */
4304 static void
4305 remove_loc_list_addr_table_entries (dw_loc_descr_ref descr)
4307 for (; descr; descr = descr->dw_loc_next)
4308 if (descr->dw_loc_oprnd1.val_entry != NULL)
4310 gcc_assert (descr->dw_loc_oprnd1.val_entry->index == NO_INDEX_ASSIGNED);
4311 remove_addr_table_entry (descr->dw_loc_oprnd1.val_entry);
4315 /* A helper function for dwarf2out_finish called through
4316 htab_traverse. Assign an addr_table_entry its index. All entries
4317 must be collected into the table when this function is called,
4318 because the indexing code relies on htab_traverse to traverse nodes
4319 in the same order for each run. */
4321 static int
4322 index_addr_table_entry (void **h, void *v)
4324 addr_table_entry *node = (addr_table_entry *) *h;
4325 unsigned int *index = (unsigned int *) v;
4327 /* Don't index unreferenced nodes. */
4328 if (node->refcount == 0)
4329 return 1;
4331 gcc_assert (node->index == NO_INDEX_ASSIGNED);
4332 node->index = *index;
4333 *index += 1;
4335 return 1;
4338 /* Add an address constant attribute value to a DIE. When using
4339 dwarf_split_debug_info, address attributes in dies destined for the
4340 final executable should be direct references--setting the parameter
4341 force_direct ensures this behavior. */
4343 static inline void
4344 add_AT_addr (dw_die_ref die, enum dwarf_attribute attr_kind, rtx addr,
4345 bool force_direct)
4347 dw_attr_node attr;
4349 attr.dw_attr = attr_kind;
4350 attr.dw_attr_val.val_class = dw_val_class_addr;
4351 attr.dw_attr_val.v.val_addr = addr;
4352 if (dwarf_split_debug_info && !force_direct)
4353 attr.dw_attr_val.val_entry = add_addr_table_entry (addr, ate_kind_rtx);
4354 else
4355 attr.dw_attr_val.val_entry = NULL;
4356 add_dwarf_attr (die, &attr);
4359 /* Get the RTX from to an address DIE attribute. */
4361 static inline rtx
4362 AT_addr (dw_attr_ref a)
4364 gcc_assert (a && AT_class (a) == dw_val_class_addr);
4365 return a->dw_attr_val.v.val_addr;
4368 /* Add a file attribute value to a DIE. */
4370 static inline void
4371 add_AT_file (dw_die_ref die, enum dwarf_attribute attr_kind,
4372 struct dwarf_file_data *fd)
4374 dw_attr_node attr;
4376 attr.dw_attr = attr_kind;
4377 attr.dw_attr_val.val_class = dw_val_class_file;
4378 attr.dw_attr_val.val_entry = NULL;
4379 attr.dw_attr_val.v.val_file = fd;
4380 add_dwarf_attr (die, &attr);
4383 /* Get the dwarf_file_data from a file DIE attribute. */
4385 static inline struct dwarf_file_data *
4386 AT_file (dw_attr_ref a)
4388 gcc_assert (a && AT_class (a) == dw_val_class_file);
4389 return a->dw_attr_val.v.val_file;
4392 /* Add a vms delta attribute value to a DIE. */
4394 static inline void
4395 add_AT_vms_delta (dw_die_ref die, enum dwarf_attribute attr_kind,
4396 const char *lbl1, const char *lbl2)
4398 dw_attr_node attr;
4400 attr.dw_attr = attr_kind;
4401 attr.dw_attr_val.val_class = dw_val_class_vms_delta;
4402 attr.dw_attr_val.val_entry = NULL;
4403 attr.dw_attr_val.v.val_vms_delta.lbl1 = xstrdup (lbl1);
4404 attr.dw_attr_val.v.val_vms_delta.lbl2 = xstrdup (lbl2);
4405 add_dwarf_attr (die, &attr);
4408 /* Add a label identifier attribute value to a DIE. */
4410 static inline void
4411 add_AT_lbl_id (dw_die_ref die, enum dwarf_attribute attr_kind,
4412 const char *lbl_id)
4414 dw_attr_node attr;
4416 attr.dw_attr = attr_kind;
4417 attr.dw_attr_val.val_class = dw_val_class_lbl_id;
4418 attr.dw_attr_val.val_entry = NULL;
4419 attr.dw_attr_val.v.val_lbl_id = xstrdup (lbl_id);
4420 if (dwarf_split_debug_info)
4421 attr.dw_attr_val.val_entry
4422 = add_addr_table_entry (attr.dw_attr_val.v.val_lbl_id,
4423 ate_kind_label);
4424 add_dwarf_attr (die, &attr);
4427 /* Add a section offset attribute value to a DIE, an offset into the
4428 debug_line section. */
4430 static inline void
4431 add_AT_lineptr (dw_die_ref die, enum dwarf_attribute attr_kind,
4432 const char *label)
4434 dw_attr_node attr;
4436 attr.dw_attr = attr_kind;
4437 attr.dw_attr_val.val_class = dw_val_class_lineptr;
4438 attr.dw_attr_val.val_entry = NULL;
4439 attr.dw_attr_val.v.val_lbl_id = xstrdup (label);
4440 add_dwarf_attr (die, &attr);
4443 /* Add a section offset attribute value to a DIE, an offset into the
4444 debug_macinfo section. */
4446 static inline void
4447 add_AT_macptr (dw_die_ref die, enum dwarf_attribute attr_kind,
4448 const char *label)
4450 dw_attr_node attr;
4452 attr.dw_attr = attr_kind;
4453 attr.dw_attr_val.val_class = dw_val_class_macptr;
4454 attr.dw_attr_val.val_entry = NULL;
4455 attr.dw_attr_val.v.val_lbl_id = xstrdup (label);
4456 add_dwarf_attr (die, &attr);
4459 /* Add an offset attribute value to a DIE. */
4461 static inline void
4462 add_AT_offset (dw_die_ref die, enum dwarf_attribute attr_kind,
4463 unsigned HOST_WIDE_INT offset)
4465 dw_attr_node attr;
4467 attr.dw_attr = attr_kind;
4468 attr.dw_attr_val.val_class = dw_val_class_offset;
4469 attr.dw_attr_val.val_entry = NULL;
4470 attr.dw_attr_val.v.val_offset = offset;
4471 add_dwarf_attr (die, &attr);
4474 /* Add a range_list attribute value to a DIE. When using
4475 dwarf_split_debug_info, address attributes in dies destined for the
4476 final executable should be direct references--setting the parameter
4477 force_direct ensures this behavior. */
4479 #define UNRELOCATED_OFFSET ((addr_table_entry *) 1)
4480 #define RELOCATED_OFFSET (NULL)
4482 static void
4483 add_AT_range_list (dw_die_ref die, enum dwarf_attribute attr_kind,
4484 long unsigned int offset, bool force_direct)
4486 dw_attr_node attr;
4488 attr.dw_attr = attr_kind;
4489 attr.dw_attr_val.val_class = dw_val_class_range_list;
4490 /* For the range_list attribute, use val_entry to store whether the
4491 offset should follow split-debug-info or normal semantics. This
4492 value is read in output_range_list_offset. */
4493 if (dwarf_split_debug_info && !force_direct)
4494 attr.dw_attr_val.val_entry = UNRELOCATED_OFFSET;
4495 else
4496 attr.dw_attr_val.val_entry = RELOCATED_OFFSET;
4497 attr.dw_attr_val.v.val_offset = offset;
4498 add_dwarf_attr (die, &attr);
4501 /* Return the start label of a delta attribute. */
4503 static inline const char *
4504 AT_vms_delta1 (dw_attr_ref a)
4506 gcc_assert (a && (AT_class (a) == dw_val_class_vms_delta));
4507 return a->dw_attr_val.v.val_vms_delta.lbl1;
4510 /* Return the end label of a delta attribute. */
4512 static inline const char *
4513 AT_vms_delta2 (dw_attr_ref a)
4515 gcc_assert (a && (AT_class (a) == dw_val_class_vms_delta));
4516 return a->dw_attr_val.v.val_vms_delta.lbl2;
4519 static inline const char *
4520 AT_lbl (dw_attr_ref a)
4522 gcc_assert (a && (AT_class (a) == dw_val_class_lbl_id
4523 || AT_class (a) == dw_val_class_lineptr
4524 || AT_class (a) == dw_val_class_macptr
4525 || AT_class (a) == dw_val_class_high_pc));
4526 return a->dw_attr_val.v.val_lbl_id;
4529 /* Get the attribute of type attr_kind. */
4531 static dw_attr_ref
4532 get_AT (dw_die_ref die, enum dwarf_attribute attr_kind)
4534 dw_attr_ref a;
4535 unsigned ix;
4536 dw_die_ref spec = NULL;
4538 if (! die)
4539 return NULL;
4541 FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
4542 if (a->dw_attr == attr_kind)
4543 return a;
4544 else if (a->dw_attr == DW_AT_specification
4545 || a->dw_attr == DW_AT_abstract_origin)
4546 spec = AT_ref (a);
4548 if (spec)
4549 return get_AT (spec, attr_kind);
4551 return NULL;
4554 /* Returns the parent of the declaration of DIE. */
4556 static dw_die_ref
4557 get_die_parent (dw_die_ref die)
4559 dw_die_ref t;
4561 if (!die)
4562 return NULL;
4564 if ((t = get_AT_ref (die, DW_AT_abstract_origin))
4565 || (t = get_AT_ref (die, DW_AT_specification)))
4566 die = t;
4568 return die->die_parent;
4571 /* Return the "low pc" attribute value, typically associated with a subprogram
4572 DIE. Return null if the "low pc" attribute is either not present, or if it
4573 cannot be represented as an assembler label identifier. */
4575 static inline const char *
4576 get_AT_low_pc (dw_die_ref die)
4578 dw_attr_ref a = get_AT (die, DW_AT_low_pc);
4580 return a ? AT_lbl (a) : NULL;
4583 /* Return the "high pc" attribute value, typically associated with a subprogram
4584 DIE. Return null if the "high pc" attribute is either not present, or if it
4585 cannot be represented as an assembler label identifier. */
4587 static inline const char *
4588 get_AT_hi_pc (dw_die_ref die)
4590 dw_attr_ref a = get_AT (die, DW_AT_high_pc);
4592 return a ? AT_lbl (a) : NULL;
4595 /* Return the value of the string attribute designated by ATTR_KIND, or
4596 NULL if it is not present. */
4598 static inline const char *
4599 get_AT_string (dw_die_ref die, enum dwarf_attribute attr_kind)
4601 dw_attr_ref a = get_AT (die, attr_kind);
4603 return a ? AT_string (a) : NULL;
4606 /* Return the value of the flag attribute designated by ATTR_KIND, or -1
4607 if it is not present. */
4609 static inline int
4610 get_AT_flag (dw_die_ref die, enum dwarf_attribute attr_kind)
4612 dw_attr_ref a = get_AT (die, attr_kind);
4614 return a ? AT_flag (a) : 0;
4617 /* Return the value of the unsigned attribute designated by ATTR_KIND, or 0
4618 if it is not present. */
4620 static inline unsigned
4621 get_AT_unsigned (dw_die_ref die, enum dwarf_attribute attr_kind)
4623 dw_attr_ref a = get_AT (die, attr_kind);
4625 return a ? AT_unsigned (a) : 0;
4628 static inline dw_die_ref
4629 get_AT_ref (dw_die_ref die, enum dwarf_attribute attr_kind)
4631 dw_attr_ref a = get_AT (die, attr_kind);
4633 return a ? AT_ref (a) : NULL;
4636 static inline struct dwarf_file_data *
4637 get_AT_file (dw_die_ref die, enum dwarf_attribute attr_kind)
4639 dw_attr_ref a = get_AT (die, attr_kind);
4641 return a ? AT_file (a) : NULL;
4644 /* Return TRUE if the language is C++. */
4646 static inline bool
4647 is_cxx (void)
4649 unsigned int lang = get_AT_unsigned (comp_unit_die (), DW_AT_language);
4651 return lang == DW_LANG_C_plus_plus || lang == DW_LANG_ObjC_plus_plus;
4654 /* Return TRUE if the language is Java. */
4656 static inline bool
4657 is_java (void)
4659 unsigned int lang = get_AT_unsigned (comp_unit_die (), DW_AT_language);
4661 return lang == DW_LANG_Java;
4664 /* Return TRUE if the language is Fortran. */
4666 static inline bool
4667 is_fortran (void)
4669 unsigned int lang = get_AT_unsigned (comp_unit_die (), DW_AT_language);
4671 return (lang == DW_LANG_Fortran77
4672 || lang == DW_LANG_Fortran90
4673 || lang == DW_LANG_Fortran95);
4676 /* Return TRUE if the language is Ada. */
4678 static inline bool
4679 is_ada (void)
4681 unsigned int lang = get_AT_unsigned (comp_unit_die (), DW_AT_language);
4683 return lang == DW_LANG_Ada95 || lang == DW_LANG_Ada83;
4686 /* Remove the specified attribute if present. */
4688 static void
4689 remove_AT (dw_die_ref die, enum dwarf_attribute attr_kind)
4691 dw_attr_ref a;
4692 unsigned ix;
4694 if (! die)
4695 return;
4697 FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
4698 if (a->dw_attr == attr_kind)
4700 if (AT_class (a) == dw_val_class_str)
4701 if (a->dw_attr_val.v.val_str->refcount)
4702 a->dw_attr_val.v.val_str->refcount--;
4704 /* vec::ordered_remove should help reduce the number of abbrevs
4705 that are needed. */
4706 die->die_attr->ordered_remove (ix);
4707 return;
4711 /* Remove CHILD from its parent. PREV must have the property that
4712 PREV->DIE_SIB == CHILD. Does not alter CHILD. */
4714 static void
4715 remove_child_with_prev (dw_die_ref child, dw_die_ref prev)
4717 gcc_assert (child->die_parent == prev->die_parent);
4718 gcc_assert (prev->die_sib == child);
4719 if (prev == child)
4721 gcc_assert (child->die_parent->die_child == child);
4722 prev = NULL;
4724 else
4725 prev->die_sib = child->die_sib;
4726 if (child->die_parent->die_child == child)
4727 child->die_parent->die_child = prev;
4730 /* Replace OLD_CHILD with NEW_CHILD. PREV must have the property that
4731 PREV->DIE_SIB == OLD_CHILD. Does not alter OLD_CHILD. */
4733 static void
4734 replace_child (dw_die_ref old_child, dw_die_ref new_child, dw_die_ref prev)
4736 dw_die_ref parent = old_child->die_parent;
4738 gcc_assert (parent == prev->die_parent);
4739 gcc_assert (prev->die_sib == old_child);
4741 new_child->die_parent = parent;
4742 if (prev == old_child)
4744 gcc_assert (parent->die_child == old_child);
4745 new_child->die_sib = new_child;
4747 else
4749 prev->die_sib = new_child;
4750 new_child->die_sib = old_child->die_sib;
4752 if (old_child->die_parent->die_child == old_child)
4753 old_child->die_parent->die_child = new_child;
4756 /* Move all children from OLD_PARENT to NEW_PARENT. */
4758 static void
4759 move_all_children (dw_die_ref old_parent, dw_die_ref new_parent)
4761 dw_die_ref c;
4762 new_parent->die_child = old_parent->die_child;
4763 old_parent->die_child = NULL;
4764 FOR_EACH_CHILD (new_parent, c, c->die_parent = new_parent);
4767 /* Remove child DIE whose die_tag is TAG. Do nothing if no child
4768 matches TAG. */
4770 static void
4771 remove_child_TAG (dw_die_ref die, enum dwarf_tag tag)
4773 dw_die_ref c;
4775 c = die->die_child;
4776 if (c) do {
4777 dw_die_ref prev = c;
4778 c = c->die_sib;
4779 while (c->die_tag == tag)
4781 remove_child_with_prev (c, prev);
4782 /* Might have removed every child. */
4783 if (c == c->die_sib)
4784 return;
4785 c = c->die_sib;
4787 } while (c != die->die_child);
4790 /* Add a CHILD_DIE as the last child of DIE. */
4792 static void
4793 add_child_die (dw_die_ref die, dw_die_ref child_die)
4795 /* FIXME this should probably be an assert. */
4796 if (! die || ! child_die)
4797 return;
4798 gcc_assert (die != child_die);
4800 child_die->die_parent = die;
4801 if (die->die_child)
4803 child_die->die_sib = die->die_child->die_sib;
4804 die->die_child->die_sib = child_die;
4806 else
4807 child_die->die_sib = child_die;
4808 die->die_child = child_die;
4811 /* Move CHILD, which must be a child of PARENT or the DIE for which PARENT
4812 is the specification, to the end of PARENT's list of children.
4813 This is done by removing and re-adding it. */
4815 static void
4816 splice_child_die (dw_die_ref parent, dw_die_ref child)
4818 dw_die_ref p;
4820 /* We want the declaration DIE from inside the class, not the
4821 specification DIE at toplevel. */
4822 if (child->die_parent != parent)
4824 dw_die_ref tmp = get_AT_ref (child, DW_AT_specification);
4826 if (tmp)
4827 child = tmp;
4830 gcc_assert (child->die_parent == parent
4831 || (child->die_parent
4832 == get_AT_ref (parent, DW_AT_specification)));
4834 for (p = child->die_parent->die_child; ; p = p->die_sib)
4835 if (p->die_sib == child)
4837 remove_child_with_prev (child, p);
4838 break;
4841 add_child_die (parent, child);
4844 /* Return a pointer to a newly created DIE node. */
4846 static inline dw_die_ref
4847 new_die (enum dwarf_tag tag_value, dw_die_ref parent_die, tree t)
4849 dw_die_ref die = ggc_cleared_alloc<die_node> ();
4851 die->die_tag = tag_value;
4853 if (parent_die != NULL)
4854 add_child_die (parent_die, die);
4855 else
4857 limbo_die_node *limbo_node;
4859 limbo_node = ggc_cleared_alloc<limbo_die_node> ();
4860 limbo_node->die = die;
4861 limbo_node->created_for = t;
4862 limbo_node->next = limbo_die_list;
4863 limbo_die_list = limbo_node;
4866 return die;
4869 /* Return the DIE associated with the given type specifier. */
4871 static inline dw_die_ref
4872 lookup_type_die (tree type)
4874 return TYPE_SYMTAB_DIE (type);
4877 /* Given a TYPE_DIE representing the type TYPE, if TYPE is an
4878 anonymous type named by the typedef TYPE_DIE, return the DIE of the
4879 anonymous type instead the one of the naming typedef. */
4881 static inline dw_die_ref
4882 strip_naming_typedef (tree type, dw_die_ref type_die)
4884 if (type
4885 && TREE_CODE (type) == RECORD_TYPE
4886 && type_die
4887 && type_die->die_tag == DW_TAG_typedef
4888 && is_naming_typedef_decl (TYPE_NAME (type)))
4889 type_die = get_AT_ref (type_die, DW_AT_type);
4890 return type_die;
4893 /* Like lookup_type_die, but if type is an anonymous type named by a
4894 typedef[1], return the DIE of the anonymous type instead the one of
4895 the naming typedef. This is because in gen_typedef_die, we did
4896 equate the anonymous struct named by the typedef with the DIE of
4897 the naming typedef. So by default, lookup_type_die on an anonymous
4898 struct yields the DIE of the naming typedef.
4900 [1]: Read the comment of is_naming_typedef_decl to learn about what
4901 a naming typedef is. */
4903 static inline dw_die_ref
4904 lookup_type_die_strip_naming_typedef (tree type)
4906 dw_die_ref die = lookup_type_die (type);
4907 return strip_naming_typedef (type, die);
4910 /* Equate a DIE to a given type specifier. */
4912 static inline void
4913 equate_type_number_to_die (tree type, dw_die_ref type_die)
4915 TYPE_SYMTAB_DIE (type) = type_die;
4918 /* Returns a hash value for X (which really is a die_struct). */
4920 static hashval_t
4921 decl_die_table_hash (const void *x)
4923 return (hashval_t) ((const_dw_die_ref) x)->decl_id;
4926 /* Return nonzero if decl_id of die_struct X is the same as UID of decl *Y. */
4928 static int
4929 decl_die_table_eq (const void *x, const void *y)
4931 return (((const_dw_die_ref) x)->decl_id == DECL_UID ((const_tree) y));
4934 /* Return the DIE associated with a given declaration. */
4936 static inline dw_die_ref
4937 lookup_decl_die (tree decl)
4939 return (dw_die_ref) htab_find_with_hash (decl_die_table, decl, DECL_UID (decl));
4942 /* Returns a hash value for X (which really is a var_loc_list). */
4944 static hashval_t
4945 decl_loc_table_hash (const void *x)
4947 return (hashval_t) ((const var_loc_list *) x)->decl_id;
4950 /* Return nonzero if decl_id of var_loc_list X is the same as
4951 UID of decl *Y. */
4953 static int
4954 decl_loc_table_eq (const void *x, const void *y)
4956 return (((const var_loc_list *) x)->decl_id == DECL_UID ((const_tree) y));
4959 /* Return the var_loc list associated with a given declaration. */
4961 static inline var_loc_list *
4962 lookup_decl_loc (const_tree decl)
4964 if (!decl_loc_table)
4965 return NULL;
4966 return (var_loc_list *)
4967 htab_find_with_hash (decl_loc_table, decl, DECL_UID (decl));
4970 /* Returns a hash value for X (which really is a cached_dw_loc_list_list). */
4972 static hashval_t
4973 cached_dw_loc_list_table_hash (const void *x)
4975 return (hashval_t) ((const cached_dw_loc_list *) x)->decl_id;
4978 /* Return nonzero if decl_id of cached_dw_loc_list X is the same as
4979 UID of decl *Y. */
4981 static int
4982 cached_dw_loc_list_table_eq (const void *x, const void *y)
4984 return (((const cached_dw_loc_list *) x)->decl_id
4985 == DECL_UID ((const_tree) y));
4988 /* Equate a DIE to a particular declaration. */
4990 static void
4991 equate_decl_number_to_die (tree decl, dw_die_ref decl_die)
4993 unsigned int decl_id = DECL_UID (decl);
4994 void **slot;
4996 slot = htab_find_slot_with_hash (decl_die_table, decl, decl_id, INSERT);
4997 *slot = decl_die;
4998 decl_die->decl_id = decl_id;
5001 /* Return how many bits covers PIECE EXPR_LIST. */
5003 static int
5004 decl_piece_bitsize (rtx piece)
5006 int ret = (int) GET_MODE (piece);
5007 if (ret)
5008 return ret;
5009 gcc_assert (GET_CODE (XEXP (piece, 0)) == CONCAT
5010 && CONST_INT_P (XEXP (XEXP (piece, 0), 0)));
5011 return INTVAL (XEXP (XEXP (piece, 0), 0));
5014 /* Return pointer to the location of location note in PIECE EXPR_LIST. */
5016 static rtx *
5017 decl_piece_varloc_ptr (rtx piece)
5019 if ((int) GET_MODE (piece))
5020 return &XEXP (piece, 0);
5021 else
5022 return &XEXP (XEXP (piece, 0), 1);
5025 /* Create an EXPR_LIST for location note LOC_NOTE covering BITSIZE bits.
5026 Next is the chain of following piece nodes. */
5028 static rtx_expr_list *
5029 decl_piece_node (rtx loc_note, HOST_WIDE_INT bitsize, rtx next)
5031 if (bitsize <= (int) MAX_MACHINE_MODE)
5032 return alloc_EXPR_LIST (bitsize, loc_note, next);
5033 else
5034 return alloc_EXPR_LIST (0, gen_rtx_CONCAT (VOIDmode,
5035 GEN_INT (bitsize),
5036 loc_note), next);
5039 /* Return rtx that should be stored into loc field for
5040 LOC_NOTE and BITPOS/BITSIZE. */
5042 static rtx
5043 construct_piece_list (rtx loc_note, HOST_WIDE_INT bitpos,
5044 HOST_WIDE_INT bitsize)
5046 if (bitsize != -1)
5048 loc_note = decl_piece_node (loc_note, bitsize, NULL_RTX);
5049 if (bitpos != 0)
5050 loc_note = decl_piece_node (NULL_RTX, bitpos, loc_note);
5052 return loc_note;
5055 /* This function either modifies location piece list *DEST in
5056 place (if SRC and INNER is NULL), or copies location piece list
5057 *SRC to *DEST while modifying it. Location BITPOS is modified
5058 to contain LOC_NOTE, any pieces overlapping it are removed resp.
5059 not copied and if needed some padding around it is added.
5060 When modifying in place, DEST should point to EXPR_LIST where
5061 earlier pieces cover PIECE_BITPOS bits, when copying SRC points
5062 to the start of the whole list and INNER points to the EXPR_LIST
5063 where earlier pieces cover PIECE_BITPOS bits. */
5065 static void
5066 adjust_piece_list (rtx *dest, rtx *src, rtx *inner,
5067 HOST_WIDE_INT bitpos, HOST_WIDE_INT piece_bitpos,
5068 HOST_WIDE_INT bitsize, rtx loc_note)
5070 int diff;
5071 bool copy = inner != NULL;
5073 if (copy)
5075 /* First copy all nodes preceding the current bitpos. */
5076 while (src != inner)
5078 *dest = decl_piece_node (*decl_piece_varloc_ptr (*src),
5079 decl_piece_bitsize (*src), NULL_RTX);
5080 dest = &XEXP (*dest, 1);
5081 src = &XEXP (*src, 1);
5084 /* Add padding if needed. */
5085 if (bitpos != piece_bitpos)
5087 *dest = decl_piece_node (NULL_RTX, bitpos - piece_bitpos,
5088 copy ? NULL_RTX : *dest);
5089 dest = &XEXP (*dest, 1);
5091 else if (*dest && decl_piece_bitsize (*dest) == bitsize)
5093 gcc_assert (!copy);
5094 /* A piece with correct bitpos and bitsize already exist,
5095 just update the location for it and return. */
5096 *decl_piece_varloc_ptr (*dest) = loc_note;
5097 return;
5099 /* Add the piece that changed. */
5100 *dest = decl_piece_node (loc_note, bitsize, copy ? NULL_RTX : *dest);
5101 dest = &XEXP (*dest, 1);
5102 /* Skip over pieces that overlap it. */
5103 diff = bitpos - piece_bitpos + bitsize;
5104 if (!copy)
5105 src = dest;
5106 while (diff > 0 && *src)
5108 rtx piece = *src;
5109 diff -= decl_piece_bitsize (piece);
5110 if (copy)
5111 src = &XEXP (piece, 1);
5112 else
5114 *src = XEXP (piece, 1);
5115 free_EXPR_LIST_node (piece);
5118 /* Add padding if needed. */
5119 if (diff < 0 && *src)
5121 if (!copy)
5122 dest = src;
5123 *dest = decl_piece_node (NULL_RTX, -diff, copy ? NULL_RTX : *dest);
5124 dest = &XEXP (*dest, 1);
5126 if (!copy)
5127 return;
5128 /* Finally copy all nodes following it. */
5129 while (*src)
5131 *dest = decl_piece_node (*decl_piece_varloc_ptr (*src),
5132 decl_piece_bitsize (*src), NULL_RTX);
5133 dest = &XEXP (*dest, 1);
5134 src = &XEXP (*src, 1);
5138 /* Add a variable location node to the linked list for DECL. */
5140 static struct var_loc_node *
5141 add_var_loc_to_decl (tree decl, rtx loc_note, const char *label)
5143 unsigned int decl_id;
5144 var_loc_list *temp;
5145 void **slot;
5146 struct var_loc_node *loc = NULL;
5147 HOST_WIDE_INT bitsize = -1, bitpos = -1;
5149 if (TREE_CODE (decl) == VAR_DECL
5150 && DECL_HAS_DEBUG_EXPR_P (decl))
5152 tree realdecl = DECL_DEBUG_EXPR (decl);
5153 if (handled_component_p (realdecl)
5154 || (TREE_CODE (realdecl) == MEM_REF
5155 && TREE_CODE (TREE_OPERAND (realdecl, 0)) == ADDR_EXPR))
5157 HOST_WIDE_INT maxsize;
5158 tree innerdecl;
5159 innerdecl
5160 = get_ref_base_and_extent (realdecl, &bitpos, &bitsize, &maxsize);
5161 if (!DECL_P (innerdecl)
5162 || DECL_IGNORED_P (innerdecl)
5163 || TREE_STATIC (innerdecl)
5164 || bitsize <= 0
5165 || bitpos + bitsize > 256
5166 || bitsize != maxsize)
5167 return NULL;
5168 decl = innerdecl;
5172 decl_id = DECL_UID (decl);
5173 slot = htab_find_slot_with_hash (decl_loc_table, decl, decl_id, INSERT);
5174 if (*slot == NULL)
5176 temp = ggc_cleared_alloc<var_loc_list> ();
5177 temp->decl_id = decl_id;
5178 *slot = temp;
5180 else
5181 temp = (var_loc_list *) *slot;
5183 /* For PARM_DECLs try to keep around the original incoming value,
5184 even if that means we'll emit a zero-range .debug_loc entry. */
5185 if (temp->last
5186 && temp->first == temp->last
5187 && TREE_CODE (decl) == PARM_DECL
5188 && NOTE_P (temp->first->loc)
5189 && NOTE_VAR_LOCATION_DECL (temp->first->loc) == decl
5190 && DECL_INCOMING_RTL (decl)
5191 && NOTE_VAR_LOCATION_LOC (temp->first->loc)
5192 && GET_CODE (NOTE_VAR_LOCATION_LOC (temp->first->loc))
5193 == GET_CODE (DECL_INCOMING_RTL (decl))
5194 && prev_real_insn (temp->first->loc) == NULL_RTX
5195 && (bitsize != -1
5196 || !rtx_equal_p (NOTE_VAR_LOCATION_LOC (temp->first->loc),
5197 NOTE_VAR_LOCATION_LOC (loc_note))
5198 || (NOTE_VAR_LOCATION_STATUS (temp->first->loc)
5199 != NOTE_VAR_LOCATION_STATUS (loc_note))))
5201 loc = ggc_cleared_alloc<var_loc_node> ();
5202 temp->first->next = loc;
5203 temp->last = loc;
5204 loc->loc = construct_piece_list (loc_note, bitpos, bitsize);
5206 else if (temp->last)
5208 struct var_loc_node *last = temp->last, *unused = NULL;
5209 rtx *piece_loc = NULL, last_loc_note;
5210 int piece_bitpos = 0;
5211 if (last->next)
5213 last = last->next;
5214 gcc_assert (last->next == NULL);
5216 if (bitsize != -1 && GET_CODE (last->loc) == EXPR_LIST)
5218 piece_loc = &last->loc;
5221 int cur_bitsize = decl_piece_bitsize (*piece_loc);
5222 if (piece_bitpos + cur_bitsize > bitpos)
5223 break;
5224 piece_bitpos += cur_bitsize;
5225 piece_loc = &XEXP (*piece_loc, 1);
5227 while (*piece_loc);
5229 /* TEMP->LAST here is either pointer to the last but one or
5230 last element in the chained list, LAST is pointer to the
5231 last element. */
5232 if (label && strcmp (last->label, label) == 0)
5234 /* For SRA optimized variables if there weren't any real
5235 insns since last note, just modify the last node. */
5236 if (piece_loc != NULL)
5238 adjust_piece_list (piece_loc, NULL, NULL,
5239 bitpos, piece_bitpos, bitsize, loc_note);
5240 return NULL;
5242 /* If the last note doesn't cover any instructions, remove it. */
5243 if (temp->last != last)
5245 temp->last->next = NULL;
5246 unused = last;
5247 last = temp->last;
5248 gcc_assert (strcmp (last->label, label) != 0);
5250 else
5252 gcc_assert (temp->first == temp->last
5253 || (temp->first->next == temp->last
5254 && TREE_CODE (decl) == PARM_DECL));
5255 memset (temp->last, '\0', sizeof (*temp->last));
5256 temp->last->loc = construct_piece_list (loc_note, bitpos, bitsize);
5257 return temp->last;
5260 if (bitsize == -1 && NOTE_P (last->loc))
5261 last_loc_note = last->loc;
5262 else if (piece_loc != NULL
5263 && *piece_loc != NULL_RTX
5264 && piece_bitpos == bitpos
5265 && decl_piece_bitsize (*piece_loc) == bitsize)
5266 last_loc_note = *decl_piece_varloc_ptr (*piece_loc);
5267 else
5268 last_loc_note = NULL_RTX;
5269 /* If the current location is the same as the end of the list,
5270 and either both or neither of the locations is uninitialized,
5271 we have nothing to do. */
5272 if (last_loc_note == NULL_RTX
5273 || (!rtx_equal_p (NOTE_VAR_LOCATION_LOC (last_loc_note),
5274 NOTE_VAR_LOCATION_LOC (loc_note)))
5275 || ((NOTE_VAR_LOCATION_STATUS (last_loc_note)
5276 != NOTE_VAR_LOCATION_STATUS (loc_note))
5277 && ((NOTE_VAR_LOCATION_STATUS (last_loc_note)
5278 == VAR_INIT_STATUS_UNINITIALIZED)
5279 || (NOTE_VAR_LOCATION_STATUS (loc_note)
5280 == VAR_INIT_STATUS_UNINITIALIZED))))
5282 /* Add LOC to the end of list and update LAST. If the last
5283 element of the list has been removed above, reuse its
5284 memory for the new node, otherwise allocate a new one. */
5285 if (unused)
5287 loc = unused;
5288 memset (loc, '\0', sizeof (*loc));
5290 else
5291 loc = ggc_cleared_alloc<var_loc_node> ();
5292 if (bitsize == -1 || piece_loc == NULL)
5293 loc->loc = construct_piece_list (loc_note, bitpos, bitsize);
5294 else
5295 adjust_piece_list (&loc->loc, &last->loc, piece_loc,
5296 bitpos, piece_bitpos, bitsize, loc_note);
5297 last->next = loc;
5298 /* Ensure TEMP->LAST will point either to the new last but one
5299 element of the chain, or to the last element in it. */
5300 if (last != temp->last)
5301 temp->last = last;
5303 else if (unused)
5304 ggc_free (unused);
5306 else
5308 loc = ggc_cleared_alloc<var_loc_node> ();
5309 temp->first = loc;
5310 temp->last = loc;
5311 loc->loc = construct_piece_list (loc_note, bitpos, bitsize);
5313 return loc;
5316 /* Keep track of the number of spaces used to indent the
5317 output of the debugging routines that print the structure of
5318 the DIE internal representation. */
5319 static int print_indent;
5321 /* Indent the line the number of spaces given by print_indent. */
5323 static inline void
5324 print_spaces (FILE *outfile)
5326 fprintf (outfile, "%*s", print_indent, "");
5329 /* Print a type signature in hex. */
5331 static inline void
5332 print_signature (FILE *outfile, char *sig)
5334 int i;
5336 for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++)
5337 fprintf (outfile, "%02x", sig[i] & 0xff);
5340 /* Print the information associated with a given DIE, and its children.
5341 This routine is a debugging aid only. */
5343 static void
5344 print_die (dw_die_ref die, FILE *outfile)
5346 dw_attr_ref a;
5347 dw_die_ref c;
5348 unsigned ix;
5350 print_spaces (outfile);
5351 fprintf (outfile, "DIE %4ld: %s (%p)\n",
5352 die->die_offset, dwarf_tag_name (die->die_tag),
5353 (void*) die);
5354 print_spaces (outfile);
5355 fprintf (outfile, " abbrev id: %lu", die->die_abbrev);
5356 fprintf (outfile, " offset: %ld", die->die_offset);
5357 fprintf (outfile, " mark: %d\n", die->die_mark);
5359 if (die->comdat_type_p)
5361 print_spaces (outfile);
5362 fprintf (outfile, " signature: ");
5363 print_signature (outfile, die->die_id.die_type_node->signature);
5364 fprintf (outfile, "\n");
5367 FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
5369 print_spaces (outfile);
5370 fprintf (outfile, " %s: ", dwarf_attr_name (a->dw_attr));
5372 switch (AT_class (a))
5374 case dw_val_class_addr:
5375 fprintf (outfile, "address");
5376 break;
5377 case dw_val_class_offset:
5378 fprintf (outfile, "offset");
5379 break;
5380 case dw_val_class_loc:
5381 fprintf (outfile, "location descriptor");
5382 break;
5383 case dw_val_class_loc_list:
5384 fprintf (outfile, "location list -> label:%s",
5385 AT_loc_list (a)->ll_symbol);
5386 break;
5387 case dw_val_class_range_list:
5388 fprintf (outfile, "range list");
5389 break;
5390 case dw_val_class_const:
5391 fprintf (outfile, HOST_WIDE_INT_PRINT_DEC, AT_int (a));
5392 break;
5393 case dw_val_class_unsigned_const:
5394 fprintf (outfile, HOST_WIDE_INT_PRINT_UNSIGNED, AT_unsigned (a));
5395 break;
5396 case dw_val_class_const_double:
5397 fprintf (outfile, "constant ("HOST_WIDE_INT_PRINT_DEC","\
5398 HOST_WIDE_INT_PRINT_UNSIGNED")",
5399 a->dw_attr_val.v.val_double.high,
5400 a->dw_attr_val.v.val_double.low);
5401 break;
5402 case dw_val_class_wide_int:
5404 int i = a->dw_attr_val.v.val_wide->get_len ();
5405 fprintf (outfile, "constant (");
5406 gcc_assert (i > 0);
5407 if (a->dw_attr_val.v.val_wide->elt (i - 1) == 0)
5408 fprintf (outfile, "0x");
5409 fprintf (outfile, HOST_WIDE_INT_PRINT_HEX,
5410 a->dw_attr_val.v.val_wide->elt (--i));
5411 while (--i >= 0)
5412 fprintf (outfile, HOST_WIDE_INT_PRINT_PADDED_HEX,
5413 a->dw_attr_val.v.val_wide->elt (i));
5414 fprintf (outfile, ")");
5415 break;
5417 case dw_val_class_vec:
5418 fprintf (outfile, "floating-point or vector constant");
5419 break;
5420 case dw_val_class_flag:
5421 fprintf (outfile, "%u", AT_flag (a));
5422 break;
5423 case dw_val_class_die_ref:
5424 if (AT_ref (a) != NULL)
5426 if (AT_ref (a)->comdat_type_p)
5428 fprintf (outfile, "die -> signature: ");
5429 print_signature (outfile,
5430 AT_ref (a)->die_id.die_type_node->signature);
5432 else if (AT_ref (a)->die_id.die_symbol)
5433 fprintf (outfile, "die -> label: %s",
5434 AT_ref (a)->die_id.die_symbol);
5435 else
5436 fprintf (outfile, "die -> %ld", AT_ref (a)->die_offset);
5437 fprintf (outfile, " (%p)", (void *) AT_ref (a));
5439 else
5440 fprintf (outfile, "die -> <null>");
5441 break;
5442 case dw_val_class_vms_delta:
5443 fprintf (outfile, "delta: @slotcount(%s-%s)",
5444 AT_vms_delta2 (a), AT_vms_delta1 (a));
5445 break;
5446 case dw_val_class_lbl_id:
5447 case dw_val_class_lineptr:
5448 case dw_val_class_macptr:
5449 case dw_val_class_high_pc:
5450 fprintf (outfile, "label: %s", AT_lbl (a));
5451 break;
5452 case dw_val_class_str:
5453 if (AT_string (a) != NULL)
5454 fprintf (outfile, "\"%s\"", AT_string (a));
5455 else
5456 fprintf (outfile, "<null>");
5457 break;
5458 case dw_val_class_file:
5459 fprintf (outfile, "\"%s\" (%d)", AT_file (a)->filename,
5460 AT_file (a)->emitted_number);
5461 break;
5462 case dw_val_class_data8:
5464 int i;
5466 for (i = 0; i < 8; i++)
5467 fprintf (outfile, "%02x", a->dw_attr_val.v.val_data8[i]);
5468 break;
5470 default:
5471 break;
5474 fprintf (outfile, "\n");
5477 if (die->die_child != NULL)
5479 print_indent += 4;
5480 FOR_EACH_CHILD (die, c, print_die (c, outfile));
5481 print_indent -= 4;
5483 if (print_indent == 0)
5484 fprintf (outfile, "\n");
5487 /* Print the information collected for a given DIE. */
5489 DEBUG_FUNCTION void
5490 debug_dwarf_die (dw_die_ref die)
5492 print_die (die, stderr);
5495 DEBUG_FUNCTION void
5496 debug (die_struct &ref)
5498 print_die (&ref, stderr);
5501 DEBUG_FUNCTION void
5502 debug (die_struct *ptr)
5504 if (ptr)
5505 debug (*ptr);
5506 else
5507 fprintf (stderr, "<nil>\n");
5511 /* Print all DWARF information collected for the compilation unit.
5512 This routine is a debugging aid only. */
5514 DEBUG_FUNCTION void
5515 debug_dwarf (void)
5517 print_indent = 0;
5518 print_die (comp_unit_die (), stderr);
5521 /* Start a new compilation unit DIE for an include file. OLD_UNIT is the CU
5522 for the enclosing include file, if any. BINCL_DIE is the DW_TAG_GNU_BINCL
5523 DIE that marks the start of the DIEs for this include file. */
5525 static dw_die_ref
5526 push_new_compile_unit (dw_die_ref old_unit, dw_die_ref bincl_die)
5528 const char *filename = get_AT_string (bincl_die, DW_AT_name);
5529 dw_die_ref new_unit = gen_compile_unit_die (filename);
5531 new_unit->die_sib = old_unit;
5532 return new_unit;
5535 /* Close an include-file CU and reopen the enclosing one. */
5537 static dw_die_ref
5538 pop_compile_unit (dw_die_ref old_unit)
5540 dw_die_ref new_unit = old_unit->die_sib;
5542 old_unit->die_sib = NULL;
5543 return new_unit;
5546 #define CHECKSUM(FOO) md5_process_bytes (&(FOO), sizeof (FOO), ctx)
5547 #define CHECKSUM_BLOCK(FOO, SIZE) md5_process_bytes ((FOO), (SIZE), ctx)
5548 #define CHECKSUM_STRING(FOO) md5_process_bytes ((FOO), strlen (FOO), ctx)
5550 /* Calculate the checksum of a location expression. */
5552 static inline void
5553 loc_checksum (dw_loc_descr_ref loc, struct md5_ctx *ctx)
5555 int tem;
5556 inchash::hash hstate;
5557 hashval_t hash;
5559 tem = (loc->dtprel << 8) | ((unsigned int) loc->dw_loc_opc);
5560 CHECKSUM (tem);
5561 hash_loc_operands (loc, hstate);
5562 hash = hstate.end();
5563 CHECKSUM (hash);
5566 /* Calculate the checksum of an attribute. */
5568 static void
5569 attr_checksum (dw_attr_ref at, struct md5_ctx *ctx, int *mark)
5571 dw_loc_descr_ref loc;
5572 rtx r;
5574 CHECKSUM (at->dw_attr);
5576 /* We don't care that this was compiled with a different compiler
5577 snapshot; if the output is the same, that's what matters. */
5578 if (at->dw_attr == DW_AT_producer)
5579 return;
5581 switch (AT_class (at))
5583 case dw_val_class_const:
5584 CHECKSUM (at->dw_attr_val.v.val_int);
5585 break;
5586 case dw_val_class_unsigned_const:
5587 CHECKSUM (at->dw_attr_val.v.val_unsigned);
5588 break;
5589 case dw_val_class_const_double:
5590 CHECKSUM (at->dw_attr_val.v.val_double);
5591 break;
5592 case dw_val_class_wide_int:
5593 CHECKSUM (*at->dw_attr_val.v.val_wide);
5594 break;
5595 case dw_val_class_vec:
5596 CHECKSUM_BLOCK (at->dw_attr_val.v.val_vec.array,
5597 (at->dw_attr_val.v.val_vec.length
5598 * at->dw_attr_val.v.val_vec.elt_size));
5599 break;
5600 case dw_val_class_flag:
5601 CHECKSUM (at->dw_attr_val.v.val_flag);
5602 break;
5603 case dw_val_class_str:
5604 CHECKSUM_STRING (AT_string (at));
5605 break;
5607 case dw_val_class_addr:
5608 r = AT_addr (at);
5609 gcc_assert (GET_CODE (r) == SYMBOL_REF);
5610 CHECKSUM_STRING (XSTR (r, 0));
5611 break;
5613 case dw_val_class_offset:
5614 CHECKSUM (at->dw_attr_val.v.val_offset);
5615 break;
5617 case dw_val_class_loc:
5618 for (loc = AT_loc (at); loc; loc = loc->dw_loc_next)
5619 loc_checksum (loc, ctx);
5620 break;
5622 case dw_val_class_die_ref:
5623 die_checksum (AT_ref (at), ctx, mark);
5624 break;
5626 case dw_val_class_fde_ref:
5627 case dw_val_class_vms_delta:
5628 case dw_val_class_lbl_id:
5629 case dw_val_class_lineptr:
5630 case dw_val_class_macptr:
5631 case dw_val_class_high_pc:
5632 break;
5634 case dw_val_class_file:
5635 CHECKSUM_STRING (AT_file (at)->filename);
5636 break;
5638 case dw_val_class_data8:
5639 CHECKSUM (at->dw_attr_val.v.val_data8);
5640 break;
5642 default:
5643 break;
5647 /* Calculate the checksum of a DIE. */
5649 static void
5650 die_checksum (dw_die_ref die, struct md5_ctx *ctx, int *mark)
5652 dw_die_ref c;
5653 dw_attr_ref a;
5654 unsigned ix;
5656 /* To avoid infinite recursion. */
5657 if (die->die_mark)
5659 CHECKSUM (die->die_mark);
5660 return;
5662 die->die_mark = ++(*mark);
5664 CHECKSUM (die->die_tag);
5666 FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
5667 attr_checksum (a, ctx, mark);
5669 FOR_EACH_CHILD (die, c, die_checksum (c, ctx, mark));
5672 #undef CHECKSUM
5673 #undef CHECKSUM_BLOCK
5674 #undef CHECKSUM_STRING
5676 /* For DWARF-4 types, include the trailing NULL when checksumming strings. */
5677 #define CHECKSUM(FOO) md5_process_bytes (&(FOO), sizeof (FOO), ctx)
5678 #define CHECKSUM_BLOCK(FOO, SIZE) md5_process_bytes ((FOO), (SIZE), ctx)
5679 #define CHECKSUM_STRING(FOO) md5_process_bytes ((FOO), strlen (FOO) + 1, ctx)
5680 #define CHECKSUM_SLEB128(FOO) checksum_sleb128 ((FOO), ctx)
5681 #define CHECKSUM_ULEB128(FOO) checksum_uleb128 ((FOO), ctx)
5682 #define CHECKSUM_ATTR(FOO) \
5683 if (FOO) attr_checksum_ordered (die->die_tag, (FOO), ctx, mark)
5685 /* Calculate the checksum of a number in signed LEB128 format. */
5687 static void
5688 checksum_sleb128 (HOST_WIDE_INT value, struct md5_ctx *ctx)
5690 unsigned char byte;
5691 bool more;
5693 while (1)
5695 byte = (value & 0x7f);
5696 value >>= 7;
5697 more = !((value == 0 && (byte & 0x40) == 0)
5698 || (value == -1 && (byte & 0x40) != 0));
5699 if (more)
5700 byte |= 0x80;
5701 CHECKSUM (byte);
5702 if (!more)
5703 break;
5707 /* Calculate the checksum of a number in unsigned LEB128 format. */
5709 static void
5710 checksum_uleb128 (unsigned HOST_WIDE_INT value, struct md5_ctx *ctx)
5712 while (1)
5714 unsigned char byte = (value & 0x7f);
5715 value >>= 7;
5716 if (value != 0)
5717 /* More bytes to follow. */
5718 byte |= 0x80;
5719 CHECKSUM (byte);
5720 if (value == 0)
5721 break;
5725 /* Checksum the context of the DIE. This adds the names of any
5726 surrounding namespaces or structures to the checksum. */
5728 static void
5729 checksum_die_context (dw_die_ref die, struct md5_ctx *ctx)
5731 const char *name;
5732 dw_die_ref spec;
5733 int tag = die->die_tag;
5735 if (tag != DW_TAG_namespace
5736 && tag != DW_TAG_structure_type
5737 && tag != DW_TAG_class_type)
5738 return;
5740 name = get_AT_string (die, DW_AT_name);
5742 spec = get_AT_ref (die, DW_AT_specification);
5743 if (spec != NULL)
5744 die = spec;
5746 if (die->die_parent != NULL)
5747 checksum_die_context (die->die_parent, ctx);
5749 CHECKSUM_ULEB128 ('C');
5750 CHECKSUM_ULEB128 (tag);
5751 if (name != NULL)
5752 CHECKSUM_STRING (name);
5755 /* Calculate the checksum of a location expression. */
5757 static inline void
5758 loc_checksum_ordered (dw_loc_descr_ref loc, struct md5_ctx *ctx)
5760 /* Special case for lone DW_OP_plus_uconst: checksum as if the location
5761 were emitted as a DW_FORM_sdata instead of a location expression. */
5762 if (loc->dw_loc_opc == DW_OP_plus_uconst && loc->dw_loc_next == NULL)
5764 CHECKSUM_ULEB128 (DW_FORM_sdata);
5765 CHECKSUM_SLEB128 ((HOST_WIDE_INT) loc->dw_loc_oprnd1.v.val_unsigned);
5766 return;
5769 /* Otherwise, just checksum the raw location expression. */
5770 while (loc != NULL)
5772 inchash::hash hstate;
5773 hashval_t hash;
5775 CHECKSUM_ULEB128 (loc->dtprel);
5776 CHECKSUM_ULEB128 (loc->dw_loc_opc);
5777 hash_loc_operands (loc, hstate);
5778 hash = hstate.end ();
5779 CHECKSUM (hash);
5780 loc = loc->dw_loc_next;
5784 /* Calculate the checksum of an attribute. */
5786 static void
5787 attr_checksum_ordered (enum dwarf_tag tag, dw_attr_ref at,
5788 struct md5_ctx *ctx, int *mark)
5790 dw_loc_descr_ref loc;
5791 rtx r;
5793 if (AT_class (at) == dw_val_class_die_ref)
5795 dw_die_ref target_die = AT_ref (at);
5797 /* For pointer and reference types, we checksum only the (qualified)
5798 name of the target type (if there is a name). For friend entries,
5799 we checksum only the (qualified) name of the target type or function.
5800 This allows the checksum to remain the same whether the target type
5801 is complete or not. */
5802 if ((at->dw_attr == DW_AT_type
5803 && (tag == DW_TAG_pointer_type
5804 || tag == DW_TAG_reference_type
5805 || tag == DW_TAG_rvalue_reference_type
5806 || tag == DW_TAG_ptr_to_member_type))
5807 || (at->dw_attr == DW_AT_friend
5808 && tag == DW_TAG_friend))
5810 dw_attr_ref name_attr = get_AT (target_die, DW_AT_name);
5812 if (name_attr != NULL)
5814 dw_die_ref decl = get_AT_ref (target_die, DW_AT_specification);
5816 if (decl == NULL)
5817 decl = target_die;
5818 CHECKSUM_ULEB128 ('N');
5819 CHECKSUM_ULEB128 (at->dw_attr);
5820 if (decl->die_parent != NULL)
5821 checksum_die_context (decl->die_parent, ctx);
5822 CHECKSUM_ULEB128 ('E');
5823 CHECKSUM_STRING (AT_string (name_attr));
5824 return;
5828 /* For all other references to another DIE, we check to see if the
5829 target DIE has already been visited. If it has, we emit a
5830 backward reference; if not, we descend recursively. */
5831 if (target_die->die_mark > 0)
5833 CHECKSUM_ULEB128 ('R');
5834 CHECKSUM_ULEB128 (at->dw_attr);
5835 CHECKSUM_ULEB128 (target_die->die_mark);
5837 else
5839 dw_die_ref decl = get_AT_ref (target_die, DW_AT_specification);
5841 if (decl == NULL)
5842 decl = target_die;
5843 target_die->die_mark = ++(*mark);
5844 CHECKSUM_ULEB128 ('T');
5845 CHECKSUM_ULEB128 (at->dw_attr);
5846 if (decl->die_parent != NULL)
5847 checksum_die_context (decl->die_parent, ctx);
5848 die_checksum_ordered (target_die, ctx, mark);
5850 return;
5853 CHECKSUM_ULEB128 ('A');
5854 CHECKSUM_ULEB128 (at->dw_attr);
5856 switch (AT_class (at))
5858 case dw_val_class_const:
5859 CHECKSUM_ULEB128 (DW_FORM_sdata);
5860 CHECKSUM_SLEB128 (at->dw_attr_val.v.val_int);
5861 break;
5863 case dw_val_class_unsigned_const:
5864 CHECKSUM_ULEB128 (DW_FORM_sdata);
5865 CHECKSUM_SLEB128 ((int) at->dw_attr_val.v.val_unsigned);
5866 break;
5868 case dw_val_class_const_double:
5869 CHECKSUM_ULEB128 (DW_FORM_block);
5870 CHECKSUM_ULEB128 (sizeof (at->dw_attr_val.v.val_double));
5871 CHECKSUM (at->dw_attr_val.v.val_double);
5872 break;
5874 case dw_val_class_wide_int:
5875 CHECKSUM_ULEB128 (DW_FORM_block);
5876 CHECKSUM_ULEB128 (sizeof (*at->dw_attr_val.v.val_wide));
5877 CHECKSUM (*at->dw_attr_val.v.val_wide);
5878 break;
5880 case dw_val_class_vec:
5881 CHECKSUM_ULEB128 (DW_FORM_block);
5882 CHECKSUM_ULEB128 (at->dw_attr_val.v.val_vec.length
5883 * at->dw_attr_val.v.val_vec.elt_size);
5884 CHECKSUM_BLOCK (at->dw_attr_val.v.val_vec.array,
5885 (at->dw_attr_val.v.val_vec.length
5886 * at->dw_attr_val.v.val_vec.elt_size));
5887 break;
5889 case dw_val_class_flag:
5890 CHECKSUM_ULEB128 (DW_FORM_flag);
5891 CHECKSUM_ULEB128 (at->dw_attr_val.v.val_flag ? 1 : 0);
5892 break;
5894 case dw_val_class_str:
5895 CHECKSUM_ULEB128 (DW_FORM_string);
5896 CHECKSUM_STRING (AT_string (at));
5897 break;
5899 case dw_val_class_addr:
5900 r = AT_addr (at);
5901 gcc_assert (GET_CODE (r) == SYMBOL_REF);
5902 CHECKSUM_ULEB128 (DW_FORM_string);
5903 CHECKSUM_STRING (XSTR (r, 0));
5904 break;
5906 case dw_val_class_offset:
5907 CHECKSUM_ULEB128 (DW_FORM_sdata);
5908 CHECKSUM_ULEB128 (at->dw_attr_val.v.val_offset);
5909 break;
5911 case dw_val_class_loc:
5912 for (loc = AT_loc (at); loc; loc = loc->dw_loc_next)
5913 loc_checksum_ordered (loc, ctx);
5914 break;
5916 case dw_val_class_fde_ref:
5917 case dw_val_class_lbl_id:
5918 case dw_val_class_lineptr:
5919 case dw_val_class_macptr:
5920 case dw_val_class_high_pc:
5921 break;
5923 case dw_val_class_file:
5924 CHECKSUM_ULEB128 (DW_FORM_string);
5925 CHECKSUM_STRING (AT_file (at)->filename);
5926 break;
5928 case dw_val_class_data8:
5929 CHECKSUM (at->dw_attr_val.v.val_data8);
5930 break;
5932 default:
5933 break;
5937 struct checksum_attributes
5939 dw_attr_ref at_name;
5940 dw_attr_ref at_type;
5941 dw_attr_ref at_friend;
5942 dw_attr_ref at_accessibility;
5943 dw_attr_ref at_address_class;
5944 dw_attr_ref at_allocated;
5945 dw_attr_ref at_artificial;
5946 dw_attr_ref at_associated;
5947 dw_attr_ref at_binary_scale;
5948 dw_attr_ref at_bit_offset;
5949 dw_attr_ref at_bit_size;
5950 dw_attr_ref at_bit_stride;
5951 dw_attr_ref at_byte_size;
5952 dw_attr_ref at_byte_stride;
5953 dw_attr_ref at_const_value;
5954 dw_attr_ref at_containing_type;
5955 dw_attr_ref at_count;
5956 dw_attr_ref at_data_location;
5957 dw_attr_ref at_data_member_location;
5958 dw_attr_ref at_decimal_scale;
5959 dw_attr_ref at_decimal_sign;
5960 dw_attr_ref at_default_value;
5961 dw_attr_ref at_digit_count;
5962 dw_attr_ref at_discr;
5963 dw_attr_ref at_discr_list;
5964 dw_attr_ref at_discr_value;
5965 dw_attr_ref at_encoding;
5966 dw_attr_ref at_endianity;
5967 dw_attr_ref at_explicit;
5968 dw_attr_ref at_is_optional;
5969 dw_attr_ref at_location;
5970 dw_attr_ref at_lower_bound;
5971 dw_attr_ref at_mutable;
5972 dw_attr_ref at_ordering;
5973 dw_attr_ref at_picture_string;
5974 dw_attr_ref at_prototyped;
5975 dw_attr_ref at_small;
5976 dw_attr_ref at_segment;
5977 dw_attr_ref at_string_length;
5978 dw_attr_ref at_threads_scaled;
5979 dw_attr_ref at_upper_bound;
5980 dw_attr_ref at_use_location;
5981 dw_attr_ref at_use_UTF8;
5982 dw_attr_ref at_variable_parameter;
5983 dw_attr_ref at_virtuality;
5984 dw_attr_ref at_visibility;
5985 dw_attr_ref at_vtable_elem_location;
5988 /* Collect the attributes that we will want to use for the checksum. */
5990 static void
5991 collect_checksum_attributes (struct checksum_attributes *attrs, dw_die_ref die)
5993 dw_attr_ref a;
5994 unsigned ix;
5996 FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
5998 switch (a->dw_attr)
6000 case DW_AT_name:
6001 attrs->at_name = a;
6002 break;
6003 case DW_AT_type:
6004 attrs->at_type = a;
6005 break;
6006 case DW_AT_friend:
6007 attrs->at_friend = a;
6008 break;
6009 case DW_AT_accessibility:
6010 attrs->at_accessibility = a;
6011 break;
6012 case DW_AT_address_class:
6013 attrs->at_address_class = a;
6014 break;
6015 case DW_AT_allocated:
6016 attrs->at_allocated = a;
6017 break;
6018 case DW_AT_artificial:
6019 attrs->at_artificial = a;
6020 break;
6021 case DW_AT_associated:
6022 attrs->at_associated = a;
6023 break;
6024 case DW_AT_binary_scale:
6025 attrs->at_binary_scale = a;
6026 break;
6027 case DW_AT_bit_offset:
6028 attrs->at_bit_offset = a;
6029 break;
6030 case DW_AT_bit_size:
6031 attrs->at_bit_size = a;
6032 break;
6033 case DW_AT_bit_stride:
6034 attrs->at_bit_stride = a;
6035 break;
6036 case DW_AT_byte_size:
6037 attrs->at_byte_size = a;
6038 break;
6039 case DW_AT_byte_stride:
6040 attrs->at_byte_stride = a;
6041 break;
6042 case DW_AT_const_value:
6043 attrs->at_const_value = a;
6044 break;
6045 case DW_AT_containing_type:
6046 attrs->at_containing_type = a;
6047 break;
6048 case DW_AT_count:
6049 attrs->at_count = a;
6050 break;
6051 case DW_AT_data_location:
6052 attrs->at_data_location = a;
6053 break;
6054 case DW_AT_data_member_location:
6055 attrs->at_data_member_location = a;
6056 break;
6057 case DW_AT_decimal_scale:
6058 attrs->at_decimal_scale = a;
6059 break;
6060 case DW_AT_decimal_sign:
6061 attrs->at_decimal_sign = a;
6062 break;
6063 case DW_AT_default_value:
6064 attrs->at_default_value = a;
6065 break;
6066 case DW_AT_digit_count:
6067 attrs->at_digit_count = a;
6068 break;
6069 case DW_AT_discr:
6070 attrs->at_discr = a;
6071 break;
6072 case DW_AT_discr_list:
6073 attrs->at_discr_list = a;
6074 break;
6075 case DW_AT_discr_value:
6076 attrs->at_discr_value = a;
6077 break;
6078 case DW_AT_encoding:
6079 attrs->at_encoding = a;
6080 break;
6081 case DW_AT_endianity:
6082 attrs->at_endianity = a;
6083 break;
6084 case DW_AT_explicit:
6085 attrs->at_explicit = a;
6086 break;
6087 case DW_AT_is_optional:
6088 attrs->at_is_optional = a;
6089 break;
6090 case DW_AT_location:
6091 attrs->at_location = a;
6092 break;
6093 case DW_AT_lower_bound:
6094 attrs->at_lower_bound = a;
6095 break;
6096 case DW_AT_mutable:
6097 attrs->at_mutable = a;
6098 break;
6099 case DW_AT_ordering:
6100 attrs->at_ordering = a;
6101 break;
6102 case DW_AT_picture_string:
6103 attrs->at_picture_string = a;
6104 break;
6105 case DW_AT_prototyped:
6106 attrs->at_prototyped = a;
6107 break;
6108 case DW_AT_small:
6109 attrs->at_small = a;
6110 break;
6111 case DW_AT_segment:
6112 attrs->at_segment = a;
6113 break;
6114 case DW_AT_string_length:
6115 attrs->at_string_length = a;
6116 break;
6117 case DW_AT_threads_scaled:
6118 attrs->at_threads_scaled = a;
6119 break;
6120 case DW_AT_upper_bound:
6121 attrs->at_upper_bound = a;
6122 break;
6123 case DW_AT_use_location:
6124 attrs->at_use_location = a;
6125 break;
6126 case DW_AT_use_UTF8:
6127 attrs->at_use_UTF8 = a;
6128 break;
6129 case DW_AT_variable_parameter:
6130 attrs->at_variable_parameter = a;
6131 break;
6132 case DW_AT_virtuality:
6133 attrs->at_virtuality = a;
6134 break;
6135 case DW_AT_visibility:
6136 attrs->at_visibility = a;
6137 break;
6138 case DW_AT_vtable_elem_location:
6139 attrs->at_vtable_elem_location = a;
6140 break;
6141 default:
6142 break;
6147 /* Calculate the checksum of a DIE, using an ordered subset of attributes. */
6149 static void
6150 die_checksum_ordered (dw_die_ref die, struct md5_ctx *ctx, int *mark)
6152 dw_die_ref c;
6153 dw_die_ref decl;
6154 struct checksum_attributes attrs;
6156 CHECKSUM_ULEB128 ('D');
6157 CHECKSUM_ULEB128 (die->die_tag);
6159 memset (&attrs, 0, sizeof (attrs));
6161 decl = get_AT_ref (die, DW_AT_specification);
6162 if (decl != NULL)
6163 collect_checksum_attributes (&attrs, decl);
6164 collect_checksum_attributes (&attrs, die);
6166 CHECKSUM_ATTR (attrs.at_name);
6167 CHECKSUM_ATTR (attrs.at_accessibility);
6168 CHECKSUM_ATTR (attrs.at_address_class);
6169 CHECKSUM_ATTR (attrs.at_allocated);
6170 CHECKSUM_ATTR (attrs.at_artificial);
6171 CHECKSUM_ATTR (attrs.at_associated);
6172 CHECKSUM_ATTR (attrs.at_binary_scale);
6173 CHECKSUM_ATTR (attrs.at_bit_offset);
6174 CHECKSUM_ATTR (attrs.at_bit_size);
6175 CHECKSUM_ATTR (attrs.at_bit_stride);
6176 CHECKSUM_ATTR (attrs.at_byte_size);
6177 CHECKSUM_ATTR (attrs.at_byte_stride);
6178 CHECKSUM_ATTR (attrs.at_const_value);
6179 CHECKSUM_ATTR (attrs.at_containing_type);
6180 CHECKSUM_ATTR (attrs.at_count);
6181 CHECKSUM_ATTR (attrs.at_data_location);
6182 CHECKSUM_ATTR (attrs.at_data_member_location);
6183 CHECKSUM_ATTR (attrs.at_decimal_scale);
6184 CHECKSUM_ATTR (attrs.at_decimal_sign);
6185 CHECKSUM_ATTR (attrs.at_default_value);
6186 CHECKSUM_ATTR (attrs.at_digit_count);
6187 CHECKSUM_ATTR (attrs.at_discr);
6188 CHECKSUM_ATTR (attrs.at_discr_list);
6189 CHECKSUM_ATTR (attrs.at_discr_value);
6190 CHECKSUM_ATTR (attrs.at_encoding);
6191 CHECKSUM_ATTR (attrs.at_endianity);
6192 CHECKSUM_ATTR (attrs.at_explicit);
6193 CHECKSUM_ATTR (attrs.at_is_optional);
6194 CHECKSUM_ATTR (attrs.at_location);
6195 CHECKSUM_ATTR (attrs.at_lower_bound);
6196 CHECKSUM_ATTR (attrs.at_mutable);
6197 CHECKSUM_ATTR (attrs.at_ordering);
6198 CHECKSUM_ATTR (attrs.at_picture_string);
6199 CHECKSUM_ATTR (attrs.at_prototyped);
6200 CHECKSUM_ATTR (attrs.at_small);
6201 CHECKSUM_ATTR (attrs.at_segment);
6202 CHECKSUM_ATTR (attrs.at_string_length);
6203 CHECKSUM_ATTR (attrs.at_threads_scaled);
6204 CHECKSUM_ATTR (attrs.at_upper_bound);
6205 CHECKSUM_ATTR (attrs.at_use_location);
6206 CHECKSUM_ATTR (attrs.at_use_UTF8);
6207 CHECKSUM_ATTR (attrs.at_variable_parameter);
6208 CHECKSUM_ATTR (attrs.at_virtuality);
6209 CHECKSUM_ATTR (attrs.at_visibility);
6210 CHECKSUM_ATTR (attrs.at_vtable_elem_location);
6211 CHECKSUM_ATTR (attrs.at_type);
6212 CHECKSUM_ATTR (attrs.at_friend);
6214 /* Checksum the child DIEs. */
6215 c = die->die_child;
6216 if (c) do {
6217 dw_attr_ref name_attr;
6219 c = c->die_sib;
6220 name_attr = get_AT (c, DW_AT_name);
6221 if (is_template_instantiation (c))
6223 /* Ignore instantiations of member type and function templates. */
6225 else if (name_attr != NULL
6226 && (is_type_die (c) || c->die_tag == DW_TAG_subprogram))
6228 /* Use a shallow checksum for named nested types and member
6229 functions. */
6230 CHECKSUM_ULEB128 ('S');
6231 CHECKSUM_ULEB128 (c->die_tag);
6232 CHECKSUM_STRING (AT_string (name_attr));
6234 else
6236 /* Use a deep checksum for other children. */
6237 /* Mark this DIE so it gets processed when unmarking. */
6238 if (c->die_mark == 0)
6239 c->die_mark = -1;
6240 die_checksum_ordered (c, ctx, mark);
6242 } while (c != die->die_child);
6244 CHECKSUM_ULEB128 (0);
6247 /* Add a type name and tag to a hash. */
6248 static void
6249 die_odr_checksum (int tag, const char *name, md5_ctx *ctx)
6251 CHECKSUM_ULEB128 (tag);
6252 CHECKSUM_STRING (name);
6255 #undef CHECKSUM
6256 #undef CHECKSUM_STRING
6257 #undef CHECKSUM_ATTR
6258 #undef CHECKSUM_LEB128
6259 #undef CHECKSUM_ULEB128
6261 /* Generate the type signature for DIE. This is computed by generating an
6262 MD5 checksum over the DIE's tag, its relevant attributes, and its
6263 children. Attributes that are references to other DIEs are processed
6264 by recursion, using the MARK field to prevent infinite recursion.
6265 If the DIE is nested inside a namespace or another type, we also
6266 need to include that context in the signature. The lower 64 bits
6267 of the resulting MD5 checksum comprise the signature. */
6269 static void
6270 generate_type_signature (dw_die_ref die, comdat_type_node *type_node)
6272 int mark;
6273 const char *name;
6274 unsigned char checksum[16];
6275 struct md5_ctx ctx;
6276 dw_die_ref decl;
6277 dw_die_ref parent;
6279 name = get_AT_string (die, DW_AT_name);
6280 decl = get_AT_ref (die, DW_AT_specification);
6281 parent = get_die_parent (die);
6283 /* First, compute a signature for just the type name (and its surrounding
6284 context, if any. This is stored in the type unit DIE for link-time
6285 ODR (one-definition rule) checking. */
6287 if (is_cxx () && name != NULL)
6289 md5_init_ctx (&ctx);
6291 /* Checksum the names of surrounding namespaces and structures. */
6292 if (parent != NULL)
6293 checksum_die_context (parent, &ctx);
6295 /* Checksum the current DIE. */
6296 die_odr_checksum (die->die_tag, name, &ctx);
6297 md5_finish_ctx (&ctx, checksum);
6299 add_AT_data8 (type_node->root_die, DW_AT_GNU_odr_signature, &checksum[8]);
6302 /* Next, compute the complete type signature. */
6304 md5_init_ctx (&ctx);
6305 mark = 1;
6306 die->die_mark = mark;
6308 /* Checksum the names of surrounding namespaces and structures. */
6309 if (parent != NULL)
6310 checksum_die_context (parent, &ctx);
6312 /* Checksum the DIE and its children. */
6313 die_checksum_ordered (die, &ctx, &mark);
6314 unmark_all_dies (die);
6315 md5_finish_ctx (&ctx, checksum);
6317 /* Store the signature in the type node and link the type DIE and the
6318 type node together. */
6319 memcpy (type_node->signature, &checksum[16 - DWARF_TYPE_SIGNATURE_SIZE],
6320 DWARF_TYPE_SIGNATURE_SIZE);
6321 die->comdat_type_p = true;
6322 die->die_id.die_type_node = type_node;
6323 type_node->type_die = die;
6325 /* If the DIE is a specification, link its declaration to the type node
6326 as well. */
6327 if (decl != NULL)
6329 decl->comdat_type_p = true;
6330 decl->die_id.die_type_node = type_node;
6334 /* Do the location expressions look same? */
6335 static inline int
6336 same_loc_p (dw_loc_descr_ref loc1, dw_loc_descr_ref loc2, int *mark)
6338 return loc1->dw_loc_opc == loc2->dw_loc_opc
6339 && same_dw_val_p (&loc1->dw_loc_oprnd1, &loc2->dw_loc_oprnd1, mark)
6340 && same_dw_val_p (&loc1->dw_loc_oprnd2, &loc2->dw_loc_oprnd2, mark);
6343 /* Do the values look the same? */
6344 static int
6345 same_dw_val_p (const dw_val_node *v1, const dw_val_node *v2, int *mark)
6347 dw_loc_descr_ref loc1, loc2;
6348 rtx r1, r2;
6350 if (v1->val_class != v2->val_class)
6351 return 0;
6353 switch (v1->val_class)
6355 case dw_val_class_const:
6356 return v1->v.val_int == v2->v.val_int;
6357 case dw_val_class_unsigned_const:
6358 return v1->v.val_unsigned == v2->v.val_unsigned;
6359 case dw_val_class_const_double:
6360 return v1->v.val_double.high == v2->v.val_double.high
6361 && v1->v.val_double.low == v2->v.val_double.low;
6362 case dw_val_class_wide_int:
6363 return *v1->v.val_wide == *v2->v.val_wide;
6364 case dw_val_class_vec:
6365 if (v1->v.val_vec.length != v2->v.val_vec.length
6366 || v1->v.val_vec.elt_size != v2->v.val_vec.elt_size)
6367 return 0;
6368 if (memcmp (v1->v.val_vec.array, v2->v.val_vec.array,
6369 v1->v.val_vec.length * v1->v.val_vec.elt_size))
6370 return 0;
6371 return 1;
6372 case dw_val_class_flag:
6373 return v1->v.val_flag == v2->v.val_flag;
6374 case dw_val_class_str:
6375 return !strcmp (v1->v.val_str->str, v2->v.val_str->str);
6377 case dw_val_class_addr:
6378 r1 = v1->v.val_addr;
6379 r2 = v2->v.val_addr;
6380 if (GET_CODE (r1) != GET_CODE (r2))
6381 return 0;
6382 return !rtx_equal_p (r1, r2);
6384 case dw_val_class_offset:
6385 return v1->v.val_offset == v2->v.val_offset;
6387 case dw_val_class_loc:
6388 for (loc1 = v1->v.val_loc, loc2 = v2->v.val_loc;
6389 loc1 && loc2;
6390 loc1 = loc1->dw_loc_next, loc2 = loc2->dw_loc_next)
6391 if (!same_loc_p (loc1, loc2, mark))
6392 return 0;
6393 return !loc1 && !loc2;
6395 case dw_val_class_die_ref:
6396 return same_die_p (v1->v.val_die_ref.die, v2->v.val_die_ref.die, mark);
6398 case dw_val_class_fde_ref:
6399 case dw_val_class_vms_delta:
6400 case dw_val_class_lbl_id:
6401 case dw_val_class_lineptr:
6402 case dw_val_class_macptr:
6403 case dw_val_class_high_pc:
6404 return 1;
6406 case dw_val_class_file:
6407 return v1->v.val_file == v2->v.val_file;
6409 case dw_val_class_data8:
6410 return !memcmp (v1->v.val_data8, v2->v.val_data8, 8);
6412 default:
6413 return 1;
6417 /* Do the attributes look the same? */
6419 static int
6420 same_attr_p (dw_attr_ref at1, dw_attr_ref at2, int *mark)
6422 if (at1->dw_attr != at2->dw_attr)
6423 return 0;
6425 /* We don't care that this was compiled with a different compiler
6426 snapshot; if the output is the same, that's what matters. */
6427 if (at1->dw_attr == DW_AT_producer)
6428 return 1;
6430 return same_dw_val_p (&at1->dw_attr_val, &at2->dw_attr_val, mark);
6433 /* Do the dies look the same? */
6435 static int
6436 same_die_p (dw_die_ref die1, dw_die_ref die2, int *mark)
6438 dw_die_ref c1, c2;
6439 dw_attr_ref a1;
6440 unsigned ix;
6442 /* To avoid infinite recursion. */
6443 if (die1->die_mark)
6444 return die1->die_mark == die2->die_mark;
6445 die1->die_mark = die2->die_mark = ++(*mark);
6447 if (die1->die_tag != die2->die_tag)
6448 return 0;
6450 if (vec_safe_length (die1->die_attr) != vec_safe_length (die2->die_attr))
6451 return 0;
6453 FOR_EACH_VEC_SAFE_ELT (die1->die_attr, ix, a1)
6454 if (!same_attr_p (a1, &(*die2->die_attr)[ix], mark))
6455 return 0;
6457 c1 = die1->die_child;
6458 c2 = die2->die_child;
6459 if (! c1)
6461 if (c2)
6462 return 0;
6464 else
6465 for (;;)
6467 if (!same_die_p (c1, c2, mark))
6468 return 0;
6469 c1 = c1->die_sib;
6470 c2 = c2->die_sib;
6471 if (c1 == die1->die_child)
6473 if (c2 == die2->die_child)
6474 break;
6475 else
6476 return 0;
6480 return 1;
6483 /* Do the dies look the same? Wrapper around same_die_p. */
6485 static int
6486 same_die_p_wrap (dw_die_ref die1, dw_die_ref die2)
6488 int mark = 0;
6489 int ret = same_die_p (die1, die2, &mark);
6491 unmark_all_dies (die1);
6492 unmark_all_dies (die2);
6494 return ret;
6497 /* The prefix to attach to symbols on DIEs in the current comdat debug
6498 info section. */
6499 static const char *comdat_symbol_id;
6501 /* The index of the current symbol within the current comdat CU. */
6502 static unsigned int comdat_symbol_number;
6504 /* Calculate the MD5 checksum of the compilation unit DIE UNIT_DIE and its
6505 children, and set comdat_symbol_id accordingly. */
6507 static void
6508 compute_section_prefix (dw_die_ref unit_die)
6510 const char *die_name = get_AT_string (unit_die, DW_AT_name);
6511 const char *base = die_name ? lbasename (die_name) : "anonymous";
6512 char *name = XALLOCAVEC (char, strlen (base) + 64);
6513 char *p;
6514 int i, mark;
6515 unsigned char checksum[16];
6516 struct md5_ctx ctx;
6518 /* Compute the checksum of the DIE, then append part of it as hex digits to
6519 the name filename of the unit. */
6521 md5_init_ctx (&ctx);
6522 mark = 0;
6523 die_checksum (unit_die, &ctx, &mark);
6524 unmark_all_dies (unit_die);
6525 md5_finish_ctx (&ctx, checksum);
6527 sprintf (name, "%s.", base);
6528 clean_symbol_name (name);
6530 p = name + strlen (name);
6531 for (i = 0; i < 4; i++)
6533 sprintf (p, "%.2x", checksum[i]);
6534 p += 2;
6537 comdat_symbol_id = unit_die->die_id.die_symbol = xstrdup (name);
6538 comdat_symbol_number = 0;
6541 /* Returns nonzero if DIE represents a type, in the sense of TYPE_P. */
6543 static int
6544 is_type_die (dw_die_ref die)
6546 switch (die->die_tag)
6548 case DW_TAG_array_type:
6549 case DW_TAG_class_type:
6550 case DW_TAG_interface_type:
6551 case DW_TAG_enumeration_type:
6552 case DW_TAG_pointer_type:
6553 case DW_TAG_reference_type:
6554 case DW_TAG_rvalue_reference_type:
6555 case DW_TAG_string_type:
6556 case DW_TAG_structure_type:
6557 case DW_TAG_subroutine_type:
6558 case DW_TAG_union_type:
6559 case DW_TAG_ptr_to_member_type:
6560 case DW_TAG_set_type:
6561 case DW_TAG_subrange_type:
6562 case DW_TAG_base_type:
6563 case DW_TAG_const_type:
6564 case DW_TAG_file_type:
6565 case DW_TAG_packed_type:
6566 case DW_TAG_volatile_type:
6567 case DW_TAG_typedef:
6568 return 1;
6569 default:
6570 return 0;
6574 /* Returns 1 iff C is the sort of DIE that should go into a COMDAT CU.
6575 Basically, we want to choose the bits that are likely to be shared between
6576 compilations (types) and leave out the bits that are specific to individual
6577 compilations (functions). */
6579 static int
6580 is_comdat_die (dw_die_ref c)
6582 /* I think we want to leave base types and __vtbl_ptr_type in the main CU, as
6583 we do for stabs. The advantage is a greater likelihood of sharing between
6584 objects that don't include headers in the same order (and therefore would
6585 put the base types in a different comdat). jason 8/28/00 */
6587 if (c->die_tag == DW_TAG_base_type)
6588 return 0;
6590 if (c->die_tag == DW_TAG_pointer_type
6591 || c->die_tag == DW_TAG_reference_type
6592 || c->die_tag == DW_TAG_rvalue_reference_type
6593 || c->die_tag == DW_TAG_const_type
6594 || c->die_tag == DW_TAG_volatile_type)
6596 dw_die_ref t = get_AT_ref (c, DW_AT_type);
6598 return t ? is_comdat_die (t) : 0;
6601 return is_type_die (c);
6604 /* Returns 1 iff C is the sort of DIE that might be referred to from another
6605 compilation unit. */
6607 static int
6608 is_symbol_die (dw_die_ref c)
6610 return (is_type_die (c)
6611 || is_declaration_die (c)
6612 || c->die_tag == DW_TAG_namespace
6613 || c->die_tag == DW_TAG_module);
6616 /* Returns true iff C is a compile-unit DIE. */
6618 static inline bool
6619 is_cu_die (dw_die_ref c)
6621 return c && c->die_tag == DW_TAG_compile_unit;
6624 /* Returns true iff C is a unit DIE of some sort. */
6626 static inline bool
6627 is_unit_die (dw_die_ref c)
6629 return c && (c->die_tag == DW_TAG_compile_unit
6630 || c->die_tag == DW_TAG_partial_unit
6631 || c->die_tag == DW_TAG_type_unit);
6634 /* Returns true iff C is a namespace DIE. */
6636 static inline bool
6637 is_namespace_die (dw_die_ref c)
6639 return c && c->die_tag == DW_TAG_namespace;
6642 /* Returns true iff C is a class or structure DIE. */
6644 static inline bool
6645 is_class_die (dw_die_ref c)
6647 return c && (c->die_tag == DW_TAG_class_type
6648 || c->die_tag == DW_TAG_structure_type);
6651 /* Return non-zero if this DIE is a template parameter. */
6653 static inline bool
6654 is_template_parameter (dw_die_ref die)
6656 switch (die->die_tag)
6658 case DW_TAG_template_type_param:
6659 case DW_TAG_template_value_param:
6660 case DW_TAG_GNU_template_template_param:
6661 case DW_TAG_GNU_template_parameter_pack:
6662 return true;
6663 default:
6664 return false;
6668 /* Return non-zero if this DIE represents a template instantiation. */
6670 static inline bool
6671 is_template_instantiation (dw_die_ref die)
6673 dw_die_ref c;
6675 if (!is_type_die (die) && die->die_tag != DW_TAG_subprogram)
6676 return false;
6677 FOR_EACH_CHILD (die, c, if (is_template_parameter (c)) return true);
6678 return false;
6681 static char *
6682 gen_internal_sym (const char *prefix)
6684 char buf[256];
6686 ASM_GENERATE_INTERNAL_LABEL (buf, prefix, label_num++);
6687 return xstrdup (buf);
6690 /* Assign symbols to all worthy DIEs under DIE. */
6692 static void
6693 assign_symbol_names (dw_die_ref die)
6695 dw_die_ref c;
6697 if (is_symbol_die (die) && !die->comdat_type_p)
6699 if (comdat_symbol_id)
6701 char *p = XALLOCAVEC (char, strlen (comdat_symbol_id) + 64);
6703 sprintf (p, "%s.%s.%x", DIE_LABEL_PREFIX,
6704 comdat_symbol_id, comdat_symbol_number++);
6705 die->die_id.die_symbol = xstrdup (p);
6707 else
6708 die->die_id.die_symbol = gen_internal_sym ("LDIE");
6711 FOR_EACH_CHILD (die, c, assign_symbol_names (c));
6714 struct cu_hash_table_entry
6716 dw_die_ref cu;
6717 unsigned min_comdat_num, max_comdat_num;
6718 struct cu_hash_table_entry *next;
6721 /* Helpers to manipulate hash table of CUs. */
6723 struct cu_hash_table_entry_hasher
6725 typedef cu_hash_table_entry value_type;
6726 typedef die_struct compare_type;
6727 static inline hashval_t hash (const value_type *);
6728 static inline bool equal (const value_type *, const compare_type *);
6729 static inline void remove (value_type *);
6732 inline hashval_t
6733 cu_hash_table_entry_hasher::hash (const value_type *entry)
6735 return htab_hash_string (entry->cu->die_id.die_symbol);
6738 inline bool
6739 cu_hash_table_entry_hasher::equal (const value_type *entry1,
6740 const compare_type *entry2)
6742 return !strcmp (entry1->cu->die_id.die_symbol, entry2->die_id.die_symbol);
6745 inline void
6746 cu_hash_table_entry_hasher::remove (value_type *entry)
6748 struct cu_hash_table_entry *next;
6750 while (entry)
6752 next = entry->next;
6753 free (entry);
6754 entry = next;
6758 typedef hash_table<cu_hash_table_entry_hasher> cu_hash_type;
6760 /* Check whether we have already seen this CU and set up SYM_NUM
6761 accordingly. */
6762 static int
6763 check_duplicate_cu (dw_die_ref cu, cu_hash_type *htable, unsigned int *sym_num)
6765 struct cu_hash_table_entry dummy;
6766 struct cu_hash_table_entry **slot, *entry, *last = &dummy;
6768 dummy.max_comdat_num = 0;
6770 slot = htable->find_slot_with_hash (cu,
6771 htab_hash_string (cu->die_id.die_symbol),
6772 INSERT);
6773 entry = *slot;
6775 for (; entry; last = entry, entry = entry->next)
6777 if (same_die_p_wrap (cu, entry->cu))
6778 break;
6781 if (entry)
6783 *sym_num = entry->min_comdat_num;
6784 return 1;
6787 entry = XCNEW (struct cu_hash_table_entry);
6788 entry->cu = cu;
6789 entry->min_comdat_num = *sym_num = last->max_comdat_num;
6790 entry->next = *slot;
6791 *slot = entry;
6793 return 0;
6796 /* Record SYM_NUM to record of CU in HTABLE. */
6797 static void
6798 record_comdat_symbol_number (dw_die_ref cu, cu_hash_type *htable,
6799 unsigned int sym_num)
6801 struct cu_hash_table_entry **slot, *entry;
6803 slot = htable->find_slot_with_hash (cu,
6804 htab_hash_string (cu->die_id.die_symbol),
6805 NO_INSERT);
6806 entry = *slot;
6808 entry->max_comdat_num = sym_num;
6811 /* Traverse the DIE (which is always comp_unit_die), and set up
6812 additional compilation units for each of the include files we see
6813 bracketed by BINCL/EINCL. */
6815 static void
6816 break_out_includes (dw_die_ref die)
6818 dw_die_ref c;
6819 dw_die_ref unit = NULL;
6820 limbo_die_node *node, **pnode;
6822 c = die->die_child;
6823 if (c) do {
6824 dw_die_ref prev = c;
6825 c = c->die_sib;
6826 while (c->die_tag == DW_TAG_GNU_BINCL || c->die_tag == DW_TAG_GNU_EINCL
6827 || (unit && is_comdat_die (c)))
6829 dw_die_ref next = c->die_sib;
6831 /* This DIE is for a secondary CU; remove it from the main one. */
6832 remove_child_with_prev (c, prev);
6834 if (c->die_tag == DW_TAG_GNU_BINCL)
6835 unit = push_new_compile_unit (unit, c);
6836 else if (c->die_tag == DW_TAG_GNU_EINCL)
6837 unit = pop_compile_unit (unit);
6838 else
6839 add_child_die (unit, c);
6840 c = next;
6841 if (c == die->die_child)
6842 break;
6844 } while (c != die->die_child);
6846 #if 0
6847 /* We can only use this in debugging, since the frontend doesn't check
6848 to make sure that we leave every include file we enter. */
6849 gcc_assert (!unit);
6850 #endif
6852 assign_symbol_names (die);
6853 cu_hash_type cu_hash_table (10);
6854 for (node = limbo_die_list, pnode = &limbo_die_list;
6855 node;
6856 node = node->next)
6858 int is_dupl;
6860 compute_section_prefix (node->die);
6861 is_dupl = check_duplicate_cu (node->die, &cu_hash_table,
6862 &comdat_symbol_number);
6863 assign_symbol_names (node->die);
6864 if (is_dupl)
6865 *pnode = node->next;
6866 else
6868 pnode = &node->next;
6869 record_comdat_symbol_number (node->die, &cu_hash_table,
6870 comdat_symbol_number);
6875 /* Return non-zero if this DIE is a declaration. */
6877 static int
6878 is_declaration_die (dw_die_ref die)
6880 dw_attr_ref a;
6881 unsigned ix;
6883 FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
6884 if (a->dw_attr == DW_AT_declaration)
6885 return 1;
6887 return 0;
6890 /* Return non-zero if this DIE is nested inside a subprogram. */
6892 static int
6893 is_nested_in_subprogram (dw_die_ref die)
6895 dw_die_ref decl = get_AT_ref (die, DW_AT_specification);
6897 if (decl == NULL)
6898 decl = die;
6899 return local_scope_p (decl);
6902 /* Return non-zero if this DIE contains a defining declaration of a
6903 subprogram. */
6905 static int
6906 contains_subprogram_definition (dw_die_ref die)
6908 dw_die_ref c;
6910 if (die->die_tag == DW_TAG_subprogram && ! is_declaration_die (die))
6911 return 1;
6912 FOR_EACH_CHILD (die, c, if (contains_subprogram_definition (c)) return 1);
6913 return 0;
6916 /* Return non-zero if this is a type DIE that should be moved to a
6917 COMDAT .debug_types section. */
6919 static int
6920 should_move_die_to_comdat (dw_die_ref die)
6922 switch (die->die_tag)
6924 case DW_TAG_class_type:
6925 case DW_TAG_structure_type:
6926 case DW_TAG_enumeration_type:
6927 case DW_TAG_union_type:
6928 /* Don't move declarations, inlined instances, types nested in a
6929 subprogram, or types that contain subprogram definitions. */
6930 if (is_declaration_die (die)
6931 || get_AT (die, DW_AT_abstract_origin)
6932 || is_nested_in_subprogram (die)
6933 || contains_subprogram_definition (die))
6934 return 0;
6935 return 1;
6936 case DW_TAG_array_type:
6937 case DW_TAG_interface_type:
6938 case DW_TAG_pointer_type:
6939 case DW_TAG_reference_type:
6940 case DW_TAG_rvalue_reference_type:
6941 case DW_TAG_string_type:
6942 case DW_TAG_subroutine_type:
6943 case DW_TAG_ptr_to_member_type:
6944 case DW_TAG_set_type:
6945 case DW_TAG_subrange_type:
6946 case DW_TAG_base_type:
6947 case DW_TAG_const_type:
6948 case DW_TAG_file_type:
6949 case DW_TAG_packed_type:
6950 case DW_TAG_volatile_type:
6951 case DW_TAG_typedef:
6952 default:
6953 return 0;
6957 /* Make a clone of DIE. */
6959 static dw_die_ref
6960 clone_die (dw_die_ref die)
6962 dw_die_ref clone;
6963 dw_attr_ref a;
6964 unsigned ix;
6966 clone = ggc_cleared_alloc<die_node> ();
6967 clone->die_tag = die->die_tag;
6969 FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
6970 add_dwarf_attr (clone, a);
6972 return clone;
6975 /* Make a clone of the tree rooted at DIE. */
6977 static dw_die_ref
6978 clone_tree (dw_die_ref die)
6980 dw_die_ref c;
6981 dw_die_ref clone = clone_die (die);
6983 FOR_EACH_CHILD (die, c, add_child_die (clone, clone_tree (c)));
6985 return clone;
6988 /* Make a clone of DIE as a declaration. */
6990 static dw_die_ref
6991 clone_as_declaration (dw_die_ref die)
6993 dw_die_ref clone;
6994 dw_die_ref decl;
6995 dw_attr_ref a;
6996 unsigned ix;
6998 /* If the DIE is already a declaration, just clone it. */
6999 if (is_declaration_die (die))
7000 return clone_die (die);
7002 /* If the DIE is a specification, just clone its declaration DIE. */
7003 decl = get_AT_ref (die, DW_AT_specification);
7004 if (decl != NULL)
7006 clone = clone_die (decl);
7007 if (die->comdat_type_p)
7008 add_AT_die_ref (clone, DW_AT_signature, die);
7009 return clone;
7012 clone = ggc_cleared_alloc<die_node> ();
7013 clone->die_tag = die->die_tag;
7015 FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
7017 /* We don't want to copy over all attributes.
7018 For example we don't want DW_AT_byte_size because otherwise we will no
7019 longer have a declaration and GDB will treat it as a definition. */
7021 switch (a->dw_attr)
7023 case DW_AT_abstract_origin:
7024 case DW_AT_artificial:
7025 case DW_AT_containing_type:
7026 case DW_AT_external:
7027 case DW_AT_name:
7028 case DW_AT_type:
7029 case DW_AT_virtuality:
7030 case DW_AT_linkage_name:
7031 case DW_AT_MIPS_linkage_name:
7032 add_dwarf_attr (clone, a);
7033 break;
7034 case DW_AT_byte_size:
7035 default:
7036 break;
7040 if (die->comdat_type_p)
7041 add_AT_die_ref (clone, DW_AT_signature, die);
7043 add_AT_flag (clone, DW_AT_declaration, 1);
7044 return clone;
7048 /* Structure to map a DIE in one CU to its copy in a comdat type unit. */
7050 struct decl_table_entry
7052 dw_die_ref orig;
7053 dw_die_ref copy;
7056 /* Helpers to manipulate hash table of copied declarations. */
7058 /* Hashtable helpers. */
7060 struct decl_table_entry_hasher : typed_free_remove <decl_table_entry>
7062 typedef decl_table_entry value_type;
7063 typedef die_struct compare_type;
7064 static inline hashval_t hash (const value_type *);
7065 static inline bool equal (const value_type *, const compare_type *);
7068 inline hashval_t
7069 decl_table_entry_hasher::hash (const value_type *entry)
7071 return htab_hash_pointer (entry->orig);
7074 inline bool
7075 decl_table_entry_hasher::equal (const value_type *entry1,
7076 const compare_type *entry2)
7078 return entry1->orig == entry2;
7081 typedef hash_table<decl_table_entry_hasher> decl_hash_type;
7083 /* Copy DIE and its ancestors, up to, but not including, the compile unit
7084 or type unit entry, to a new tree. Adds the new tree to UNIT and returns
7085 a pointer to the copy of DIE. If DECL_TABLE is provided, it is used
7086 to check if the ancestor has already been copied into UNIT. */
7088 static dw_die_ref
7089 copy_ancestor_tree (dw_die_ref unit, dw_die_ref die,
7090 decl_hash_type *decl_table)
7092 dw_die_ref parent = die->die_parent;
7093 dw_die_ref new_parent = unit;
7094 dw_die_ref copy;
7095 decl_table_entry **slot = NULL;
7096 struct decl_table_entry *entry = NULL;
7098 if (decl_table)
7100 /* Check if the entry has already been copied to UNIT. */
7101 slot = decl_table->find_slot_with_hash (die, htab_hash_pointer (die),
7102 INSERT);
7103 if (*slot != HTAB_EMPTY_ENTRY)
7105 entry = *slot;
7106 return entry->copy;
7109 /* Record in DECL_TABLE that DIE has been copied to UNIT. */
7110 entry = XCNEW (struct decl_table_entry);
7111 entry->orig = die;
7112 entry->copy = NULL;
7113 *slot = entry;
7116 if (parent != NULL)
7118 dw_die_ref spec = get_AT_ref (parent, DW_AT_specification);
7119 if (spec != NULL)
7120 parent = spec;
7121 if (!is_unit_die (parent))
7122 new_parent = copy_ancestor_tree (unit, parent, decl_table);
7125 copy = clone_as_declaration (die);
7126 add_child_die (new_parent, copy);
7128 if (decl_table)
7130 /* Record the pointer to the copy. */
7131 entry->copy = copy;
7134 return copy;
7136 /* Copy the declaration context to the new type unit DIE. This includes
7137 any surrounding namespace or type declarations. If the DIE has an
7138 AT_specification attribute, it also includes attributes and children
7139 attached to the specification, and returns a pointer to the original
7140 parent of the declaration DIE. Returns NULL otherwise. */
7142 static dw_die_ref
7143 copy_declaration_context (dw_die_ref unit, dw_die_ref die)
7145 dw_die_ref decl;
7146 dw_die_ref new_decl;
7147 dw_die_ref orig_parent = NULL;
7149 decl = get_AT_ref (die, DW_AT_specification);
7150 if (decl == NULL)
7151 decl = die;
7152 else
7154 unsigned ix;
7155 dw_die_ref c;
7156 dw_attr_ref a;
7158 /* The original DIE will be changed to a declaration, and must
7159 be moved to be a child of the original declaration DIE. */
7160 orig_parent = decl->die_parent;
7162 /* Copy the type node pointer from the new DIE to the original
7163 declaration DIE so we can forward references later. */
7164 decl->comdat_type_p = true;
7165 decl->die_id.die_type_node = die->die_id.die_type_node;
7167 remove_AT (die, DW_AT_specification);
7169 FOR_EACH_VEC_SAFE_ELT (decl->die_attr, ix, a)
7171 if (a->dw_attr != DW_AT_name
7172 && a->dw_attr != DW_AT_declaration
7173 && a->dw_attr != DW_AT_external)
7174 add_dwarf_attr (die, a);
7177 FOR_EACH_CHILD (decl, c, add_child_die (die, clone_tree (c)));
7180 if (decl->die_parent != NULL
7181 && !is_unit_die (decl->die_parent))
7183 new_decl = copy_ancestor_tree (unit, decl, NULL);
7184 if (new_decl != NULL)
7186 remove_AT (new_decl, DW_AT_signature);
7187 add_AT_specification (die, new_decl);
7191 return orig_parent;
7194 /* Generate the skeleton ancestor tree for the given NODE, then clone
7195 the DIE and add the clone into the tree. */
7197 static void
7198 generate_skeleton_ancestor_tree (skeleton_chain_node *node)
7200 if (node->new_die != NULL)
7201 return;
7203 node->new_die = clone_as_declaration (node->old_die);
7205 if (node->parent != NULL)
7207 generate_skeleton_ancestor_tree (node->parent);
7208 add_child_die (node->parent->new_die, node->new_die);
7212 /* Generate a skeleton tree of DIEs containing any declarations that are
7213 found in the original tree. We traverse the tree looking for declaration
7214 DIEs, and construct the skeleton from the bottom up whenever we find one. */
7216 static void
7217 generate_skeleton_bottom_up (skeleton_chain_node *parent)
7219 skeleton_chain_node node;
7220 dw_die_ref c;
7221 dw_die_ref first;
7222 dw_die_ref prev = NULL;
7223 dw_die_ref next = NULL;
7225 node.parent = parent;
7227 first = c = parent->old_die->die_child;
7228 if (c)
7229 next = c->die_sib;
7230 if (c) do {
7231 if (prev == NULL || prev->die_sib == c)
7232 prev = c;
7233 c = next;
7234 next = (c == first ? NULL : c->die_sib);
7235 node.old_die = c;
7236 node.new_die = NULL;
7237 if (is_declaration_die (c))
7239 if (is_template_instantiation (c))
7241 /* Instantiated templates do not need to be cloned into the
7242 type unit. Just move the DIE and its children back to
7243 the skeleton tree (in the main CU). */
7244 remove_child_with_prev (c, prev);
7245 add_child_die (parent->new_die, c);
7246 c = prev;
7248 else
7250 /* Clone the existing DIE, move the original to the skeleton
7251 tree (which is in the main CU), and put the clone, with
7252 all the original's children, where the original came from
7253 (which is about to be moved to the type unit). */
7254 dw_die_ref clone = clone_die (c);
7255 move_all_children (c, clone);
7257 /* If the original has a DW_AT_object_pointer attribute,
7258 it would now point to a child DIE just moved to the
7259 cloned tree, so we need to remove that attribute from
7260 the original. */
7261 remove_AT (c, DW_AT_object_pointer);
7263 replace_child (c, clone, prev);
7264 generate_skeleton_ancestor_tree (parent);
7265 add_child_die (parent->new_die, c);
7266 node.new_die = c;
7267 c = clone;
7270 generate_skeleton_bottom_up (&node);
7271 } while (next != NULL);
7274 /* Wrapper function for generate_skeleton_bottom_up. */
7276 static dw_die_ref
7277 generate_skeleton (dw_die_ref die)
7279 skeleton_chain_node node;
7281 node.old_die = die;
7282 node.new_die = NULL;
7283 node.parent = NULL;
7285 /* If this type definition is nested inside another type,
7286 and is not an instantiation of a template, always leave
7287 at least a declaration in its place. */
7288 if (die->die_parent != NULL
7289 && is_type_die (die->die_parent)
7290 && !is_template_instantiation (die))
7291 node.new_die = clone_as_declaration (die);
7293 generate_skeleton_bottom_up (&node);
7294 return node.new_die;
7297 /* Remove the CHILD DIE from its parent, possibly replacing it with a cloned
7298 declaration. The original DIE is moved to a new compile unit so that
7299 existing references to it follow it to the new location. If any of the
7300 original DIE's descendants is a declaration, we need to replace the
7301 original DIE with a skeleton tree and move the declarations back into the
7302 skeleton tree. */
7304 static dw_die_ref
7305 remove_child_or_replace_with_skeleton (dw_die_ref unit, dw_die_ref child,
7306 dw_die_ref prev)
7308 dw_die_ref skeleton, orig_parent;
7310 /* Copy the declaration context to the type unit DIE. If the returned
7311 ORIG_PARENT is not NULL, the skeleton needs to be added as a child of
7312 that DIE. */
7313 orig_parent = copy_declaration_context (unit, child);
7315 skeleton = generate_skeleton (child);
7316 if (skeleton == NULL)
7317 remove_child_with_prev (child, prev);
7318 else
7320 skeleton->comdat_type_p = true;
7321 skeleton->die_id.die_type_node = child->die_id.die_type_node;
7323 /* If the original DIE was a specification, we need to put
7324 the skeleton under the parent DIE of the declaration.
7325 This leaves the original declaration in the tree, but
7326 it will be pruned later since there are no longer any
7327 references to it. */
7328 if (orig_parent != NULL)
7330 remove_child_with_prev (child, prev);
7331 add_child_die (orig_parent, skeleton);
7333 else
7334 replace_child (child, skeleton, prev);
7337 return skeleton;
7340 /* Traverse the DIE and set up additional .debug_types sections for each
7341 type worthy of being placed in a COMDAT section. */
7343 static void
7344 break_out_comdat_types (dw_die_ref die)
7346 dw_die_ref c;
7347 dw_die_ref first;
7348 dw_die_ref prev = NULL;
7349 dw_die_ref next = NULL;
7350 dw_die_ref unit = NULL;
7352 first = c = die->die_child;
7353 if (c)
7354 next = c->die_sib;
7355 if (c) do {
7356 if (prev == NULL || prev->die_sib == c)
7357 prev = c;
7358 c = next;
7359 next = (c == first ? NULL : c->die_sib);
7360 if (should_move_die_to_comdat (c))
7362 dw_die_ref replacement;
7363 comdat_type_node_ref type_node;
7365 /* Break out nested types into their own type units. */
7366 break_out_comdat_types (c);
7368 /* Create a new type unit DIE as the root for the new tree, and
7369 add it to the list of comdat types. */
7370 unit = new_die (DW_TAG_type_unit, NULL, NULL);
7371 add_AT_unsigned (unit, DW_AT_language,
7372 get_AT_unsigned (comp_unit_die (), DW_AT_language));
7373 type_node = ggc_cleared_alloc<comdat_type_node> ();
7374 type_node->root_die = unit;
7375 type_node->next = comdat_type_list;
7376 comdat_type_list = type_node;
7378 /* Generate the type signature. */
7379 generate_type_signature (c, type_node);
7381 /* Copy the declaration context, attributes, and children of the
7382 declaration into the new type unit DIE, then remove this DIE
7383 from the main CU (or replace it with a skeleton if necessary). */
7384 replacement = remove_child_or_replace_with_skeleton (unit, c, prev);
7385 type_node->skeleton_die = replacement;
7387 /* Add the DIE to the new compunit. */
7388 add_child_die (unit, c);
7390 if (replacement != NULL)
7391 c = replacement;
7393 else if (c->die_tag == DW_TAG_namespace
7394 || c->die_tag == DW_TAG_class_type
7395 || c->die_tag == DW_TAG_structure_type
7396 || c->die_tag == DW_TAG_union_type)
7398 /* Look for nested types that can be broken out. */
7399 break_out_comdat_types (c);
7401 } while (next != NULL);
7404 /* Like clone_tree, but copy DW_TAG_subprogram DIEs as declarations.
7405 Enter all the cloned children into the hash table decl_table. */
7407 static dw_die_ref
7408 clone_tree_partial (dw_die_ref die, decl_hash_type *decl_table)
7410 dw_die_ref c;
7411 dw_die_ref clone;
7412 struct decl_table_entry *entry;
7413 decl_table_entry **slot;
7415 if (die->die_tag == DW_TAG_subprogram)
7416 clone = clone_as_declaration (die);
7417 else
7418 clone = clone_die (die);
7420 slot = decl_table->find_slot_with_hash (die,
7421 htab_hash_pointer (die), INSERT);
7423 /* Assert that DIE isn't in the hash table yet. If it would be there
7424 before, the ancestors would be necessarily there as well, therefore
7425 clone_tree_partial wouldn't be called. */
7426 gcc_assert (*slot == HTAB_EMPTY_ENTRY);
7428 entry = XCNEW (struct decl_table_entry);
7429 entry->orig = die;
7430 entry->copy = clone;
7431 *slot = entry;
7433 if (die->die_tag != DW_TAG_subprogram)
7434 FOR_EACH_CHILD (die, c,
7435 add_child_die (clone, clone_tree_partial (c, decl_table)));
7437 return clone;
7440 /* Walk the DIE and its children, looking for references to incomplete
7441 or trivial types that are unmarked (i.e., that are not in the current
7442 type_unit). */
7444 static void
7445 copy_decls_walk (dw_die_ref unit, dw_die_ref die, decl_hash_type *decl_table)
7447 dw_die_ref c;
7448 dw_attr_ref a;
7449 unsigned ix;
7451 FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
7453 if (AT_class (a) == dw_val_class_die_ref)
7455 dw_die_ref targ = AT_ref (a);
7456 decl_table_entry **slot;
7457 struct decl_table_entry *entry;
7459 if (targ->die_mark != 0 || targ->comdat_type_p)
7460 continue;
7462 slot = decl_table->find_slot_with_hash (targ,
7463 htab_hash_pointer (targ),
7464 INSERT);
7466 if (*slot != HTAB_EMPTY_ENTRY)
7468 /* TARG has already been copied, so we just need to
7469 modify the reference to point to the copy. */
7470 entry = *slot;
7471 a->dw_attr_val.v.val_die_ref.die = entry->copy;
7473 else
7475 dw_die_ref parent = unit;
7476 dw_die_ref copy = clone_die (targ);
7478 /* Record in DECL_TABLE that TARG has been copied.
7479 Need to do this now, before the recursive call,
7480 because DECL_TABLE may be expanded and SLOT
7481 would no longer be a valid pointer. */
7482 entry = XCNEW (struct decl_table_entry);
7483 entry->orig = targ;
7484 entry->copy = copy;
7485 *slot = entry;
7487 /* If TARG is not a declaration DIE, we need to copy its
7488 children. */
7489 if (!is_declaration_die (targ))
7491 FOR_EACH_CHILD (
7492 targ, c,
7493 add_child_die (copy,
7494 clone_tree_partial (c, decl_table)));
7497 /* Make sure the cloned tree is marked as part of the
7498 type unit. */
7499 mark_dies (copy);
7501 /* If TARG has surrounding context, copy its ancestor tree
7502 into the new type unit. */
7503 if (targ->die_parent != NULL
7504 && !is_unit_die (targ->die_parent))
7505 parent = copy_ancestor_tree (unit, targ->die_parent,
7506 decl_table);
7508 add_child_die (parent, copy);
7509 a->dw_attr_val.v.val_die_ref.die = copy;
7511 /* Make sure the newly-copied DIE is walked. If it was
7512 installed in a previously-added context, it won't
7513 get visited otherwise. */
7514 if (parent != unit)
7516 /* Find the highest point of the newly-added tree,
7517 mark each node along the way, and walk from there. */
7518 parent->die_mark = 1;
7519 while (parent->die_parent
7520 && parent->die_parent->die_mark == 0)
7522 parent = parent->die_parent;
7523 parent->die_mark = 1;
7525 copy_decls_walk (unit, parent, decl_table);
7531 FOR_EACH_CHILD (die, c, copy_decls_walk (unit, c, decl_table));
7534 /* Copy declarations for "unworthy" types into the new comdat section.
7535 Incomplete types, modified types, and certain other types aren't broken
7536 out into comdat sections of their own, so they don't have a signature,
7537 and we need to copy the declaration into the same section so that we
7538 don't have an external reference. */
7540 static void
7541 copy_decls_for_unworthy_types (dw_die_ref unit)
7543 mark_dies (unit);
7544 decl_hash_type decl_table (10);
7545 copy_decls_walk (unit, unit, &decl_table);
7546 unmark_dies (unit);
7549 /* Traverse the DIE and add a sibling attribute if it may have the
7550 effect of speeding up access to siblings. To save some space,
7551 avoid generating sibling attributes for DIE's without children. */
7553 static void
7554 add_sibling_attributes (dw_die_ref die)
7556 dw_die_ref c;
7558 if (! die->die_child)
7559 return;
7561 if (die->die_parent && die != die->die_parent->die_child)
7562 add_AT_die_ref (die, DW_AT_sibling, die->die_sib);
7564 FOR_EACH_CHILD (die, c, add_sibling_attributes (c));
7567 /* Output all location lists for the DIE and its children. */
7569 static void
7570 output_location_lists (dw_die_ref die)
7572 dw_die_ref c;
7573 dw_attr_ref a;
7574 unsigned ix;
7576 FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
7577 if (AT_class (a) == dw_val_class_loc_list)
7578 output_loc_list (AT_loc_list (a));
7580 FOR_EACH_CHILD (die, c, output_location_lists (c));
7583 /* We want to limit the number of external references, because they are
7584 larger than local references: a relocation takes multiple words, and
7585 even a sig8 reference is always eight bytes, whereas a local reference
7586 can be as small as one byte (though DW_FORM_ref is usually 4 in GCC).
7587 So if we encounter multiple external references to the same type DIE, we
7588 make a local typedef stub for it and redirect all references there.
7590 This is the element of the hash table for keeping track of these
7591 references. */
7593 struct external_ref
7595 dw_die_ref type;
7596 dw_die_ref stub;
7597 unsigned n_refs;
7600 /* Hashtable helpers. */
7602 struct external_ref_hasher : typed_free_remove <external_ref>
7604 typedef external_ref value_type;
7605 typedef external_ref compare_type;
7606 static inline hashval_t hash (const value_type *);
7607 static inline bool equal (const value_type *, const compare_type *);
7610 inline hashval_t
7611 external_ref_hasher::hash (const value_type *r)
7613 dw_die_ref die = r->type;
7614 hashval_t h = 0;
7616 /* We can't use the address of the DIE for hashing, because
7617 that will make the order of the stub DIEs non-deterministic. */
7618 if (! die->comdat_type_p)
7619 /* We have a symbol; use it to compute a hash. */
7620 h = htab_hash_string (die->die_id.die_symbol);
7621 else
7623 /* We have a type signature; use a subset of the bits as the hash.
7624 The 8-byte signature is at least as large as hashval_t. */
7625 comdat_type_node_ref type_node = die->die_id.die_type_node;
7626 memcpy (&h, type_node->signature, sizeof (h));
7628 return h;
7631 inline bool
7632 external_ref_hasher::equal (const value_type *r1, const compare_type *r2)
7634 return r1->type == r2->type;
7637 typedef hash_table<external_ref_hasher> external_ref_hash_type;
7639 /* Return a pointer to the external_ref for references to DIE. */
7641 static struct external_ref *
7642 lookup_external_ref (external_ref_hash_type *map, dw_die_ref die)
7644 struct external_ref ref, *ref_p;
7645 external_ref **slot;
7647 ref.type = die;
7648 slot = map->find_slot (&ref, INSERT);
7649 if (*slot != HTAB_EMPTY_ENTRY)
7650 return *slot;
7652 ref_p = XCNEW (struct external_ref);
7653 ref_p->type = die;
7654 *slot = ref_p;
7655 return ref_p;
7658 /* Subroutine of optimize_external_refs, below.
7660 If we see a type skeleton, record it as our stub. If we see external
7661 references, remember how many we've seen. */
7663 static void
7664 optimize_external_refs_1 (dw_die_ref die, external_ref_hash_type *map)
7666 dw_die_ref c;
7667 dw_attr_ref a;
7668 unsigned ix;
7669 struct external_ref *ref_p;
7671 if (is_type_die (die)
7672 && (c = get_AT_ref (die, DW_AT_signature)))
7674 /* This is a local skeleton; use it for local references. */
7675 ref_p = lookup_external_ref (map, c);
7676 ref_p->stub = die;
7679 /* Scan the DIE references, and remember any that refer to DIEs from
7680 other CUs (i.e. those which are not marked). */
7681 FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
7682 if (AT_class (a) == dw_val_class_die_ref
7683 && (c = AT_ref (a))->die_mark == 0
7684 && is_type_die (c))
7686 ref_p = lookup_external_ref (map, c);
7687 ref_p->n_refs++;
7690 FOR_EACH_CHILD (die, c, optimize_external_refs_1 (c, map));
7693 /* htab_traverse callback function for optimize_external_refs, below. SLOT
7694 points to an external_ref, DATA is the CU we're processing. If we don't
7695 already have a local stub, and we have multiple refs, build a stub. */
7698 dwarf2_build_local_stub (external_ref **slot, dw_die_ref data)
7700 struct external_ref *ref_p = *slot;
7702 if (ref_p->stub == NULL && ref_p->n_refs > 1 && !dwarf_strict)
7704 /* We have multiple references to this type, so build a small stub.
7705 Both of these forms are a bit dodgy from the perspective of the
7706 DWARF standard, since technically they should have names. */
7707 dw_die_ref cu = data;
7708 dw_die_ref type = ref_p->type;
7709 dw_die_ref stub = NULL;
7711 if (type->comdat_type_p)
7713 /* If we refer to this type via sig8, use AT_signature. */
7714 stub = new_die (type->die_tag, cu, NULL_TREE);
7715 add_AT_die_ref (stub, DW_AT_signature, type);
7717 else
7719 /* Otherwise, use a typedef with no name. */
7720 stub = new_die (DW_TAG_typedef, cu, NULL_TREE);
7721 add_AT_die_ref (stub, DW_AT_type, type);
7724 stub->die_mark++;
7725 ref_p->stub = stub;
7727 return 1;
7730 /* DIE is a unit; look through all the DIE references to see if there are
7731 any external references to types, and if so, create local stubs for
7732 them which will be applied in build_abbrev_table. This is useful because
7733 references to local DIEs are smaller. */
7735 static external_ref_hash_type *
7736 optimize_external_refs (dw_die_ref die)
7738 external_ref_hash_type *map = new external_ref_hash_type (10);
7739 optimize_external_refs_1 (die, map);
7740 map->traverse <dw_die_ref, dwarf2_build_local_stub> (die);
7741 return map;
7744 /* The format of each DIE (and its attribute value pairs) is encoded in an
7745 abbreviation table. This routine builds the abbreviation table and assigns
7746 a unique abbreviation id for each abbreviation entry. The children of each
7747 die are visited recursively. */
7749 static void
7750 build_abbrev_table (dw_die_ref die, external_ref_hash_type *extern_map)
7752 unsigned long abbrev_id;
7753 unsigned int n_alloc;
7754 dw_die_ref c;
7755 dw_attr_ref a;
7756 unsigned ix;
7758 /* Scan the DIE references, and replace any that refer to
7759 DIEs from other CUs (i.e. those which are not marked) with
7760 the local stubs we built in optimize_external_refs. */
7761 FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
7762 if (AT_class (a) == dw_val_class_die_ref
7763 && (c = AT_ref (a))->die_mark == 0)
7765 struct external_ref *ref_p;
7766 gcc_assert (AT_ref (a)->comdat_type_p || AT_ref (a)->die_id.die_symbol);
7768 ref_p = lookup_external_ref (extern_map, c);
7769 if (ref_p->stub && ref_p->stub != die)
7770 change_AT_die_ref (a, ref_p->stub);
7771 else
7772 /* We aren't changing this reference, so mark it external. */
7773 set_AT_ref_external (a, 1);
7776 for (abbrev_id = 1; abbrev_id < abbrev_die_table_in_use; ++abbrev_id)
7778 dw_die_ref abbrev = abbrev_die_table[abbrev_id];
7779 dw_attr_ref die_a, abbrev_a;
7780 unsigned ix;
7781 bool ok = true;
7783 if (abbrev->die_tag != die->die_tag)
7784 continue;
7785 if ((abbrev->die_child != NULL) != (die->die_child != NULL))
7786 continue;
7788 if (vec_safe_length (abbrev->die_attr) != vec_safe_length (die->die_attr))
7789 continue;
7791 FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, die_a)
7793 abbrev_a = &(*abbrev->die_attr)[ix];
7794 if ((abbrev_a->dw_attr != die_a->dw_attr)
7795 || (value_format (abbrev_a) != value_format (die_a)))
7797 ok = false;
7798 break;
7801 if (ok)
7802 break;
7805 if (abbrev_id >= abbrev_die_table_in_use)
7807 if (abbrev_die_table_in_use >= abbrev_die_table_allocated)
7809 n_alloc = abbrev_die_table_allocated + ABBREV_DIE_TABLE_INCREMENT;
7810 abbrev_die_table = GGC_RESIZEVEC (dw_die_ref, abbrev_die_table,
7811 n_alloc);
7813 memset (&abbrev_die_table[abbrev_die_table_allocated], 0,
7814 (n_alloc - abbrev_die_table_allocated) * sizeof (dw_die_ref));
7815 abbrev_die_table_allocated = n_alloc;
7818 ++abbrev_die_table_in_use;
7819 abbrev_die_table[abbrev_id] = die;
7822 die->die_abbrev = abbrev_id;
7823 FOR_EACH_CHILD (die, c, build_abbrev_table (c, extern_map));
7826 /* Return the power-of-two number of bytes necessary to represent VALUE. */
7828 static int
7829 constant_size (unsigned HOST_WIDE_INT value)
7831 int log;
7833 if (value == 0)
7834 log = 0;
7835 else
7836 log = floor_log2 (value);
7838 log = log / 8;
7839 log = 1 << (floor_log2 (log) + 1);
7841 return log;
7844 /* Return the size of a DIE as it is represented in the
7845 .debug_info section. */
7847 static unsigned long
7848 size_of_die (dw_die_ref die)
7850 unsigned long size = 0;
7851 dw_attr_ref a;
7852 unsigned ix;
7853 enum dwarf_form form;
7855 size += size_of_uleb128 (die->die_abbrev);
7856 FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
7858 switch (AT_class (a))
7860 case dw_val_class_addr:
7861 if (dwarf_split_debug_info && AT_index (a) != NOT_INDEXED)
7863 gcc_assert (AT_index (a) != NO_INDEX_ASSIGNED);
7864 size += size_of_uleb128 (AT_index (a));
7866 else
7867 size += DWARF2_ADDR_SIZE;
7868 break;
7869 case dw_val_class_offset:
7870 size += DWARF_OFFSET_SIZE;
7871 break;
7872 case dw_val_class_loc:
7874 unsigned long lsize = size_of_locs (AT_loc (a));
7876 /* Block length. */
7877 if (dwarf_version >= 4)
7878 size += size_of_uleb128 (lsize);
7879 else
7880 size += constant_size (lsize);
7881 size += lsize;
7883 break;
7884 case dw_val_class_loc_list:
7885 if (dwarf_split_debug_info && AT_index (a) != NOT_INDEXED)
7887 gcc_assert (AT_index (a) != NO_INDEX_ASSIGNED);
7888 size += size_of_uleb128 (AT_index (a));
7890 else
7891 size += DWARF_OFFSET_SIZE;
7892 break;
7893 case dw_val_class_range_list:
7894 size += DWARF_OFFSET_SIZE;
7895 break;
7896 case dw_val_class_const:
7897 size += size_of_sleb128 (AT_int (a));
7898 break;
7899 case dw_val_class_unsigned_const:
7901 int csize = constant_size (AT_unsigned (a));
7902 if (dwarf_version == 3
7903 && a->dw_attr == DW_AT_data_member_location
7904 && csize >= 4)
7905 size += size_of_uleb128 (AT_unsigned (a));
7906 else
7907 size += csize;
7909 break;
7910 case dw_val_class_const_double:
7911 size += HOST_BITS_PER_DOUBLE_INT / HOST_BITS_PER_CHAR;
7912 if (HOST_BITS_PER_WIDE_INT >= 64)
7913 size++; /* block */
7914 break;
7915 case dw_val_class_wide_int:
7916 size += (get_full_len (*a->dw_attr_val.v.val_wide)
7917 * HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR);
7918 if (get_full_len (*a->dw_attr_val.v.val_wide) * HOST_BITS_PER_WIDE_INT
7919 > 64)
7920 size++; /* block */
7921 break;
7922 case dw_val_class_vec:
7923 size += constant_size (a->dw_attr_val.v.val_vec.length
7924 * a->dw_attr_val.v.val_vec.elt_size)
7925 + a->dw_attr_val.v.val_vec.length
7926 * a->dw_attr_val.v.val_vec.elt_size; /* block */
7927 break;
7928 case dw_val_class_flag:
7929 if (dwarf_version >= 4)
7930 /* Currently all add_AT_flag calls pass in 1 as last argument,
7931 so DW_FORM_flag_present can be used. If that ever changes,
7932 we'll need to use DW_FORM_flag and have some optimization
7933 in build_abbrev_table that will change those to
7934 DW_FORM_flag_present if it is set to 1 in all DIEs using
7935 the same abbrev entry. */
7936 gcc_assert (a->dw_attr_val.v.val_flag == 1);
7937 else
7938 size += 1;
7939 break;
7940 case dw_val_class_die_ref:
7941 if (AT_ref_external (a))
7943 /* In DWARF4, we use DW_FORM_ref_sig8; for earlier versions
7944 we use DW_FORM_ref_addr. In DWARF2, DW_FORM_ref_addr
7945 is sized by target address length, whereas in DWARF3
7946 it's always sized as an offset. */
7947 if (use_debug_types)
7948 size += DWARF_TYPE_SIGNATURE_SIZE;
7949 else if (dwarf_version == 2)
7950 size += DWARF2_ADDR_SIZE;
7951 else
7952 size += DWARF_OFFSET_SIZE;
7954 else
7955 size += DWARF_OFFSET_SIZE;
7956 break;
7957 case dw_val_class_fde_ref:
7958 size += DWARF_OFFSET_SIZE;
7959 break;
7960 case dw_val_class_lbl_id:
7961 if (dwarf_split_debug_info && AT_index (a) != NOT_INDEXED)
7963 gcc_assert (AT_index (a) != NO_INDEX_ASSIGNED);
7964 size += size_of_uleb128 (AT_index (a));
7966 else
7967 size += DWARF2_ADDR_SIZE;
7968 break;
7969 case dw_val_class_lineptr:
7970 case dw_val_class_macptr:
7971 size += DWARF_OFFSET_SIZE;
7972 break;
7973 case dw_val_class_str:
7974 form = AT_string_form (a);
7975 if (form == DW_FORM_strp)
7976 size += DWARF_OFFSET_SIZE;
7977 else if (form == DW_FORM_GNU_str_index)
7978 size += size_of_uleb128 (AT_index (a));
7979 else
7980 size += strlen (a->dw_attr_val.v.val_str->str) + 1;
7981 break;
7982 case dw_val_class_file:
7983 size += constant_size (maybe_emit_file (a->dw_attr_val.v.val_file));
7984 break;
7985 case dw_val_class_data8:
7986 size += 8;
7987 break;
7988 case dw_val_class_vms_delta:
7989 size += DWARF_OFFSET_SIZE;
7990 break;
7991 case dw_val_class_high_pc:
7992 size += DWARF2_ADDR_SIZE;
7993 break;
7994 default:
7995 gcc_unreachable ();
7999 return size;
8002 /* Size the debugging information associated with a given DIE. Visits the
8003 DIE's children recursively. Updates the global variable next_die_offset, on
8004 each time through. Uses the current value of next_die_offset to update the
8005 die_offset field in each DIE. */
8007 static void
8008 calc_die_sizes (dw_die_ref die)
8010 dw_die_ref c;
8012 gcc_assert (die->die_offset == 0
8013 || (unsigned long int) die->die_offset == next_die_offset);
8014 die->die_offset = next_die_offset;
8015 next_die_offset += size_of_die (die);
8017 FOR_EACH_CHILD (die, c, calc_die_sizes (c));
8019 if (die->die_child != NULL)
8020 /* Count the null byte used to terminate sibling lists. */
8021 next_die_offset += 1;
8024 /* Size just the base type children at the start of the CU.
8025 This is needed because build_abbrev needs to size locs
8026 and sizing of type based stack ops needs to know die_offset
8027 values for the base types. */
8029 static void
8030 calc_base_type_die_sizes (void)
8032 unsigned long die_offset = DWARF_COMPILE_UNIT_HEADER_SIZE;
8033 unsigned int i;
8034 dw_die_ref base_type;
8035 #if ENABLE_ASSERT_CHECKING
8036 dw_die_ref prev = comp_unit_die ()->die_child;
8037 #endif
8039 die_offset += size_of_die (comp_unit_die ());
8040 for (i = 0; base_types.iterate (i, &base_type); i++)
8042 #if ENABLE_ASSERT_CHECKING
8043 gcc_assert (base_type->die_offset == 0
8044 && prev->die_sib == base_type
8045 && base_type->die_child == NULL
8046 && base_type->die_abbrev);
8047 prev = base_type;
8048 #endif
8049 base_type->die_offset = die_offset;
8050 die_offset += size_of_die (base_type);
8054 /* Set the marks for a die and its children. We do this so
8055 that we know whether or not a reference needs to use FORM_ref_addr; only
8056 DIEs in the same CU will be marked. We used to clear out the offset
8057 and use that as the flag, but ran into ordering problems. */
8059 static void
8060 mark_dies (dw_die_ref die)
8062 dw_die_ref c;
8064 gcc_assert (!die->die_mark);
8066 die->die_mark = 1;
8067 FOR_EACH_CHILD (die, c, mark_dies (c));
8070 /* Clear the marks for a die and its children. */
8072 static void
8073 unmark_dies (dw_die_ref die)
8075 dw_die_ref c;
8077 if (! use_debug_types)
8078 gcc_assert (die->die_mark);
8080 die->die_mark = 0;
8081 FOR_EACH_CHILD (die, c, unmark_dies (c));
8084 /* Clear the marks for a die, its children and referred dies. */
8086 static void
8087 unmark_all_dies (dw_die_ref die)
8089 dw_die_ref c;
8090 dw_attr_ref a;
8091 unsigned ix;
8093 if (!die->die_mark)
8094 return;
8095 die->die_mark = 0;
8097 FOR_EACH_CHILD (die, c, unmark_all_dies (c));
8099 FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
8100 if (AT_class (a) == dw_val_class_die_ref)
8101 unmark_all_dies (AT_ref (a));
8104 /* Calculate if the entry should appear in the final output file. It may be
8105 from a pruned a type. */
8107 static bool
8108 include_pubname_in_output (vec<pubname_entry, va_gc> *table, pubname_entry *p)
8110 /* By limiting gnu pubnames to definitions only, gold can generate a
8111 gdb index without entries for declarations, which don't include
8112 enough information to be useful. */
8113 if (debug_generate_pub_sections == 2 && is_declaration_die (p->die))
8114 return false;
8116 if (table == pubname_table)
8118 /* Enumerator names are part of the pubname table, but the
8119 parent DW_TAG_enumeration_type die may have been pruned.
8120 Don't output them if that is the case. */
8121 if (p->die->die_tag == DW_TAG_enumerator &&
8122 (p->die->die_parent == NULL
8123 || !p->die->die_parent->die_perennial_p))
8124 return false;
8126 /* Everything else in the pubname table is included. */
8127 return true;
8130 /* The pubtypes table shouldn't include types that have been
8131 pruned. */
8132 return (p->die->die_offset != 0
8133 || !flag_eliminate_unused_debug_types);
8136 /* Return the size of the .debug_pubnames or .debug_pubtypes table
8137 generated for the compilation unit. */
8139 static unsigned long
8140 size_of_pubnames (vec<pubname_entry, va_gc> *names)
8142 unsigned long size;
8143 unsigned i;
8144 pubname_ref p;
8145 int space_for_flags = (debug_generate_pub_sections == 2) ? 1 : 0;
8147 size = DWARF_PUBNAMES_HEADER_SIZE;
8148 FOR_EACH_VEC_ELT (*names, i, p)
8149 if (include_pubname_in_output (names, p))
8150 size += strlen (p->name) + DWARF_OFFSET_SIZE + 1 + space_for_flags;
8152 size += DWARF_OFFSET_SIZE;
8153 return size;
8156 /* Return the size of the information in the .debug_aranges section. */
8158 static unsigned long
8159 size_of_aranges (void)
8161 unsigned long size;
8163 size = DWARF_ARANGES_HEADER_SIZE;
8165 /* Count the address/length pair for this compilation unit. */
8166 if (text_section_used)
8167 size += 2 * DWARF2_ADDR_SIZE;
8168 if (cold_text_section_used)
8169 size += 2 * DWARF2_ADDR_SIZE;
8170 if (have_multiple_function_sections)
8172 unsigned fde_idx;
8173 dw_fde_ref fde;
8175 FOR_EACH_VEC_ELT (*fde_vec, fde_idx, fde)
8177 if (DECL_IGNORED_P (fde->decl))
8178 continue;
8179 if (!fde->in_std_section)
8180 size += 2 * DWARF2_ADDR_SIZE;
8181 if (fde->dw_fde_second_begin && !fde->second_in_std_section)
8182 size += 2 * DWARF2_ADDR_SIZE;
8186 /* Count the two zero words used to terminated the address range table. */
8187 size += 2 * DWARF2_ADDR_SIZE;
8188 return size;
8191 /* Select the encoding of an attribute value. */
8193 static enum dwarf_form
8194 value_format (dw_attr_ref a)
8196 switch (AT_class (a))
8198 case dw_val_class_addr:
8199 /* Only very few attributes allow DW_FORM_addr. */
8200 switch (a->dw_attr)
8202 case DW_AT_low_pc:
8203 case DW_AT_high_pc:
8204 case DW_AT_entry_pc:
8205 case DW_AT_trampoline:
8206 return (AT_index (a) == NOT_INDEXED
8207 ? DW_FORM_addr : DW_FORM_GNU_addr_index);
8208 default:
8209 break;
8211 switch (DWARF2_ADDR_SIZE)
8213 case 1:
8214 return DW_FORM_data1;
8215 case 2:
8216 return DW_FORM_data2;
8217 case 4:
8218 return DW_FORM_data4;
8219 case 8:
8220 return DW_FORM_data8;
8221 default:
8222 gcc_unreachable ();
8224 case dw_val_class_range_list:
8225 case dw_val_class_loc_list:
8226 if (dwarf_version >= 4)
8227 return DW_FORM_sec_offset;
8228 /* FALLTHRU */
8229 case dw_val_class_vms_delta:
8230 case dw_val_class_offset:
8231 switch (DWARF_OFFSET_SIZE)
8233 case 4:
8234 return DW_FORM_data4;
8235 case 8:
8236 return DW_FORM_data8;
8237 default:
8238 gcc_unreachable ();
8240 case dw_val_class_loc:
8241 if (dwarf_version >= 4)
8242 return DW_FORM_exprloc;
8243 switch (constant_size (size_of_locs (AT_loc (a))))
8245 case 1:
8246 return DW_FORM_block1;
8247 case 2:
8248 return DW_FORM_block2;
8249 case 4:
8250 return DW_FORM_block4;
8251 default:
8252 gcc_unreachable ();
8254 case dw_val_class_const:
8255 return DW_FORM_sdata;
8256 case dw_val_class_unsigned_const:
8257 switch (constant_size (AT_unsigned (a)))
8259 case 1:
8260 return DW_FORM_data1;
8261 case 2:
8262 return DW_FORM_data2;
8263 case 4:
8264 /* In DWARF3 DW_AT_data_member_location with
8265 DW_FORM_data4 or DW_FORM_data8 is a loclistptr, not
8266 constant, so we need to use DW_FORM_udata if we need
8267 a large constant. */
8268 if (dwarf_version == 3 && a->dw_attr == DW_AT_data_member_location)
8269 return DW_FORM_udata;
8270 return DW_FORM_data4;
8271 case 8:
8272 if (dwarf_version == 3 && a->dw_attr == DW_AT_data_member_location)
8273 return DW_FORM_udata;
8274 return DW_FORM_data8;
8275 default:
8276 gcc_unreachable ();
8278 case dw_val_class_const_double:
8279 switch (HOST_BITS_PER_WIDE_INT)
8281 case 8:
8282 return DW_FORM_data2;
8283 case 16:
8284 return DW_FORM_data4;
8285 case 32:
8286 return DW_FORM_data8;
8287 case 64:
8288 default:
8289 return DW_FORM_block1;
8291 case dw_val_class_wide_int:
8292 switch (get_full_len (*a->dw_attr_val.v.val_wide) * HOST_BITS_PER_WIDE_INT)
8294 case 8:
8295 return DW_FORM_data1;
8296 case 16:
8297 return DW_FORM_data2;
8298 case 32:
8299 return DW_FORM_data4;
8300 case 64:
8301 return DW_FORM_data8;
8302 default:
8303 return DW_FORM_block1;
8305 case dw_val_class_vec:
8306 switch (constant_size (a->dw_attr_val.v.val_vec.length
8307 * a->dw_attr_val.v.val_vec.elt_size))
8309 case 1:
8310 return DW_FORM_block1;
8311 case 2:
8312 return DW_FORM_block2;
8313 case 4:
8314 return DW_FORM_block4;
8315 default:
8316 gcc_unreachable ();
8318 case dw_val_class_flag:
8319 if (dwarf_version >= 4)
8321 /* Currently all add_AT_flag calls pass in 1 as last argument,
8322 so DW_FORM_flag_present can be used. If that ever changes,
8323 we'll need to use DW_FORM_flag and have some optimization
8324 in build_abbrev_table that will change those to
8325 DW_FORM_flag_present if it is set to 1 in all DIEs using
8326 the same abbrev entry. */
8327 gcc_assert (a->dw_attr_val.v.val_flag == 1);
8328 return DW_FORM_flag_present;
8330 return DW_FORM_flag;
8331 case dw_val_class_die_ref:
8332 if (AT_ref_external (a))
8333 return use_debug_types ? DW_FORM_ref_sig8 : DW_FORM_ref_addr;
8334 else
8335 return DW_FORM_ref;
8336 case dw_val_class_fde_ref:
8337 return DW_FORM_data;
8338 case dw_val_class_lbl_id:
8339 return (AT_index (a) == NOT_INDEXED
8340 ? DW_FORM_addr : DW_FORM_GNU_addr_index);
8341 case dw_val_class_lineptr:
8342 case dw_val_class_macptr:
8343 return dwarf_version >= 4 ? DW_FORM_sec_offset : DW_FORM_data;
8344 case dw_val_class_str:
8345 return AT_string_form (a);
8346 case dw_val_class_file:
8347 switch (constant_size (maybe_emit_file (a->dw_attr_val.v.val_file)))
8349 case 1:
8350 return DW_FORM_data1;
8351 case 2:
8352 return DW_FORM_data2;
8353 case 4:
8354 return DW_FORM_data4;
8355 default:
8356 gcc_unreachable ();
8359 case dw_val_class_data8:
8360 return DW_FORM_data8;
8362 case dw_val_class_high_pc:
8363 switch (DWARF2_ADDR_SIZE)
8365 case 1:
8366 return DW_FORM_data1;
8367 case 2:
8368 return DW_FORM_data2;
8369 case 4:
8370 return DW_FORM_data4;
8371 case 8:
8372 return DW_FORM_data8;
8373 default:
8374 gcc_unreachable ();
8377 default:
8378 gcc_unreachable ();
8382 /* Output the encoding of an attribute value. */
8384 static void
8385 output_value_format (dw_attr_ref a)
8387 enum dwarf_form form = value_format (a);
8389 dw2_asm_output_data_uleb128 (form, "(%s)", dwarf_form_name (form));
8392 /* Given a die and id, produce the appropriate abbreviations. */
8394 static void
8395 output_die_abbrevs (unsigned long abbrev_id, dw_die_ref abbrev)
8397 unsigned ix;
8398 dw_attr_ref a_attr;
8400 dw2_asm_output_data_uleb128 (abbrev_id, "(abbrev code)");
8401 dw2_asm_output_data_uleb128 (abbrev->die_tag, "(TAG: %s)",
8402 dwarf_tag_name (abbrev->die_tag));
8404 if (abbrev->die_child != NULL)
8405 dw2_asm_output_data (1, DW_children_yes, "DW_children_yes");
8406 else
8407 dw2_asm_output_data (1, DW_children_no, "DW_children_no");
8409 for (ix = 0; vec_safe_iterate (abbrev->die_attr, ix, &a_attr); ix++)
8411 dw2_asm_output_data_uleb128 (a_attr->dw_attr, "(%s)",
8412 dwarf_attr_name (a_attr->dw_attr));
8413 output_value_format (a_attr);
8416 dw2_asm_output_data (1, 0, NULL);
8417 dw2_asm_output_data (1, 0, NULL);
8421 /* Output the .debug_abbrev section which defines the DIE abbreviation
8422 table. */
8424 static void
8425 output_abbrev_section (void)
8427 unsigned long abbrev_id;
8429 for (abbrev_id = 1; abbrev_id < abbrev_die_table_in_use; ++abbrev_id)
8430 output_die_abbrevs (abbrev_id, abbrev_die_table[abbrev_id]);
8432 /* Terminate the table. */
8433 dw2_asm_output_data (1, 0, NULL);
8436 /* Output a symbol we can use to refer to this DIE from another CU. */
8438 static inline void
8439 output_die_symbol (dw_die_ref die)
8441 const char *sym = die->die_id.die_symbol;
8443 gcc_assert (!die->comdat_type_p);
8445 if (sym == 0)
8446 return;
8448 if (strncmp (sym, DIE_LABEL_PREFIX, sizeof (DIE_LABEL_PREFIX) - 1) == 0)
8449 /* We make these global, not weak; if the target doesn't support
8450 .linkonce, it doesn't support combining the sections, so debugging
8451 will break. */
8452 targetm.asm_out.globalize_label (asm_out_file, sym);
8454 ASM_OUTPUT_LABEL (asm_out_file, sym);
8457 /* Return a new location list, given the begin and end range, and the
8458 expression. */
8460 static inline dw_loc_list_ref
8461 new_loc_list (dw_loc_descr_ref expr, const char *begin, const char *end,
8462 const char *section)
8464 dw_loc_list_ref retlist = ggc_cleared_alloc<dw_loc_list_node> ();
8466 retlist->begin = begin;
8467 retlist->begin_entry = NULL;
8468 retlist->end = end;
8469 retlist->expr = expr;
8470 retlist->section = section;
8472 return retlist;
8475 /* Generate a new internal symbol for this location list node, if it
8476 hasn't got one yet. */
8478 static inline void
8479 gen_llsym (dw_loc_list_ref list)
8481 gcc_assert (!list->ll_symbol);
8482 list->ll_symbol = gen_internal_sym ("LLST");
8485 /* Output the location list given to us. */
8487 static void
8488 output_loc_list (dw_loc_list_ref list_head)
8490 dw_loc_list_ref curr = list_head;
8492 if (list_head->emitted)
8493 return;
8494 list_head->emitted = true;
8496 ASM_OUTPUT_LABEL (asm_out_file, list_head->ll_symbol);
8498 /* Walk the location list, and output each range + expression. */
8499 for (curr = list_head; curr != NULL; curr = curr->dw_loc_next)
8501 unsigned long size;
8502 /* Don't output an entry that starts and ends at the same address. */
8503 if (strcmp (curr->begin, curr->end) == 0 && !curr->force)
8504 continue;
8505 size = size_of_locs (curr->expr);
8506 /* If the expression is too large, drop it on the floor. We could
8507 perhaps put it into DW_TAG_dwarf_procedure and refer to that
8508 in the expression, but >= 64KB expressions for a single value
8509 in a single range are unlikely very useful. */
8510 if (size > 0xffff)
8511 continue;
8512 if (dwarf_split_debug_info)
8514 dw2_asm_output_data (1, DW_LLE_GNU_start_length_entry,
8515 "Location list start/length entry (%s)",
8516 list_head->ll_symbol);
8517 dw2_asm_output_data_uleb128 (curr->begin_entry->index,
8518 "Location list range start index (%s)",
8519 curr->begin);
8520 /* The length field is 4 bytes. If we ever need to support
8521 an 8-byte length, we can add a new DW_LLE code or fall back
8522 to DW_LLE_GNU_start_end_entry. */
8523 dw2_asm_output_delta (4, curr->end, curr->begin,
8524 "Location list range length (%s)",
8525 list_head->ll_symbol);
8527 else if (!have_multiple_function_sections)
8529 dw2_asm_output_delta (DWARF2_ADDR_SIZE, curr->begin, curr->section,
8530 "Location list begin address (%s)",
8531 list_head->ll_symbol);
8532 dw2_asm_output_delta (DWARF2_ADDR_SIZE, curr->end, curr->section,
8533 "Location list end address (%s)",
8534 list_head->ll_symbol);
8536 else
8538 dw2_asm_output_addr (DWARF2_ADDR_SIZE, curr->begin,
8539 "Location list begin address (%s)",
8540 list_head->ll_symbol);
8541 dw2_asm_output_addr (DWARF2_ADDR_SIZE, curr->end,
8542 "Location list end address (%s)",
8543 list_head->ll_symbol);
8546 /* Output the block length for this list of location operations. */
8547 gcc_assert (size <= 0xffff);
8548 dw2_asm_output_data (2, size, "%s", "Location expression size");
8550 output_loc_sequence (curr->expr, -1);
8553 if (dwarf_split_debug_info)
8554 dw2_asm_output_data (1, DW_LLE_GNU_end_of_list_entry,
8555 "Location list terminator (%s)",
8556 list_head->ll_symbol);
8557 else
8559 dw2_asm_output_data (DWARF2_ADDR_SIZE, 0,
8560 "Location list terminator begin (%s)",
8561 list_head->ll_symbol);
8562 dw2_asm_output_data (DWARF2_ADDR_SIZE, 0,
8563 "Location list terminator end (%s)",
8564 list_head->ll_symbol);
8568 /* Output a range_list offset into the debug_range section. Emit a
8569 relocated reference if val_entry is NULL, otherwise, emit an
8570 indirect reference. */
8572 static void
8573 output_range_list_offset (dw_attr_ref a)
8575 const char *name = dwarf_attr_name (a->dw_attr);
8577 if (a->dw_attr_val.val_entry == RELOCATED_OFFSET)
8579 char *p = strchr (ranges_section_label, '\0');
8580 sprintf (p, "+" HOST_WIDE_INT_PRINT_HEX, a->dw_attr_val.v.val_offset);
8581 dw2_asm_output_offset (DWARF_OFFSET_SIZE, ranges_section_label,
8582 debug_ranges_section, "%s", name);
8583 *p = '\0';
8585 else
8586 dw2_asm_output_data (DWARF_OFFSET_SIZE, a->dw_attr_val.v.val_offset,
8587 "%s (offset from %s)", name, ranges_section_label);
8590 /* Output the offset into the debug_loc section. */
8592 static void
8593 output_loc_list_offset (dw_attr_ref a)
8595 char *sym = AT_loc_list (a)->ll_symbol;
8597 gcc_assert (sym);
8598 if (dwarf_split_debug_info)
8599 dw2_asm_output_delta (DWARF_OFFSET_SIZE, sym, loc_section_label,
8600 "%s", dwarf_attr_name (a->dw_attr));
8601 else
8602 dw2_asm_output_offset (DWARF_OFFSET_SIZE, sym, debug_loc_section,
8603 "%s", dwarf_attr_name (a->dw_attr));
8606 /* Output an attribute's index or value appropriately. */
8608 static void
8609 output_attr_index_or_value (dw_attr_ref a)
8611 const char *name = dwarf_attr_name (a->dw_attr);
8613 if (dwarf_split_debug_info && AT_index (a) != NOT_INDEXED)
8615 dw2_asm_output_data_uleb128 (AT_index (a), "%s", name);
8616 return;
8618 switch (AT_class (a))
8620 case dw_val_class_addr:
8621 dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE, AT_addr (a), "%s", name);
8622 break;
8623 case dw_val_class_high_pc:
8624 case dw_val_class_lbl_id:
8625 dw2_asm_output_addr (DWARF2_ADDR_SIZE, AT_lbl (a), "%s", name);
8626 break;
8627 case dw_val_class_loc_list:
8628 output_loc_list_offset (a);
8629 break;
8630 default:
8631 gcc_unreachable ();
8635 /* Output a type signature. */
8637 static inline void
8638 output_signature (const char *sig, const char *name)
8640 int i;
8642 for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++)
8643 dw2_asm_output_data (1, sig[i], i == 0 ? "%s" : NULL, name);
8646 /* Output the DIE and its attributes. Called recursively to generate
8647 the definitions of each child DIE. */
8649 static void
8650 output_die (dw_die_ref die)
8652 dw_attr_ref a;
8653 dw_die_ref c;
8654 unsigned long size;
8655 unsigned ix;
8657 /* If someone in another CU might refer to us, set up a symbol for
8658 them to point to. */
8659 if (! die->comdat_type_p && die->die_id.die_symbol)
8660 output_die_symbol (die);
8662 dw2_asm_output_data_uleb128 (die->die_abbrev, "(DIE (%#lx) %s)",
8663 (unsigned long)die->die_offset,
8664 dwarf_tag_name (die->die_tag));
8666 FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
8668 const char *name = dwarf_attr_name (a->dw_attr);
8670 switch (AT_class (a))
8672 case dw_val_class_addr:
8673 output_attr_index_or_value (a);
8674 break;
8676 case dw_val_class_offset:
8677 dw2_asm_output_data (DWARF_OFFSET_SIZE, a->dw_attr_val.v.val_offset,
8678 "%s", name);
8679 break;
8681 case dw_val_class_range_list:
8682 output_range_list_offset (a);
8683 break;
8685 case dw_val_class_loc:
8686 size = size_of_locs (AT_loc (a));
8688 /* Output the block length for this list of location operations. */
8689 if (dwarf_version >= 4)
8690 dw2_asm_output_data_uleb128 (size, "%s", name);
8691 else
8692 dw2_asm_output_data (constant_size (size), size, "%s", name);
8694 output_loc_sequence (AT_loc (a), -1);
8695 break;
8697 case dw_val_class_const:
8698 /* ??? It would be slightly more efficient to use a scheme like is
8699 used for unsigned constants below, but gdb 4.x does not sign
8700 extend. Gdb 5.x does sign extend. */
8701 dw2_asm_output_data_sleb128 (AT_int (a), "%s", name);
8702 break;
8704 case dw_val_class_unsigned_const:
8706 int csize = constant_size (AT_unsigned (a));
8707 if (dwarf_version == 3
8708 && a->dw_attr == DW_AT_data_member_location
8709 && csize >= 4)
8710 dw2_asm_output_data_uleb128 (AT_unsigned (a), "%s", name);
8711 else
8712 dw2_asm_output_data (csize, AT_unsigned (a), "%s", name);
8714 break;
8716 case dw_val_class_const_double:
8718 unsigned HOST_WIDE_INT first, second;
8720 if (HOST_BITS_PER_WIDE_INT >= 64)
8721 dw2_asm_output_data (1,
8722 HOST_BITS_PER_DOUBLE_INT
8723 / HOST_BITS_PER_CHAR,
8724 NULL);
8726 if (WORDS_BIG_ENDIAN)
8728 first = a->dw_attr_val.v.val_double.high;
8729 second = a->dw_attr_val.v.val_double.low;
8731 else
8733 first = a->dw_attr_val.v.val_double.low;
8734 second = a->dw_attr_val.v.val_double.high;
8737 dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR,
8738 first, "%s", name);
8739 dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR,
8740 second, NULL);
8742 break;
8744 case dw_val_class_wide_int:
8746 int i;
8747 int len = get_full_len (*a->dw_attr_val.v.val_wide);
8748 int l = HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR;
8749 if (len * HOST_BITS_PER_WIDE_INT > 64)
8750 dw2_asm_output_data (1, get_full_len (*a->dw_attr_val.v.val_wide) * l,
8751 NULL);
8753 if (WORDS_BIG_ENDIAN)
8754 for (i = len - 1; i >= 0; --i)
8756 dw2_asm_output_data (l, a->dw_attr_val.v.val_wide->elt (i),
8757 name);
8758 name = NULL;
8760 else
8761 for (i = 0; i < len; ++i)
8763 dw2_asm_output_data (l, a->dw_attr_val.v.val_wide->elt (i),
8764 name);
8765 name = NULL;
8768 break;
8770 case dw_val_class_vec:
8772 unsigned int elt_size = a->dw_attr_val.v.val_vec.elt_size;
8773 unsigned int len = a->dw_attr_val.v.val_vec.length;
8774 unsigned int i;
8775 unsigned char *p;
8777 dw2_asm_output_data (constant_size (len * elt_size),
8778 len * elt_size, "%s", name);
8779 if (elt_size > sizeof (HOST_WIDE_INT))
8781 elt_size /= 2;
8782 len *= 2;
8784 for (i = 0, p = a->dw_attr_val.v.val_vec.array;
8785 i < len;
8786 i++, p += elt_size)
8787 dw2_asm_output_data (elt_size, extract_int (p, elt_size),
8788 "fp or vector constant word %u", i);
8789 break;
8792 case dw_val_class_flag:
8793 if (dwarf_version >= 4)
8795 /* Currently all add_AT_flag calls pass in 1 as last argument,
8796 so DW_FORM_flag_present can be used. If that ever changes,
8797 we'll need to use DW_FORM_flag and have some optimization
8798 in build_abbrev_table that will change those to
8799 DW_FORM_flag_present if it is set to 1 in all DIEs using
8800 the same abbrev entry. */
8801 gcc_assert (AT_flag (a) == 1);
8802 if (flag_debug_asm)
8803 fprintf (asm_out_file, "\t\t\t%s %s\n",
8804 ASM_COMMENT_START, name);
8805 break;
8807 dw2_asm_output_data (1, AT_flag (a), "%s", name);
8808 break;
8810 case dw_val_class_loc_list:
8811 output_attr_index_or_value (a);
8812 break;
8814 case dw_val_class_die_ref:
8815 if (AT_ref_external (a))
8817 if (AT_ref (a)->comdat_type_p)
8819 comdat_type_node_ref type_node =
8820 AT_ref (a)->die_id.die_type_node;
8822 gcc_assert (type_node);
8823 output_signature (type_node->signature, name);
8825 else
8827 const char *sym = AT_ref (a)->die_id.die_symbol;
8828 int size;
8830 gcc_assert (sym);
8831 /* In DWARF2, DW_FORM_ref_addr is sized by target address
8832 length, whereas in DWARF3 it's always sized as an
8833 offset. */
8834 if (dwarf_version == 2)
8835 size = DWARF2_ADDR_SIZE;
8836 else
8837 size = DWARF_OFFSET_SIZE;
8838 dw2_asm_output_offset (size, sym, debug_info_section, "%s",
8839 name);
8842 else
8844 gcc_assert (AT_ref (a)->die_offset);
8845 dw2_asm_output_data (DWARF_OFFSET_SIZE, AT_ref (a)->die_offset,
8846 "%s", name);
8848 break;
8850 case dw_val_class_fde_ref:
8852 char l1[20];
8854 ASM_GENERATE_INTERNAL_LABEL (l1, FDE_LABEL,
8855 a->dw_attr_val.v.val_fde_index * 2);
8856 dw2_asm_output_offset (DWARF_OFFSET_SIZE, l1, debug_frame_section,
8857 "%s", name);
8859 break;
8861 case dw_val_class_vms_delta:
8862 dw2_asm_output_vms_delta (DWARF_OFFSET_SIZE,
8863 AT_vms_delta2 (a), AT_vms_delta1 (a),
8864 "%s", name);
8865 break;
8867 case dw_val_class_lbl_id:
8868 output_attr_index_or_value (a);
8869 break;
8871 case dw_val_class_lineptr:
8872 dw2_asm_output_offset (DWARF_OFFSET_SIZE, AT_lbl (a),
8873 debug_line_section, "%s", name);
8874 break;
8876 case dw_val_class_macptr:
8877 dw2_asm_output_offset (DWARF_OFFSET_SIZE, AT_lbl (a),
8878 debug_macinfo_section, "%s", name);
8879 break;
8881 case dw_val_class_str:
8882 if (a->dw_attr_val.v.val_str->form == DW_FORM_strp)
8883 dw2_asm_output_offset (DWARF_OFFSET_SIZE,
8884 a->dw_attr_val.v.val_str->label,
8885 debug_str_section,
8886 "%s: \"%s\"", name, AT_string (a));
8887 else if (a->dw_attr_val.v.val_str->form == DW_FORM_GNU_str_index)
8888 dw2_asm_output_data_uleb128 (AT_index (a),
8889 "%s: \"%s\"", name, AT_string (a));
8890 else
8891 dw2_asm_output_nstring (AT_string (a), -1, "%s", name);
8892 break;
8894 case dw_val_class_file:
8896 int f = maybe_emit_file (a->dw_attr_val.v.val_file);
8898 dw2_asm_output_data (constant_size (f), f, "%s (%s)", name,
8899 a->dw_attr_val.v.val_file->filename);
8900 break;
8903 case dw_val_class_data8:
8905 int i;
8907 for (i = 0; i < 8; i++)
8908 dw2_asm_output_data (1, a->dw_attr_val.v.val_data8[i],
8909 i == 0 ? "%s" : NULL, name);
8910 break;
8913 case dw_val_class_high_pc:
8914 dw2_asm_output_delta (DWARF2_ADDR_SIZE, AT_lbl (a),
8915 get_AT_low_pc (die), "DW_AT_high_pc");
8916 break;
8918 default:
8919 gcc_unreachable ();
8923 FOR_EACH_CHILD (die, c, output_die (c));
8925 /* Add null byte to terminate sibling list. */
8926 if (die->die_child != NULL)
8927 dw2_asm_output_data (1, 0, "end of children of DIE %#lx",
8928 (unsigned long) die->die_offset);
8931 /* Output the compilation unit that appears at the beginning of the
8932 .debug_info section, and precedes the DIE descriptions. */
8934 static void
8935 output_compilation_unit_header (void)
8937 int ver = dwarf_version;
8939 if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
8940 dw2_asm_output_data (4, 0xffffffff,
8941 "Initial length escape value indicating 64-bit DWARF extension");
8942 dw2_asm_output_data (DWARF_OFFSET_SIZE,
8943 next_die_offset - DWARF_INITIAL_LENGTH_SIZE,
8944 "Length of Compilation Unit Info");
8945 dw2_asm_output_data (2, ver, "DWARF version number");
8946 dw2_asm_output_offset (DWARF_OFFSET_SIZE, abbrev_section_label,
8947 debug_abbrev_section,
8948 "Offset Into Abbrev. Section");
8949 dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Pointer Size (in bytes)");
8952 /* Output the compilation unit DIE and its children. */
8954 static void
8955 output_comp_unit (dw_die_ref die, int output_if_empty)
8957 const char *secname, *oldsym;
8958 char *tmp;
8960 /* Unless we are outputting main CU, we may throw away empty ones. */
8961 if (!output_if_empty && die->die_child == NULL)
8962 return;
8964 /* Even if there are no children of this DIE, we must output the information
8965 about the compilation unit. Otherwise, on an empty translation unit, we
8966 will generate a present, but empty, .debug_info section. IRIX 6.5 `nm'
8967 will then complain when examining the file. First mark all the DIEs in
8968 this CU so we know which get local refs. */
8969 mark_dies (die);
8971 external_ref_hash_type *extern_map = optimize_external_refs (die);
8973 build_abbrev_table (die, extern_map);
8975 delete extern_map;
8977 /* Initialize the beginning DIE offset - and calculate sizes/offsets. */
8978 next_die_offset = DWARF_COMPILE_UNIT_HEADER_SIZE;
8979 calc_die_sizes (die);
8981 oldsym = die->die_id.die_symbol;
8982 if (oldsym)
8984 tmp = XALLOCAVEC (char, strlen (oldsym) + 24);
8986 sprintf (tmp, ".gnu.linkonce.wi.%s", oldsym);
8987 secname = tmp;
8988 die->die_id.die_symbol = NULL;
8989 switch_to_section (get_section (secname, SECTION_DEBUG, NULL));
8991 else
8993 switch_to_section (debug_info_section);
8994 ASM_OUTPUT_LABEL (asm_out_file, debug_info_section_label);
8995 info_section_emitted = true;
8998 /* Output debugging information. */
8999 output_compilation_unit_header ();
9000 output_die (die);
9002 /* Leave the marks on the main CU, so we can check them in
9003 output_pubnames. */
9004 if (oldsym)
9006 unmark_dies (die);
9007 die->die_id.die_symbol = oldsym;
9011 /* Whether to generate the DWARF accelerator tables in .debug_pubnames
9012 and .debug_pubtypes. This is configured per-target, but can be
9013 overridden by the -gpubnames or -gno-pubnames options. */
9015 static inline bool
9016 want_pubnames (void)
9018 if (debug_info_level <= DINFO_LEVEL_TERSE)
9019 return false;
9020 if (debug_generate_pub_sections != -1)
9021 return debug_generate_pub_sections;
9022 return targetm.want_debug_pub_sections;
9025 /* Add the DW_AT_GNU_pubnames and DW_AT_GNU_pubtypes attributes. */
9027 static void
9028 add_AT_pubnames (dw_die_ref die)
9030 if (want_pubnames ())
9031 add_AT_flag (die, DW_AT_GNU_pubnames, 1);
9034 /* Add a string attribute value to a skeleton DIE. */
9036 static inline void
9037 add_skeleton_AT_string (dw_die_ref die, enum dwarf_attribute attr_kind,
9038 const char *str)
9040 dw_attr_node attr;
9041 struct indirect_string_node *node;
9043 if (! skeleton_debug_str_hash)
9044 skeleton_debug_str_hash = htab_create_ggc (10, debug_str_do_hash,
9045 debug_str_eq, NULL);
9047 node = find_AT_string_in_table (str, skeleton_debug_str_hash);
9048 find_string_form (node);
9049 if (node->form == DW_FORM_GNU_str_index)
9050 node->form = DW_FORM_strp;
9052 attr.dw_attr = attr_kind;
9053 attr.dw_attr_val.val_class = dw_val_class_str;
9054 attr.dw_attr_val.val_entry = NULL;
9055 attr.dw_attr_val.v.val_str = node;
9056 add_dwarf_attr (die, &attr);
9059 /* Helper function to generate top-level dies for skeleton debug_info and
9060 debug_types. */
9062 static void
9063 add_top_level_skeleton_die_attrs (dw_die_ref die)
9065 const char *dwo_file_name = concat (aux_base_name, ".dwo", NULL);
9066 const char *comp_dir = comp_dir_string ();
9068 add_skeleton_AT_string (die, DW_AT_GNU_dwo_name, dwo_file_name);
9069 if (comp_dir != NULL)
9070 add_skeleton_AT_string (die, DW_AT_comp_dir, comp_dir);
9071 add_AT_pubnames (die);
9072 add_AT_lineptr (die, DW_AT_GNU_addr_base, debug_addr_section_label);
9075 /* Output skeleton debug sections that point to the dwo file. */
9077 static void
9078 output_skeleton_debug_sections (dw_die_ref comp_unit)
9080 /* These attributes will be found in the full debug_info section. */
9081 remove_AT (comp_unit, DW_AT_producer);
9082 remove_AT (comp_unit, DW_AT_language);
9084 switch_to_section (debug_skeleton_info_section);
9085 ASM_OUTPUT_LABEL (asm_out_file, debug_skeleton_info_section_label);
9087 /* Produce the skeleton compilation-unit header. This one differs enough from
9088 a normal CU header that it's better not to call output_compilation_unit
9089 header. */
9090 if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
9091 dw2_asm_output_data (4, 0xffffffff,
9092 "Initial length escape value indicating 64-bit DWARF extension");
9094 dw2_asm_output_data (DWARF_OFFSET_SIZE,
9095 DWARF_COMPILE_UNIT_HEADER_SIZE
9096 - DWARF_INITIAL_LENGTH_SIZE
9097 + size_of_die (comp_unit),
9098 "Length of Compilation Unit Info");
9099 dw2_asm_output_data (2, dwarf_version, "DWARF version number");
9100 dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_skeleton_abbrev_section_label,
9101 debug_abbrev_section,
9102 "Offset Into Abbrev. Section");
9103 dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Pointer Size (in bytes)");
9105 comp_unit->die_abbrev = SKELETON_COMP_DIE_ABBREV;
9106 output_die (comp_unit);
9108 /* Build the skeleton debug_abbrev section. */
9109 switch_to_section (debug_skeleton_abbrev_section);
9110 ASM_OUTPUT_LABEL (asm_out_file, debug_skeleton_abbrev_section_label);
9112 output_die_abbrevs (SKELETON_COMP_DIE_ABBREV, comp_unit);
9114 dw2_asm_output_data (1, 0, "end of skeleton .debug_abbrev");
9117 /* Output a comdat type unit DIE and its children. */
9119 static void
9120 output_comdat_type_unit (comdat_type_node *node)
9122 const char *secname;
9123 char *tmp;
9124 int i;
9125 #if defined (OBJECT_FORMAT_ELF)
9126 tree comdat_key;
9127 #endif
9129 /* First mark all the DIEs in this CU so we know which get local refs. */
9130 mark_dies (node->root_die);
9132 external_ref_hash_type *extern_map = optimize_external_refs (node->root_die);
9134 build_abbrev_table (node->root_die, extern_map);
9136 delete extern_map;
9137 extern_map = NULL;
9139 /* Initialize the beginning DIE offset - and calculate sizes/offsets. */
9140 next_die_offset = DWARF_COMDAT_TYPE_UNIT_HEADER_SIZE;
9141 calc_die_sizes (node->root_die);
9143 #if defined (OBJECT_FORMAT_ELF)
9144 if (!dwarf_split_debug_info)
9145 secname = ".debug_types";
9146 else
9147 secname = ".debug_types.dwo";
9149 tmp = XALLOCAVEC (char, 4 + DWARF_TYPE_SIGNATURE_SIZE * 2);
9150 sprintf (tmp, "wt.");
9151 for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++)
9152 sprintf (tmp + 3 + i * 2, "%02x", node->signature[i] & 0xff);
9153 comdat_key = get_identifier (tmp);
9154 targetm.asm_out.named_section (secname,
9155 SECTION_DEBUG | SECTION_LINKONCE,
9156 comdat_key);
9157 #else
9158 tmp = XALLOCAVEC (char, 18 + DWARF_TYPE_SIGNATURE_SIZE * 2);
9159 sprintf (tmp, ".gnu.linkonce.wt.");
9160 for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++)
9161 sprintf (tmp + 17 + i * 2, "%02x", node->signature[i] & 0xff);
9162 secname = tmp;
9163 switch_to_section (get_section (secname, SECTION_DEBUG, NULL));
9164 #endif
9166 /* Output debugging information. */
9167 output_compilation_unit_header ();
9168 output_signature (node->signature, "Type Signature");
9169 dw2_asm_output_data (DWARF_OFFSET_SIZE, node->type_die->die_offset,
9170 "Offset to Type DIE");
9171 output_die (node->root_die);
9173 unmark_dies (node->root_die);
9176 /* Return the DWARF2/3 pubname associated with a decl. */
9178 static const char *
9179 dwarf2_name (tree decl, int scope)
9181 if (DECL_NAMELESS (decl))
9182 return NULL;
9183 return lang_hooks.dwarf_name (decl, scope ? 1 : 0);
9186 /* Add a new entry to .debug_pubnames if appropriate. */
9188 static void
9189 add_pubname_string (const char *str, dw_die_ref die)
9191 pubname_entry e;
9193 e.die = die;
9194 e.name = xstrdup (str);
9195 vec_safe_push (pubname_table, e);
9198 static void
9199 add_pubname (tree decl, dw_die_ref die)
9201 if (!want_pubnames ())
9202 return;
9204 /* Don't add items to the table when we expect that the consumer will have
9205 just read the enclosing die. For example, if the consumer is looking at a
9206 class_member, it will either be inside the class already, or will have just
9207 looked up the class to find the member. Either way, searching the class is
9208 faster than searching the index. */
9209 if ((TREE_PUBLIC (decl) && !class_scope_p (die->die_parent))
9210 || is_cu_die (die->die_parent) || is_namespace_die (die->die_parent))
9212 const char *name = dwarf2_name (decl, 1);
9214 if (name)
9215 add_pubname_string (name, die);
9219 /* Add an enumerator to the pubnames section. */
9221 static void
9222 add_enumerator_pubname (const char *scope_name, dw_die_ref die)
9224 pubname_entry e;
9226 gcc_assert (scope_name);
9227 e.name = concat (scope_name, get_AT_string (die, DW_AT_name), NULL);
9228 e.die = die;
9229 vec_safe_push (pubname_table, e);
9232 /* Add a new entry to .debug_pubtypes if appropriate. */
9234 static void
9235 add_pubtype (tree decl, dw_die_ref die)
9237 pubname_entry e;
9239 if (!want_pubnames ())
9240 return;
9242 if ((TREE_PUBLIC (decl)
9243 || is_cu_die (die->die_parent) || is_namespace_die (die->die_parent))
9244 && (die->die_tag == DW_TAG_typedef || COMPLETE_TYPE_P (decl)))
9246 tree scope = NULL;
9247 const char *scope_name = "";
9248 const char *sep = is_cxx () ? "::" : ".";
9249 const char *name;
9251 scope = TYPE_P (decl) ? TYPE_CONTEXT (decl) : NULL;
9252 if (scope && TREE_CODE (scope) == NAMESPACE_DECL)
9254 scope_name = lang_hooks.dwarf_name (scope, 1);
9255 if (scope_name != NULL && scope_name[0] != '\0')
9256 scope_name = concat (scope_name, sep, NULL);
9257 else
9258 scope_name = "";
9261 if (TYPE_P (decl))
9262 name = type_tag (decl);
9263 else
9264 name = lang_hooks.dwarf_name (decl, 1);
9266 /* If we don't have a name for the type, there's no point in adding
9267 it to the table. */
9268 if (name != NULL && name[0] != '\0')
9270 e.die = die;
9271 e.name = concat (scope_name, name, NULL);
9272 vec_safe_push (pubtype_table, e);
9275 /* Although it might be more consistent to add the pubinfo for the
9276 enumerators as their dies are created, they should only be added if the
9277 enum type meets the criteria above. So rather than re-check the parent
9278 enum type whenever an enumerator die is created, just output them all
9279 here. This isn't protected by the name conditional because anonymous
9280 enums don't have names. */
9281 if (die->die_tag == DW_TAG_enumeration_type)
9283 dw_die_ref c;
9285 FOR_EACH_CHILD (die, c, add_enumerator_pubname (scope_name, c));
9290 /* Output a single entry in the pubnames table. */
9292 static void
9293 output_pubname (dw_offset die_offset, pubname_entry *entry)
9295 dw_die_ref die = entry->die;
9296 int is_static = get_AT_flag (die, DW_AT_external) ? 0 : 1;
9298 dw2_asm_output_data (DWARF_OFFSET_SIZE, die_offset, "DIE offset");
9300 if (debug_generate_pub_sections == 2)
9302 /* This logic follows gdb's method for determining the value of the flag
9303 byte. */
9304 uint32_t flags = GDB_INDEX_SYMBOL_KIND_NONE;
9305 switch (die->die_tag)
9307 case DW_TAG_typedef:
9308 case DW_TAG_base_type:
9309 case DW_TAG_subrange_type:
9310 GDB_INDEX_SYMBOL_KIND_SET_VALUE(flags, GDB_INDEX_SYMBOL_KIND_TYPE);
9311 GDB_INDEX_SYMBOL_STATIC_SET_VALUE(flags, 1);
9312 break;
9313 case DW_TAG_enumerator:
9314 GDB_INDEX_SYMBOL_KIND_SET_VALUE(flags,
9315 GDB_INDEX_SYMBOL_KIND_VARIABLE);
9316 if (!is_cxx () && !is_java ())
9317 GDB_INDEX_SYMBOL_STATIC_SET_VALUE(flags, 1);
9318 break;
9319 case DW_TAG_subprogram:
9320 GDB_INDEX_SYMBOL_KIND_SET_VALUE(flags,
9321 GDB_INDEX_SYMBOL_KIND_FUNCTION);
9322 if (!is_ada ())
9323 GDB_INDEX_SYMBOL_STATIC_SET_VALUE(flags, is_static);
9324 break;
9325 case DW_TAG_constant:
9326 GDB_INDEX_SYMBOL_KIND_SET_VALUE(flags,
9327 GDB_INDEX_SYMBOL_KIND_VARIABLE);
9328 GDB_INDEX_SYMBOL_STATIC_SET_VALUE(flags, is_static);
9329 break;
9330 case DW_TAG_variable:
9331 GDB_INDEX_SYMBOL_KIND_SET_VALUE(flags,
9332 GDB_INDEX_SYMBOL_KIND_VARIABLE);
9333 GDB_INDEX_SYMBOL_STATIC_SET_VALUE(flags, is_static);
9334 break;
9335 case DW_TAG_namespace:
9336 case DW_TAG_imported_declaration:
9337 GDB_INDEX_SYMBOL_KIND_SET_VALUE(flags, GDB_INDEX_SYMBOL_KIND_TYPE);
9338 break;
9339 case DW_TAG_class_type:
9340 case DW_TAG_interface_type:
9341 case DW_TAG_structure_type:
9342 case DW_TAG_union_type:
9343 case DW_TAG_enumeration_type:
9344 GDB_INDEX_SYMBOL_KIND_SET_VALUE(flags, GDB_INDEX_SYMBOL_KIND_TYPE);
9345 if (!is_cxx () && !is_java ())
9346 GDB_INDEX_SYMBOL_STATIC_SET_VALUE(flags, 1);
9347 break;
9348 default:
9349 /* An unusual tag. Leave the flag-byte empty. */
9350 break;
9352 dw2_asm_output_data (1, flags >> GDB_INDEX_CU_BITSIZE,
9353 "GDB-index flags");
9356 dw2_asm_output_nstring (entry->name, -1, "external name");
9360 /* Output the public names table used to speed up access to externally
9361 visible names; or the public types table used to find type definitions. */
9363 static void
9364 output_pubnames (vec<pubname_entry, va_gc> *names)
9366 unsigned i;
9367 unsigned long pubnames_length = size_of_pubnames (names);
9368 pubname_ref pub;
9370 if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
9371 dw2_asm_output_data (4, 0xffffffff,
9372 "Initial length escape value indicating 64-bit DWARF extension");
9373 dw2_asm_output_data (DWARF_OFFSET_SIZE, pubnames_length, "Pub Info Length");
9375 /* Version number for pubnames/pubtypes is independent of dwarf version. */
9376 dw2_asm_output_data (2, 2, "DWARF Version");
9378 if (dwarf_split_debug_info)
9379 dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_skeleton_info_section_label,
9380 debug_skeleton_info_section,
9381 "Offset of Compilation Unit Info");
9382 else
9383 dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_info_section_label,
9384 debug_info_section,
9385 "Offset of Compilation Unit Info");
9386 dw2_asm_output_data (DWARF_OFFSET_SIZE, next_die_offset,
9387 "Compilation Unit Length");
9389 FOR_EACH_VEC_ELT (*names, i, pub)
9391 if (include_pubname_in_output (names, pub))
9393 dw_offset die_offset = pub->die->die_offset;
9395 /* We shouldn't see pubnames for DIEs outside of the main CU. */
9396 if (names == pubname_table && pub->die->die_tag != DW_TAG_enumerator)
9397 gcc_assert (pub->die->die_mark);
9399 /* If we're putting types in their own .debug_types sections,
9400 the .debug_pubtypes table will still point to the compile
9401 unit (not the type unit), so we want to use the offset of
9402 the skeleton DIE (if there is one). */
9403 if (pub->die->comdat_type_p && names == pubtype_table)
9405 comdat_type_node_ref type_node = pub->die->die_id.die_type_node;
9407 if (type_node != NULL)
9408 die_offset = (type_node->skeleton_die != NULL
9409 ? type_node->skeleton_die->die_offset
9410 : comp_unit_die ()->die_offset);
9413 output_pubname (die_offset, pub);
9417 dw2_asm_output_data (DWARF_OFFSET_SIZE, 0, NULL);
9420 /* Output public names and types tables if necessary. */
9422 static void
9423 output_pubtables (void)
9425 if (!want_pubnames () || !info_section_emitted)
9426 return;
9428 switch_to_section (debug_pubnames_section);
9429 output_pubnames (pubname_table);
9430 /* ??? Only defined by DWARF3, but emitted by Darwin for DWARF2.
9431 It shouldn't hurt to emit it always, since pure DWARF2 consumers
9432 simply won't look for the section. */
9433 switch_to_section (debug_pubtypes_section);
9434 output_pubnames (pubtype_table);
9438 /* Output the information that goes into the .debug_aranges table.
9439 Namely, define the beginning and ending address range of the
9440 text section generated for this compilation unit. */
9442 static void
9443 output_aranges (unsigned long aranges_length)
9445 unsigned i;
9447 if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
9448 dw2_asm_output_data (4, 0xffffffff,
9449 "Initial length escape value indicating 64-bit DWARF extension");
9450 dw2_asm_output_data (DWARF_OFFSET_SIZE, aranges_length,
9451 "Length of Address Ranges Info");
9452 /* Version number for aranges is still 2, even in DWARF3. */
9453 dw2_asm_output_data (2, 2, "DWARF Version");
9454 if (dwarf_split_debug_info)
9455 dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_skeleton_info_section_label,
9456 debug_skeleton_info_section,
9457 "Offset of Compilation Unit Info");
9458 else
9459 dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_info_section_label,
9460 debug_info_section,
9461 "Offset of Compilation Unit Info");
9462 dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Size of Address");
9463 dw2_asm_output_data (1, 0, "Size of Segment Descriptor");
9465 /* We need to align to twice the pointer size here. */
9466 if (DWARF_ARANGES_PAD_SIZE)
9468 /* Pad using a 2 byte words so that padding is correct for any
9469 pointer size. */
9470 dw2_asm_output_data (2, 0, "Pad to %d byte boundary",
9471 2 * DWARF2_ADDR_SIZE);
9472 for (i = 2; i < (unsigned) DWARF_ARANGES_PAD_SIZE; i += 2)
9473 dw2_asm_output_data (2, 0, NULL);
9476 /* It is necessary not to output these entries if the sections were
9477 not used; if the sections were not used, the length will be 0 and
9478 the address may end up as 0 if the section is discarded by ld
9479 --gc-sections, leaving an invalid (0, 0) entry that can be
9480 confused with the terminator. */
9481 if (text_section_used)
9483 dw2_asm_output_addr (DWARF2_ADDR_SIZE, text_section_label, "Address");
9484 dw2_asm_output_delta (DWARF2_ADDR_SIZE, text_end_label,
9485 text_section_label, "Length");
9487 if (cold_text_section_used)
9489 dw2_asm_output_addr (DWARF2_ADDR_SIZE, cold_text_section_label,
9490 "Address");
9491 dw2_asm_output_delta (DWARF2_ADDR_SIZE, cold_end_label,
9492 cold_text_section_label, "Length");
9495 if (have_multiple_function_sections)
9497 unsigned fde_idx;
9498 dw_fde_ref fde;
9500 FOR_EACH_VEC_ELT (*fde_vec, fde_idx, fde)
9502 if (DECL_IGNORED_P (fde->decl))
9503 continue;
9504 if (!fde->in_std_section)
9506 dw2_asm_output_addr (DWARF2_ADDR_SIZE, fde->dw_fde_begin,
9507 "Address");
9508 dw2_asm_output_delta (DWARF2_ADDR_SIZE, fde->dw_fde_end,
9509 fde->dw_fde_begin, "Length");
9511 if (fde->dw_fde_second_begin && !fde->second_in_std_section)
9513 dw2_asm_output_addr (DWARF2_ADDR_SIZE, fde->dw_fde_second_begin,
9514 "Address");
9515 dw2_asm_output_delta (DWARF2_ADDR_SIZE, fde->dw_fde_second_end,
9516 fde->dw_fde_second_begin, "Length");
9521 /* Output the terminator words. */
9522 dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
9523 dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
9526 /* Add a new entry to .debug_ranges. Return the offset at which it
9527 was placed. */
9529 static unsigned int
9530 add_ranges_num (int num)
9532 unsigned int in_use = ranges_table_in_use;
9534 if (in_use == ranges_table_allocated)
9536 ranges_table_allocated += RANGES_TABLE_INCREMENT;
9537 ranges_table = GGC_RESIZEVEC (struct dw_ranges_struct, ranges_table,
9538 ranges_table_allocated);
9539 memset (ranges_table + ranges_table_in_use, 0,
9540 RANGES_TABLE_INCREMENT * sizeof (struct dw_ranges_struct));
9543 ranges_table[in_use].num = num;
9544 ranges_table_in_use = in_use + 1;
9546 return in_use * 2 * DWARF2_ADDR_SIZE;
9549 /* Add a new entry to .debug_ranges corresponding to a block, or a
9550 range terminator if BLOCK is NULL. */
9552 static unsigned int
9553 add_ranges (const_tree block)
9555 return add_ranges_num (block ? BLOCK_NUMBER (block) : 0);
9558 /* Add a new entry to .debug_ranges corresponding to a pair of labels.
9559 When using dwarf_split_debug_info, address attributes in dies destined
9560 for the final executable should be direct references--setting the
9561 parameter force_direct ensures this behavior. */
9563 static void
9564 add_ranges_by_labels (dw_die_ref die, const char *begin, const char *end,
9565 bool *added, bool force_direct)
9567 unsigned int in_use = ranges_by_label_in_use;
9568 unsigned int offset;
9570 if (in_use == ranges_by_label_allocated)
9572 ranges_by_label_allocated += RANGES_TABLE_INCREMENT;
9573 ranges_by_label = GGC_RESIZEVEC (struct dw_ranges_by_label_struct,
9574 ranges_by_label,
9575 ranges_by_label_allocated);
9576 memset (ranges_by_label + ranges_by_label_in_use, 0,
9577 RANGES_TABLE_INCREMENT
9578 * sizeof (struct dw_ranges_by_label_struct));
9581 ranges_by_label[in_use].begin = begin;
9582 ranges_by_label[in_use].end = end;
9583 ranges_by_label_in_use = in_use + 1;
9585 offset = add_ranges_num (-(int)in_use - 1);
9586 if (!*added)
9588 add_AT_range_list (die, DW_AT_ranges, offset, force_direct);
9589 *added = true;
9593 static void
9594 output_ranges (void)
9596 unsigned i;
9597 static const char *const start_fmt = "Offset %#x";
9598 const char *fmt = start_fmt;
9600 for (i = 0; i < ranges_table_in_use; i++)
9602 int block_num = ranges_table[i].num;
9604 if (block_num > 0)
9606 char blabel[MAX_ARTIFICIAL_LABEL_BYTES];
9607 char elabel[MAX_ARTIFICIAL_LABEL_BYTES];
9609 ASM_GENERATE_INTERNAL_LABEL (blabel, BLOCK_BEGIN_LABEL, block_num);
9610 ASM_GENERATE_INTERNAL_LABEL (elabel, BLOCK_END_LABEL, block_num);
9612 /* If all code is in the text section, then the compilation
9613 unit base address defaults to DW_AT_low_pc, which is the
9614 base of the text section. */
9615 if (!have_multiple_function_sections)
9617 dw2_asm_output_delta (DWARF2_ADDR_SIZE, blabel,
9618 text_section_label,
9619 fmt, i * 2 * DWARF2_ADDR_SIZE);
9620 dw2_asm_output_delta (DWARF2_ADDR_SIZE, elabel,
9621 text_section_label, NULL);
9624 /* Otherwise, the compilation unit base address is zero,
9625 which allows us to use absolute addresses, and not worry
9626 about whether the target supports cross-section
9627 arithmetic. */
9628 else
9630 dw2_asm_output_addr (DWARF2_ADDR_SIZE, blabel,
9631 fmt, i * 2 * DWARF2_ADDR_SIZE);
9632 dw2_asm_output_addr (DWARF2_ADDR_SIZE, elabel, NULL);
9635 fmt = NULL;
9638 /* Negative block_num stands for an index into ranges_by_label. */
9639 else if (block_num < 0)
9641 int lab_idx = - block_num - 1;
9643 if (!have_multiple_function_sections)
9645 gcc_unreachable ();
9646 #if 0
9647 /* If we ever use add_ranges_by_labels () for a single
9648 function section, all we have to do is to take out
9649 the #if 0 above. */
9650 dw2_asm_output_delta (DWARF2_ADDR_SIZE,
9651 ranges_by_label[lab_idx].begin,
9652 text_section_label,
9653 fmt, i * 2 * DWARF2_ADDR_SIZE);
9654 dw2_asm_output_delta (DWARF2_ADDR_SIZE,
9655 ranges_by_label[lab_idx].end,
9656 text_section_label, NULL);
9657 #endif
9659 else
9661 dw2_asm_output_addr (DWARF2_ADDR_SIZE,
9662 ranges_by_label[lab_idx].begin,
9663 fmt, i * 2 * DWARF2_ADDR_SIZE);
9664 dw2_asm_output_addr (DWARF2_ADDR_SIZE,
9665 ranges_by_label[lab_idx].end,
9666 NULL);
9669 else
9671 dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
9672 dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
9673 fmt = start_fmt;
9678 /* Data structure containing information about input files. */
9679 struct file_info
9681 const char *path; /* Complete file name. */
9682 const char *fname; /* File name part. */
9683 int length; /* Length of entire string. */
9684 struct dwarf_file_data * file_idx; /* Index in input file table. */
9685 int dir_idx; /* Index in directory table. */
9688 /* Data structure containing information about directories with source
9689 files. */
9690 struct dir_info
9692 const char *path; /* Path including directory name. */
9693 int length; /* Path length. */
9694 int prefix; /* Index of directory entry which is a prefix. */
9695 int count; /* Number of files in this directory. */
9696 int dir_idx; /* Index of directory used as base. */
9699 /* Callback function for file_info comparison. We sort by looking at
9700 the directories in the path. */
9702 static int
9703 file_info_cmp (const void *p1, const void *p2)
9705 const struct file_info *const s1 = (const struct file_info *) p1;
9706 const struct file_info *const s2 = (const struct file_info *) p2;
9707 const unsigned char *cp1;
9708 const unsigned char *cp2;
9710 /* Take care of file names without directories. We need to make sure that
9711 we return consistent values to qsort since some will get confused if
9712 we return the same value when identical operands are passed in opposite
9713 orders. So if neither has a directory, return 0 and otherwise return
9714 1 or -1 depending on which one has the directory. */
9715 if ((s1->path == s1->fname || s2->path == s2->fname))
9716 return (s2->path == s2->fname) - (s1->path == s1->fname);
9718 cp1 = (const unsigned char *) s1->path;
9719 cp2 = (const unsigned char *) s2->path;
9721 while (1)
9723 ++cp1;
9724 ++cp2;
9725 /* Reached the end of the first path? If so, handle like above. */
9726 if ((cp1 == (const unsigned char *) s1->fname)
9727 || (cp2 == (const unsigned char *) s2->fname))
9728 return ((cp2 == (const unsigned char *) s2->fname)
9729 - (cp1 == (const unsigned char *) s1->fname));
9731 /* Character of current path component the same? */
9732 else if (*cp1 != *cp2)
9733 return *cp1 - *cp2;
9737 struct file_name_acquire_data
9739 struct file_info *files;
9740 int used_files;
9741 int max_files;
9744 /* Traversal function for the hash table. */
9746 static int
9747 file_name_acquire (void ** slot, void *data)
9749 struct file_name_acquire_data *fnad = (struct file_name_acquire_data *) data;
9750 struct dwarf_file_data *d = (struct dwarf_file_data *) *slot;
9751 struct file_info *fi;
9752 const char *f;
9754 gcc_assert (fnad->max_files >= d->emitted_number);
9756 if (! d->emitted_number)
9757 return 1;
9759 gcc_assert (fnad->max_files != fnad->used_files);
9761 fi = fnad->files + fnad->used_files++;
9763 /* Skip all leading "./". */
9764 f = d->filename;
9765 while (f[0] == '.' && IS_DIR_SEPARATOR (f[1]))
9766 f += 2;
9768 /* Create a new array entry. */
9769 fi->path = f;
9770 fi->length = strlen (f);
9771 fi->file_idx = d;
9773 /* Search for the file name part. */
9774 f = strrchr (f, DIR_SEPARATOR);
9775 #if defined (DIR_SEPARATOR_2)
9777 char *g = strrchr (fi->path, DIR_SEPARATOR_2);
9779 if (g != NULL)
9781 if (f == NULL || f < g)
9782 f = g;
9785 #endif
9787 fi->fname = f == NULL ? fi->path : f + 1;
9788 return 1;
9791 /* Output the directory table and the file name table. We try to minimize
9792 the total amount of memory needed. A heuristic is used to avoid large
9793 slowdowns with many input files. */
9795 static void
9796 output_file_names (void)
9798 struct file_name_acquire_data fnad;
9799 int numfiles;
9800 struct file_info *files;
9801 struct dir_info *dirs;
9802 int *saved;
9803 int *savehere;
9804 int *backmap;
9805 int ndirs;
9806 int idx_offset;
9807 int i;
9809 if (!last_emitted_file)
9811 dw2_asm_output_data (1, 0, "End directory table");
9812 dw2_asm_output_data (1, 0, "End file name table");
9813 return;
9816 numfiles = last_emitted_file->emitted_number;
9818 /* Allocate the various arrays we need. */
9819 files = XALLOCAVEC (struct file_info, numfiles);
9820 dirs = XALLOCAVEC (struct dir_info, numfiles);
9822 fnad.files = files;
9823 fnad.used_files = 0;
9824 fnad.max_files = numfiles;
9825 htab_traverse (file_table, file_name_acquire, &fnad);
9826 gcc_assert (fnad.used_files == fnad.max_files);
9828 qsort (files, numfiles, sizeof (files[0]), file_info_cmp);
9830 /* Find all the different directories used. */
9831 dirs[0].path = files[0].path;
9832 dirs[0].length = files[0].fname - files[0].path;
9833 dirs[0].prefix = -1;
9834 dirs[0].count = 1;
9835 dirs[0].dir_idx = 0;
9836 files[0].dir_idx = 0;
9837 ndirs = 1;
9839 for (i = 1; i < numfiles; i++)
9840 if (files[i].fname - files[i].path == dirs[ndirs - 1].length
9841 && memcmp (dirs[ndirs - 1].path, files[i].path,
9842 dirs[ndirs - 1].length) == 0)
9844 /* Same directory as last entry. */
9845 files[i].dir_idx = ndirs - 1;
9846 ++dirs[ndirs - 1].count;
9848 else
9850 int j;
9852 /* This is a new directory. */
9853 dirs[ndirs].path = files[i].path;
9854 dirs[ndirs].length = files[i].fname - files[i].path;
9855 dirs[ndirs].count = 1;
9856 dirs[ndirs].dir_idx = ndirs;
9857 files[i].dir_idx = ndirs;
9859 /* Search for a prefix. */
9860 dirs[ndirs].prefix = -1;
9861 for (j = 0; j < ndirs; j++)
9862 if (dirs[j].length < dirs[ndirs].length
9863 && dirs[j].length > 1
9864 && (dirs[ndirs].prefix == -1
9865 || dirs[j].length > dirs[dirs[ndirs].prefix].length)
9866 && memcmp (dirs[j].path, dirs[ndirs].path, dirs[j].length) == 0)
9867 dirs[ndirs].prefix = j;
9869 ++ndirs;
9872 /* Now to the actual work. We have to find a subset of the directories which
9873 allow expressing the file name using references to the directory table
9874 with the least amount of characters. We do not do an exhaustive search
9875 where we would have to check out every combination of every single
9876 possible prefix. Instead we use a heuristic which provides nearly optimal
9877 results in most cases and never is much off. */
9878 saved = XALLOCAVEC (int, ndirs);
9879 savehere = XALLOCAVEC (int, ndirs);
9881 memset (saved, '\0', ndirs * sizeof (saved[0]));
9882 for (i = 0; i < ndirs; i++)
9884 int j;
9885 int total;
9887 /* We can always save some space for the current directory. But this
9888 does not mean it will be enough to justify adding the directory. */
9889 savehere[i] = dirs[i].length;
9890 total = (savehere[i] - saved[i]) * dirs[i].count;
9892 for (j = i + 1; j < ndirs; j++)
9894 savehere[j] = 0;
9895 if (saved[j] < dirs[i].length)
9897 /* Determine whether the dirs[i] path is a prefix of the
9898 dirs[j] path. */
9899 int k;
9901 k = dirs[j].prefix;
9902 while (k != -1 && k != (int) i)
9903 k = dirs[k].prefix;
9905 if (k == (int) i)
9907 /* Yes it is. We can possibly save some memory by
9908 writing the filenames in dirs[j] relative to
9909 dirs[i]. */
9910 savehere[j] = dirs[i].length;
9911 total += (savehere[j] - saved[j]) * dirs[j].count;
9916 /* Check whether we can save enough to justify adding the dirs[i]
9917 directory. */
9918 if (total > dirs[i].length + 1)
9920 /* It's worthwhile adding. */
9921 for (j = i; j < ndirs; j++)
9922 if (savehere[j] > 0)
9924 /* Remember how much we saved for this directory so far. */
9925 saved[j] = savehere[j];
9927 /* Remember the prefix directory. */
9928 dirs[j].dir_idx = i;
9933 /* Emit the directory name table. */
9934 idx_offset = dirs[0].length > 0 ? 1 : 0;
9935 for (i = 1 - idx_offset; i < ndirs; i++)
9936 dw2_asm_output_nstring (dirs[i].path,
9937 dirs[i].length
9938 - !DWARF2_DIR_SHOULD_END_WITH_SEPARATOR,
9939 "Directory Entry: %#x", i + idx_offset);
9941 dw2_asm_output_data (1, 0, "End directory table");
9943 /* We have to emit them in the order of emitted_number since that's
9944 used in the debug info generation. To do this efficiently we
9945 generate a back-mapping of the indices first. */
9946 backmap = XALLOCAVEC (int, numfiles);
9947 for (i = 0; i < numfiles; i++)
9948 backmap[files[i].file_idx->emitted_number - 1] = i;
9950 /* Now write all the file names. */
9951 for (i = 0; i < numfiles; i++)
9953 int file_idx = backmap[i];
9954 int dir_idx = dirs[files[file_idx].dir_idx].dir_idx;
9956 #ifdef VMS_DEBUGGING_INFO
9957 #define MAX_VMS_VERSION_LEN 6 /* ";32768" */
9959 /* Setting these fields can lead to debugger miscomparisons,
9960 but VMS Debug requires them to be set correctly. */
9962 int ver;
9963 long long cdt;
9964 long siz;
9965 int maxfilelen = strlen (files[file_idx].path)
9966 + dirs[dir_idx].length
9967 + MAX_VMS_VERSION_LEN + 1;
9968 char *filebuf = XALLOCAVEC (char, maxfilelen);
9970 vms_file_stats_name (files[file_idx].path, 0, 0, 0, &ver);
9971 snprintf (filebuf, maxfilelen, "%s;%d",
9972 files[file_idx].path + dirs[dir_idx].length, ver);
9974 dw2_asm_output_nstring
9975 (filebuf, -1, "File Entry: %#x", (unsigned) i + 1);
9977 /* Include directory index. */
9978 dw2_asm_output_data_uleb128 (dir_idx + idx_offset, NULL);
9980 /* Modification time. */
9981 dw2_asm_output_data_uleb128
9982 ((vms_file_stats_name (files[file_idx].path, &cdt, 0, 0, 0) == 0)
9983 ? cdt : 0,
9984 NULL);
9986 /* File length in bytes. */
9987 dw2_asm_output_data_uleb128
9988 ((vms_file_stats_name (files[file_idx].path, 0, &siz, 0, 0) == 0)
9989 ? siz : 0,
9990 NULL);
9991 #else
9992 dw2_asm_output_nstring (files[file_idx].path + dirs[dir_idx].length, -1,
9993 "File Entry: %#x", (unsigned) i + 1);
9995 /* Include directory index. */
9996 dw2_asm_output_data_uleb128 (dir_idx + idx_offset, NULL);
9998 /* Modification time. */
9999 dw2_asm_output_data_uleb128 (0, NULL);
10001 /* File length in bytes. */
10002 dw2_asm_output_data_uleb128 (0, NULL);
10003 #endif /* VMS_DEBUGGING_INFO */
10006 dw2_asm_output_data (1, 0, "End file name table");
10010 /* Output one line number table into the .debug_line section. */
10012 static void
10013 output_one_line_info_table (dw_line_info_table *table)
10015 char line_label[MAX_ARTIFICIAL_LABEL_BYTES];
10016 unsigned int current_line = 1;
10017 bool current_is_stmt = DWARF_LINE_DEFAULT_IS_STMT_START;
10018 dw_line_info_entry *ent;
10019 size_t i;
10021 FOR_EACH_VEC_SAFE_ELT (table->entries, i, ent)
10023 switch (ent->opcode)
10025 case LI_set_address:
10026 /* ??? Unfortunately, we have little choice here currently, and
10027 must always use the most general form. GCC does not know the
10028 address delta itself, so we can't use DW_LNS_advance_pc. Many
10029 ports do have length attributes which will give an upper bound
10030 on the address range. We could perhaps use length attributes
10031 to determine when it is safe to use DW_LNS_fixed_advance_pc. */
10032 ASM_GENERATE_INTERNAL_LABEL (line_label, LINE_CODE_LABEL, ent->val);
10034 /* This can handle any delta. This takes
10035 4+DWARF2_ADDR_SIZE bytes. */
10036 dw2_asm_output_data (1, 0, "set address %s", line_label);
10037 dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
10038 dw2_asm_output_data (1, DW_LNE_set_address, NULL);
10039 dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
10040 break;
10042 case LI_set_line:
10043 if (ent->val == current_line)
10045 /* We still need to start a new row, so output a copy insn. */
10046 dw2_asm_output_data (1, DW_LNS_copy,
10047 "copy line %u", current_line);
10049 else
10051 int line_offset = ent->val - current_line;
10052 int line_delta = line_offset - DWARF_LINE_BASE;
10054 current_line = ent->val;
10055 if (line_delta >= 0 && line_delta < (DWARF_LINE_RANGE - 1))
10057 /* This can handle deltas from -10 to 234, using the current
10058 definitions of DWARF_LINE_BASE and DWARF_LINE_RANGE.
10059 This takes 1 byte. */
10060 dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE + line_delta,
10061 "line %u", current_line);
10063 else
10065 /* This can handle any delta. This takes at least 4 bytes,
10066 depending on the value being encoded. */
10067 dw2_asm_output_data (1, DW_LNS_advance_line,
10068 "advance to line %u", current_line);
10069 dw2_asm_output_data_sleb128 (line_offset, NULL);
10070 dw2_asm_output_data (1, DW_LNS_copy, NULL);
10073 break;
10075 case LI_set_file:
10076 dw2_asm_output_data (1, DW_LNS_set_file, "set file %u", ent->val);
10077 dw2_asm_output_data_uleb128 (ent->val, "%u", ent->val);
10078 break;
10080 case LI_set_column:
10081 dw2_asm_output_data (1, DW_LNS_set_column, "column %u", ent->val);
10082 dw2_asm_output_data_uleb128 (ent->val, "%u", ent->val);
10083 break;
10085 case LI_negate_stmt:
10086 current_is_stmt = !current_is_stmt;
10087 dw2_asm_output_data (1, DW_LNS_negate_stmt,
10088 "is_stmt %d", current_is_stmt);
10089 break;
10091 case LI_set_prologue_end:
10092 dw2_asm_output_data (1, DW_LNS_set_prologue_end,
10093 "set prologue end");
10094 break;
10096 case LI_set_epilogue_begin:
10097 dw2_asm_output_data (1, DW_LNS_set_epilogue_begin,
10098 "set epilogue begin");
10099 break;
10101 case LI_set_discriminator:
10102 dw2_asm_output_data (1, 0, "discriminator %u", ent->val);
10103 dw2_asm_output_data_uleb128 (1 + size_of_uleb128 (ent->val), NULL);
10104 dw2_asm_output_data (1, DW_LNE_set_discriminator, NULL);
10105 dw2_asm_output_data_uleb128 (ent->val, NULL);
10106 break;
10110 /* Emit debug info for the address of the end of the table. */
10111 dw2_asm_output_data (1, 0, "set address %s", table->end_label);
10112 dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
10113 dw2_asm_output_data (1, DW_LNE_set_address, NULL);
10114 dw2_asm_output_addr (DWARF2_ADDR_SIZE, table->end_label, NULL);
10116 dw2_asm_output_data (1, 0, "end sequence");
10117 dw2_asm_output_data_uleb128 (1, NULL);
10118 dw2_asm_output_data (1, DW_LNE_end_sequence, NULL);
10121 /* Output the source line number correspondence information. This
10122 information goes into the .debug_line section. */
10124 static void
10125 output_line_info (bool prologue_only)
10127 char l1[20], l2[20], p1[20], p2[20];
10128 int ver = dwarf_version;
10129 bool saw_one = false;
10130 int opc;
10132 ASM_GENERATE_INTERNAL_LABEL (l1, LINE_NUMBER_BEGIN_LABEL, 0);
10133 ASM_GENERATE_INTERNAL_LABEL (l2, LINE_NUMBER_END_LABEL, 0);
10134 ASM_GENERATE_INTERNAL_LABEL (p1, LN_PROLOG_AS_LABEL, 0);
10135 ASM_GENERATE_INTERNAL_LABEL (p2, LN_PROLOG_END_LABEL, 0);
10137 if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
10138 dw2_asm_output_data (4, 0xffffffff,
10139 "Initial length escape value indicating 64-bit DWARF extension");
10140 dw2_asm_output_delta (DWARF_OFFSET_SIZE, l2, l1,
10141 "Length of Source Line Info");
10142 ASM_OUTPUT_LABEL (asm_out_file, l1);
10144 dw2_asm_output_data (2, ver, "DWARF Version");
10145 dw2_asm_output_delta (DWARF_OFFSET_SIZE, p2, p1, "Prolog Length");
10146 ASM_OUTPUT_LABEL (asm_out_file, p1);
10148 /* Define the architecture-dependent minimum instruction length (in bytes).
10149 In this implementation of DWARF, this field is used for information
10150 purposes only. Since GCC generates assembly language, we have no
10151 a priori knowledge of how many instruction bytes are generated for each
10152 source line, and therefore can use only the DW_LNE_set_address and
10153 DW_LNS_fixed_advance_pc line information commands. Accordingly, we fix
10154 this as '1', which is "correct enough" for all architectures,
10155 and don't let the target override. */
10156 dw2_asm_output_data (1, 1, "Minimum Instruction Length");
10158 if (ver >= 4)
10159 dw2_asm_output_data (1, DWARF_LINE_DEFAULT_MAX_OPS_PER_INSN,
10160 "Maximum Operations Per Instruction");
10161 dw2_asm_output_data (1, DWARF_LINE_DEFAULT_IS_STMT_START,
10162 "Default is_stmt_start flag");
10163 dw2_asm_output_data (1, DWARF_LINE_BASE,
10164 "Line Base Value (Special Opcodes)");
10165 dw2_asm_output_data (1, DWARF_LINE_RANGE,
10166 "Line Range Value (Special Opcodes)");
10167 dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE,
10168 "Special Opcode Base");
10170 for (opc = 1; opc < DWARF_LINE_OPCODE_BASE; opc++)
10172 int n_op_args;
10173 switch (opc)
10175 case DW_LNS_advance_pc:
10176 case DW_LNS_advance_line:
10177 case DW_LNS_set_file:
10178 case DW_LNS_set_column:
10179 case DW_LNS_fixed_advance_pc:
10180 case DW_LNS_set_isa:
10181 n_op_args = 1;
10182 break;
10183 default:
10184 n_op_args = 0;
10185 break;
10188 dw2_asm_output_data (1, n_op_args, "opcode: %#x has %d args",
10189 opc, n_op_args);
10192 /* Write out the information about the files we use. */
10193 output_file_names ();
10194 ASM_OUTPUT_LABEL (asm_out_file, p2);
10195 if (prologue_only)
10197 /* Output the marker for the end of the line number info. */
10198 ASM_OUTPUT_LABEL (asm_out_file, l2);
10199 return;
10202 if (separate_line_info)
10204 dw_line_info_table *table;
10205 size_t i;
10207 FOR_EACH_VEC_ELT (*separate_line_info, i, table)
10208 if (table->in_use)
10210 output_one_line_info_table (table);
10211 saw_one = true;
10214 if (cold_text_section_line_info && cold_text_section_line_info->in_use)
10216 output_one_line_info_table (cold_text_section_line_info);
10217 saw_one = true;
10220 /* ??? Some Darwin linkers crash on a .debug_line section with no
10221 sequences. Further, merely a DW_LNE_end_sequence entry is not
10222 sufficient -- the address column must also be initialized.
10223 Make sure to output at least one set_address/end_sequence pair,
10224 choosing .text since that section is always present. */
10225 if (text_section_line_info->in_use || !saw_one)
10226 output_one_line_info_table (text_section_line_info);
10228 /* Output the marker for the end of the line number info. */
10229 ASM_OUTPUT_LABEL (asm_out_file, l2);
10232 /* Given a pointer to a tree node for some base type, return a pointer to
10233 a DIE that describes the given type.
10235 This routine must only be called for GCC type nodes that correspond to
10236 Dwarf base (fundamental) types. */
10238 static dw_die_ref
10239 base_type_die (tree type)
10241 dw_die_ref base_type_result;
10242 enum dwarf_type encoding;
10244 if (TREE_CODE (type) == ERROR_MARK || TREE_CODE (type) == VOID_TYPE)
10245 return 0;
10247 /* If this is a subtype that should not be emitted as a subrange type,
10248 use the base type. See subrange_type_for_debug_p. */
10249 if (TREE_CODE (type) == INTEGER_TYPE && TREE_TYPE (type) != NULL_TREE)
10250 type = TREE_TYPE (type);
10252 switch (TREE_CODE (type))
10254 case INTEGER_TYPE:
10255 if ((dwarf_version >= 4 || !dwarf_strict)
10256 && TYPE_NAME (type)
10257 && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
10258 && DECL_IS_BUILTIN (TYPE_NAME (type))
10259 && DECL_NAME (TYPE_NAME (type)))
10261 const char *name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type)));
10262 if (strcmp (name, "char16_t") == 0
10263 || strcmp (name, "char32_t") == 0)
10265 encoding = DW_ATE_UTF;
10266 break;
10269 if (TYPE_STRING_FLAG (type))
10271 if (TYPE_UNSIGNED (type))
10272 encoding = DW_ATE_unsigned_char;
10273 else
10274 encoding = DW_ATE_signed_char;
10276 else if (TYPE_UNSIGNED (type))
10277 encoding = DW_ATE_unsigned;
10278 else
10279 encoding = DW_ATE_signed;
10280 break;
10282 case REAL_TYPE:
10283 if (DECIMAL_FLOAT_MODE_P (TYPE_MODE (type)))
10285 if (dwarf_version >= 3 || !dwarf_strict)
10286 encoding = DW_ATE_decimal_float;
10287 else
10288 encoding = DW_ATE_lo_user;
10290 else
10291 encoding = DW_ATE_float;
10292 break;
10294 case FIXED_POINT_TYPE:
10295 if (!(dwarf_version >= 3 || !dwarf_strict))
10296 encoding = DW_ATE_lo_user;
10297 else if (TYPE_UNSIGNED (type))
10298 encoding = DW_ATE_unsigned_fixed;
10299 else
10300 encoding = DW_ATE_signed_fixed;
10301 break;
10303 /* Dwarf2 doesn't know anything about complex ints, so use
10304 a user defined type for it. */
10305 case COMPLEX_TYPE:
10306 if (TREE_CODE (TREE_TYPE (type)) == REAL_TYPE)
10307 encoding = DW_ATE_complex_float;
10308 else
10309 encoding = DW_ATE_lo_user;
10310 break;
10312 case BOOLEAN_TYPE:
10313 /* GNU FORTRAN/Ada/C++ BOOLEAN type. */
10314 encoding = DW_ATE_boolean;
10315 break;
10317 default:
10318 /* No other TREE_CODEs are Dwarf fundamental types. */
10319 gcc_unreachable ();
10322 base_type_result = new_die (DW_TAG_base_type, comp_unit_die (), type);
10324 add_AT_unsigned (base_type_result, DW_AT_byte_size,
10325 int_size_in_bytes (type));
10326 add_AT_unsigned (base_type_result, DW_AT_encoding, encoding);
10327 add_pubtype (type, base_type_result);
10329 return base_type_result;
10332 /* A C++ function with deduced return type can have a TEMPLATE_TYPE_PARM
10333 named 'auto' in its type: return true for it, false otherwise. */
10335 static inline bool
10336 is_cxx_auto (tree type)
10338 if (is_cxx ())
10340 tree name = TYPE_IDENTIFIER (type);
10341 if (name == get_identifier ("auto")
10342 || name == get_identifier ("decltype(auto)"))
10343 return true;
10345 return false;
10348 /* Given a pointer to an arbitrary ..._TYPE tree node, return nonzero if the
10349 given input type is a Dwarf "fundamental" type. Otherwise return null. */
10351 static inline int
10352 is_base_type (tree type)
10354 switch (TREE_CODE (type))
10356 case ERROR_MARK:
10357 case VOID_TYPE:
10358 case INTEGER_TYPE:
10359 case REAL_TYPE:
10360 case FIXED_POINT_TYPE:
10361 case COMPLEX_TYPE:
10362 case BOOLEAN_TYPE:
10363 return 1;
10365 case ARRAY_TYPE:
10366 case RECORD_TYPE:
10367 case UNION_TYPE:
10368 case QUAL_UNION_TYPE:
10369 case ENUMERAL_TYPE:
10370 case FUNCTION_TYPE:
10371 case METHOD_TYPE:
10372 case POINTER_TYPE:
10373 case REFERENCE_TYPE:
10374 case NULLPTR_TYPE:
10375 case OFFSET_TYPE:
10376 case LANG_TYPE:
10377 case VECTOR_TYPE:
10378 return 0;
10380 default:
10381 if (is_cxx_auto (type))
10382 return 0;
10383 gcc_unreachable ();
10386 return 0;
10389 /* Given a pointer to a tree node, assumed to be some kind of a ..._TYPE
10390 node, return the size in bits for the type if it is a constant, or else
10391 return the alignment for the type if the type's size is not constant, or
10392 else return BITS_PER_WORD if the type actually turns out to be an
10393 ERROR_MARK node. */
10395 static inline unsigned HOST_WIDE_INT
10396 simple_type_size_in_bits (const_tree type)
10398 if (TREE_CODE (type) == ERROR_MARK)
10399 return BITS_PER_WORD;
10400 else if (TYPE_SIZE (type) == NULL_TREE)
10401 return 0;
10402 else if (tree_fits_uhwi_p (TYPE_SIZE (type)))
10403 return tree_to_uhwi (TYPE_SIZE (type));
10404 else
10405 return TYPE_ALIGN (type);
10408 /* Similarly, but return an offset_int instead of UHWI. */
10410 static inline offset_int
10411 offset_int_type_size_in_bits (const_tree type)
10413 if (TREE_CODE (type) == ERROR_MARK)
10414 return BITS_PER_WORD;
10415 else if (TYPE_SIZE (type) == NULL_TREE)
10416 return 0;
10417 else if (TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST)
10418 return wi::to_offset (TYPE_SIZE (type));
10419 else
10420 return TYPE_ALIGN (type);
10423 /* Given a pointer to a tree node for a subrange type, return a pointer
10424 to a DIE that describes the given type. */
10426 static dw_die_ref
10427 subrange_type_die (tree type, tree low, tree high, dw_die_ref context_die)
10429 dw_die_ref subrange_die;
10430 const HOST_WIDE_INT size_in_bytes = int_size_in_bytes (type);
10432 if (context_die == NULL)
10433 context_die = comp_unit_die ();
10435 subrange_die = new_die (DW_TAG_subrange_type, context_die, type);
10437 if (int_size_in_bytes (TREE_TYPE (type)) != size_in_bytes)
10439 /* The size of the subrange type and its base type do not match,
10440 so we need to generate a size attribute for the subrange type. */
10441 add_AT_unsigned (subrange_die, DW_AT_byte_size, size_in_bytes);
10444 if (low)
10445 add_bound_info (subrange_die, DW_AT_lower_bound, low);
10446 if (high)
10447 add_bound_info (subrange_die, DW_AT_upper_bound, high);
10449 return subrange_die;
10452 /* Returns the (const and/or volatile) cv_qualifiers associated with
10453 the decl node. This will normally be augmented with the
10454 cv_qualifiers of the underlying type in add_type_attribute. */
10456 static int
10457 decl_quals (const_tree decl)
10459 return ((TREE_READONLY (decl)
10460 ? TYPE_QUAL_CONST : TYPE_UNQUALIFIED)
10461 | (TREE_THIS_VOLATILE (decl)
10462 ? TYPE_QUAL_VOLATILE : TYPE_UNQUALIFIED));
10465 /* Given a pointer to an arbitrary ..._TYPE tree node, return a debugging
10466 entry that chains various modifiers in front of the given type. */
10468 static dw_die_ref
10469 modified_type_die (tree type, int cv_quals, dw_die_ref context_die)
10471 enum tree_code code = TREE_CODE (type);
10472 dw_die_ref mod_type_die;
10473 dw_die_ref sub_die = NULL;
10474 tree item_type = NULL;
10475 tree qualified_type;
10476 tree name, low, high;
10477 dw_die_ref mod_scope;
10479 if (code == ERROR_MARK)
10480 return NULL;
10482 /* Only these cv-qualifiers are currently handled. */
10483 cv_quals &= (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE | TYPE_QUAL_RESTRICT);
10485 /* Don't emit DW_TAG_restrict_type for DWARFv2, since it is a type
10486 tag modifier (and not an attribute) old consumers won't be able
10487 to handle it. */
10488 if (dwarf_version < 3)
10489 cv_quals &= ~TYPE_QUAL_RESTRICT;
10491 /* See if we already have the appropriately qualified variant of
10492 this type. */
10493 qualified_type = get_qualified_type (type, cv_quals);
10495 if (qualified_type == sizetype
10496 && TYPE_NAME (qualified_type)
10497 && TREE_CODE (TYPE_NAME (qualified_type)) == TYPE_DECL)
10499 tree t = TREE_TYPE (TYPE_NAME (qualified_type));
10501 gcc_checking_assert (TREE_CODE (t) == INTEGER_TYPE
10502 && TYPE_PRECISION (t)
10503 == TYPE_PRECISION (qualified_type)
10504 && TYPE_UNSIGNED (t)
10505 == TYPE_UNSIGNED (qualified_type));
10506 qualified_type = t;
10509 /* If we do, then we can just use its DIE, if it exists. */
10510 if (qualified_type)
10512 mod_type_die = lookup_type_die (qualified_type);
10513 if (mod_type_die)
10514 return mod_type_die;
10517 name = qualified_type ? TYPE_NAME (qualified_type) : NULL;
10519 /* Handle C typedef types. */
10520 if (name && TREE_CODE (name) == TYPE_DECL && DECL_ORIGINAL_TYPE (name)
10521 && !DECL_ARTIFICIAL (name))
10523 tree dtype = TREE_TYPE (name);
10525 if (qualified_type == dtype)
10527 /* For a named type, use the typedef. */
10528 gen_type_die (qualified_type, context_die);
10529 return lookup_type_die (qualified_type);
10531 else
10533 int dquals = TYPE_QUALS_NO_ADDR_SPACE (dtype);
10534 dquals &= (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE | TYPE_QUAL_RESTRICT);
10535 if ((dquals & ~cv_quals) != TYPE_UNQUALIFIED
10536 || (cv_quals == dquals && DECL_ORIGINAL_TYPE (name) != type))
10537 /* cv-unqualified version of named type. Just use
10538 the unnamed type to which it refers. */
10539 return modified_type_die (DECL_ORIGINAL_TYPE (name),
10540 cv_quals, context_die);
10541 /* Else cv-qualified version of named type; fall through. */
10545 mod_scope = scope_die_for (type, context_die);
10547 if ((cv_quals & TYPE_QUAL_CONST)
10548 /* If there are multiple type modifiers, prefer a path which
10549 leads to a qualified type. */
10550 && (((cv_quals & ~TYPE_QUAL_CONST) == TYPE_UNQUALIFIED)
10551 || get_qualified_type (type, cv_quals) == NULL_TREE
10552 || (get_qualified_type (type, cv_quals & ~TYPE_QUAL_CONST)
10553 != NULL_TREE)))
10555 mod_type_die = new_die (DW_TAG_const_type, mod_scope, type);
10556 sub_die = modified_type_die (type, cv_quals & ~TYPE_QUAL_CONST,
10557 context_die);
10559 else if ((cv_quals & TYPE_QUAL_VOLATILE)
10560 && (((cv_quals & ~TYPE_QUAL_VOLATILE) == TYPE_UNQUALIFIED)
10561 || get_qualified_type (type, cv_quals) == NULL_TREE
10562 || (get_qualified_type (type, cv_quals & ~TYPE_QUAL_VOLATILE)
10563 != NULL_TREE)))
10565 mod_type_die = new_die (DW_TAG_volatile_type, mod_scope, type);
10566 sub_die = modified_type_die (type, cv_quals & ~TYPE_QUAL_VOLATILE,
10567 context_die);
10569 else if (cv_quals & TYPE_QUAL_RESTRICT)
10571 mod_type_die = new_die (DW_TAG_restrict_type, mod_scope, type);
10572 sub_die = modified_type_die (type, cv_quals & ~TYPE_QUAL_RESTRICT,
10573 context_die);
10575 else if (code == POINTER_TYPE)
10577 mod_type_die = new_die (DW_TAG_pointer_type, mod_scope, type);
10578 add_AT_unsigned (mod_type_die, DW_AT_byte_size,
10579 simple_type_size_in_bits (type) / BITS_PER_UNIT);
10580 item_type = TREE_TYPE (type);
10581 if (!ADDR_SPACE_GENERIC_P (TYPE_ADDR_SPACE (item_type)))
10582 add_AT_unsigned (mod_type_die, DW_AT_address_class,
10583 TYPE_ADDR_SPACE (item_type));
10585 else if (code == REFERENCE_TYPE)
10587 if (TYPE_REF_IS_RVALUE (type) && dwarf_version >= 4)
10588 mod_type_die = new_die (DW_TAG_rvalue_reference_type, mod_scope,
10589 type);
10590 else
10591 mod_type_die = new_die (DW_TAG_reference_type, mod_scope, type);
10592 add_AT_unsigned (mod_type_die, DW_AT_byte_size,
10593 simple_type_size_in_bits (type) / BITS_PER_UNIT);
10594 item_type = TREE_TYPE (type);
10595 if (!ADDR_SPACE_GENERIC_P (TYPE_ADDR_SPACE (item_type)))
10596 add_AT_unsigned (mod_type_die, DW_AT_address_class,
10597 TYPE_ADDR_SPACE (item_type));
10599 else if (code == INTEGER_TYPE
10600 && TREE_TYPE (type) != NULL_TREE
10601 && subrange_type_for_debug_p (type, &low, &high))
10603 mod_type_die = subrange_type_die (type, low, high, context_die);
10604 item_type = TREE_TYPE (type);
10606 else if (is_base_type (type))
10607 mod_type_die = base_type_die (type);
10608 else
10610 gen_type_die (type, context_die);
10612 /* We have to get the type_main_variant here (and pass that to the
10613 `lookup_type_die' routine) because the ..._TYPE node we have
10614 might simply be a *copy* of some original type node (where the
10615 copy was created to help us keep track of typedef names) and
10616 that copy might have a different TYPE_UID from the original
10617 ..._TYPE node. */
10618 if (TREE_CODE (type) != VECTOR_TYPE)
10619 return lookup_type_die (type_main_variant (type));
10620 else
10621 /* Vectors have the debugging information in the type,
10622 not the main variant. */
10623 return lookup_type_die (type);
10626 /* Builtin types don't have a DECL_ORIGINAL_TYPE. For those,
10627 don't output a DW_TAG_typedef, since there isn't one in the
10628 user's program; just attach a DW_AT_name to the type.
10629 Don't attach a DW_AT_name to DW_TAG_const_type or DW_TAG_volatile_type
10630 if the base type already has the same name. */
10631 if (name
10632 && ((TREE_CODE (name) != TYPE_DECL
10633 && (qualified_type == TYPE_MAIN_VARIANT (type)
10634 || (cv_quals == TYPE_UNQUALIFIED)))
10635 || (TREE_CODE (name) == TYPE_DECL
10636 && TREE_TYPE (name) == qualified_type
10637 && DECL_NAME (name))))
10639 if (TREE_CODE (name) == TYPE_DECL)
10640 /* Could just call add_name_and_src_coords_attributes here,
10641 but since this is a builtin type it doesn't have any
10642 useful source coordinates anyway. */
10643 name = DECL_NAME (name);
10644 add_name_attribute (mod_type_die, IDENTIFIER_POINTER (name));
10646 /* This probably indicates a bug. */
10647 else if (mod_type_die && mod_type_die->die_tag == DW_TAG_base_type)
10649 name = TYPE_IDENTIFIER (type);
10650 add_name_attribute (mod_type_die,
10651 name ? IDENTIFIER_POINTER (name) : "__unknown__");
10654 if (qualified_type)
10655 equate_type_number_to_die (qualified_type, mod_type_die);
10657 if (item_type)
10658 /* We must do this after the equate_type_number_to_die call, in case
10659 this is a recursive type. This ensures that the modified_type_die
10660 recursion will terminate even if the type is recursive. Recursive
10661 types are possible in Ada. */
10662 sub_die = modified_type_die (item_type,
10663 TYPE_QUALS_NO_ADDR_SPACE (item_type),
10664 context_die);
10666 if (sub_die != NULL)
10667 add_AT_die_ref (mod_type_die, DW_AT_type, sub_die);
10669 add_gnat_descriptive_type_attribute (mod_type_die, type, context_die);
10670 if (TYPE_ARTIFICIAL (type))
10671 add_AT_flag (mod_type_die, DW_AT_artificial, 1);
10673 return mod_type_die;
10676 /* Generate DIEs for the generic parameters of T.
10677 T must be either a generic type or a generic function.
10678 See http://gcc.gnu.org/wiki/TemplateParmsDwarf for more. */
10680 static void
10681 gen_generic_params_dies (tree t)
10683 tree parms, args;
10684 int parms_num, i;
10685 dw_die_ref die = NULL;
10686 int non_default;
10688 if (!t || (TYPE_P (t) && !COMPLETE_TYPE_P (t)))
10689 return;
10691 if (TYPE_P (t))
10692 die = lookup_type_die (t);
10693 else if (DECL_P (t))
10694 die = lookup_decl_die (t);
10696 gcc_assert (die);
10698 parms = lang_hooks.get_innermost_generic_parms (t);
10699 if (!parms)
10700 /* T has no generic parameter. It means T is neither a generic type
10701 or function. End of story. */
10702 return;
10704 parms_num = TREE_VEC_LENGTH (parms);
10705 args = lang_hooks.get_innermost_generic_args (t);
10706 if (TREE_CHAIN (args) && TREE_CODE (TREE_CHAIN (args)) == INTEGER_CST)
10707 non_default = int_cst_value (TREE_CHAIN (args));
10708 else
10709 non_default = TREE_VEC_LENGTH (args);
10710 for (i = 0; i < parms_num; i++)
10712 tree parm, arg, arg_pack_elems;
10713 dw_die_ref parm_die;
10715 parm = TREE_VEC_ELT (parms, i);
10716 arg = TREE_VEC_ELT (args, i);
10717 arg_pack_elems = lang_hooks.types.get_argument_pack_elems (arg);
10718 gcc_assert (parm && TREE_VALUE (parm) && arg);
10720 if (parm && TREE_VALUE (parm) && arg)
10722 /* If PARM represents a template parameter pack,
10723 emit a DW_TAG_GNU_template_parameter_pack DIE, followed
10724 by DW_TAG_template_*_parameter DIEs for the argument
10725 pack elements of ARG. Note that ARG would then be
10726 an argument pack. */
10727 if (arg_pack_elems)
10728 parm_die = template_parameter_pack_die (TREE_VALUE (parm),
10729 arg_pack_elems,
10730 die);
10731 else
10732 parm_die = generic_parameter_die (TREE_VALUE (parm), arg,
10733 true /* emit name */, die);
10734 if (i >= non_default)
10735 add_AT_flag (parm_die, DW_AT_default_value, 1);
10740 /* Create and return a DIE for PARM which should be
10741 the representation of a generic type parameter.
10742 For instance, in the C++ front end, PARM would be a template parameter.
10743 ARG is the argument to PARM.
10744 EMIT_NAME_P if tree, the DIE will have DW_AT_name attribute set to the
10745 name of the PARM.
10746 PARENT_DIE is the parent DIE which the new created DIE should be added to,
10747 as a child node. */
10749 static dw_die_ref
10750 generic_parameter_die (tree parm, tree arg,
10751 bool emit_name_p,
10752 dw_die_ref parent_die)
10754 dw_die_ref tmpl_die = NULL;
10755 const char *name = NULL;
10757 if (!parm || !DECL_NAME (parm) || !arg)
10758 return NULL;
10760 /* We support non-type generic parameters and arguments,
10761 type generic parameters and arguments, as well as
10762 generic generic parameters (a.k.a. template template parameters in C++)
10763 and arguments. */
10764 if (TREE_CODE (parm) == PARM_DECL)
10765 /* PARM is a nontype generic parameter */
10766 tmpl_die = new_die (DW_TAG_template_value_param, parent_die, parm);
10767 else if (TREE_CODE (parm) == TYPE_DECL)
10768 /* PARM is a type generic parameter. */
10769 tmpl_die = new_die (DW_TAG_template_type_param, parent_die, parm);
10770 else if (lang_hooks.decls.generic_generic_parameter_decl_p (parm))
10771 /* PARM is a generic generic parameter.
10772 Its DIE is a GNU extension. It shall have a
10773 DW_AT_name attribute to represent the name of the template template
10774 parameter, and a DW_AT_GNU_template_name attribute to represent the
10775 name of the template template argument. */
10776 tmpl_die = new_die (DW_TAG_GNU_template_template_param,
10777 parent_die, parm);
10778 else
10779 gcc_unreachable ();
10781 if (tmpl_die)
10783 tree tmpl_type;
10785 /* If PARM is a generic parameter pack, it means we are
10786 emitting debug info for a template argument pack element.
10787 In other terms, ARG is a template argument pack element.
10788 In that case, we don't emit any DW_AT_name attribute for
10789 the die. */
10790 if (emit_name_p)
10792 name = IDENTIFIER_POINTER (DECL_NAME (parm));
10793 gcc_assert (name);
10794 add_AT_string (tmpl_die, DW_AT_name, name);
10797 if (!lang_hooks.decls.generic_generic_parameter_decl_p (parm))
10799 /* DWARF3, 5.6.8 says if PARM is a non-type generic parameter
10800 TMPL_DIE should have a child DW_AT_type attribute that is set
10801 to the type of the argument to PARM, which is ARG.
10802 If PARM is a type generic parameter, TMPL_DIE should have a
10803 child DW_AT_type that is set to ARG. */
10804 tmpl_type = TYPE_P (arg) ? arg : TREE_TYPE (arg);
10805 add_type_attribute (tmpl_die, tmpl_type,
10806 (TREE_THIS_VOLATILE (tmpl_type)
10807 ? TYPE_QUAL_VOLATILE : TYPE_UNQUALIFIED),
10808 parent_die);
10810 else
10812 /* So TMPL_DIE is a DIE representing a
10813 a generic generic template parameter, a.k.a template template
10814 parameter in C++ and arg is a template. */
10816 /* The DW_AT_GNU_template_name attribute of the DIE must be set
10817 to the name of the argument. */
10818 name = dwarf2_name (TYPE_P (arg) ? TYPE_NAME (arg) : arg, 1);
10819 if (name)
10820 add_AT_string (tmpl_die, DW_AT_GNU_template_name, name);
10823 if (TREE_CODE (parm) == PARM_DECL)
10824 /* So PARM is a non-type generic parameter.
10825 DWARF3 5.6.8 says we must set a DW_AT_const_value child
10826 attribute of TMPL_DIE which value represents the value
10827 of ARG.
10828 We must be careful here:
10829 The value of ARG might reference some function decls.
10830 We might currently be emitting debug info for a generic
10831 type and types are emitted before function decls, we don't
10832 know if the function decls referenced by ARG will actually be
10833 emitted after cgraph computations.
10834 So must defer the generation of the DW_AT_const_value to
10835 after cgraph is ready. */
10836 append_entry_to_tmpl_value_parm_die_table (tmpl_die, arg);
10839 return tmpl_die;
10842 /* Generate and return a DW_TAG_GNU_template_parameter_pack DIE representing.
10843 PARM_PACK must be a template parameter pack. The returned DIE
10844 will be child DIE of PARENT_DIE. */
10846 static dw_die_ref
10847 template_parameter_pack_die (tree parm_pack,
10848 tree parm_pack_args,
10849 dw_die_ref parent_die)
10851 dw_die_ref die;
10852 int j;
10854 gcc_assert (parent_die && parm_pack);
10856 die = new_die (DW_TAG_GNU_template_parameter_pack, parent_die, parm_pack);
10857 add_name_and_src_coords_attributes (die, parm_pack);
10858 for (j = 0; j < TREE_VEC_LENGTH (parm_pack_args); j++)
10859 generic_parameter_die (parm_pack,
10860 TREE_VEC_ELT (parm_pack_args, j),
10861 false /* Don't emit DW_AT_name */,
10862 die);
10863 return die;
10866 /* Given a pointer to an arbitrary ..._TYPE tree node, return true if it is
10867 an enumerated type. */
10869 static inline int
10870 type_is_enum (const_tree type)
10872 return TREE_CODE (type) == ENUMERAL_TYPE;
10875 /* Return the DBX register number described by a given RTL node. */
10877 static unsigned int
10878 dbx_reg_number (const_rtx rtl)
10880 unsigned regno = REGNO (rtl);
10882 gcc_assert (regno < FIRST_PSEUDO_REGISTER);
10884 #ifdef LEAF_REG_REMAP
10885 if (crtl->uses_only_leaf_regs)
10887 int leaf_reg = LEAF_REG_REMAP (regno);
10888 if (leaf_reg != -1)
10889 regno = (unsigned) leaf_reg;
10891 #endif
10893 regno = DBX_REGISTER_NUMBER (regno);
10894 gcc_assert (regno != INVALID_REGNUM);
10895 return regno;
10898 /* Optionally add a DW_OP_piece term to a location description expression.
10899 DW_OP_piece is only added if the location description expression already
10900 doesn't end with DW_OP_piece. */
10902 static void
10903 add_loc_descr_op_piece (dw_loc_descr_ref *list_head, int size)
10905 dw_loc_descr_ref loc;
10907 if (*list_head != NULL)
10909 /* Find the end of the chain. */
10910 for (loc = *list_head; loc->dw_loc_next != NULL; loc = loc->dw_loc_next)
10913 if (loc->dw_loc_opc != DW_OP_piece)
10914 loc->dw_loc_next = new_loc_descr (DW_OP_piece, size, 0);
10918 /* Return a location descriptor that designates a machine register or
10919 zero if there is none. */
10921 static dw_loc_descr_ref
10922 reg_loc_descriptor (rtx rtl, enum var_init_status initialized)
10924 rtx regs;
10926 if (REGNO (rtl) >= FIRST_PSEUDO_REGISTER)
10927 return 0;
10929 /* We only use "frame base" when we're sure we're talking about the
10930 post-prologue local stack frame. We do this by *not* running
10931 register elimination until this point, and recognizing the special
10932 argument pointer and soft frame pointer rtx's.
10933 Use DW_OP_fbreg offset DW_OP_stack_value in this case. */
10934 if ((rtl == arg_pointer_rtx || rtl == frame_pointer_rtx)
10935 && eliminate_regs (rtl, VOIDmode, NULL_RTX) != rtl)
10937 dw_loc_descr_ref result = NULL;
10939 if (dwarf_version >= 4 || !dwarf_strict)
10941 result = mem_loc_descriptor (rtl, GET_MODE (rtl), VOIDmode,
10942 initialized);
10943 if (result)
10944 add_loc_descr (&result,
10945 new_loc_descr (DW_OP_stack_value, 0, 0));
10947 return result;
10950 regs = targetm.dwarf_register_span (rtl);
10952 if (hard_regno_nregs[REGNO (rtl)][GET_MODE (rtl)] > 1 || regs)
10953 return multiple_reg_loc_descriptor (rtl, regs, initialized);
10954 else
10956 unsigned int dbx_regnum = dbx_reg_number (rtl);
10957 if (dbx_regnum == IGNORED_DWARF_REGNUM)
10958 return 0;
10959 return one_reg_loc_descriptor (dbx_regnum, initialized);
10963 /* Return a location descriptor that designates a machine register for
10964 a given hard register number. */
10966 static dw_loc_descr_ref
10967 one_reg_loc_descriptor (unsigned int regno, enum var_init_status initialized)
10969 dw_loc_descr_ref reg_loc_descr;
10971 if (regno <= 31)
10972 reg_loc_descr
10973 = new_loc_descr ((enum dwarf_location_atom) (DW_OP_reg0 + regno), 0, 0);
10974 else
10975 reg_loc_descr = new_loc_descr (DW_OP_regx, regno, 0);
10977 if (initialized == VAR_INIT_STATUS_UNINITIALIZED)
10978 add_loc_descr (&reg_loc_descr, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
10980 return reg_loc_descr;
10983 /* Given an RTL of a register, return a location descriptor that
10984 designates a value that spans more than one register. */
10986 static dw_loc_descr_ref
10987 multiple_reg_loc_descriptor (rtx rtl, rtx regs,
10988 enum var_init_status initialized)
10990 int size, i;
10991 dw_loc_descr_ref loc_result = NULL;
10993 /* Simple, contiguous registers. */
10994 if (regs == NULL_RTX)
10996 unsigned reg = REGNO (rtl);
10997 int nregs;
10999 #ifdef LEAF_REG_REMAP
11000 if (crtl->uses_only_leaf_regs)
11002 int leaf_reg = LEAF_REG_REMAP (reg);
11003 if (leaf_reg != -1)
11004 reg = (unsigned) leaf_reg;
11006 #endif
11008 gcc_assert ((unsigned) DBX_REGISTER_NUMBER (reg) == dbx_reg_number (rtl));
11009 nregs = hard_regno_nregs[REGNO (rtl)][GET_MODE (rtl)];
11011 size = GET_MODE_SIZE (GET_MODE (rtl)) / nregs;
11013 loc_result = NULL;
11014 while (nregs--)
11016 dw_loc_descr_ref t;
11018 t = one_reg_loc_descriptor (DBX_REGISTER_NUMBER (reg),
11019 VAR_INIT_STATUS_INITIALIZED);
11020 add_loc_descr (&loc_result, t);
11021 add_loc_descr_op_piece (&loc_result, size);
11022 ++reg;
11024 return loc_result;
11027 /* Now onto stupid register sets in non contiguous locations. */
11029 gcc_assert (GET_CODE (regs) == PARALLEL);
11031 size = GET_MODE_SIZE (GET_MODE (XVECEXP (regs, 0, 0)));
11032 loc_result = NULL;
11034 for (i = 0; i < XVECLEN (regs, 0); ++i)
11036 dw_loc_descr_ref t;
11038 t = one_reg_loc_descriptor (dbx_reg_number (XVECEXP (regs, 0, i)),
11039 VAR_INIT_STATUS_INITIALIZED);
11040 add_loc_descr (&loc_result, t);
11041 add_loc_descr_op_piece (&loc_result, size);
11044 if (loc_result && initialized == VAR_INIT_STATUS_UNINITIALIZED)
11045 add_loc_descr (&loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
11046 return loc_result;
11049 static unsigned long size_of_int_loc_descriptor (HOST_WIDE_INT);
11051 /* Return a location descriptor that designates a constant i,
11052 as a compound operation from constant (i >> shift), constant shift
11053 and DW_OP_shl. */
11055 static dw_loc_descr_ref
11056 int_shift_loc_descriptor (HOST_WIDE_INT i, int shift)
11058 dw_loc_descr_ref ret = int_loc_descriptor (i >> shift);
11059 add_loc_descr (&ret, int_loc_descriptor (shift));
11060 add_loc_descr (&ret, new_loc_descr (DW_OP_shl, 0, 0));
11061 return ret;
11064 /* Return a location descriptor that designates a constant. */
11066 static dw_loc_descr_ref
11067 int_loc_descriptor (HOST_WIDE_INT i)
11069 enum dwarf_location_atom op;
11071 /* Pick the smallest representation of a constant, rather than just
11072 defaulting to the LEB encoding. */
11073 if (i >= 0)
11075 int clz = clz_hwi (i);
11076 int ctz = ctz_hwi (i);
11077 if (i <= 31)
11078 op = (enum dwarf_location_atom) (DW_OP_lit0 + i);
11079 else if (i <= 0xff)
11080 op = DW_OP_const1u;
11081 else if (i <= 0xffff)
11082 op = DW_OP_const2u;
11083 else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 5
11084 && clz + 5 + 255 >= HOST_BITS_PER_WIDE_INT)
11085 /* DW_OP_litX DW_OP_litY DW_OP_shl takes just 3 bytes and
11086 DW_OP_litX DW_OP_const1u Y DW_OP_shl takes just 4 bytes,
11087 while DW_OP_const4u is 5 bytes. */
11088 return int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT - clz - 5);
11089 else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 8
11090 && clz + 8 + 31 >= HOST_BITS_PER_WIDE_INT)
11091 /* DW_OP_const1u X DW_OP_litY DW_OP_shl takes just 4 bytes,
11092 while DW_OP_const4u is 5 bytes. */
11093 return int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT - clz - 8);
11094 else if (HOST_BITS_PER_WIDE_INT == 32 || i <= 0xffffffff)
11095 op = DW_OP_const4u;
11096 else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 8
11097 && clz + 8 + 255 >= HOST_BITS_PER_WIDE_INT)
11098 /* DW_OP_const1u X DW_OP_const1u Y DW_OP_shl takes just 5 bytes,
11099 while DW_OP_constu of constant >= 0x100000000 takes at least
11100 6 bytes. */
11101 return int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT - clz - 8);
11102 else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 16
11103 && clz + 16 + (size_of_uleb128 (i) > 5 ? 255 : 31)
11104 >= HOST_BITS_PER_WIDE_INT)
11105 /* DW_OP_const2u X DW_OP_litY DW_OP_shl takes just 5 bytes,
11106 DW_OP_const2u X DW_OP_const1u Y DW_OP_shl takes 6 bytes,
11107 while DW_OP_constu takes in this case at least 6 bytes. */
11108 return int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT - clz - 16);
11109 else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 32
11110 && clz + 32 + 31 >= HOST_BITS_PER_WIDE_INT
11111 && size_of_uleb128 (i) > 6)
11112 /* DW_OP_const4u X DW_OP_litY DW_OP_shl takes just 7 bytes. */
11113 return int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT - clz - 32);
11114 else
11115 op = DW_OP_constu;
11117 else
11119 if (i >= -0x80)
11120 op = DW_OP_const1s;
11121 else if (i >= -0x8000)
11122 op = DW_OP_const2s;
11123 else if (HOST_BITS_PER_WIDE_INT == 32 || i >= -0x80000000)
11125 if (size_of_int_loc_descriptor (i) < 5)
11127 dw_loc_descr_ref ret = int_loc_descriptor (-i);
11128 add_loc_descr (&ret, new_loc_descr (DW_OP_neg, 0, 0));
11129 return ret;
11131 op = DW_OP_const4s;
11133 else
11135 if (size_of_int_loc_descriptor (i)
11136 < (unsigned long) 1 + size_of_sleb128 (i))
11138 dw_loc_descr_ref ret = int_loc_descriptor (-i);
11139 add_loc_descr (&ret, new_loc_descr (DW_OP_neg, 0, 0));
11140 return ret;
11142 op = DW_OP_consts;
11146 return new_loc_descr (op, i, 0);
11149 /* Return size_of_locs (int_shift_loc_descriptor (i, shift))
11150 without actually allocating it. */
11152 static unsigned long
11153 size_of_int_shift_loc_descriptor (HOST_WIDE_INT i, int shift)
11155 return size_of_int_loc_descriptor (i >> shift)
11156 + size_of_int_loc_descriptor (shift)
11157 + 1;
11160 /* Return size_of_locs (int_loc_descriptor (i)) without
11161 actually allocating it. */
11163 static unsigned long
11164 size_of_int_loc_descriptor (HOST_WIDE_INT i)
11166 unsigned long s;
11168 if (i >= 0)
11170 int clz, ctz;
11171 if (i <= 31)
11172 return 1;
11173 else if (i <= 0xff)
11174 return 2;
11175 else if (i <= 0xffff)
11176 return 3;
11177 clz = clz_hwi (i);
11178 ctz = ctz_hwi (i);
11179 if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 5
11180 && clz + 5 + 255 >= HOST_BITS_PER_WIDE_INT)
11181 return size_of_int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT
11182 - clz - 5);
11183 else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 8
11184 && clz + 8 + 31 >= HOST_BITS_PER_WIDE_INT)
11185 return size_of_int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT
11186 - clz - 8);
11187 else if (HOST_BITS_PER_WIDE_INT == 32 || i <= 0xffffffff)
11188 return 5;
11189 s = size_of_uleb128 ((unsigned HOST_WIDE_INT) i);
11190 if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 8
11191 && clz + 8 + 255 >= HOST_BITS_PER_WIDE_INT)
11192 return size_of_int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT
11193 - clz - 8);
11194 else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 16
11195 && clz + 16 + (s > 5 ? 255 : 31) >= HOST_BITS_PER_WIDE_INT)
11196 return size_of_int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT
11197 - clz - 16);
11198 else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 32
11199 && clz + 32 + 31 >= HOST_BITS_PER_WIDE_INT
11200 && s > 6)
11201 return size_of_int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT
11202 - clz - 32);
11203 else
11204 return 1 + s;
11206 else
11208 if (i >= -0x80)
11209 return 2;
11210 else if (i >= -0x8000)
11211 return 3;
11212 else if (HOST_BITS_PER_WIDE_INT == 32 || i >= -0x80000000)
11214 if (-(unsigned HOST_WIDE_INT) i != (unsigned HOST_WIDE_INT) i)
11216 s = size_of_int_loc_descriptor (-i) + 1;
11217 if (s < 5)
11218 return s;
11220 return 5;
11222 else
11224 unsigned long r = 1 + size_of_sleb128 (i);
11225 if (-(unsigned HOST_WIDE_INT) i != (unsigned HOST_WIDE_INT) i)
11227 s = size_of_int_loc_descriptor (-i) + 1;
11228 if (s < r)
11229 return s;
11231 return r;
11236 /* Return loc description representing "address" of integer value.
11237 This can appear only as toplevel expression. */
11239 static dw_loc_descr_ref
11240 address_of_int_loc_descriptor (int size, HOST_WIDE_INT i)
11242 int litsize;
11243 dw_loc_descr_ref loc_result = NULL;
11245 if (!(dwarf_version >= 4 || !dwarf_strict))
11246 return NULL;
11248 litsize = size_of_int_loc_descriptor (i);
11249 /* Determine if DW_OP_stack_value or DW_OP_implicit_value
11250 is more compact. For DW_OP_stack_value we need:
11251 litsize + 1 (DW_OP_stack_value)
11252 and for DW_OP_implicit_value:
11253 1 (DW_OP_implicit_value) + 1 (length) + size. */
11254 if ((int) DWARF2_ADDR_SIZE >= size && litsize + 1 <= 1 + 1 + size)
11256 loc_result = int_loc_descriptor (i);
11257 add_loc_descr (&loc_result,
11258 new_loc_descr (DW_OP_stack_value, 0, 0));
11259 return loc_result;
11262 loc_result = new_loc_descr (DW_OP_implicit_value,
11263 size, 0);
11264 loc_result->dw_loc_oprnd2.val_class = dw_val_class_const;
11265 loc_result->dw_loc_oprnd2.v.val_int = i;
11266 return loc_result;
11269 /* Return a location descriptor that designates a base+offset location. */
11271 static dw_loc_descr_ref
11272 based_loc_descr (rtx reg, HOST_WIDE_INT offset,
11273 enum var_init_status initialized)
11275 unsigned int regno;
11276 dw_loc_descr_ref result;
11277 dw_fde_ref fde = cfun->fde;
11279 /* We only use "frame base" when we're sure we're talking about the
11280 post-prologue local stack frame. We do this by *not* running
11281 register elimination until this point, and recognizing the special
11282 argument pointer and soft frame pointer rtx's. */
11283 if (reg == arg_pointer_rtx || reg == frame_pointer_rtx)
11285 rtx elim = (ira_use_lra_p
11286 ? lra_eliminate_regs (reg, VOIDmode, NULL_RTX)
11287 : eliminate_regs (reg, VOIDmode, NULL_RTX));
11289 if (elim != reg)
11291 if (GET_CODE (elim) == PLUS)
11293 offset += INTVAL (XEXP (elim, 1));
11294 elim = XEXP (elim, 0);
11296 gcc_assert ((SUPPORTS_STACK_ALIGNMENT
11297 && (elim == hard_frame_pointer_rtx
11298 || elim == stack_pointer_rtx))
11299 || elim == (frame_pointer_needed
11300 ? hard_frame_pointer_rtx
11301 : stack_pointer_rtx));
11303 /* If drap register is used to align stack, use frame
11304 pointer + offset to access stack variables. If stack
11305 is aligned without drap, use stack pointer + offset to
11306 access stack variables. */
11307 if (crtl->stack_realign_tried
11308 && reg == frame_pointer_rtx)
11310 int base_reg
11311 = DWARF_FRAME_REGNUM ((fde && fde->drap_reg != INVALID_REGNUM)
11312 ? HARD_FRAME_POINTER_REGNUM
11313 : REGNO (elim));
11314 return new_reg_loc_descr (base_reg, offset);
11317 gcc_assert (frame_pointer_fb_offset_valid);
11318 offset += frame_pointer_fb_offset;
11319 return new_loc_descr (DW_OP_fbreg, offset, 0);
11323 regno = REGNO (reg);
11324 #ifdef LEAF_REG_REMAP
11325 if (crtl->uses_only_leaf_regs)
11327 int leaf_reg = LEAF_REG_REMAP (regno);
11328 if (leaf_reg != -1)
11329 regno = (unsigned) leaf_reg;
11331 #endif
11332 regno = DWARF_FRAME_REGNUM (regno);
11334 if (!optimize && fde
11335 && (fde->drap_reg == regno || fde->vdrap_reg == regno))
11337 /* Use cfa+offset to represent the location of arguments passed
11338 on the stack when drap is used to align stack.
11339 Only do this when not optimizing, for optimized code var-tracking
11340 is supposed to track where the arguments live and the register
11341 used as vdrap or drap in some spot might be used for something
11342 else in other part of the routine. */
11343 return new_loc_descr (DW_OP_fbreg, offset, 0);
11346 if (regno <= 31)
11347 result = new_loc_descr ((enum dwarf_location_atom) (DW_OP_breg0 + regno),
11348 offset, 0);
11349 else
11350 result = new_loc_descr (DW_OP_bregx, regno, offset);
11352 if (initialized == VAR_INIT_STATUS_UNINITIALIZED)
11353 add_loc_descr (&result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
11355 return result;
11358 /* Return true if this RTL expression describes a base+offset calculation. */
11360 static inline int
11361 is_based_loc (const_rtx rtl)
11363 return (GET_CODE (rtl) == PLUS
11364 && ((REG_P (XEXP (rtl, 0))
11365 && REGNO (XEXP (rtl, 0)) < FIRST_PSEUDO_REGISTER
11366 && CONST_INT_P (XEXP (rtl, 1)))));
11369 /* Try to handle TLS MEMs, for which mem_loc_descriptor on XEXP (mem, 0)
11370 failed. */
11372 static dw_loc_descr_ref
11373 tls_mem_loc_descriptor (rtx mem)
11375 tree base;
11376 dw_loc_descr_ref loc_result;
11378 if (MEM_EXPR (mem) == NULL_TREE || !MEM_OFFSET_KNOWN_P (mem))
11379 return NULL;
11381 base = get_base_address (MEM_EXPR (mem));
11382 if (base == NULL
11383 || TREE_CODE (base) != VAR_DECL
11384 || !DECL_THREAD_LOCAL_P (base))
11385 return NULL;
11387 loc_result = loc_descriptor_from_tree (MEM_EXPR (mem), 1);
11388 if (loc_result == NULL)
11389 return NULL;
11391 if (MEM_OFFSET (mem))
11392 loc_descr_plus_const (&loc_result, MEM_OFFSET (mem));
11394 return loc_result;
11397 /* Output debug info about reason why we failed to expand expression as dwarf
11398 expression. */
11400 static void
11401 expansion_failed (tree expr, rtx rtl, char const *reason)
11403 if (dump_file && (dump_flags & TDF_DETAILS))
11405 fprintf (dump_file, "Failed to expand as dwarf: ");
11406 if (expr)
11407 print_generic_expr (dump_file, expr, dump_flags);
11408 if (rtl)
11410 fprintf (dump_file, "\n");
11411 print_rtl (dump_file, rtl);
11413 fprintf (dump_file, "\nReason: %s\n", reason);
11417 /* Helper function for const_ok_for_output. */
11419 static bool
11420 const_ok_for_output_1 (rtx rtl)
11422 if (GET_CODE (rtl) == UNSPEC)
11424 /* If delegitimize_address couldn't do anything with the UNSPEC, assume
11425 we can't express it in the debug info. */
11426 #ifdef ENABLE_CHECKING
11427 /* Don't complain about TLS UNSPECs, those are just too hard to
11428 delegitimize. Note this could be a non-decl SYMBOL_REF such as
11429 one in a constant pool entry, so testing SYMBOL_REF_TLS_MODEL
11430 rather than DECL_THREAD_LOCAL_P is not just an optimization. */
11431 if (XVECLEN (rtl, 0) == 0
11432 || GET_CODE (XVECEXP (rtl, 0, 0)) != SYMBOL_REF
11433 || SYMBOL_REF_TLS_MODEL (XVECEXP (rtl, 0, 0)) == TLS_MODEL_NONE)
11434 inform (current_function_decl
11435 ? DECL_SOURCE_LOCATION (current_function_decl)
11436 : UNKNOWN_LOCATION,
11437 #if NUM_UNSPEC_VALUES > 0
11438 "non-delegitimized UNSPEC %s (%d) found in variable location",
11439 ((XINT (rtl, 1) >= 0 && XINT (rtl, 1) < NUM_UNSPEC_VALUES)
11440 ? unspec_strings[XINT (rtl, 1)] : "unknown"),
11441 XINT (rtl, 1));
11442 #else
11443 "non-delegitimized UNSPEC %d found in variable location",
11444 XINT (rtl, 1));
11445 #endif
11446 #endif
11447 expansion_failed (NULL_TREE, rtl,
11448 "UNSPEC hasn't been delegitimized.\n");
11449 return false;
11452 if (targetm.const_not_ok_for_debug_p (rtl))
11454 expansion_failed (NULL_TREE, rtl,
11455 "Expression rejected for debug by the backend.\n");
11456 return false;
11459 /* FIXME: Refer to PR60655. It is possible for simplification
11460 of rtl expressions in var tracking to produce such expressions.
11461 We should really identify / validate expressions
11462 enclosed in CONST that can be handled by assemblers on various
11463 targets and only handle legitimate cases here. */
11464 if (GET_CODE (rtl) != SYMBOL_REF)
11466 if (GET_CODE (rtl) == NOT)
11467 return false;
11468 return true;
11471 if (CONSTANT_POOL_ADDRESS_P (rtl))
11473 bool marked;
11474 get_pool_constant_mark (rtl, &marked);
11475 /* If all references to this pool constant were optimized away,
11476 it was not output and thus we can't represent it. */
11477 if (!marked)
11479 expansion_failed (NULL_TREE, rtl,
11480 "Constant was removed from constant pool.\n");
11481 return false;
11485 if (SYMBOL_REF_TLS_MODEL (rtl) != TLS_MODEL_NONE)
11486 return false;
11488 /* Avoid references to external symbols in debug info, on several targets
11489 the linker might even refuse to link when linking a shared library,
11490 and in many other cases the relocations for .debug_info/.debug_loc are
11491 dropped, so the address becomes zero anyway. Hidden symbols, guaranteed
11492 to be defined within the same shared library or executable are fine. */
11493 if (SYMBOL_REF_EXTERNAL_P (rtl))
11495 tree decl = SYMBOL_REF_DECL (rtl);
11497 if (decl == NULL || !targetm.binds_local_p (decl))
11499 expansion_failed (NULL_TREE, rtl,
11500 "Symbol not defined in current TU.\n");
11501 return false;
11505 return true;
11508 /* Return true if constant RTL can be emitted in DW_OP_addr or
11509 DW_AT_const_value. TLS SYMBOL_REFs, external SYMBOL_REFs or
11510 non-marked constant pool SYMBOL_REFs can't be referenced in it. */
11512 static bool
11513 const_ok_for_output (rtx rtl)
11515 if (GET_CODE (rtl) == SYMBOL_REF)
11516 return const_ok_for_output_1 (rtl);
11518 if (GET_CODE (rtl) == CONST)
11520 subrtx_var_iterator::array_type array;
11521 FOR_EACH_SUBRTX_VAR (iter, array, XEXP (rtl, 0), ALL)
11522 if (!const_ok_for_output_1 (*iter))
11523 return false;
11524 return true;
11527 return true;
11530 /* Return a reference to DW_TAG_base_type corresponding to MODE and UNSIGNEDP
11531 if possible, NULL otherwise. */
11533 static dw_die_ref
11534 base_type_for_mode (enum machine_mode mode, bool unsignedp)
11536 dw_die_ref type_die;
11537 tree type = lang_hooks.types.type_for_mode (mode, unsignedp);
11539 if (type == NULL)
11540 return NULL;
11541 switch (TREE_CODE (type))
11543 case INTEGER_TYPE:
11544 case REAL_TYPE:
11545 break;
11546 default:
11547 return NULL;
11549 type_die = lookup_type_die (type);
11550 if (!type_die)
11551 type_die = modified_type_die (type, TYPE_UNQUALIFIED, comp_unit_die ());
11552 if (type_die == NULL || type_die->die_tag != DW_TAG_base_type)
11553 return NULL;
11554 return type_die;
11557 /* For OP descriptor assumed to be in unsigned MODE, convert it to a unsigned
11558 type matching MODE, or, if MODE is narrower than or as wide as
11559 DWARF2_ADDR_SIZE, untyped. Return NULL if the conversion is not
11560 possible. */
11562 static dw_loc_descr_ref
11563 convert_descriptor_to_mode (enum machine_mode mode, dw_loc_descr_ref op)
11565 enum machine_mode outer_mode = mode;
11566 dw_die_ref type_die;
11567 dw_loc_descr_ref cvt;
11569 if (GET_MODE_SIZE (mode) <= DWARF2_ADDR_SIZE)
11571 add_loc_descr (&op, new_loc_descr (DW_OP_GNU_convert, 0, 0));
11572 return op;
11574 type_die = base_type_for_mode (outer_mode, 1);
11575 if (type_die == NULL)
11576 return NULL;
11577 cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
11578 cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
11579 cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
11580 cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
11581 add_loc_descr (&op, cvt);
11582 return op;
11585 /* Return location descriptor for comparison OP with operands OP0 and OP1. */
11587 static dw_loc_descr_ref
11588 compare_loc_descriptor (enum dwarf_location_atom op, dw_loc_descr_ref op0,
11589 dw_loc_descr_ref op1)
11591 dw_loc_descr_ref ret = op0;
11592 add_loc_descr (&ret, op1);
11593 add_loc_descr (&ret, new_loc_descr (op, 0, 0));
11594 if (STORE_FLAG_VALUE != 1)
11596 add_loc_descr (&ret, int_loc_descriptor (STORE_FLAG_VALUE));
11597 add_loc_descr (&ret, new_loc_descr (DW_OP_mul, 0, 0));
11599 return ret;
11602 /* Return location descriptor for signed comparison OP RTL. */
11604 static dw_loc_descr_ref
11605 scompare_loc_descriptor (enum dwarf_location_atom op, rtx rtl,
11606 enum machine_mode mem_mode)
11608 enum machine_mode op_mode = GET_MODE (XEXP (rtl, 0));
11609 dw_loc_descr_ref op0, op1;
11610 int shift;
11612 if (op_mode == VOIDmode)
11613 op_mode = GET_MODE (XEXP (rtl, 1));
11614 if (op_mode == VOIDmode)
11615 return NULL;
11617 if (dwarf_strict
11618 && (GET_MODE_CLASS (op_mode) != MODE_INT
11619 || GET_MODE_SIZE (op_mode) > DWARF2_ADDR_SIZE))
11620 return NULL;
11622 op0 = mem_loc_descriptor (XEXP (rtl, 0), op_mode, mem_mode,
11623 VAR_INIT_STATUS_INITIALIZED);
11624 op1 = mem_loc_descriptor (XEXP (rtl, 1), op_mode, mem_mode,
11625 VAR_INIT_STATUS_INITIALIZED);
11627 if (op0 == NULL || op1 == NULL)
11628 return NULL;
11630 if (GET_MODE_CLASS (op_mode) != MODE_INT
11631 || GET_MODE_SIZE (op_mode) == DWARF2_ADDR_SIZE)
11632 return compare_loc_descriptor (op, op0, op1);
11634 if (GET_MODE_SIZE (op_mode) > DWARF2_ADDR_SIZE)
11636 dw_die_ref type_die = base_type_for_mode (op_mode, 0);
11637 dw_loc_descr_ref cvt;
11639 if (type_die == NULL)
11640 return NULL;
11641 cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
11642 cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
11643 cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
11644 cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
11645 add_loc_descr (&op0, cvt);
11646 cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
11647 cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
11648 cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
11649 cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
11650 add_loc_descr (&op1, cvt);
11651 return compare_loc_descriptor (op, op0, op1);
11654 shift = (DWARF2_ADDR_SIZE - GET_MODE_SIZE (op_mode)) * BITS_PER_UNIT;
11655 /* For eq/ne, if the operands are known to be zero-extended,
11656 there is no need to do the fancy shifting up. */
11657 if (op == DW_OP_eq || op == DW_OP_ne)
11659 dw_loc_descr_ref last0, last1;
11660 for (last0 = op0; last0->dw_loc_next != NULL; last0 = last0->dw_loc_next)
11662 for (last1 = op1; last1->dw_loc_next != NULL; last1 = last1->dw_loc_next)
11664 /* deref_size zero extends, and for constants we can check
11665 whether they are zero extended or not. */
11666 if (((last0->dw_loc_opc == DW_OP_deref_size
11667 && last0->dw_loc_oprnd1.v.val_int <= GET_MODE_SIZE (op_mode))
11668 || (CONST_INT_P (XEXP (rtl, 0))
11669 && (unsigned HOST_WIDE_INT) INTVAL (XEXP (rtl, 0))
11670 == (INTVAL (XEXP (rtl, 0)) & GET_MODE_MASK (op_mode))))
11671 && ((last1->dw_loc_opc == DW_OP_deref_size
11672 && last1->dw_loc_oprnd1.v.val_int <= GET_MODE_SIZE (op_mode))
11673 || (CONST_INT_P (XEXP (rtl, 1))
11674 && (unsigned HOST_WIDE_INT) INTVAL (XEXP (rtl, 1))
11675 == (INTVAL (XEXP (rtl, 1)) & GET_MODE_MASK (op_mode)))))
11676 return compare_loc_descriptor (op, op0, op1);
11678 /* EQ/NE comparison against constant in narrower type than
11679 DWARF2_ADDR_SIZE can be performed either as
11680 DW_OP_const1u <shift> DW_OP_shl DW_OP_const* <cst << shift>
11681 DW_OP_{eq,ne}
11683 DW_OP_const*u <mode_mask> DW_OP_and DW_OP_const* <cst & mode_mask>
11684 DW_OP_{eq,ne}. Pick whatever is shorter. */
11685 if (CONST_INT_P (XEXP (rtl, 1))
11686 && GET_MODE_BITSIZE (op_mode) < HOST_BITS_PER_WIDE_INT
11687 && (size_of_int_loc_descriptor (shift) + 1
11688 + size_of_int_loc_descriptor (INTVAL (XEXP (rtl, 1)) << shift)
11689 >= size_of_int_loc_descriptor (GET_MODE_MASK (op_mode)) + 1
11690 + size_of_int_loc_descriptor (INTVAL (XEXP (rtl, 1))
11691 & GET_MODE_MASK (op_mode))))
11693 add_loc_descr (&op0, int_loc_descriptor (GET_MODE_MASK (op_mode)));
11694 add_loc_descr (&op0, new_loc_descr (DW_OP_and, 0, 0));
11695 op1 = int_loc_descriptor (INTVAL (XEXP (rtl, 1))
11696 & GET_MODE_MASK (op_mode));
11697 return compare_loc_descriptor (op, op0, op1);
11700 add_loc_descr (&op0, int_loc_descriptor (shift));
11701 add_loc_descr (&op0, new_loc_descr (DW_OP_shl, 0, 0));
11702 if (CONST_INT_P (XEXP (rtl, 1)))
11703 op1 = int_loc_descriptor (INTVAL (XEXP (rtl, 1)) << shift);
11704 else
11706 add_loc_descr (&op1, int_loc_descriptor (shift));
11707 add_loc_descr (&op1, new_loc_descr (DW_OP_shl, 0, 0));
11709 return compare_loc_descriptor (op, op0, op1);
11712 /* Return location descriptor for unsigned comparison OP RTL. */
11714 static dw_loc_descr_ref
11715 ucompare_loc_descriptor (enum dwarf_location_atom op, rtx rtl,
11716 enum machine_mode mem_mode)
11718 enum machine_mode op_mode = GET_MODE (XEXP (rtl, 0));
11719 dw_loc_descr_ref op0, op1;
11721 if (op_mode == VOIDmode)
11722 op_mode = GET_MODE (XEXP (rtl, 1));
11723 if (op_mode == VOIDmode)
11724 return NULL;
11725 if (GET_MODE_CLASS (op_mode) != MODE_INT)
11726 return NULL;
11728 if (dwarf_strict && GET_MODE_SIZE (op_mode) > DWARF2_ADDR_SIZE)
11729 return NULL;
11731 op0 = mem_loc_descriptor (XEXP (rtl, 0), op_mode, mem_mode,
11732 VAR_INIT_STATUS_INITIALIZED);
11733 op1 = mem_loc_descriptor (XEXP (rtl, 1), op_mode, mem_mode,
11734 VAR_INIT_STATUS_INITIALIZED);
11736 if (op0 == NULL || op1 == NULL)
11737 return NULL;
11739 if (GET_MODE_SIZE (op_mode) < DWARF2_ADDR_SIZE)
11741 HOST_WIDE_INT mask = GET_MODE_MASK (op_mode);
11742 dw_loc_descr_ref last0, last1;
11743 for (last0 = op0; last0->dw_loc_next != NULL; last0 = last0->dw_loc_next)
11745 for (last1 = op1; last1->dw_loc_next != NULL; last1 = last1->dw_loc_next)
11747 if (CONST_INT_P (XEXP (rtl, 0)))
11748 op0 = int_loc_descriptor (INTVAL (XEXP (rtl, 0)) & mask);
11749 /* deref_size zero extends, so no need to mask it again. */
11750 else if (last0->dw_loc_opc != DW_OP_deref_size
11751 || last0->dw_loc_oprnd1.v.val_int > GET_MODE_SIZE (op_mode))
11753 add_loc_descr (&op0, int_loc_descriptor (mask));
11754 add_loc_descr (&op0, new_loc_descr (DW_OP_and, 0, 0));
11756 if (CONST_INT_P (XEXP (rtl, 1)))
11757 op1 = int_loc_descriptor (INTVAL (XEXP (rtl, 1)) & mask);
11758 /* deref_size zero extends, so no need to mask it again. */
11759 else if (last1->dw_loc_opc != DW_OP_deref_size
11760 || last1->dw_loc_oprnd1.v.val_int > GET_MODE_SIZE (op_mode))
11762 add_loc_descr (&op1, int_loc_descriptor (mask));
11763 add_loc_descr (&op1, new_loc_descr (DW_OP_and, 0, 0));
11766 else if (GET_MODE_SIZE (op_mode) == DWARF2_ADDR_SIZE)
11768 HOST_WIDE_INT bias = 1;
11769 bias <<= (DWARF2_ADDR_SIZE * BITS_PER_UNIT - 1);
11770 add_loc_descr (&op0, new_loc_descr (DW_OP_plus_uconst, bias, 0));
11771 if (CONST_INT_P (XEXP (rtl, 1)))
11772 op1 = int_loc_descriptor ((unsigned HOST_WIDE_INT) bias
11773 + INTVAL (XEXP (rtl, 1)));
11774 else
11775 add_loc_descr (&op1, new_loc_descr (DW_OP_plus_uconst,
11776 bias, 0));
11778 return compare_loc_descriptor (op, op0, op1);
11781 /* Return location descriptor for {U,S}{MIN,MAX}. */
11783 static dw_loc_descr_ref
11784 minmax_loc_descriptor (rtx rtl, enum machine_mode mode,
11785 enum machine_mode mem_mode)
11787 enum dwarf_location_atom op;
11788 dw_loc_descr_ref op0, op1, ret;
11789 dw_loc_descr_ref bra_node, drop_node;
11791 if (dwarf_strict
11792 && (GET_MODE_CLASS (mode) != MODE_INT
11793 || GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE))
11794 return NULL;
11796 op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
11797 VAR_INIT_STATUS_INITIALIZED);
11798 op1 = mem_loc_descriptor (XEXP (rtl, 1), mode, mem_mode,
11799 VAR_INIT_STATUS_INITIALIZED);
11801 if (op0 == NULL || op1 == NULL)
11802 return NULL;
11804 add_loc_descr (&op0, new_loc_descr (DW_OP_dup, 0, 0));
11805 add_loc_descr (&op1, new_loc_descr (DW_OP_swap, 0, 0));
11806 add_loc_descr (&op1, new_loc_descr (DW_OP_over, 0, 0));
11807 if (GET_CODE (rtl) == UMIN || GET_CODE (rtl) == UMAX)
11809 if (GET_MODE_SIZE (mode) < DWARF2_ADDR_SIZE)
11811 HOST_WIDE_INT mask = GET_MODE_MASK (mode);
11812 add_loc_descr (&op0, int_loc_descriptor (mask));
11813 add_loc_descr (&op0, new_loc_descr (DW_OP_and, 0, 0));
11814 add_loc_descr (&op1, int_loc_descriptor (mask));
11815 add_loc_descr (&op1, new_loc_descr (DW_OP_and, 0, 0));
11817 else if (GET_MODE_SIZE (mode) == DWARF2_ADDR_SIZE)
11819 HOST_WIDE_INT bias = 1;
11820 bias <<= (DWARF2_ADDR_SIZE * BITS_PER_UNIT - 1);
11821 add_loc_descr (&op0, new_loc_descr (DW_OP_plus_uconst, bias, 0));
11822 add_loc_descr (&op1, new_loc_descr (DW_OP_plus_uconst, bias, 0));
11825 else if (GET_MODE_CLASS (mode) == MODE_INT
11826 && GET_MODE_SIZE (mode) < DWARF2_ADDR_SIZE)
11828 int shift = (DWARF2_ADDR_SIZE - GET_MODE_SIZE (mode)) * BITS_PER_UNIT;
11829 add_loc_descr (&op0, int_loc_descriptor (shift));
11830 add_loc_descr (&op0, new_loc_descr (DW_OP_shl, 0, 0));
11831 add_loc_descr (&op1, int_loc_descriptor (shift));
11832 add_loc_descr (&op1, new_loc_descr (DW_OP_shl, 0, 0));
11834 else if (GET_MODE_CLASS (mode) == MODE_INT
11835 && GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE)
11837 dw_die_ref type_die = base_type_for_mode (mode, 0);
11838 dw_loc_descr_ref cvt;
11839 if (type_die == NULL)
11840 return NULL;
11841 cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
11842 cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
11843 cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
11844 cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
11845 add_loc_descr (&op0, cvt);
11846 cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
11847 cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
11848 cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
11849 cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
11850 add_loc_descr (&op1, cvt);
11853 if (GET_CODE (rtl) == SMIN || GET_CODE (rtl) == UMIN)
11854 op = DW_OP_lt;
11855 else
11856 op = DW_OP_gt;
11857 ret = op0;
11858 add_loc_descr (&ret, op1);
11859 add_loc_descr (&ret, new_loc_descr (op, 0, 0));
11860 bra_node = new_loc_descr (DW_OP_bra, 0, 0);
11861 add_loc_descr (&ret, bra_node);
11862 add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
11863 drop_node = new_loc_descr (DW_OP_drop, 0, 0);
11864 add_loc_descr (&ret, drop_node);
11865 bra_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
11866 bra_node->dw_loc_oprnd1.v.val_loc = drop_node;
11867 if ((GET_CODE (rtl) == SMIN || GET_CODE (rtl) == SMAX)
11868 && GET_MODE_CLASS (mode) == MODE_INT
11869 && GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE)
11870 ret = convert_descriptor_to_mode (mode, ret);
11871 return ret;
11874 /* Helper function for mem_loc_descriptor. Perform OP binary op,
11875 but after converting arguments to type_die, afterwards
11876 convert back to unsigned. */
11878 static dw_loc_descr_ref
11879 typed_binop (enum dwarf_location_atom op, rtx rtl, dw_die_ref type_die,
11880 enum machine_mode mode, enum machine_mode mem_mode)
11882 dw_loc_descr_ref cvt, op0, op1;
11884 if (type_die == NULL)
11885 return NULL;
11886 op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
11887 VAR_INIT_STATUS_INITIALIZED);
11888 op1 = mem_loc_descriptor (XEXP (rtl, 1), mode, mem_mode,
11889 VAR_INIT_STATUS_INITIALIZED);
11890 if (op0 == NULL || op1 == NULL)
11891 return NULL;
11892 cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
11893 cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
11894 cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
11895 cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
11896 add_loc_descr (&op0, cvt);
11897 cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
11898 cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
11899 cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
11900 cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
11901 add_loc_descr (&op1, cvt);
11902 add_loc_descr (&op0, op1);
11903 add_loc_descr (&op0, new_loc_descr (op, 0, 0));
11904 return convert_descriptor_to_mode (mode, op0);
11907 /* CLZ (where constV is CLZ_DEFINED_VALUE_AT_ZERO computed value,
11908 const0 is DW_OP_lit0 or corresponding typed constant,
11909 const1 is DW_OP_lit1 or corresponding typed constant
11910 and constMSB is constant with just the MSB bit set
11911 for the mode):
11912 DW_OP_dup DW_OP_bra <L1> DW_OP_drop constV DW_OP_skip <L4>
11913 L1: const0 DW_OP_swap
11914 L2: DW_OP_dup constMSB DW_OP_and DW_OP_bra <L3> const1 DW_OP_shl
11915 DW_OP_swap DW_OP_plus_uconst <1> DW_OP_swap DW_OP_skip <L2>
11916 L3: DW_OP_drop
11917 L4: DW_OP_nop
11919 CTZ is similar:
11920 DW_OP_dup DW_OP_bra <L1> DW_OP_drop constV DW_OP_skip <L4>
11921 L1: const0 DW_OP_swap
11922 L2: DW_OP_dup const1 DW_OP_and DW_OP_bra <L3> const1 DW_OP_shr
11923 DW_OP_swap DW_OP_plus_uconst <1> DW_OP_swap DW_OP_skip <L2>
11924 L3: DW_OP_drop
11925 L4: DW_OP_nop
11927 FFS is similar:
11928 DW_OP_dup DW_OP_bra <L1> DW_OP_drop const0 DW_OP_skip <L4>
11929 L1: const1 DW_OP_swap
11930 L2: DW_OP_dup const1 DW_OP_and DW_OP_bra <L3> const1 DW_OP_shr
11931 DW_OP_swap DW_OP_plus_uconst <1> DW_OP_swap DW_OP_skip <L2>
11932 L3: DW_OP_drop
11933 L4: DW_OP_nop */
11935 static dw_loc_descr_ref
11936 clz_loc_descriptor (rtx rtl, enum machine_mode mode,
11937 enum machine_mode mem_mode)
11939 dw_loc_descr_ref op0, ret, tmp;
11940 HOST_WIDE_INT valv;
11941 dw_loc_descr_ref l1jump, l1label;
11942 dw_loc_descr_ref l2jump, l2label;
11943 dw_loc_descr_ref l3jump, l3label;
11944 dw_loc_descr_ref l4jump, l4label;
11945 rtx msb;
11947 if (GET_MODE_CLASS (mode) != MODE_INT
11948 || GET_MODE (XEXP (rtl, 0)) != mode)
11949 return NULL;
11951 op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
11952 VAR_INIT_STATUS_INITIALIZED);
11953 if (op0 == NULL)
11954 return NULL;
11955 ret = op0;
11956 if (GET_CODE (rtl) == CLZ)
11958 if (!CLZ_DEFINED_VALUE_AT_ZERO (mode, valv))
11959 valv = GET_MODE_BITSIZE (mode);
11961 else if (GET_CODE (rtl) == FFS)
11962 valv = 0;
11963 else if (!CTZ_DEFINED_VALUE_AT_ZERO (mode, valv))
11964 valv = GET_MODE_BITSIZE (mode);
11965 add_loc_descr (&ret, new_loc_descr (DW_OP_dup, 0, 0));
11966 l1jump = new_loc_descr (DW_OP_bra, 0, 0);
11967 add_loc_descr (&ret, l1jump);
11968 add_loc_descr (&ret, new_loc_descr (DW_OP_drop, 0, 0));
11969 tmp = mem_loc_descriptor (GEN_INT (valv), mode, mem_mode,
11970 VAR_INIT_STATUS_INITIALIZED);
11971 if (tmp == NULL)
11972 return NULL;
11973 add_loc_descr (&ret, tmp);
11974 l4jump = new_loc_descr (DW_OP_skip, 0, 0);
11975 add_loc_descr (&ret, l4jump);
11976 l1label = mem_loc_descriptor (GET_CODE (rtl) == FFS
11977 ? const1_rtx : const0_rtx,
11978 mode, mem_mode,
11979 VAR_INIT_STATUS_INITIALIZED);
11980 if (l1label == NULL)
11981 return NULL;
11982 add_loc_descr (&ret, l1label);
11983 add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
11984 l2label = new_loc_descr (DW_OP_dup, 0, 0);
11985 add_loc_descr (&ret, l2label);
11986 if (GET_CODE (rtl) != CLZ)
11987 msb = const1_rtx;
11988 else if (GET_MODE_BITSIZE (mode) <= HOST_BITS_PER_WIDE_INT)
11989 msb = GEN_INT ((unsigned HOST_WIDE_INT) 1
11990 << (GET_MODE_BITSIZE (mode) - 1));
11991 else
11992 msb = immed_wide_int_const
11993 (wi::set_bit_in_zero (GET_MODE_PRECISION (mode) - 1,
11994 GET_MODE_PRECISION (mode)), mode);
11995 if (GET_CODE (msb) == CONST_INT && INTVAL (msb) < 0)
11996 tmp = new_loc_descr (HOST_BITS_PER_WIDE_INT == 32
11997 ? DW_OP_const4u : HOST_BITS_PER_WIDE_INT == 64
11998 ? DW_OP_const8u : DW_OP_constu, INTVAL (msb), 0);
11999 else
12000 tmp = mem_loc_descriptor (msb, mode, mem_mode,
12001 VAR_INIT_STATUS_INITIALIZED);
12002 if (tmp == NULL)
12003 return NULL;
12004 add_loc_descr (&ret, tmp);
12005 add_loc_descr (&ret, new_loc_descr (DW_OP_and, 0, 0));
12006 l3jump = new_loc_descr (DW_OP_bra, 0, 0);
12007 add_loc_descr (&ret, l3jump);
12008 tmp = mem_loc_descriptor (const1_rtx, mode, mem_mode,
12009 VAR_INIT_STATUS_INITIALIZED);
12010 if (tmp == NULL)
12011 return NULL;
12012 add_loc_descr (&ret, tmp);
12013 add_loc_descr (&ret, new_loc_descr (GET_CODE (rtl) == CLZ
12014 ? DW_OP_shl : DW_OP_shr, 0, 0));
12015 add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
12016 add_loc_descr (&ret, new_loc_descr (DW_OP_plus_uconst, 1, 0));
12017 add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
12018 l2jump = new_loc_descr (DW_OP_skip, 0, 0);
12019 add_loc_descr (&ret, l2jump);
12020 l3label = new_loc_descr (DW_OP_drop, 0, 0);
12021 add_loc_descr (&ret, l3label);
12022 l4label = new_loc_descr (DW_OP_nop, 0, 0);
12023 add_loc_descr (&ret, l4label);
12024 l1jump->dw_loc_oprnd1.val_class = dw_val_class_loc;
12025 l1jump->dw_loc_oprnd1.v.val_loc = l1label;
12026 l2jump->dw_loc_oprnd1.val_class = dw_val_class_loc;
12027 l2jump->dw_loc_oprnd1.v.val_loc = l2label;
12028 l3jump->dw_loc_oprnd1.val_class = dw_val_class_loc;
12029 l3jump->dw_loc_oprnd1.v.val_loc = l3label;
12030 l4jump->dw_loc_oprnd1.val_class = dw_val_class_loc;
12031 l4jump->dw_loc_oprnd1.v.val_loc = l4label;
12032 return ret;
12035 /* POPCOUNT (const0 is DW_OP_lit0 or corresponding typed constant,
12036 const1 is DW_OP_lit1 or corresponding typed constant):
12037 const0 DW_OP_swap
12038 L1: DW_OP_dup DW_OP_bra <L2> DW_OP_dup DW_OP_rot const1 DW_OP_and
12039 DW_OP_plus DW_OP_swap const1 DW_OP_shr DW_OP_skip <L1>
12040 L2: DW_OP_drop
12042 PARITY is similar:
12043 L1: DW_OP_dup DW_OP_bra <L2> DW_OP_dup DW_OP_rot const1 DW_OP_and
12044 DW_OP_xor DW_OP_swap const1 DW_OP_shr DW_OP_skip <L1>
12045 L2: DW_OP_drop */
12047 static dw_loc_descr_ref
12048 popcount_loc_descriptor (rtx rtl, enum machine_mode mode,
12049 enum machine_mode mem_mode)
12051 dw_loc_descr_ref op0, ret, tmp;
12052 dw_loc_descr_ref l1jump, l1label;
12053 dw_loc_descr_ref l2jump, l2label;
12055 if (GET_MODE_CLASS (mode) != MODE_INT
12056 || GET_MODE (XEXP (rtl, 0)) != mode)
12057 return NULL;
12059 op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
12060 VAR_INIT_STATUS_INITIALIZED);
12061 if (op0 == NULL)
12062 return NULL;
12063 ret = op0;
12064 tmp = mem_loc_descriptor (const0_rtx, mode, mem_mode,
12065 VAR_INIT_STATUS_INITIALIZED);
12066 if (tmp == NULL)
12067 return NULL;
12068 add_loc_descr (&ret, tmp);
12069 add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
12070 l1label = new_loc_descr (DW_OP_dup, 0, 0);
12071 add_loc_descr (&ret, l1label);
12072 l2jump = new_loc_descr (DW_OP_bra, 0, 0);
12073 add_loc_descr (&ret, l2jump);
12074 add_loc_descr (&ret, new_loc_descr (DW_OP_dup, 0, 0));
12075 add_loc_descr (&ret, new_loc_descr (DW_OP_rot, 0, 0));
12076 tmp = mem_loc_descriptor (const1_rtx, mode, mem_mode,
12077 VAR_INIT_STATUS_INITIALIZED);
12078 if (tmp == NULL)
12079 return NULL;
12080 add_loc_descr (&ret, tmp);
12081 add_loc_descr (&ret, new_loc_descr (DW_OP_and, 0, 0));
12082 add_loc_descr (&ret, new_loc_descr (GET_CODE (rtl) == POPCOUNT
12083 ? DW_OP_plus : DW_OP_xor, 0, 0));
12084 add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
12085 tmp = mem_loc_descriptor (const1_rtx, mode, mem_mode,
12086 VAR_INIT_STATUS_INITIALIZED);
12087 add_loc_descr (&ret, tmp);
12088 add_loc_descr (&ret, new_loc_descr (DW_OP_shr, 0, 0));
12089 l1jump = new_loc_descr (DW_OP_skip, 0, 0);
12090 add_loc_descr (&ret, l1jump);
12091 l2label = new_loc_descr (DW_OP_drop, 0, 0);
12092 add_loc_descr (&ret, l2label);
12093 l1jump->dw_loc_oprnd1.val_class = dw_val_class_loc;
12094 l1jump->dw_loc_oprnd1.v.val_loc = l1label;
12095 l2jump->dw_loc_oprnd1.val_class = dw_val_class_loc;
12096 l2jump->dw_loc_oprnd1.v.val_loc = l2label;
12097 return ret;
12100 /* BSWAP (constS is initial shift count, either 56 or 24):
12101 constS const0
12102 L1: DW_OP_pick <2> constS DW_OP_pick <3> DW_OP_minus DW_OP_shr
12103 const255 DW_OP_and DW_OP_pick <2> DW_OP_shl DW_OP_or
12104 DW_OP_swap DW_OP_dup const0 DW_OP_eq DW_OP_bra <L2> const8
12105 DW_OP_minus DW_OP_swap DW_OP_skip <L1>
12106 L2: DW_OP_drop DW_OP_swap DW_OP_drop */
12108 static dw_loc_descr_ref
12109 bswap_loc_descriptor (rtx rtl, enum machine_mode mode,
12110 enum machine_mode mem_mode)
12112 dw_loc_descr_ref op0, ret, tmp;
12113 dw_loc_descr_ref l1jump, l1label;
12114 dw_loc_descr_ref l2jump, l2label;
12116 if (GET_MODE_CLASS (mode) != MODE_INT
12117 || BITS_PER_UNIT != 8
12118 || (GET_MODE_BITSIZE (mode) != 32
12119 && GET_MODE_BITSIZE (mode) != 64))
12120 return NULL;
12122 op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
12123 VAR_INIT_STATUS_INITIALIZED);
12124 if (op0 == NULL)
12125 return NULL;
12127 ret = op0;
12128 tmp = mem_loc_descriptor (GEN_INT (GET_MODE_BITSIZE (mode) - 8),
12129 mode, mem_mode,
12130 VAR_INIT_STATUS_INITIALIZED);
12131 if (tmp == NULL)
12132 return NULL;
12133 add_loc_descr (&ret, tmp);
12134 tmp = mem_loc_descriptor (const0_rtx, mode, mem_mode,
12135 VAR_INIT_STATUS_INITIALIZED);
12136 if (tmp == NULL)
12137 return NULL;
12138 add_loc_descr (&ret, tmp);
12139 l1label = new_loc_descr (DW_OP_pick, 2, 0);
12140 add_loc_descr (&ret, l1label);
12141 tmp = mem_loc_descriptor (GEN_INT (GET_MODE_BITSIZE (mode) - 8),
12142 mode, mem_mode,
12143 VAR_INIT_STATUS_INITIALIZED);
12144 add_loc_descr (&ret, tmp);
12145 add_loc_descr (&ret, new_loc_descr (DW_OP_pick, 3, 0));
12146 add_loc_descr (&ret, new_loc_descr (DW_OP_minus, 0, 0));
12147 add_loc_descr (&ret, new_loc_descr (DW_OP_shr, 0, 0));
12148 tmp = mem_loc_descriptor (GEN_INT (255), mode, mem_mode,
12149 VAR_INIT_STATUS_INITIALIZED);
12150 if (tmp == NULL)
12151 return NULL;
12152 add_loc_descr (&ret, tmp);
12153 add_loc_descr (&ret, new_loc_descr (DW_OP_and, 0, 0));
12154 add_loc_descr (&ret, new_loc_descr (DW_OP_pick, 2, 0));
12155 add_loc_descr (&ret, new_loc_descr (DW_OP_shl, 0, 0));
12156 add_loc_descr (&ret, new_loc_descr (DW_OP_or, 0, 0));
12157 add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
12158 add_loc_descr (&ret, new_loc_descr (DW_OP_dup, 0, 0));
12159 tmp = mem_loc_descriptor (const0_rtx, mode, mem_mode,
12160 VAR_INIT_STATUS_INITIALIZED);
12161 add_loc_descr (&ret, tmp);
12162 add_loc_descr (&ret, new_loc_descr (DW_OP_eq, 0, 0));
12163 l2jump = new_loc_descr (DW_OP_bra, 0, 0);
12164 add_loc_descr (&ret, l2jump);
12165 tmp = mem_loc_descriptor (GEN_INT (8), mode, mem_mode,
12166 VAR_INIT_STATUS_INITIALIZED);
12167 add_loc_descr (&ret, tmp);
12168 add_loc_descr (&ret, new_loc_descr (DW_OP_minus, 0, 0));
12169 add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
12170 l1jump = new_loc_descr (DW_OP_skip, 0, 0);
12171 add_loc_descr (&ret, l1jump);
12172 l2label = new_loc_descr (DW_OP_drop, 0, 0);
12173 add_loc_descr (&ret, l2label);
12174 add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
12175 add_loc_descr (&ret, new_loc_descr (DW_OP_drop, 0, 0));
12176 l1jump->dw_loc_oprnd1.val_class = dw_val_class_loc;
12177 l1jump->dw_loc_oprnd1.v.val_loc = l1label;
12178 l2jump->dw_loc_oprnd1.val_class = dw_val_class_loc;
12179 l2jump->dw_loc_oprnd1.v.val_loc = l2label;
12180 return ret;
12183 /* ROTATE (constMASK is mode mask, BITSIZE is bitsize of mode):
12184 DW_OP_over DW_OP_over DW_OP_shl [ constMASK DW_OP_and ] DW_OP_rot
12185 [ DW_OP_swap constMASK DW_OP_and DW_OP_swap ] DW_OP_neg
12186 DW_OP_plus_uconst <BITSIZE> DW_OP_shr DW_OP_or
12188 ROTATERT is similar:
12189 DW_OP_over DW_OP_over DW_OP_neg DW_OP_plus_uconst <BITSIZE>
12190 DW_OP_shl [ constMASK DW_OP_and ] DW_OP_rot
12191 [ DW_OP_swap constMASK DW_OP_and DW_OP_swap ] DW_OP_shr DW_OP_or */
12193 static dw_loc_descr_ref
12194 rotate_loc_descriptor (rtx rtl, enum machine_mode mode,
12195 enum machine_mode mem_mode)
12197 rtx rtlop1 = XEXP (rtl, 1);
12198 dw_loc_descr_ref op0, op1, ret, mask[2] = { NULL, NULL };
12199 int i;
12201 if (GET_MODE_CLASS (mode) != MODE_INT)
12202 return NULL;
12204 if (GET_MODE (rtlop1) != VOIDmode
12205 && GET_MODE_BITSIZE (GET_MODE (rtlop1)) < GET_MODE_BITSIZE (mode))
12206 rtlop1 = gen_rtx_ZERO_EXTEND (mode, rtlop1);
12207 op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
12208 VAR_INIT_STATUS_INITIALIZED);
12209 op1 = mem_loc_descriptor (rtlop1, mode, mem_mode,
12210 VAR_INIT_STATUS_INITIALIZED);
12211 if (op0 == NULL || op1 == NULL)
12212 return NULL;
12213 if (GET_MODE_SIZE (mode) < DWARF2_ADDR_SIZE)
12214 for (i = 0; i < 2; i++)
12216 if (GET_MODE_BITSIZE (mode) < HOST_BITS_PER_WIDE_INT)
12217 mask[i] = mem_loc_descriptor (GEN_INT (GET_MODE_MASK (mode)),
12218 mode, mem_mode,
12219 VAR_INIT_STATUS_INITIALIZED);
12220 else if (GET_MODE_BITSIZE (mode) == HOST_BITS_PER_WIDE_INT)
12221 mask[i] = new_loc_descr (HOST_BITS_PER_WIDE_INT == 32
12222 ? DW_OP_const4u
12223 : HOST_BITS_PER_WIDE_INT == 64
12224 ? DW_OP_const8u : DW_OP_constu,
12225 GET_MODE_MASK (mode), 0);
12226 else
12227 mask[i] = NULL;
12228 if (mask[i] == NULL)
12229 return NULL;
12230 add_loc_descr (&mask[i], new_loc_descr (DW_OP_and, 0, 0));
12232 ret = op0;
12233 add_loc_descr (&ret, op1);
12234 add_loc_descr (&ret, new_loc_descr (DW_OP_over, 0, 0));
12235 add_loc_descr (&ret, new_loc_descr (DW_OP_over, 0, 0));
12236 if (GET_CODE (rtl) == ROTATERT)
12238 add_loc_descr (&ret, new_loc_descr (DW_OP_neg, 0, 0));
12239 add_loc_descr (&ret, new_loc_descr (DW_OP_plus_uconst,
12240 GET_MODE_BITSIZE (mode), 0));
12242 add_loc_descr (&ret, new_loc_descr (DW_OP_shl, 0, 0));
12243 if (mask[0] != NULL)
12244 add_loc_descr (&ret, mask[0]);
12245 add_loc_descr (&ret, new_loc_descr (DW_OP_rot, 0, 0));
12246 if (mask[1] != NULL)
12248 add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
12249 add_loc_descr (&ret, mask[1]);
12250 add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
12252 if (GET_CODE (rtl) == ROTATE)
12254 add_loc_descr (&ret, new_loc_descr (DW_OP_neg, 0, 0));
12255 add_loc_descr (&ret, new_loc_descr (DW_OP_plus_uconst,
12256 GET_MODE_BITSIZE (mode), 0));
12258 add_loc_descr (&ret, new_loc_descr (DW_OP_shr, 0, 0));
12259 add_loc_descr (&ret, new_loc_descr (DW_OP_or, 0, 0));
12260 return ret;
12263 /* Helper function for mem_loc_descriptor. Return DW_OP_GNU_parameter_ref
12264 for DEBUG_PARAMETER_REF RTL. */
12266 static dw_loc_descr_ref
12267 parameter_ref_descriptor (rtx rtl)
12269 dw_loc_descr_ref ret;
12270 dw_die_ref ref;
12272 if (dwarf_strict)
12273 return NULL;
12274 gcc_assert (TREE_CODE (DEBUG_PARAMETER_REF_DECL (rtl)) == PARM_DECL);
12275 ref = lookup_decl_die (DEBUG_PARAMETER_REF_DECL (rtl));
12276 ret = new_loc_descr (DW_OP_GNU_parameter_ref, 0, 0);
12277 if (ref)
12279 ret->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
12280 ret->dw_loc_oprnd1.v.val_die_ref.die = ref;
12281 ret->dw_loc_oprnd1.v.val_die_ref.external = 0;
12283 else
12285 ret->dw_loc_oprnd1.val_class = dw_val_class_decl_ref;
12286 ret->dw_loc_oprnd1.v.val_decl_ref = DEBUG_PARAMETER_REF_DECL (rtl);
12288 return ret;
12291 /* The following routine converts the RTL for a variable or parameter
12292 (resident in memory) into an equivalent Dwarf representation of a
12293 mechanism for getting the address of that same variable onto the top of a
12294 hypothetical "address evaluation" stack.
12296 When creating memory location descriptors, we are effectively transforming
12297 the RTL for a memory-resident object into its Dwarf postfix expression
12298 equivalent. This routine recursively descends an RTL tree, turning
12299 it into Dwarf postfix code as it goes.
12301 MODE is the mode that should be assumed for the rtl if it is VOIDmode.
12303 MEM_MODE is the mode of the memory reference, needed to handle some
12304 autoincrement addressing modes.
12306 Return 0 if we can't represent the location. */
12308 dw_loc_descr_ref
12309 mem_loc_descriptor (rtx rtl, enum machine_mode mode,
12310 enum machine_mode mem_mode,
12311 enum var_init_status initialized)
12313 dw_loc_descr_ref mem_loc_result = NULL;
12314 enum dwarf_location_atom op;
12315 dw_loc_descr_ref op0, op1;
12316 rtx inner = NULL_RTX;
12318 if (mode == VOIDmode)
12319 mode = GET_MODE (rtl);
12321 /* Note that for a dynamically sized array, the location we will generate a
12322 description of here will be the lowest numbered location which is
12323 actually within the array. That's *not* necessarily the same as the
12324 zeroth element of the array. */
12326 rtl = targetm.delegitimize_address (rtl);
12328 if (mode != GET_MODE (rtl) && GET_MODE (rtl) != VOIDmode)
12329 return NULL;
12331 switch (GET_CODE (rtl))
12333 case POST_INC:
12334 case POST_DEC:
12335 case POST_MODIFY:
12336 return mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode, initialized);
12338 case SUBREG:
12339 /* The case of a subreg may arise when we have a local (register)
12340 variable or a formal (register) parameter which doesn't quite fill
12341 up an entire register. For now, just assume that it is
12342 legitimate to make the Dwarf info refer to the whole register which
12343 contains the given subreg. */
12344 if (!subreg_lowpart_p (rtl))
12345 break;
12346 inner = SUBREG_REG (rtl);
12347 case TRUNCATE:
12348 if (inner == NULL_RTX)
12349 inner = XEXP (rtl, 0);
12350 if (GET_MODE_CLASS (mode) == MODE_INT
12351 && GET_MODE_CLASS (GET_MODE (inner)) == MODE_INT
12352 && (GET_MODE_SIZE (mode) <= DWARF2_ADDR_SIZE
12353 #ifdef POINTERS_EXTEND_UNSIGNED
12354 || (mode == Pmode && mem_mode != VOIDmode)
12355 #endif
12357 && GET_MODE_SIZE (GET_MODE (inner)) <= DWARF2_ADDR_SIZE)
12359 mem_loc_result = mem_loc_descriptor (inner,
12360 GET_MODE (inner),
12361 mem_mode, initialized);
12362 break;
12364 if (dwarf_strict)
12365 break;
12366 if (GET_MODE_SIZE (mode) > GET_MODE_SIZE (GET_MODE (inner)))
12367 break;
12368 if (GET_MODE_SIZE (mode) != GET_MODE_SIZE (GET_MODE (inner))
12369 && (GET_MODE_CLASS (mode) != MODE_INT
12370 || GET_MODE_CLASS (GET_MODE (inner)) != MODE_INT))
12371 break;
12372 else
12374 dw_die_ref type_die;
12375 dw_loc_descr_ref cvt;
12377 mem_loc_result = mem_loc_descriptor (inner,
12378 GET_MODE (inner),
12379 mem_mode, initialized);
12380 if (mem_loc_result == NULL)
12381 break;
12382 type_die = base_type_for_mode (mode,
12383 GET_MODE_CLASS (mode) == MODE_INT);
12384 if (type_die == NULL)
12386 mem_loc_result = NULL;
12387 break;
12389 if (GET_MODE_SIZE (mode)
12390 != GET_MODE_SIZE (GET_MODE (inner)))
12391 cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
12392 else
12393 cvt = new_loc_descr (DW_OP_GNU_reinterpret, 0, 0);
12394 cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
12395 cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
12396 cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
12397 add_loc_descr (&mem_loc_result, cvt);
12399 break;
12401 case REG:
12402 if (GET_MODE_CLASS (mode) != MODE_INT
12403 || (GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE
12404 && rtl != arg_pointer_rtx
12405 && rtl != frame_pointer_rtx
12406 #ifdef POINTERS_EXTEND_UNSIGNED
12407 && (mode != Pmode || mem_mode == VOIDmode)
12408 #endif
12411 dw_die_ref type_die;
12412 unsigned int dbx_regnum;
12414 if (dwarf_strict)
12415 break;
12416 if (REGNO (rtl) > FIRST_PSEUDO_REGISTER)
12417 break;
12418 type_die = base_type_for_mode (mode,
12419 GET_MODE_CLASS (mode) == MODE_INT);
12420 if (type_die == NULL)
12421 break;
12423 dbx_regnum = dbx_reg_number (rtl);
12424 if (dbx_regnum == IGNORED_DWARF_REGNUM)
12425 break;
12426 mem_loc_result = new_loc_descr (DW_OP_GNU_regval_type,
12427 dbx_regnum, 0);
12428 mem_loc_result->dw_loc_oprnd2.val_class = dw_val_class_die_ref;
12429 mem_loc_result->dw_loc_oprnd2.v.val_die_ref.die = type_die;
12430 mem_loc_result->dw_loc_oprnd2.v.val_die_ref.external = 0;
12431 break;
12433 /* Whenever a register number forms a part of the description of the
12434 method for calculating the (dynamic) address of a memory resident
12435 object, DWARF rules require the register number be referred to as
12436 a "base register". This distinction is not based in any way upon
12437 what category of register the hardware believes the given register
12438 belongs to. This is strictly DWARF terminology we're dealing with
12439 here. Note that in cases where the location of a memory-resident
12440 data object could be expressed as: OP_ADD (OP_BASEREG (basereg),
12441 OP_CONST (0)) the actual DWARF location descriptor that we generate
12442 may just be OP_BASEREG (basereg). This may look deceptively like
12443 the object in question was allocated to a register (rather than in
12444 memory) so DWARF consumers need to be aware of the subtle
12445 distinction between OP_REG and OP_BASEREG. */
12446 if (REGNO (rtl) < FIRST_PSEUDO_REGISTER)
12447 mem_loc_result = based_loc_descr (rtl, 0, VAR_INIT_STATUS_INITIALIZED);
12448 else if (stack_realign_drap
12449 && crtl->drap_reg
12450 && crtl->args.internal_arg_pointer == rtl
12451 && REGNO (crtl->drap_reg) < FIRST_PSEUDO_REGISTER)
12453 /* If RTL is internal_arg_pointer, which has been optimized
12454 out, use DRAP instead. */
12455 mem_loc_result = based_loc_descr (crtl->drap_reg, 0,
12456 VAR_INIT_STATUS_INITIALIZED);
12458 break;
12460 case SIGN_EXTEND:
12461 case ZERO_EXTEND:
12462 if (GET_MODE_CLASS (mode) != MODE_INT)
12463 break;
12464 op0 = mem_loc_descriptor (XEXP (rtl, 0), GET_MODE (XEXP (rtl, 0)),
12465 mem_mode, VAR_INIT_STATUS_INITIALIZED);
12466 if (op0 == 0)
12467 break;
12468 else if (GET_CODE (rtl) == ZERO_EXTEND
12469 && GET_MODE_SIZE (mode) <= DWARF2_ADDR_SIZE
12470 && GET_MODE_BITSIZE (GET_MODE (XEXP (rtl, 0)))
12471 < HOST_BITS_PER_WIDE_INT
12472 /* If DW_OP_const{1,2,4}u won't be used, it is shorter
12473 to expand zero extend as two shifts instead of
12474 masking. */
12475 && GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0))) <= 4)
12477 enum machine_mode imode = GET_MODE (XEXP (rtl, 0));
12478 mem_loc_result = op0;
12479 add_loc_descr (&mem_loc_result,
12480 int_loc_descriptor (GET_MODE_MASK (imode)));
12481 add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_and, 0, 0));
12483 else if (GET_MODE_SIZE (mode) <= DWARF2_ADDR_SIZE)
12485 int shift = DWARF2_ADDR_SIZE
12486 - GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0)));
12487 shift *= BITS_PER_UNIT;
12488 if (GET_CODE (rtl) == SIGN_EXTEND)
12489 op = DW_OP_shra;
12490 else
12491 op = DW_OP_shr;
12492 mem_loc_result = op0;
12493 add_loc_descr (&mem_loc_result, int_loc_descriptor (shift));
12494 add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_shl, 0, 0));
12495 add_loc_descr (&mem_loc_result, int_loc_descriptor (shift));
12496 add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
12498 else if (!dwarf_strict)
12500 dw_die_ref type_die1, type_die2;
12501 dw_loc_descr_ref cvt;
12503 type_die1 = base_type_for_mode (GET_MODE (XEXP (rtl, 0)),
12504 GET_CODE (rtl) == ZERO_EXTEND);
12505 if (type_die1 == NULL)
12506 break;
12507 type_die2 = base_type_for_mode (mode, 1);
12508 if (type_die2 == NULL)
12509 break;
12510 mem_loc_result = op0;
12511 cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
12512 cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
12513 cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die1;
12514 cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
12515 add_loc_descr (&mem_loc_result, cvt);
12516 cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
12517 cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
12518 cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die2;
12519 cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
12520 add_loc_descr (&mem_loc_result, cvt);
12522 break;
12524 case MEM:
12526 rtx new_rtl = avoid_constant_pool_reference (rtl);
12527 if (new_rtl != rtl)
12529 mem_loc_result = mem_loc_descriptor (new_rtl, mode, mem_mode,
12530 initialized);
12531 if (mem_loc_result != NULL)
12532 return mem_loc_result;
12535 mem_loc_result = mem_loc_descriptor (XEXP (rtl, 0),
12536 get_address_mode (rtl), mode,
12537 VAR_INIT_STATUS_INITIALIZED);
12538 if (mem_loc_result == NULL)
12539 mem_loc_result = tls_mem_loc_descriptor (rtl);
12540 if (mem_loc_result != NULL)
12542 if (GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE
12543 || GET_MODE_CLASS (mode) != MODE_INT)
12545 dw_die_ref type_die;
12546 dw_loc_descr_ref deref;
12548 if (dwarf_strict)
12549 return NULL;
12550 type_die
12551 = base_type_for_mode (mode, GET_MODE_CLASS (mode) == MODE_INT);
12552 if (type_die == NULL)
12553 return NULL;
12554 deref = new_loc_descr (DW_OP_GNU_deref_type,
12555 GET_MODE_SIZE (mode), 0);
12556 deref->dw_loc_oprnd2.val_class = dw_val_class_die_ref;
12557 deref->dw_loc_oprnd2.v.val_die_ref.die = type_die;
12558 deref->dw_loc_oprnd2.v.val_die_ref.external = 0;
12559 add_loc_descr (&mem_loc_result, deref);
12561 else if (GET_MODE_SIZE (mode) == DWARF2_ADDR_SIZE)
12562 add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_deref, 0, 0));
12563 else
12564 add_loc_descr (&mem_loc_result,
12565 new_loc_descr (DW_OP_deref_size,
12566 GET_MODE_SIZE (mode), 0));
12568 break;
12570 case LO_SUM:
12571 return mem_loc_descriptor (XEXP (rtl, 1), mode, mem_mode, initialized);
12573 case LABEL_REF:
12574 /* Some ports can transform a symbol ref into a label ref, because
12575 the symbol ref is too far away and has to be dumped into a constant
12576 pool. */
12577 case CONST:
12578 case SYMBOL_REF:
12579 if ((GET_MODE_CLASS (mode) != MODE_INT
12580 && GET_MODE_CLASS (mode) != MODE_PARTIAL_INT)
12581 || (GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE
12582 #ifdef POINTERS_EXTEND_UNSIGNED
12583 && (mode != Pmode || mem_mode == VOIDmode)
12584 #endif
12586 break;
12587 if (GET_CODE (rtl) == SYMBOL_REF
12588 && SYMBOL_REF_TLS_MODEL (rtl) != TLS_MODEL_NONE)
12590 dw_loc_descr_ref temp;
12592 /* If this is not defined, we have no way to emit the data. */
12593 if (!targetm.have_tls || !targetm.asm_out.output_dwarf_dtprel)
12594 break;
12596 temp = new_addr_loc_descr (rtl, dtprel_true);
12598 mem_loc_result = new_loc_descr (DW_OP_GNU_push_tls_address, 0, 0);
12599 add_loc_descr (&mem_loc_result, temp);
12601 break;
12604 if (!const_ok_for_output (rtl))
12605 break;
12607 symref:
12608 mem_loc_result = new_addr_loc_descr (rtl, dtprel_false);
12609 vec_safe_push (used_rtx_array, rtl);
12610 break;
12612 case CONCAT:
12613 case CONCATN:
12614 case VAR_LOCATION:
12615 case DEBUG_IMPLICIT_PTR:
12616 expansion_failed (NULL_TREE, rtl,
12617 "CONCAT/CONCATN/VAR_LOCATION is handled only by loc_descriptor");
12618 return 0;
12620 case ENTRY_VALUE:
12621 if (dwarf_strict)
12622 return NULL;
12623 if (REG_P (ENTRY_VALUE_EXP (rtl)))
12625 if (GET_MODE_CLASS (mode) != MODE_INT
12626 || GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE)
12627 op0 = mem_loc_descriptor (ENTRY_VALUE_EXP (rtl), mode,
12628 VOIDmode, VAR_INIT_STATUS_INITIALIZED);
12629 else
12631 unsigned int dbx_regnum = dbx_reg_number (ENTRY_VALUE_EXP (rtl));
12632 if (dbx_regnum == IGNORED_DWARF_REGNUM)
12633 return NULL;
12634 op0 = one_reg_loc_descriptor (dbx_regnum,
12635 VAR_INIT_STATUS_INITIALIZED);
12638 else if (MEM_P (ENTRY_VALUE_EXP (rtl))
12639 && REG_P (XEXP (ENTRY_VALUE_EXP (rtl), 0)))
12641 op0 = mem_loc_descriptor (ENTRY_VALUE_EXP (rtl), mode,
12642 VOIDmode, VAR_INIT_STATUS_INITIALIZED);
12643 if (op0 && op0->dw_loc_opc == DW_OP_fbreg)
12644 return NULL;
12646 else
12647 gcc_unreachable ();
12648 if (op0 == NULL)
12649 return NULL;
12650 mem_loc_result = new_loc_descr (DW_OP_GNU_entry_value, 0, 0);
12651 mem_loc_result->dw_loc_oprnd1.val_class = dw_val_class_loc;
12652 mem_loc_result->dw_loc_oprnd1.v.val_loc = op0;
12653 break;
12655 case DEBUG_PARAMETER_REF:
12656 mem_loc_result = parameter_ref_descriptor (rtl);
12657 break;
12659 case PRE_MODIFY:
12660 /* Extract the PLUS expression nested inside and fall into
12661 PLUS code below. */
12662 rtl = XEXP (rtl, 1);
12663 goto plus;
12665 case PRE_INC:
12666 case PRE_DEC:
12667 /* Turn these into a PLUS expression and fall into the PLUS code
12668 below. */
12669 rtl = gen_rtx_PLUS (mode, XEXP (rtl, 0),
12670 gen_int_mode (GET_CODE (rtl) == PRE_INC
12671 ? GET_MODE_UNIT_SIZE (mem_mode)
12672 : -GET_MODE_UNIT_SIZE (mem_mode),
12673 mode));
12675 /* ... fall through ... */
12677 case PLUS:
12678 plus:
12679 if (is_based_loc (rtl)
12680 && (GET_MODE_SIZE (mode) <= DWARF2_ADDR_SIZE
12681 || XEXP (rtl, 0) == arg_pointer_rtx
12682 || XEXP (rtl, 0) == frame_pointer_rtx)
12683 && GET_MODE_CLASS (mode) == MODE_INT)
12684 mem_loc_result = based_loc_descr (XEXP (rtl, 0),
12685 INTVAL (XEXP (rtl, 1)),
12686 VAR_INIT_STATUS_INITIALIZED);
12687 else
12689 mem_loc_result = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
12690 VAR_INIT_STATUS_INITIALIZED);
12691 if (mem_loc_result == 0)
12692 break;
12694 if (CONST_INT_P (XEXP (rtl, 1))
12695 && GET_MODE_SIZE (mode) <= DWARF2_ADDR_SIZE)
12696 loc_descr_plus_const (&mem_loc_result, INTVAL (XEXP (rtl, 1)));
12697 else
12699 op1 = mem_loc_descriptor (XEXP (rtl, 1), mode, mem_mode,
12700 VAR_INIT_STATUS_INITIALIZED);
12701 if (op1 == 0)
12702 return NULL;
12703 add_loc_descr (&mem_loc_result, op1);
12704 add_loc_descr (&mem_loc_result,
12705 new_loc_descr (DW_OP_plus, 0, 0));
12708 break;
12710 /* If a pseudo-reg is optimized away, it is possible for it to
12711 be replaced with a MEM containing a multiply or shift. */
12712 case MINUS:
12713 op = DW_OP_minus;
12714 goto do_binop;
12716 case MULT:
12717 op = DW_OP_mul;
12718 goto do_binop;
12720 case DIV:
12721 if (!dwarf_strict
12722 && GET_MODE_CLASS (mode) == MODE_INT
12723 && GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE)
12725 mem_loc_result = typed_binop (DW_OP_div, rtl,
12726 base_type_for_mode (mode, 0),
12727 mode, mem_mode);
12728 break;
12730 op = DW_OP_div;
12731 goto do_binop;
12733 case UMOD:
12734 op = DW_OP_mod;
12735 goto do_binop;
12737 case ASHIFT:
12738 op = DW_OP_shl;
12739 goto do_shift;
12741 case ASHIFTRT:
12742 op = DW_OP_shra;
12743 goto do_shift;
12745 case LSHIFTRT:
12746 op = DW_OP_shr;
12747 goto do_shift;
12749 do_shift:
12750 if (GET_MODE_CLASS (mode) != MODE_INT)
12751 break;
12752 op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
12753 VAR_INIT_STATUS_INITIALIZED);
12755 rtx rtlop1 = XEXP (rtl, 1);
12756 if (GET_MODE (rtlop1) != VOIDmode
12757 && GET_MODE_BITSIZE (GET_MODE (rtlop1))
12758 < GET_MODE_BITSIZE (mode))
12759 rtlop1 = gen_rtx_ZERO_EXTEND (mode, rtlop1);
12760 op1 = mem_loc_descriptor (rtlop1, mode, mem_mode,
12761 VAR_INIT_STATUS_INITIALIZED);
12764 if (op0 == 0 || op1 == 0)
12765 break;
12767 mem_loc_result = op0;
12768 add_loc_descr (&mem_loc_result, op1);
12769 add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
12770 break;
12772 case AND:
12773 op = DW_OP_and;
12774 goto do_binop;
12776 case IOR:
12777 op = DW_OP_or;
12778 goto do_binop;
12780 case XOR:
12781 op = DW_OP_xor;
12782 goto do_binop;
12784 do_binop:
12785 op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
12786 VAR_INIT_STATUS_INITIALIZED);
12787 op1 = mem_loc_descriptor (XEXP (rtl, 1), mode, mem_mode,
12788 VAR_INIT_STATUS_INITIALIZED);
12790 if (op0 == 0 || op1 == 0)
12791 break;
12793 mem_loc_result = op0;
12794 add_loc_descr (&mem_loc_result, op1);
12795 add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
12796 break;
12798 case MOD:
12799 if (GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE && !dwarf_strict)
12801 mem_loc_result = typed_binop (DW_OP_mod, rtl,
12802 base_type_for_mode (mode, 0),
12803 mode, mem_mode);
12804 break;
12807 op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
12808 VAR_INIT_STATUS_INITIALIZED);
12809 op1 = mem_loc_descriptor (XEXP (rtl, 1), mode, mem_mode,
12810 VAR_INIT_STATUS_INITIALIZED);
12812 if (op0 == 0 || op1 == 0)
12813 break;
12815 mem_loc_result = op0;
12816 add_loc_descr (&mem_loc_result, op1);
12817 add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_over, 0, 0));
12818 add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_over, 0, 0));
12819 add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_div, 0, 0));
12820 add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_mul, 0, 0));
12821 add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_minus, 0, 0));
12822 break;
12824 case UDIV:
12825 if (!dwarf_strict && GET_MODE_CLASS (mode) == MODE_INT)
12827 if (GET_MODE_CLASS (mode) > DWARF2_ADDR_SIZE)
12829 op = DW_OP_div;
12830 goto do_binop;
12832 mem_loc_result = typed_binop (DW_OP_div, rtl,
12833 base_type_for_mode (mode, 1),
12834 mode, mem_mode);
12836 break;
12838 case NOT:
12839 op = DW_OP_not;
12840 goto do_unop;
12842 case ABS:
12843 op = DW_OP_abs;
12844 goto do_unop;
12846 case NEG:
12847 op = DW_OP_neg;
12848 goto do_unop;
12850 do_unop:
12851 op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
12852 VAR_INIT_STATUS_INITIALIZED);
12854 if (op0 == 0)
12855 break;
12857 mem_loc_result = op0;
12858 add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
12859 break;
12861 case CONST_INT:
12862 if (GET_MODE_SIZE (mode) <= DWARF2_ADDR_SIZE
12863 #ifdef POINTERS_EXTEND_UNSIGNED
12864 || (mode == Pmode
12865 && mem_mode != VOIDmode
12866 && trunc_int_for_mode (INTVAL (rtl), ptr_mode) == INTVAL (rtl))
12867 #endif
12870 mem_loc_result = int_loc_descriptor (INTVAL (rtl));
12871 break;
12873 if (!dwarf_strict
12874 && (GET_MODE_BITSIZE (mode) == HOST_BITS_PER_WIDE_INT
12875 || GET_MODE_BITSIZE (mode) == HOST_BITS_PER_DOUBLE_INT))
12877 dw_die_ref type_die = base_type_for_mode (mode, 1);
12878 enum machine_mode amode;
12879 if (type_die == NULL)
12880 return NULL;
12881 amode = mode_for_size (DWARF2_ADDR_SIZE * BITS_PER_UNIT,
12882 MODE_INT, 0);
12883 if (INTVAL (rtl) >= 0
12884 && amode != BLKmode
12885 && trunc_int_for_mode (INTVAL (rtl), amode) == INTVAL (rtl)
12886 /* const DW_OP_GNU_convert <XXX> vs.
12887 DW_OP_GNU_const_type <XXX, 1, const>. */
12888 && size_of_int_loc_descriptor (INTVAL (rtl)) + 1 + 1
12889 < (unsigned long) 1 + 1 + 1 + GET_MODE_SIZE (mode))
12891 mem_loc_result = int_loc_descriptor (INTVAL (rtl));
12892 op0 = new_loc_descr (DW_OP_GNU_convert, 0, 0);
12893 op0->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
12894 op0->dw_loc_oprnd1.v.val_die_ref.die = type_die;
12895 op0->dw_loc_oprnd1.v.val_die_ref.external = 0;
12896 add_loc_descr (&mem_loc_result, op0);
12897 return mem_loc_result;
12899 mem_loc_result = new_loc_descr (DW_OP_GNU_const_type, 0,
12900 INTVAL (rtl));
12901 mem_loc_result->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
12902 mem_loc_result->dw_loc_oprnd1.v.val_die_ref.die = type_die;
12903 mem_loc_result->dw_loc_oprnd1.v.val_die_ref.external = 0;
12904 if (GET_MODE_BITSIZE (mode) == HOST_BITS_PER_WIDE_INT)
12905 mem_loc_result->dw_loc_oprnd2.val_class = dw_val_class_const;
12906 else
12908 mem_loc_result->dw_loc_oprnd2.val_class
12909 = dw_val_class_const_double;
12910 mem_loc_result->dw_loc_oprnd2.v.val_double
12911 = double_int::from_shwi (INTVAL (rtl));
12914 break;
12916 case CONST_DOUBLE:
12917 if (!dwarf_strict)
12919 dw_die_ref type_die;
12921 /* Note that if TARGET_SUPPORTS_WIDE_INT == 0, a
12922 CONST_DOUBLE rtx could represent either a large integer
12923 or a floating-point constant. If TARGET_SUPPORTS_WIDE_INT != 0,
12924 the value is always a floating point constant.
12926 When it is an integer, a CONST_DOUBLE is used whenever
12927 the constant requires 2 HWIs to be adequately represented.
12928 We output CONST_DOUBLEs as blocks. */
12929 if (mode == VOIDmode
12930 || (GET_MODE (rtl) == VOIDmode
12931 && GET_MODE_BITSIZE (mode) != HOST_BITS_PER_DOUBLE_INT))
12932 break;
12933 type_die = base_type_for_mode (mode,
12934 GET_MODE_CLASS (mode) == MODE_INT);
12935 if (type_die == NULL)
12936 return NULL;
12937 mem_loc_result = new_loc_descr (DW_OP_GNU_const_type, 0, 0);
12938 mem_loc_result->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
12939 mem_loc_result->dw_loc_oprnd1.v.val_die_ref.die = type_die;
12940 mem_loc_result->dw_loc_oprnd1.v.val_die_ref.external = 0;
12941 #if TARGET_SUPPORTS_WIDE_INT == 0
12942 if (!SCALAR_FLOAT_MODE_P (mode))
12944 mem_loc_result->dw_loc_oprnd2.val_class
12945 = dw_val_class_const_double;
12946 mem_loc_result->dw_loc_oprnd2.v.val_double
12947 = rtx_to_double_int (rtl);
12949 else
12950 #endif
12952 unsigned int length = GET_MODE_SIZE (mode);
12953 unsigned char *array = ggc_vec_alloc<unsigned char> (length);
12955 insert_float (rtl, array);
12956 mem_loc_result->dw_loc_oprnd2.val_class = dw_val_class_vec;
12957 mem_loc_result->dw_loc_oprnd2.v.val_vec.length = length / 4;
12958 mem_loc_result->dw_loc_oprnd2.v.val_vec.elt_size = 4;
12959 mem_loc_result->dw_loc_oprnd2.v.val_vec.array = array;
12962 break;
12964 case CONST_WIDE_INT:
12965 if (!dwarf_strict)
12967 dw_die_ref type_die;
12969 type_die = base_type_for_mode (mode,
12970 GET_MODE_CLASS (mode) == MODE_INT);
12971 if (type_die == NULL)
12972 return NULL;
12973 mem_loc_result = new_loc_descr (DW_OP_GNU_const_type, 0, 0);
12974 mem_loc_result->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
12975 mem_loc_result->dw_loc_oprnd1.v.val_die_ref.die = type_die;
12976 mem_loc_result->dw_loc_oprnd1.v.val_die_ref.external = 0;
12977 mem_loc_result->dw_loc_oprnd2.val_class
12978 = dw_val_class_wide_int;
12979 mem_loc_result->dw_loc_oprnd2.v.val_wide = ggc_cleared_alloc<wide_int> ();
12980 *mem_loc_result->dw_loc_oprnd2.v.val_wide = std::make_pair (rtl, mode);
12982 break;
12984 case EQ:
12985 mem_loc_result = scompare_loc_descriptor (DW_OP_eq, rtl, mem_mode);
12986 break;
12988 case GE:
12989 mem_loc_result = scompare_loc_descriptor (DW_OP_ge, rtl, mem_mode);
12990 break;
12992 case GT:
12993 mem_loc_result = scompare_loc_descriptor (DW_OP_gt, rtl, mem_mode);
12994 break;
12996 case LE:
12997 mem_loc_result = scompare_loc_descriptor (DW_OP_le, rtl, mem_mode);
12998 break;
13000 case LT:
13001 mem_loc_result = scompare_loc_descriptor (DW_OP_lt, rtl, mem_mode);
13002 break;
13004 case NE:
13005 mem_loc_result = scompare_loc_descriptor (DW_OP_ne, rtl, mem_mode);
13006 break;
13008 case GEU:
13009 mem_loc_result = ucompare_loc_descriptor (DW_OP_ge, rtl, mem_mode);
13010 break;
13012 case GTU:
13013 mem_loc_result = ucompare_loc_descriptor (DW_OP_gt, rtl, mem_mode);
13014 break;
13016 case LEU:
13017 mem_loc_result = ucompare_loc_descriptor (DW_OP_le, rtl, mem_mode);
13018 break;
13020 case LTU:
13021 mem_loc_result = ucompare_loc_descriptor (DW_OP_lt, rtl, mem_mode);
13022 break;
13024 case UMIN:
13025 case UMAX:
13026 if (GET_MODE_CLASS (mode) != MODE_INT)
13027 break;
13028 /* FALLTHRU */
13029 case SMIN:
13030 case SMAX:
13031 mem_loc_result = minmax_loc_descriptor (rtl, mode, mem_mode);
13032 break;
13034 case ZERO_EXTRACT:
13035 case SIGN_EXTRACT:
13036 if (CONST_INT_P (XEXP (rtl, 1))
13037 && CONST_INT_P (XEXP (rtl, 2))
13038 && ((unsigned) INTVAL (XEXP (rtl, 1))
13039 + (unsigned) INTVAL (XEXP (rtl, 2))
13040 <= GET_MODE_BITSIZE (mode))
13041 && GET_MODE_CLASS (mode) == MODE_INT
13042 && GET_MODE_SIZE (mode) <= DWARF2_ADDR_SIZE
13043 && GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0))) <= DWARF2_ADDR_SIZE)
13045 int shift, size;
13046 op0 = mem_loc_descriptor (XEXP (rtl, 0), GET_MODE (XEXP (rtl, 0)),
13047 mem_mode, VAR_INIT_STATUS_INITIALIZED);
13048 if (op0 == 0)
13049 break;
13050 if (GET_CODE (rtl) == SIGN_EXTRACT)
13051 op = DW_OP_shra;
13052 else
13053 op = DW_OP_shr;
13054 mem_loc_result = op0;
13055 size = INTVAL (XEXP (rtl, 1));
13056 shift = INTVAL (XEXP (rtl, 2));
13057 if (BITS_BIG_ENDIAN)
13058 shift = GET_MODE_BITSIZE (GET_MODE (XEXP (rtl, 0)))
13059 - shift - size;
13060 if (shift + size != (int) DWARF2_ADDR_SIZE)
13062 add_loc_descr (&mem_loc_result,
13063 int_loc_descriptor (DWARF2_ADDR_SIZE
13064 - shift - size));
13065 add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_shl, 0, 0));
13067 if (size != (int) DWARF2_ADDR_SIZE)
13069 add_loc_descr (&mem_loc_result,
13070 int_loc_descriptor (DWARF2_ADDR_SIZE - size));
13071 add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
13074 break;
13076 case IF_THEN_ELSE:
13078 dw_loc_descr_ref op2, bra_node, drop_node;
13079 op0 = mem_loc_descriptor (XEXP (rtl, 0),
13080 GET_MODE (XEXP (rtl, 0)) == VOIDmode
13081 ? word_mode : GET_MODE (XEXP (rtl, 0)),
13082 mem_mode, VAR_INIT_STATUS_INITIALIZED);
13083 op1 = mem_loc_descriptor (XEXP (rtl, 1), mode, mem_mode,
13084 VAR_INIT_STATUS_INITIALIZED);
13085 op2 = mem_loc_descriptor (XEXP (rtl, 2), mode, mem_mode,
13086 VAR_INIT_STATUS_INITIALIZED);
13087 if (op0 == NULL || op1 == NULL || op2 == NULL)
13088 break;
13090 mem_loc_result = op1;
13091 add_loc_descr (&mem_loc_result, op2);
13092 add_loc_descr (&mem_loc_result, op0);
13093 bra_node = new_loc_descr (DW_OP_bra, 0, 0);
13094 add_loc_descr (&mem_loc_result, bra_node);
13095 add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_swap, 0, 0));
13096 drop_node = new_loc_descr (DW_OP_drop, 0, 0);
13097 add_loc_descr (&mem_loc_result, drop_node);
13098 bra_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
13099 bra_node->dw_loc_oprnd1.v.val_loc = drop_node;
13101 break;
13103 case FLOAT_EXTEND:
13104 case FLOAT_TRUNCATE:
13105 case FLOAT:
13106 case UNSIGNED_FLOAT:
13107 case FIX:
13108 case UNSIGNED_FIX:
13109 if (!dwarf_strict)
13111 dw_die_ref type_die;
13112 dw_loc_descr_ref cvt;
13114 op0 = mem_loc_descriptor (XEXP (rtl, 0), GET_MODE (XEXP (rtl, 0)),
13115 mem_mode, VAR_INIT_STATUS_INITIALIZED);
13116 if (op0 == NULL)
13117 break;
13118 if (GET_MODE_CLASS (GET_MODE (XEXP (rtl, 0))) == MODE_INT
13119 && (GET_CODE (rtl) == FLOAT
13120 || GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0)))
13121 <= DWARF2_ADDR_SIZE))
13123 type_die = base_type_for_mode (GET_MODE (XEXP (rtl, 0)),
13124 GET_CODE (rtl) == UNSIGNED_FLOAT);
13125 if (type_die == NULL)
13126 break;
13127 cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
13128 cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
13129 cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
13130 cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
13131 add_loc_descr (&op0, cvt);
13133 type_die = base_type_for_mode (mode, GET_CODE (rtl) == UNSIGNED_FIX);
13134 if (type_die == NULL)
13135 break;
13136 cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
13137 cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
13138 cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
13139 cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
13140 add_loc_descr (&op0, cvt);
13141 if (GET_MODE_CLASS (mode) == MODE_INT
13142 && (GET_CODE (rtl) == FIX
13143 || GET_MODE_SIZE (mode) < DWARF2_ADDR_SIZE))
13145 op0 = convert_descriptor_to_mode (mode, op0);
13146 if (op0 == NULL)
13147 break;
13149 mem_loc_result = op0;
13151 break;
13153 case CLZ:
13154 case CTZ:
13155 case FFS:
13156 mem_loc_result = clz_loc_descriptor (rtl, mode, mem_mode);
13157 break;
13159 case POPCOUNT:
13160 case PARITY:
13161 mem_loc_result = popcount_loc_descriptor (rtl, mode, mem_mode);
13162 break;
13164 case BSWAP:
13165 mem_loc_result = bswap_loc_descriptor (rtl, mode, mem_mode);
13166 break;
13168 case ROTATE:
13169 case ROTATERT:
13170 mem_loc_result = rotate_loc_descriptor (rtl, mode, mem_mode);
13171 break;
13173 case COMPARE:
13174 /* In theory, we could implement the above. */
13175 /* DWARF cannot represent the unsigned compare operations
13176 natively. */
13177 case SS_MULT:
13178 case US_MULT:
13179 case SS_DIV:
13180 case US_DIV:
13181 case SS_PLUS:
13182 case US_PLUS:
13183 case SS_MINUS:
13184 case US_MINUS:
13185 case SS_NEG:
13186 case US_NEG:
13187 case SS_ABS:
13188 case SS_ASHIFT:
13189 case US_ASHIFT:
13190 case SS_TRUNCATE:
13191 case US_TRUNCATE:
13192 case UNORDERED:
13193 case ORDERED:
13194 case UNEQ:
13195 case UNGE:
13196 case UNGT:
13197 case UNLE:
13198 case UNLT:
13199 case LTGT:
13200 case FRACT_CONVERT:
13201 case UNSIGNED_FRACT_CONVERT:
13202 case SAT_FRACT:
13203 case UNSIGNED_SAT_FRACT:
13204 case SQRT:
13205 case ASM_OPERANDS:
13206 case VEC_MERGE:
13207 case VEC_SELECT:
13208 case VEC_CONCAT:
13209 case VEC_DUPLICATE:
13210 case UNSPEC:
13211 case HIGH:
13212 case FMA:
13213 case STRICT_LOW_PART:
13214 case CONST_VECTOR:
13215 case CONST_FIXED:
13216 case CLRSB:
13217 case CLOBBER:
13218 /* If delegitimize_address couldn't do anything with the UNSPEC, we
13219 can't express it in the debug info. This can happen e.g. with some
13220 TLS UNSPECs. */
13221 break;
13223 case CONST_STRING:
13224 resolve_one_addr (&rtl);
13225 goto symref;
13227 default:
13228 #ifdef ENABLE_CHECKING
13229 print_rtl (stderr, rtl);
13230 gcc_unreachable ();
13231 #else
13232 break;
13233 #endif
13236 if (mem_loc_result && initialized == VAR_INIT_STATUS_UNINITIALIZED)
13237 add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
13239 return mem_loc_result;
13242 /* Return a descriptor that describes the concatenation of two locations.
13243 This is typically a complex variable. */
13245 static dw_loc_descr_ref
13246 concat_loc_descriptor (rtx x0, rtx x1, enum var_init_status initialized)
13248 dw_loc_descr_ref cc_loc_result = NULL;
13249 dw_loc_descr_ref x0_ref
13250 = loc_descriptor (x0, VOIDmode, VAR_INIT_STATUS_INITIALIZED);
13251 dw_loc_descr_ref x1_ref
13252 = loc_descriptor (x1, VOIDmode, VAR_INIT_STATUS_INITIALIZED);
13254 if (x0_ref == 0 || x1_ref == 0)
13255 return 0;
13257 cc_loc_result = x0_ref;
13258 add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x0)));
13260 add_loc_descr (&cc_loc_result, x1_ref);
13261 add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x1)));
13263 if (initialized == VAR_INIT_STATUS_UNINITIALIZED)
13264 add_loc_descr (&cc_loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
13266 return cc_loc_result;
13269 /* Return a descriptor that describes the concatenation of N
13270 locations. */
13272 static dw_loc_descr_ref
13273 concatn_loc_descriptor (rtx concatn, enum var_init_status initialized)
13275 unsigned int i;
13276 dw_loc_descr_ref cc_loc_result = NULL;
13277 unsigned int n = XVECLEN (concatn, 0);
13279 for (i = 0; i < n; ++i)
13281 dw_loc_descr_ref ref;
13282 rtx x = XVECEXP (concatn, 0, i);
13284 ref = loc_descriptor (x, VOIDmode, VAR_INIT_STATUS_INITIALIZED);
13285 if (ref == NULL)
13286 return NULL;
13288 add_loc_descr (&cc_loc_result, ref);
13289 add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x)));
13292 if (cc_loc_result && initialized == VAR_INIT_STATUS_UNINITIALIZED)
13293 add_loc_descr (&cc_loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
13295 return cc_loc_result;
13298 /* Helper function for loc_descriptor. Return DW_OP_GNU_implicit_pointer
13299 for DEBUG_IMPLICIT_PTR RTL. */
13301 static dw_loc_descr_ref
13302 implicit_ptr_descriptor (rtx rtl, HOST_WIDE_INT offset)
13304 dw_loc_descr_ref ret;
13305 dw_die_ref ref;
13307 if (dwarf_strict)
13308 return NULL;
13309 gcc_assert (TREE_CODE (DEBUG_IMPLICIT_PTR_DECL (rtl)) == VAR_DECL
13310 || TREE_CODE (DEBUG_IMPLICIT_PTR_DECL (rtl)) == PARM_DECL
13311 || TREE_CODE (DEBUG_IMPLICIT_PTR_DECL (rtl)) == RESULT_DECL);
13312 ref = lookup_decl_die (DEBUG_IMPLICIT_PTR_DECL (rtl));
13313 ret = new_loc_descr (DW_OP_GNU_implicit_pointer, 0, offset);
13314 ret->dw_loc_oprnd2.val_class = dw_val_class_const;
13315 if (ref)
13317 ret->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
13318 ret->dw_loc_oprnd1.v.val_die_ref.die = ref;
13319 ret->dw_loc_oprnd1.v.val_die_ref.external = 0;
13321 else
13323 ret->dw_loc_oprnd1.val_class = dw_val_class_decl_ref;
13324 ret->dw_loc_oprnd1.v.val_decl_ref = DEBUG_IMPLICIT_PTR_DECL (rtl);
13326 return ret;
13329 /* Output a proper Dwarf location descriptor for a variable or parameter
13330 which is either allocated in a register or in a memory location. For a
13331 register, we just generate an OP_REG and the register number. For a
13332 memory location we provide a Dwarf postfix expression describing how to
13333 generate the (dynamic) address of the object onto the address stack.
13335 MODE is mode of the decl if this loc_descriptor is going to be used in
13336 .debug_loc section where DW_OP_stack_value and DW_OP_implicit_value are
13337 allowed, VOIDmode otherwise.
13339 If we don't know how to describe it, return 0. */
13341 static dw_loc_descr_ref
13342 loc_descriptor (rtx rtl, enum machine_mode mode,
13343 enum var_init_status initialized)
13345 dw_loc_descr_ref loc_result = NULL;
13347 switch (GET_CODE (rtl))
13349 case SUBREG:
13350 /* The case of a subreg may arise when we have a local (register)
13351 variable or a formal (register) parameter which doesn't quite fill
13352 up an entire register. For now, just assume that it is
13353 legitimate to make the Dwarf info refer to the whole register which
13354 contains the given subreg. */
13355 if (REG_P (SUBREG_REG (rtl)) && subreg_lowpart_p (rtl))
13356 loc_result = loc_descriptor (SUBREG_REG (rtl),
13357 GET_MODE (SUBREG_REG (rtl)), initialized);
13358 else
13359 goto do_default;
13360 break;
13362 case REG:
13363 loc_result = reg_loc_descriptor (rtl, initialized);
13364 break;
13366 case MEM:
13367 loc_result = mem_loc_descriptor (XEXP (rtl, 0), get_address_mode (rtl),
13368 GET_MODE (rtl), initialized);
13369 if (loc_result == NULL)
13370 loc_result = tls_mem_loc_descriptor (rtl);
13371 if (loc_result == NULL)
13373 rtx new_rtl = avoid_constant_pool_reference (rtl);
13374 if (new_rtl != rtl)
13375 loc_result = loc_descriptor (new_rtl, mode, initialized);
13377 break;
13379 case CONCAT:
13380 loc_result = concat_loc_descriptor (XEXP (rtl, 0), XEXP (rtl, 1),
13381 initialized);
13382 break;
13384 case CONCATN:
13385 loc_result = concatn_loc_descriptor (rtl, initialized);
13386 break;
13388 case VAR_LOCATION:
13389 /* Single part. */
13390 if (GET_CODE (PAT_VAR_LOCATION_LOC (rtl)) != PARALLEL)
13392 rtx loc = PAT_VAR_LOCATION_LOC (rtl);
13393 if (GET_CODE (loc) == EXPR_LIST)
13394 loc = XEXP (loc, 0);
13395 loc_result = loc_descriptor (loc, mode, initialized);
13396 break;
13399 rtl = XEXP (rtl, 1);
13400 /* FALLTHRU */
13402 case PARALLEL:
13404 rtvec par_elems = XVEC (rtl, 0);
13405 int num_elem = GET_NUM_ELEM (par_elems);
13406 enum machine_mode mode;
13407 int i;
13409 /* Create the first one, so we have something to add to. */
13410 loc_result = loc_descriptor (XEXP (RTVEC_ELT (par_elems, 0), 0),
13411 VOIDmode, initialized);
13412 if (loc_result == NULL)
13413 return NULL;
13414 mode = GET_MODE (XEXP (RTVEC_ELT (par_elems, 0), 0));
13415 add_loc_descr_op_piece (&loc_result, GET_MODE_SIZE (mode));
13416 for (i = 1; i < num_elem; i++)
13418 dw_loc_descr_ref temp;
13420 temp = loc_descriptor (XEXP (RTVEC_ELT (par_elems, i), 0),
13421 VOIDmode, initialized);
13422 if (temp == NULL)
13423 return NULL;
13424 add_loc_descr (&loc_result, temp);
13425 mode = GET_MODE (XEXP (RTVEC_ELT (par_elems, i), 0));
13426 add_loc_descr_op_piece (&loc_result, GET_MODE_SIZE (mode));
13429 break;
13431 case CONST_INT:
13432 if (mode != VOIDmode && mode != BLKmode)
13433 loc_result = address_of_int_loc_descriptor (GET_MODE_SIZE (mode),
13434 INTVAL (rtl));
13435 break;
13437 case CONST_DOUBLE:
13438 if (mode == VOIDmode)
13439 mode = GET_MODE (rtl);
13441 if (mode != VOIDmode && (dwarf_version >= 4 || !dwarf_strict))
13443 gcc_assert (mode == GET_MODE (rtl) || VOIDmode == GET_MODE (rtl));
13445 /* Note that a CONST_DOUBLE rtx could represent either an integer
13446 or a floating-point constant. A CONST_DOUBLE is used whenever
13447 the constant requires more than one word in order to be
13448 adequately represented. We output CONST_DOUBLEs as blocks. */
13449 loc_result = new_loc_descr (DW_OP_implicit_value,
13450 GET_MODE_SIZE (mode), 0);
13451 #if TARGET_SUPPORTS_WIDE_INT == 0
13452 if (!SCALAR_FLOAT_MODE_P (mode))
13454 loc_result->dw_loc_oprnd2.val_class = dw_val_class_const_double;
13455 loc_result->dw_loc_oprnd2.v.val_double
13456 = rtx_to_double_int (rtl);
13458 else
13459 #endif
13461 unsigned int length = GET_MODE_SIZE (mode);
13462 unsigned char *array = ggc_vec_alloc<unsigned char> (length);
13464 insert_float (rtl, array);
13465 loc_result->dw_loc_oprnd2.val_class = dw_val_class_vec;
13466 loc_result->dw_loc_oprnd2.v.val_vec.length = length / 4;
13467 loc_result->dw_loc_oprnd2.v.val_vec.elt_size = 4;
13468 loc_result->dw_loc_oprnd2.v.val_vec.array = array;
13471 break;
13473 case CONST_WIDE_INT:
13474 if (mode == VOIDmode)
13475 mode = GET_MODE (rtl);
13477 if (mode != VOIDmode && (dwarf_version >= 4 || !dwarf_strict))
13479 loc_result = new_loc_descr (DW_OP_implicit_value,
13480 GET_MODE_SIZE (mode), 0);
13481 loc_result->dw_loc_oprnd2.val_class = dw_val_class_wide_int;
13482 loc_result->dw_loc_oprnd2.v.val_wide = ggc_cleared_alloc<wide_int> ();
13483 *loc_result->dw_loc_oprnd2.v.val_wide = std::make_pair (rtl, mode);
13485 break;
13487 case CONST_VECTOR:
13488 if (mode == VOIDmode)
13489 mode = GET_MODE (rtl);
13491 if (mode != VOIDmode && (dwarf_version >= 4 || !dwarf_strict))
13493 unsigned int elt_size = GET_MODE_UNIT_SIZE (GET_MODE (rtl));
13494 unsigned int length = CONST_VECTOR_NUNITS (rtl);
13495 unsigned char *array
13496 = ggc_vec_alloc<unsigned char> (length * elt_size);
13497 unsigned int i;
13498 unsigned char *p;
13499 enum machine_mode imode = GET_MODE_INNER (mode);
13501 gcc_assert (mode == GET_MODE (rtl) || VOIDmode == GET_MODE (rtl));
13502 switch (GET_MODE_CLASS (mode))
13504 case MODE_VECTOR_INT:
13505 for (i = 0, p = array; i < length; i++, p += elt_size)
13507 rtx elt = CONST_VECTOR_ELT (rtl, i);
13508 insert_wide_int (std::make_pair (elt, imode), p, elt_size);
13510 break;
13512 case MODE_VECTOR_FLOAT:
13513 for (i = 0, p = array; i < length; i++, p += elt_size)
13515 rtx elt = CONST_VECTOR_ELT (rtl, i);
13516 insert_float (elt, p);
13518 break;
13520 default:
13521 gcc_unreachable ();
13524 loc_result = new_loc_descr (DW_OP_implicit_value,
13525 length * elt_size, 0);
13526 loc_result->dw_loc_oprnd2.val_class = dw_val_class_vec;
13527 loc_result->dw_loc_oprnd2.v.val_vec.length = length;
13528 loc_result->dw_loc_oprnd2.v.val_vec.elt_size = elt_size;
13529 loc_result->dw_loc_oprnd2.v.val_vec.array = array;
13531 break;
13533 case CONST:
13534 if (mode == VOIDmode
13535 || CONST_SCALAR_INT_P (XEXP (rtl, 0))
13536 || CONST_DOUBLE_AS_FLOAT_P (XEXP (rtl, 0))
13537 || GET_CODE (XEXP (rtl, 0)) == CONST_VECTOR)
13539 loc_result = loc_descriptor (XEXP (rtl, 0), mode, initialized);
13540 break;
13542 /* FALLTHROUGH */
13543 case SYMBOL_REF:
13544 if (!const_ok_for_output (rtl))
13545 break;
13546 case LABEL_REF:
13547 if (mode != VOIDmode && GET_MODE_SIZE (mode) == DWARF2_ADDR_SIZE
13548 && (dwarf_version >= 4 || !dwarf_strict))
13550 loc_result = new_addr_loc_descr (rtl, dtprel_false);
13551 add_loc_descr (&loc_result, new_loc_descr (DW_OP_stack_value, 0, 0));
13552 vec_safe_push (used_rtx_array, rtl);
13554 break;
13556 case DEBUG_IMPLICIT_PTR:
13557 loc_result = implicit_ptr_descriptor (rtl, 0);
13558 break;
13560 case PLUS:
13561 if (GET_CODE (XEXP (rtl, 0)) == DEBUG_IMPLICIT_PTR
13562 && CONST_INT_P (XEXP (rtl, 1)))
13564 loc_result
13565 = implicit_ptr_descriptor (XEXP (rtl, 0), INTVAL (XEXP (rtl, 1)));
13566 break;
13568 /* FALLTHRU */
13569 do_default:
13570 default:
13571 if ((GET_MODE_CLASS (mode) == MODE_INT && GET_MODE (rtl) == mode
13572 && GET_MODE_SIZE (GET_MODE (rtl)) <= DWARF2_ADDR_SIZE
13573 && dwarf_version >= 4)
13574 || (!dwarf_strict && mode != VOIDmode && mode != BLKmode))
13576 /* Value expression. */
13577 loc_result = mem_loc_descriptor (rtl, mode, VOIDmode, initialized);
13578 if (loc_result)
13579 add_loc_descr (&loc_result,
13580 new_loc_descr (DW_OP_stack_value, 0, 0));
13582 break;
13585 return loc_result;
13588 /* We need to figure out what section we should use as the base for the
13589 address ranges where a given location is valid.
13590 1. If this particular DECL has a section associated with it, use that.
13591 2. If this function has a section associated with it, use that.
13592 3. Otherwise, use the text section.
13593 XXX: If you split a variable across multiple sections, we won't notice. */
13595 static const char *
13596 secname_for_decl (const_tree decl)
13598 const char *secname;
13600 if (VAR_OR_FUNCTION_DECL_P (decl)
13601 && (DECL_EXTERNAL (decl) || TREE_PUBLIC (decl) || TREE_STATIC (decl))
13602 && DECL_SECTION_NAME (decl))
13603 secname = DECL_SECTION_NAME (decl);
13604 else if (current_function_decl && DECL_SECTION_NAME (current_function_decl))
13605 secname = DECL_SECTION_NAME (current_function_decl);
13606 else if (cfun && in_cold_section_p)
13607 secname = crtl->subsections.cold_section_label;
13608 else
13609 secname = text_section_label;
13611 return secname;
13614 /* Return true when DECL_BY_REFERENCE is defined and set for DECL. */
13616 static bool
13617 decl_by_reference_p (tree decl)
13619 return ((TREE_CODE (decl) == PARM_DECL || TREE_CODE (decl) == RESULT_DECL
13620 || TREE_CODE (decl) == VAR_DECL)
13621 && DECL_BY_REFERENCE (decl));
13624 /* Helper function for dw_loc_list. Compute proper Dwarf location descriptor
13625 for VARLOC. */
13627 static dw_loc_descr_ref
13628 dw_loc_list_1 (tree loc, rtx varloc, int want_address,
13629 enum var_init_status initialized)
13631 int have_address = 0;
13632 dw_loc_descr_ref descr;
13633 enum machine_mode mode;
13635 if (want_address != 2)
13637 gcc_assert (GET_CODE (varloc) == VAR_LOCATION);
13638 /* Single part. */
13639 if (GET_CODE (PAT_VAR_LOCATION_LOC (varloc)) != PARALLEL)
13641 varloc = PAT_VAR_LOCATION_LOC (varloc);
13642 if (GET_CODE (varloc) == EXPR_LIST)
13643 varloc = XEXP (varloc, 0);
13644 mode = GET_MODE (varloc);
13645 if (MEM_P (varloc))
13647 rtx addr = XEXP (varloc, 0);
13648 descr = mem_loc_descriptor (addr, get_address_mode (varloc),
13649 mode, initialized);
13650 if (descr)
13651 have_address = 1;
13652 else
13654 rtx x = avoid_constant_pool_reference (varloc);
13655 if (x != varloc)
13656 descr = mem_loc_descriptor (x, mode, VOIDmode,
13657 initialized);
13660 else
13661 descr = mem_loc_descriptor (varloc, mode, VOIDmode, initialized);
13663 else
13664 return 0;
13666 else
13668 if (GET_CODE (varloc) == VAR_LOCATION)
13669 mode = DECL_MODE (PAT_VAR_LOCATION_DECL (varloc));
13670 else
13671 mode = DECL_MODE (loc);
13672 descr = loc_descriptor (varloc, mode, initialized);
13673 have_address = 1;
13676 if (!descr)
13677 return 0;
13679 if (want_address == 2 && !have_address
13680 && (dwarf_version >= 4 || !dwarf_strict))
13682 if (int_size_in_bytes (TREE_TYPE (loc)) > DWARF2_ADDR_SIZE)
13684 expansion_failed (loc, NULL_RTX,
13685 "DWARF address size mismatch");
13686 return 0;
13688 add_loc_descr (&descr, new_loc_descr (DW_OP_stack_value, 0, 0));
13689 have_address = 1;
13691 /* Show if we can't fill the request for an address. */
13692 if (want_address && !have_address)
13694 expansion_failed (loc, NULL_RTX,
13695 "Want address and only have value");
13696 return 0;
13699 /* If we've got an address and don't want one, dereference. */
13700 if (!want_address && have_address)
13702 HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (loc));
13703 enum dwarf_location_atom op;
13705 if (size > DWARF2_ADDR_SIZE || size == -1)
13707 expansion_failed (loc, NULL_RTX,
13708 "DWARF address size mismatch");
13709 return 0;
13711 else if (size == DWARF2_ADDR_SIZE)
13712 op = DW_OP_deref;
13713 else
13714 op = DW_OP_deref_size;
13716 add_loc_descr (&descr, new_loc_descr (op, size, 0));
13719 return descr;
13722 /* Create a DW_OP_piece or DW_OP_bit_piece for bitsize, or return NULL
13723 if it is not possible. */
13725 static dw_loc_descr_ref
13726 new_loc_descr_op_bit_piece (HOST_WIDE_INT bitsize, HOST_WIDE_INT offset)
13728 if ((bitsize % BITS_PER_UNIT) == 0 && offset == 0)
13729 return new_loc_descr (DW_OP_piece, bitsize / BITS_PER_UNIT, 0);
13730 else if (dwarf_version >= 3 || !dwarf_strict)
13731 return new_loc_descr (DW_OP_bit_piece, bitsize, offset);
13732 else
13733 return NULL;
13736 /* Helper function for dw_loc_list. Compute proper Dwarf location descriptor
13737 for VAR_LOC_NOTE for variable DECL that has been optimized by SRA. */
13739 static dw_loc_descr_ref
13740 dw_sra_loc_expr (tree decl, rtx loc)
13742 rtx p;
13743 unsigned int padsize = 0;
13744 dw_loc_descr_ref descr, *descr_tail;
13745 unsigned HOST_WIDE_INT decl_size;
13746 rtx varloc;
13747 enum var_init_status initialized;
13749 if (DECL_SIZE (decl) == NULL
13750 || !tree_fits_uhwi_p (DECL_SIZE (decl)))
13751 return NULL;
13753 decl_size = tree_to_uhwi (DECL_SIZE (decl));
13754 descr = NULL;
13755 descr_tail = &descr;
13757 for (p = loc; p; p = XEXP (p, 1))
13759 unsigned int bitsize = decl_piece_bitsize (p);
13760 rtx loc_note = *decl_piece_varloc_ptr (p);
13761 dw_loc_descr_ref cur_descr;
13762 dw_loc_descr_ref *tail, last = NULL;
13763 unsigned int opsize = 0;
13765 if (loc_note == NULL_RTX
13766 || NOTE_VAR_LOCATION_LOC (loc_note) == NULL_RTX)
13768 padsize += bitsize;
13769 continue;
13771 initialized = NOTE_VAR_LOCATION_STATUS (loc_note);
13772 varloc = NOTE_VAR_LOCATION (loc_note);
13773 cur_descr = dw_loc_list_1 (decl, varloc, 2, initialized);
13774 if (cur_descr == NULL)
13776 padsize += bitsize;
13777 continue;
13780 /* Check that cur_descr either doesn't use
13781 DW_OP_*piece operations, or their sum is equal
13782 to bitsize. Otherwise we can't embed it. */
13783 for (tail = &cur_descr; *tail != NULL;
13784 tail = &(*tail)->dw_loc_next)
13785 if ((*tail)->dw_loc_opc == DW_OP_piece)
13787 opsize += (*tail)->dw_loc_oprnd1.v.val_unsigned
13788 * BITS_PER_UNIT;
13789 last = *tail;
13791 else if ((*tail)->dw_loc_opc == DW_OP_bit_piece)
13793 opsize += (*tail)->dw_loc_oprnd1.v.val_unsigned;
13794 last = *tail;
13797 if (last != NULL && opsize != bitsize)
13799 padsize += bitsize;
13800 /* Discard the current piece of the descriptor and release any
13801 addr_table entries it uses. */
13802 remove_loc_list_addr_table_entries (cur_descr);
13803 continue;
13806 /* If there is a hole, add DW_OP_*piece after empty DWARF
13807 expression, which means that those bits are optimized out. */
13808 if (padsize)
13810 if (padsize > decl_size)
13812 remove_loc_list_addr_table_entries (cur_descr);
13813 goto discard_descr;
13815 decl_size -= padsize;
13816 *descr_tail = new_loc_descr_op_bit_piece (padsize, 0);
13817 if (*descr_tail == NULL)
13819 remove_loc_list_addr_table_entries (cur_descr);
13820 goto discard_descr;
13822 descr_tail = &(*descr_tail)->dw_loc_next;
13823 padsize = 0;
13825 *descr_tail = cur_descr;
13826 descr_tail = tail;
13827 if (bitsize > decl_size)
13828 goto discard_descr;
13829 decl_size -= bitsize;
13830 if (last == NULL)
13832 HOST_WIDE_INT offset = 0;
13833 if (GET_CODE (varloc) == VAR_LOCATION
13834 && GET_CODE (PAT_VAR_LOCATION_LOC (varloc)) != PARALLEL)
13836 varloc = PAT_VAR_LOCATION_LOC (varloc);
13837 if (GET_CODE (varloc) == EXPR_LIST)
13838 varloc = XEXP (varloc, 0);
13842 if (GET_CODE (varloc) == CONST
13843 || GET_CODE (varloc) == SIGN_EXTEND
13844 || GET_CODE (varloc) == ZERO_EXTEND)
13845 varloc = XEXP (varloc, 0);
13846 else if (GET_CODE (varloc) == SUBREG)
13847 varloc = SUBREG_REG (varloc);
13848 else
13849 break;
13851 while (1);
13852 /* DW_OP_bit_size offset should be zero for register
13853 or implicit location descriptions and empty location
13854 descriptions, but for memory addresses needs big endian
13855 adjustment. */
13856 if (MEM_P (varloc))
13858 unsigned HOST_WIDE_INT memsize
13859 = MEM_SIZE (varloc) * BITS_PER_UNIT;
13860 if (memsize != bitsize)
13862 if (BYTES_BIG_ENDIAN != WORDS_BIG_ENDIAN
13863 && (memsize > BITS_PER_WORD || bitsize > BITS_PER_WORD))
13864 goto discard_descr;
13865 if (memsize < bitsize)
13866 goto discard_descr;
13867 if (BITS_BIG_ENDIAN)
13868 offset = memsize - bitsize;
13872 *descr_tail = new_loc_descr_op_bit_piece (bitsize, offset);
13873 if (*descr_tail == NULL)
13874 goto discard_descr;
13875 descr_tail = &(*descr_tail)->dw_loc_next;
13879 /* If there were any non-empty expressions, add padding till the end of
13880 the decl. */
13881 if (descr != NULL && decl_size != 0)
13883 *descr_tail = new_loc_descr_op_bit_piece (decl_size, 0);
13884 if (*descr_tail == NULL)
13885 goto discard_descr;
13887 return descr;
13889 discard_descr:
13890 /* Discard the descriptor and release any addr_table entries it uses. */
13891 remove_loc_list_addr_table_entries (descr);
13892 return NULL;
13895 /* Return the dwarf representation of the location list LOC_LIST of
13896 DECL. WANT_ADDRESS has the same meaning as in loc_list_from_tree
13897 function. */
13899 static dw_loc_list_ref
13900 dw_loc_list (var_loc_list *loc_list, tree decl, int want_address)
13902 const char *endname, *secname;
13903 rtx varloc;
13904 enum var_init_status initialized;
13905 struct var_loc_node *node;
13906 dw_loc_descr_ref descr;
13907 char label_id[MAX_ARTIFICIAL_LABEL_BYTES];
13908 dw_loc_list_ref list = NULL;
13909 dw_loc_list_ref *listp = &list;
13911 /* Now that we know what section we are using for a base,
13912 actually construct the list of locations.
13913 The first location information is what is passed to the
13914 function that creates the location list, and the remaining
13915 locations just get added on to that list.
13916 Note that we only know the start address for a location
13917 (IE location changes), so to build the range, we use
13918 the range [current location start, next location start].
13919 This means we have to special case the last node, and generate
13920 a range of [last location start, end of function label]. */
13922 secname = secname_for_decl (decl);
13924 for (node = loc_list->first; node; node = node->next)
13925 if (GET_CODE (node->loc) == EXPR_LIST
13926 || NOTE_VAR_LOCATION_LOC (node->loc) != NULL_RTX)
13928 if (GET_CODE (node->loc) == EXPR_LIST)
13930 /* This requires DW_OP_{,bit_}piece, which is not usable
13931 inside DWARF expressions. */
13932 if (want_address != 2)
13933 continue;
13934 descr = dw_sra_loc_expr (decl, node->loc);
13935 if (descr == NULL)
13936 continue;
13938 else
13940 initialized = NOTE_VAR_LOCATION_STATUS (node->loc);
13941 varloc = NOTE_VAR_LOCATION (node->loc);
13942 descr = dw_loc_list_1 (decl, varloc, want_address, initialized);
13944 if (descr)
13946 bool range_across_switch = false;
13947 /* If section switch happens in between node->label
13948 and node->next->label (or end of function) and
13949 we can't emit it as a single entry list,
13950 emit two ranges, first one ending at the end
13951 of first partition and second one starting at the
13952 beginning of second partition. */
13953 if (node == loc_list->last_before_switch
13954 && (node != loc_list->first || loc_list->first->next)
13955 && current_function_decl)
13957 endname = cfun->fde->dw_fde_end;
13958 range_across_switch = true;
13960 /* The variable has a location between NODE->LABEL and
13961 NODE->NEXT->LABEL. */
13962 else if (node->next)
13963 endname = node->next->label;
13964 /* If the variable has a location at the last label
13965 it keeps its location until the end of function. */
13966 else if (!current_function_decl)
13967 endname = text_end_label;
13968 else
13970 ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_END_LABEL,
13971 current_function_funcdef_no);
13972 endname = ggc_strdup (label_id);
13975 *listp = new_loc_list (descr, node->label, endname, secname);
13976 if (TREE_CODE (decl) == PARM_DECL
13977 && node == loc_list->first
13978 && NOTE_P (node->loc)
13979 && strcmp (node->label, endname) == 0)
13980 (*listp)->force = true;
13981 listp = &(*listp)->dw_loc_next;
13983 if (range_across_switch)
13985 if (GET_CODE (node->loc) == EXPR_LIST)
13986 descr = dw_sra_loc_expr (decl, node->loc);
13987 else
13989 initialized = NOTE_VAR_LOCATION_STATUS (node->loc);
13990 varloc = NOTE_VAR_LOCATION (node->loc);
13991 descr = dw_loc_list_1 (decl, varloc, want_address,
13992 initialized);
13994 gcc_assert (descr);
13995 /* The variable has a location between NODE->LABEL and
13996 NODE->NEXT->LABEL. */
13997 if (node->next)
13998 endname = node->next->label;
13999 else
14000 endname = cfun->fde->dw_fde_second_end;
14001 *listp = new_loc_list (descr,
14002 cfun->fde->dw_fde_second_begin,
14003 endname, secname);
14004 listp = &(*listp)->dw_loc_next;
14009 /* Try to avoid the overhead of a location list emitting a location
14010 expression instead, but only if we didn't have more than one
14011 location entry in the first place. If some entries were not
14012 representable, we don't want to pretend a single entry that was
14013 applies to the entire scope in which the variable is
14014 available. */
14015 if (list && loc_list->first->next)
14016 gen_llsym (list);
14018 return list;
14021 /* Return if the loc_list has only single element and thus can be represented
14022 as location description. */
14024 static bool
14025 single_element_loc_list_p (dw_loc_list_ref list)
14027 gcc_assert (!list->dw_loc_next || list->ll_symbol);
14028 return !list->ll_symbol;
14031 /* To each location in list LIST add loc descr REF. */
14033 static void
14034 add_loc_descr_to_each (dw_loc_list_ref list, dw_loc_descr_ref ref)
14036 dw_loc_descr_ref copy;
14037 add_loc_descr (&list->expr, ref);
14038 list = list->dw_loc_next;
14039 while (list)
14041 copy = ggc_alloc<dw_loc_descr_node> ();
14042 memcpy (copy, ref, sizeof (dw_loc_descr_node));
14043 add_loc_descr (&list->expr, copy);
14044 while (copy->dw_loc_next)
14046 dw_loc_descr_ref new_copy = ggc_alloc<dw_loc_descr_node> ();
14047 memcpy (new_copy, copy->dw_loc_next, sizeof (dw_loc_descr_node));
14048 copy->dw_loc_next = new_copy;
14049 copy = new_copy;
14051 list = list->dw_loc_next;
14055 /* Given two lists RET and LIST
14056 produce location list that is result of adding expression in LIST
14057 to expression in RET on each position in program.
14058 Might be destructive on both RET and LIST.
14060 TODO: We handle only simple cases of RET or LIST having at most one
14061 element. General case would inolve sorting the lists in program order
14062 and merging them that will need some additional work.
14063 Adding that will improve quality of debug info especially for SRA-ed
14064 structures. */
14066 static void
14067 add_loc_list (dw_loc_list_ref *ret, dw_loc_list_ref list)
14069 if (!list)
14070 return;
14071 if (!*ret)
14073 *ret = list;
14074 return;
14076 if (!list->dw_loc_next)
14078 add_loc_descr_to_each (*ret, list->expr);
14079 return;
14081 if (!(*ret)->dw_loc_next)
14083 add_loc_descr_to_each (list, (*ret)->expr);
14084 *ret = list;
14085 return;
14087 expansion_failed (NULL_TREE, NULL_RTX,
14088 "Don't know how to merge two non-trivial"
14089 " location lists.\n");
14090 *ret = NULL;
14091 return;
14094 /* LOC is constant expression. Try a luck, look it up in constant
14095 pool and return its loc_descr of its address. */
14097 static dw_loc_descr_ref
14098 cst_pool_loc_descr (tree loc)
14100 /* Get an RTL for this, if something has been emitted. */
14101 rtx rtl = lookup_constant_def (loc);
14103 if (!rtl || !MEM_P (rtl))
14105 gcc_assert (!rtl);
14106 return 0;
14108 gcc_assert (GET_CODE (XEXP (rtl, 0)) == SYMBOL_REF);
14110 /* TODO: We might get more coverage if we was actually delaying expansion
14111 of all expressions till end of compilation when constant pools are fully
14112 populated. */
14113 if (!TREE_ASM_WRITTEN (SYMBOL_REF_DECL (XEXP (rtl, 0))))
14115 expansion_failed (loc, NULL_RTX,
14116 "CST value in contant pool but not marked.");
14117 return 0;
14119 return mem_loc_descriptor (XEXP (rtl, 0), get_address_mode (rtl),
14120 GET_MODE (rtl), VAR_INIT_STATUS_INITIALIZED);
14123 /* Return dw_loc_list representing address of addr_expr LOC
14124 by looking for inner INDIRECT_REF expression and turning
14125 it into simple arithmetics. */
14127 static dw_loc_list_ref
14128 loc_list_for_address_of_addr_expr_of_indirect_ref (tree loc, bool toplev)
14130 tree obj, offset;
14131 HOST_WIDE_INT bitsize, bitpos, bytepos;
14132 enum machine_mode mode;
14133 int unsignedp, volatilep = 0;
14134 dw_loc_list_ref list_ret = NULL, list_ret1 = NULL;
14136 obj = get_inner_reference (TREE_OPERAND (loc, 0),
14137 &bitsize, &bitpos, &offset, &mode,
14138 &unsignedp, &volatilep, false);
14139 STRIP_NOPS (obj);
14140 if (bitpos % BITS_PER_UNIT)
14142 expansion_failed (loc, NULL_RTX, "bitfield access");
14143 return 0;
14145 if (!INDIRECT_REF_P (obj))
14147 expansion_failed (obj,
14148 NULL_RTX, "no indirect ref in inner refrence");
14149 return 0;
14151 if (!offset && !bitpos)
14152 list_ret = loc_list_from_tree (TREE_OPERAND (obj, 0), toplev ? 2 : 1);
14153 else if (toplev
14154 && int_size_in_bytes (TREE_TYPE (loc)) <= DWARF2_ADDR_SIZE
14155 && (dwarf_version >= 4 || !dwarf_strict))
14157 list_ret = loc_list_from_tree (TREE_OPERAND (obj, 0), 0);
14158 if (!list_ret)
14159 return 0;
14160 if (offset)
14162 /* Variable offset. */
14163 list_ret1 = loc_list_from_tree (offset, 0);
14164 if (list_ret1 == 0)
14165 return 0;
14166 add_loc_list (&list_ret, list_ret1);
14167 if (!list_ret)
14168 return 0;
14169 add_loc_descr_to_each (list_ret,
14170 new_loc_descr (DW_OP_plus, 0, 0));
14172 bytepos = bitpos / BITS_PER_UNIT;
14173 if (bytepos > 0)
14174 add_loc_descr_to_each (list_ret,
14175 new_loc_descr (DW_OP_plus_uconst,
14176 bytepos, 0));
14177 else if (bytepos < 0)
14178 loc_list_plus_const (list_ret, bytepos);
14179 add_loc_descr_to_each (list_ret,
14180 new_loc_descr (DW_OP_stack_value, 0, 0));
14182 return list_ret;
14186 /* Generate Dwarf location list representing LOC.
14187 If WANT_ADDRESS is false, expression computing LOC will be computed
14188 If WANT_ADDRESS is 1, expression computing address of LOC will be returned
14189 if WANT_ADDRESS is 2, expression computing address useable in location
14190 will be returned (i.e. DW_OP_reg can be used
14191 to refer to register values). */
14193 static dw_loc_list_ref
14194 loc_list_from_tree (tree loc, int want_address)
14196 dw_loc_descr_ref ret = NULL, ret1 = NULL;
14197 dw_loc_list_ref list_ret = NULL, list_ret1 = NULL;
14198 int have_address = 0;
14199 enum dwarf_location_atom op;
14201 /* ??? Most of the time we do not take proper care for sign/zero
14202 extending the values properly. Hopefully this won't be a real
14203 problem... */
14205 switch (TREE_CODE (loc))
14207 case ERROR_MARK:
14208 expansion_failed (loc, NULL_RTX, "ERROR_MARK");
14209 return 0;
14211 case PLACEHOLDER_EXPR:
14212 /* This case involves extracting fields from an object to determine the
14213 position of other fields. We don't try to encode this here. The
14214 only user of this is Ada, which encodes the needed information using
14215 the names of types. */
14216 expansion_failed (loc, NULL_RTX, "PLACEHOLDER_EXPR");
14217 return 0;
14219 case CALL_EXPR:
14220 expansion_failed (loc, NULL_RTX, "CALL_EXPR");
14221 /* There are no opcodes for these operations. */
14222 return 0;
14224 case PREINCREMENT_EXPR:
14225 case PREDECREMENT_EXPR:
14226 case POSTINCREMENT_EXPR:
14227 case POSTDECREMENT_EXPR:
14228 expansion_failed (loc, NULL_RTX, "PRE/POST INDCREMENT/DECREMENT");
14229 /* There are no opcodes for these operations. */
14230 return 0;
14232 case ADDR_EXPR:
14233 /* If we already want an address, see if there is INDIRECT_REF inside
14234 e.g. for &this->field. */
14235 if (want_address)
14237 list_ret = loc_list_for_address_of_addr_expr_of_indirect_ref
14238 (loc, want_address == 2);
14239 if (list_ret)
14240 have_address = 1;
14241 else if (decl_address_ip_invariant_p (TREE_OPERAND (loc, 0))
14242 && (ret = cst_pool_loc_descr (loc)))
14243 have_address = 1;
14245 /* Otherwise, process the argument and look for the address. */
14246 if (!list_ret && !ret)
14247 list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 1);
14248 else
14250 if (want_address)
14251 expansion_failed (loc, NULL_RTX, "need address of ADDR_EXPR");
14252 return NULL;
14254 break;
14256 case VAR_DECL:
14257 if (DECL_THREAD_LOCAL_P (loc))
14259 rtx rtl;
14260 enum dwarf_location_atom tls_op;
14261 enum dtprel_bool dtprel = dtprel_false;
14263 if (targetm.have_tls)
14265 /* If this is not defined, we have no way to emit the
14266 data. */
14267 if (!targetm.asm_out.output_dwarf_dtprel)
14268 return 0;
14270 /* The way DW_OP_GNU_push_tls_address is specified, we
14271 can only look up addresses of objects in the current
14272 module. We used DW_OP_addr as first op, but that's
14273 wrong, because DW_OP_addr is relocated by the debug
14274 info consumer, while DW_OP_GNU_push_tls_address
14275 operand shouldn't be. */
14276 if (DECL_EXTERNAL (loc) && !targetm.binds_local_p (loc))
14277 return 0;
14278 dtprel = dtprel_true;
14279 tls_op = DW_OP_GNU_push_tls_address;
14281 else
14283 if (!targetm.emutls.debug_form_tls_address
14284 || !(dwarf_version >= 3 || !dwarf_strict))
14285 return 0;
14286 /* We stuffed the control variable into the DECL_VALUE_EXPR
14287 to signal (via DECL_HAS_VALUE_EXPR_P) that the decl should
14288 no longer appear in gimple code. We used the control
14289 variable in specific so that we could pick it up here. */
14290 loc = DECL_VALUE_EXPR (loc);
14291 tls_op = DW_OP_form_tls_address;
14294 rtl = rtl_for_decl_location (loc);
14295 if (rtl == NULL_RTX)
14296 return 0;
14298 if (!MEM_P (rtl))
14299 return 0;
14300 rtl = XEXP (rtl, 0);
14301 if (! CONSTANT_P (rtl))
14302 return 0;
14304 ret = new_addr_loc_descr (rtl, dtprel);
14305 ret1 = new_loc_descr (tls_op, 0, 0);
14306 add_loc_descr (&ret, ret1);
14308 have_address = 1;
14309 break;
14311 /* FALLTHRU */
14313 case PARM_DECL:
14314 case RESULT_DECL:
14315 if (DECL_HAS_VALUE_EXPR_P (loc))
14316 return loc_list_from_tree (DECL_VALUE_EXPR (loc),
14317 want_address);
14318 /* FALLTHRU */
14320 case FUNCTION_DECL:
14322 rtx rtl;
14323 var_loc_list *loc_list = lookup_decl_loc (loc);
14325 if (loc_list && loc_list->first)
14327 list_ret = dw_loc_list (loc_list, loc, want_address);
14328 have_address = want_address != 0;
14329 break;
14331 rtl = rtl_for_decl_location (loc);
14332 if (rtl == NULL_RTX)
14334 expansion_failed (loc, NULL_RTX, "DECL has no RTL");
14335 return 0;
14337 else if (CONST_INT_P (rtl))
14339 HOST_WIDE_INT val = INTVAL (rtl);
14340 if (TYPE_UNSIGNED (TREE_TYPE (loc)))
14341 val &= GET_MODE_MASK (DECL_MODE (loc));
14342 ret = int_loc_descriptor (val);
14344 else if (GET_CODE (rtl) == CONST_STRING)
14346 expansion_failed (loc, NULL_RTX, "CONST_STRING");
14347 return 0;
14349 else if (CONSTANT_P (rtl) && const_ok_for_output (rtl))
14350 ret = new_addr_loc_descr (rtl, dtprel_false);
14351 else
14353 enum machine_mode mode, mem_mode;
14355 /* Certain constructs can only be represented at top-level. */
14356 if (want_address == 2)
14358 ret = loc_descriptor (rtl, VOIDmode,
14359 VAR_INIT_STATUS_INITIALIZED);
14360 have_address = 1;
14362 else
14364 mode = GET_MODE (rtl);
14365 mem_mode = VOIDmode;
14366 if (MEM_P (rtl))
14368 mem_mode = mode;
14369 mode = get_address_mode (rtl);
14370 rtl = XEXP (rtl, 0);
14371 have_address = 1;
14373 ret = mem_loc_descriptor (rtl, mode, mem_mode,
14374 VAR_INIT_STATUS_INITIALIZED);
14376 if (!ret)
14377 expansion_failed (loc, rtl,
14378 "failed to produce loc descriptor for rtl");
14381 break;
14383 case MEM_REF:
14384 /* ??? FIXME. */
14385 if (!integer_zerop (TREE_OPERAND (loc, 1)))
14386 return 0;
14387 /* Fallthru. */
14388 case INDIRECT_REF:
14389 list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
14390 have_address = 1;
14391 break;
14393 case COMPOUND_EXPR:
14394 return loc_list_from_tree (TREE_OPERAND (loc, 1), want_address);
14396 CASE_CONVERT:
14397 case VIEW_CONVERT_EXPR:
14398 case SAVE_EXPR:
14399 case MODIFY_EXPR:
14400 return loc_list_from_tree (TREE_OPERAND (loc, 0), want_address);
14402 case COMPONENT_REF:
14403 case BIT_FIELD_REF:
14404 case ARRAY_REF:
14405 case ARRAY_RANGE_REF:
14406 case REALPART_EXPR:
14407 case IMAGPART_EXPR:
14409 tree obj, offset;
14410 HOST_WIDE_INT bitsize, bitpos, bytepos;
14411 enum machine_mode mode;
14412 int unsignedp, volatilep = 0;
14414 obj = get_inner_reference (loc, &bitsize, &bitpos, &offset, &mode,
14415 &unsignedp, &volatilep, false);
14417 gcc_assert (obj != loc);
14419 list_ret = loc_list_from_tree (obj,
14420 want_address == 2
14421 && !bitpos && !offset ? 2 : 1);
14422 /* TODO: We can extract value of the small expression via shifting even
14423 for nonzero bitpos. */
14424 if (list_ret == 0)
14425 return 0;
14426 if (bitpos % BITS_PER_UNIT != 0 || bitsize % BITS_PER_UNIT != 0)
14428 expansion_failed (loc, NULL_RTX,
14429 "bitfield access");
14430 return 0;
14433 if (offset != NULL_TREE)
14435 /* Variable offset. */
14436 list_ret1 = loc_list_from_tree (offset, 0);
14437 if (list_ret1 == 0)
14438 return 0;
14439 add_loc_list (&list_ret, list_ret1);
14440 if (!list_ret)
14441 return 0;
14442 add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_plus, 0, 0));
14445 bytepos = bitpos / BITS_PER_UNIT;
14446 if (bytepos > 0)
14447 add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_plus_uconst, bytepos, 0));
14448 else if (bytepos < 0)
14449 loc_list_plus_const (list_ret, bytepos);
14451 have_address = 1;
14452 break;
14455 case INTEGER_CST:
14456 if ((want_address || !tree_fits_shwi_p (loc))
14457 && (ret = cst_pool_loc_descr (loc)))
14458 have_address = 1;
14459 else if (want_address == 2
14460 && tree_fits_shwi_p (loc)
14461 && (ret = address_of_int_loc_descriptor
14462 (int_size_in_bytes (TREE_TYPE (loc)),
14463 tree_to_shwi (loc))))
14464 have_address = 1;
14465 else if (tree_fits_shwi_p (loc))
14466 ret = int_loc_descriptor (tree_to_shwi (loc));
14467 else
14469 expansion_failed (loc, NULL_RTX,
14470 "Integer operand is not host integer");
14471 return 0;
14473 break;
14475 case CONSTRUCTOR:
14476 case REAL_CST:
14477 case STRING_CST:
14478 case COMPLEX_CST:
14479 if ((ret = cst_pool_loc_descr (loc)))
14480 have_address = 1;
14481 else
14482 /* We can construct small constants here using int_loc_descriptor. */
14483 expansion_failed (loc, NULL_RTX,
14484 "constructor or constant not in constant pool");
14485 break;
14487 case TRUTH_AND_EXPR:
14488 case TRUTH_ANDIF_EXPR:
14489 case BIT_AND_EXPR:
14490 op = DW_OP_and;
14491 goto do_binop;
14493 case TRUTH_XOR_EXPR:
14494 case BIT_XOR_EXPR:
14495 op = DW_OP_xor;
14496 goto do_binop;
14498 case TRUTH_OR_EXPR:
14499 case TRUTH_ORIF_EXPR:
14500 case BIT_IOR_EXPR:
14501 op = DW_OP_or;
14502 goto do_binop;
14504 case FLOOR_DIV_EXPR:
14505 case CEIL_DIV_EXPR:
14506 case ROUND_DIV_EXPR:
14507 case TRUNC_DIV_EXPR:
14508 if (TYPE_UNSIGNED (TREE_TYPE (loc)))
14509 return 0;
14510 op = DW_OP_div;
14511 goto do_binop;
14513 case MINUS_EXPR:
14514 op = DW_OP_minus;
14515 goto do_binop;
14517 case FLOOR_MOD_EXPR:
14518 case CEIL_MOD_EXPR:
14519 case ROUND_MOD_EXPR:
14520 case TRUNC_MOD_EXPR:
14521 if (TYPE_UNSIGNED (TREE_TYPE (loc)))
14523 op = DW_OP_mod;
14524 goto do_binop;
14526 list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
14527 list_ret1 = loc_list_from_tree (TREE_OPERAND (loc, 1), 0);
14528 if (list_ret == 0 || list_ret1 == 0)
14529 return 0;
14531 add_loc_list (&list_ret, list_ret1);
14532 if (list_ret == 0)
14533 return 0;
14534 add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_over, 0, 0));
14535 add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_over, 0, 0));
14536 add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_div, 0, 0));
14537 add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_mul, 0, 0));
14538 add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_minus, 0, 0));
14539 break;
14541 case MULT_EXPR:
14542 op = DW_OP_mul;
14543 goto do_binop;
14545 case LSHIFT_EXPR:
14546 op = DW_OP_shl;
14547 goto do_binop;
14549 case RSHIFT_EXPR:
14550 op = (TYPE_UNSIGNED (TREE_TYPE (loc)) ? DW_OP_shr : DW_OP_shra);
14551 goto do_binop;
14553 case POINTER_PLUS_EXPR:
14554 case PLUS_EXPR:
14555 if (tree_fits_shwi_p (TREE_OPERAND (loc, 1)))
14557 list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
14558 if (list_ret == 0)
14559 return 0;
14561 loc_list_plus_const (list_ret, tree_to_shwi (TREE_OPERAND (loc, 1)));
14562 break;
14565 op = DW_OP_plus;
14566 goto do_binop;
14568 case LE_EXPR:
14569 if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
14570 return 0;
14572 op = DW_OP_le;
14573 goto do_binop;
14575 case GE_EXPR:
14576 if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
14577 return 0;
14579 op = DW_OP_ge;
14580 goto do_binop;
14582 case LT_EXPR:
14583 if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
14584 return 0;
14586 op = DW_OP_lt;
14587 goto do_binop;
14589 case GT_EXPR:
14590 if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
14591 return 0;
14593 op = DW_OP_gt;
14594 goto do_binop;
14596 case EQ_EXPR:
14597 op = DW_OP_eq;
14598 goto do_binop;
14600 case NE_EXPR:
14601 op = DW_OP_ne;
14602 goto do_binop;
14604 do_binop:
14605 list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
14606 list_ret1 = loc_list_from_tree (TREE_OPERAND (loc, 1), 0);
14607 if (list_ret == 0 || list_ret1 == 0)
14608 return 0;
14610 add_loc_list (&list_ret, list_ret1);
14611 if (list_ret == 0)
14612 return 0;
14613 add_loc_descr_to_each (list_ret, new_loc_descr (op, 0, 0));
14614 break;
14616 case TRUTH_NOT_EXPR:
14617 case BIT_NOT_EXPR:
14618 op = DW_OP_not;
14619 goto do_unop;
14621 case ABS_EXPR:
14622 op = DW_OP_abs;
14623 goto do_unop;
14625 case NEGATE_EXPR:
14626 op = DW_OP_neg;
14627 goto do_unop;
14629 do_unop:
14630 list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
14631 if (list_ret == 0)
14632 return 0;
14634 add_loc_descr_to_each (list_ret, new_loc_descr (op, 0, 0));
14635 break;
14637 case MIN_EXPR:
14638 case MAX_EXPR:
14640 const enum tree_code code =
14641 TREE_CODE (loc) == MIN_EXPR ? GT_EXPR : LT_EXPR;
14643 loc = build3 (COND_EXPR, TREE_TYPE (loc),
14644 build2 (code, integer_type_node,
14645 TREE_OPERAND (loc, 0), TREE_OPERAND (loc, 1)),
14646 TREE_OPERAND (loc, 1), TREE_OPERAND (loc, 0));
14649 /* ... fall through ... */
14651 case COND_EXPR:
14653 dw_loc_descr_ref lhs
14654 = loc_descriptor_from_tree (TREE_OPERAND (loc, 1), 0);
14655 dw_loc_list_ref rhs
14656 = loc_list_from_tree (TREE_OPERAND (loc, 2), 0);
14657 dw_loc_descr_ref bra_node, jump_node, tmp;
14659 list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
14660 if (list_ret == 0 || lhs == 0 || rhs == 0)
14661 return 0;
14663 bra_node = new_loc_descr (DW_OP_bra, 0, 0);
14664 add_loc_descr_to_each (list_ret, bra_node);
14666 add_loc_list (&list_ret, rhs);
14667 jump_node = new_loc_descr (DW_OP_skip, 0, 0);
14668 add_loc_descr_to_each (list_ret, jump_node);
14670 add_loc_descr_to_each (list_ret, lhs);
14671 bra_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
14672 bra_node->dw_loc_oprnd1.v.val_loc = lhs;
14674 /* ??? Need a node to point the skip at. Use a nop. */
14675 tmp = new_loc_descr (DW_OP_nop, 0, 0);
14676 add_loc_descr_to_each (list_ret, tmp);
14677 jump_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
14678 jump_node->dw_loc_oprnd1.v.val_loc = tmp;
14680 break;
14682 case FIX_TRUNC_EXPR:
14683 return 0;
14685 default:
14686 /* Leave front-end specific codes as simply unknown. This comes
14687 up, for instance, with the C STMT_EXPR. */
14688 if ((unsigned int) TREE_CODE (loc)
14689 >= (unsigned int) LAST_AND_UNUSED_TREE_CODE)
14691 expansion_failed (loc, NULL_RTX,
14692 "language specific tree node");
14693 return 0;
14696 #ifdef ENABLE_CHECKING
14697 /* Otherwise this is a generic code; we should just lists all of
14698 these explicitly. We forgot one. */
14699 gcc_unreachable ();
14700 #else
14701 /* In a release build, we want to degrade gracefully: better to
14702 generate incomplete debugging information than to crash. */
14703 return NULL;
14704 #endif
14707 if (!ret && !list_ret)
14708 return 0;
14710 if (want_address == 2 && !have_address
14711 && (dwarf_version >= 4 || !dwarf_strict))
14713 if (int_size_in_bytes (TREE_TYPE (loc)) > DWARF2_ADDR_SIZE)
14715 expansion_failed (loc, NULL_RTX,
14716 "DWARF address size mismatch");
14717 return 0;
14719 if (ret)
14720 add_loc_descr (&ret, new_loc_descr (DW_OP_stack_value, 0, 0));
14721 else
14722 add_loc_descr_to_each (list_ret,
14723 new_loc_descr (DW_OP_stack_value, 0, 0));
14724 have_address = 1;
14726 /* Show if we can't fill the request for an address. */
14727 if (want_address && !have_address)
14729 expansion_failed (loc, NULL_RTX,
14730 "Want address and only have value");
14731 return 0;
14734 gcc_assert (!ret || !list_ret);
14736 /* If we've got an address and don't want one, dereference. */
14737 if (!want_address && have_address)
14739 HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (loc));
14741 if (size > DWARF2_ADDR_SIZE || size == -1)
14743 expansion_failed (loc, NULL_RTX,
14744 "DWARF address size mismatch");
14745 return 0;
14747 else if (size == DWARF2_ADDR_SIZE)
14748 op = DW_OP_deref;
14749 else
14750 op = DW_OP_deref_size;
14752 if (ret)
14753 add_loc_descr (&ret, new_loc_descr (op, size, 0));
14754 else
14755 add_loc_descr_to_each (list_ret, new_loc_descr (op, size, 0));
14757 if (ret)
14758 list_ret = new_loc_list (ret, NULL, NULL, NULL);
14760 return list_ret;
14763 /* Same as above but return only single location expression. */
14764 static dw_loc_descr_ref
14765 loc_descriptor_from_tree (tree loc, int want_address)
14767 dw_loc_list_ref ret = loc_list_from_tree (loc, want_address);
14768 if (!ret)
14769 return NULL;
14770 if (ret->dw_loc_next)
14772 expansion_failed (loc, NULL_RTX,
14773 "Location list where only loc descriptor needed");
14774 return NULL;
14776 return ret->expr;
14779 /* Given a value, round it up to the lowest multiple of `boundary'
14780 which is not less than the value itself. */
14782 static inline HOST_WIDE_INT
14783 ceiling (HOST_WIDE_INT value, unsigned int boundary)
14785 return (((value + boundary - 1) / boundary) * boundary);
14788 /* Given a pointer to what is assumed to be a FIELD_DECL node, return a
14789 pointer to the declared type for the relevant field variable, or return
14790 `integer_type_node' if the given node turns out to be an
14791 ERROR_MARK node. */
14793 static inline tree
14794 field_type (const_tree decl)
14796 tree type;
14798 if (TREE_CODE (decl) == ERROR_MARK)
14799 return integer_type_node;
14801 type = DECL_BIT_FIELD_TYPE (decl);
14802 if (type == NULL_TREE)
14803 type = TREE_TYPE (decl);
14805 return type;
14808 /* Given a pointer to a tree node, return the alignment in bits for
14809 it, or else return BITS_PER_WORD if the node actually turns out to
14810 be an ERROR_MARK node. */
14812 static inline unsigned
14813 simple_type_align_in_bits (const_tree type)
14815 return (TREE_CODE (type) != ERROR_MARK) ? TYPE_ALIGN (type) : BITS_PER_WORD;
14818 static inline unsigned
14819 simple_decl_align_in_bits (const_tree decl)
14821 return (TREE_CODE (decl) != ERROR_MARK) ? DECL_ALIGN (decl) : BITS_PER_WORD;
14824 /* Return the result of rounding T up to ALIGN. */
14826 static inline offset_int
14827 round_up_to_align (const offset_int &t, unsigned int align)
14829 return wi::udiv_trunc (t + align - 1, align) * align;
14832 /* Given a pointer to a FIELD_DECL, compute and return the byte offset of the
14833 lowest addressed byte of the "containing object" for the given FIELD_DECL,
14834 or return 0 if we are unable to determine what that offset is, either
14835 because the argument turns out to be a pointer to an ERROR_MARK node, or
14836 because the offset is actually variable. (We can't handle the latter case
14837 just yet). */
14839 static HOST_WIDE_INT
14840 field_byte_offset (const_tree decl)
14842 offset_int object_offset_in_bits;
14843 offset_int object_offset_in_bytes;
14844 offset_int bitpos_int;
14846 if (TREE_CODE (decl) == ERROR_MARK)
14847 return 0;
14849 gcc_assert (TREE_CODE (decl) == FIELD_DECL);
14851 /* We cannot yet cope with fields whose positions are variable, so
14852 for now, when we see such things, we simply return 0. Someday, we may
14853 be able to handle such cases, but it will be damn difficult. */
14854 if (TREE_CODE (bit_position (decl)) != INTEGER_CST)
14855 return 0;
14857 bitpos_int = wi::to_offset (bit_position (decl));
14859 #ifdef PCC_BITFIELD_TYPE_MATTERS
14860 if (PCC_BITFIELD_TYPE_MATTERS)
14862 tree type;
14863 tree field_size_tree;
14864 offset_int deepest_bitpos;
14865 offset_int field_size_in_bits;
14866 unsigned int type_align_in_bits;
14867 unsigned int decl_align_in_bits;
14868 offset_int type_size_in_bits;
14870 type = field_type (decl);
14871 type_size_in_bits = offset_int_type_size_in_bits (type);
14872 type_align_in_bits = simple_type_align_in_bits (type);
14874 field_size_tree = DECL_SIZE (decl);
14876 /* The size could be unspecified if there was an error, or for
14877 a flexible array member. */
14878 if (!field_size_tree)
14879 field_size_tree = bitsize_zero_node;
14881 /* If the size of the field is not constant, use the type size. */
14882 if (TREE_CODE (field_size_tree) == INTEGER_CST)
14883 field_size_in_bits = wi::to_offset (field_size_tree);
14884 else
14885 field_size_in_bits = type_size_in_bits;
14887 decl_align_in_bits = simple_decl_align_in_bits (decl);
14889 /* The GCC front-end doesn't make any attempt to keep track of the
14890 starting bit offset (relative to the start of the containing
14891 structure type) of the hypothetical "containing object" for a
14892 bit-field. Thus, when computing the byte offset value for the
14893 start of the "containing object" of a bit-field, we must deduce
14894 this information on our own. This can be rather tricky to do in
14895 some cases. For example, handling the following structure type
14896 definition when compiling for an i386/i486 target (which only
14897 aligns long long's to 32-bit boundaries) can be very tricky:
14899 struct S { int field1; long long field2:31; };
14901 Fortunately, there is a simple rule-of-thumb which can be used
14902 in such cases. When compiling for an i386/i486, GCC will
14903 allocate 8 bytes for the structure shown above. It decides to
14904 do this based upon one simple rule for bit-field allocation.
14905 GCC allocates each "containing object" for each bit-field at
14906 the first (i.e. lowest addressed) legitimate alignment boundary
14907 (based upon the required minimum alignment for the declared
14908 type of the field) which it can possibly use, subject to the
14909 condition that there is still enough available space remaining
14910 in the containing object (when allocated at the selected point)
14911 to fully accommodate all of the bits of the bit-field itself.
14913 This simple rule makes it obvious why GCC allocates 8 bytes for
14914 each object of the structure type shown above. When looking
14915 for a place to allocate the "containing object" for `field2',
14916 the compiler simply tries to allocate a 64-bit "containing
14917 object" at each successive 32-bit boundary (starting at zero)
14918 until it finds a place to allocate that 64- bit field such that
14919 at least 31 contiguous (and previously unallocated) bits remain
14920 within that selected 64 bit field. (As it turns out, for the
14921 example above, the compiler finds it is OK to allocate the
14922 "containing object" 64-bit field at bit-offset zero within the
14923 structure type.)
14925 Here we attempt to work backwards from the limited set of facts
14926 we're given, and we try to deduce from those facts, where GCC
14927 must have believed that the containing object started (within
14928 the structure type). The value we deduce is then used (by the
14929 callers of this routine) to generate DW_AT_location and
14930 DW_AT_bit_offset attributes for fields (both bit-fields and, in
14931 the case of DW_AT_location, regular fields as well). */
14933 /* Figure out the bit-distance from the start of the structure to
14934 the "deepest" bit of the bit-field. */
14935 deepest_bitpos = bitpos_int + field_size_in_bits;
14937 /* This is the tricky part. Use some fancy footwork to deduce
14938 where the lowest addressed bit of the containing object must
14939 be. */
14940 object_offset_in_bits = deepest_bitpos - type_size_in_bits;
14942 /* Round up to type_align by default. This works best for
14943 bitfields. */
14944 object_offset_in_bits
14945 = round_up_to_align (object_offset_in_bits, type_align_in_bits);
14947 if (wi::gtu_p (object_offset_in_bits, bitpos_int))
14949 object_offset_in_bits = deepest_bitpos - type_size_in_bits;
14951 /* Round up to decl_align instead. */
14952 object_offset_in_bits
14953 = round_up_to_align (object_offset_in_bits, decl_align_in_bits);
14956 else
14957 #endif /* PCC_BITFIELD_TYPE_MATTERS */
14958 object_offset_in_bits = bitpos_int;
14960 object_offset_in_bytes
14961 = wi::lrshift (object_offset_in_bits, LOG2_BITS_PER_UNIT);
14962 return object_offset_in_bytes.to_shwi ();
14965 /* The following routines define various Dwarf attributes and any data
14966 associated with them. */
14968 /* Add a location description attribute value to a DIE.
14970 This emits location attributes suitable for whole variables and
14971 whole parameters. Note that the location attributes for struct fields are
14972 generated by the routine `data_member_location_attribute' below. */
14974 static inline void
14975 add_AT_location_description (dw_die_ref die, enum dwarf_attribute attr_kind,
14976 dw_loc_list_ref descr)
14978 if (descr == 0)
14979 return;
14980 if (single_element_loc_list_p (descr))
14981 add_AT_loc (die, attr_kind, descr->expr);
14982 else
14983 add_AT_loc_list (die, attr_kind, descr);
14986 /* Add DW_AT_accessibility attribute to DIE if needed. */
14988 static void
14989 add_accessibility_attribute (dw_die_ref die, tree decl)
14991 /* In DWARF3+ the default is DW_ACCESS_private only in DW_TAG_class_type
14992 children, otherwise the default is DW_ACCESS_public. In DWARF2
14993 the default has always been DW_ACCESS_public. */
14994 if (TREE_PROTECTED (decl))
14995 add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_protected);
14996 else if (TREE_PRIVATE (decl))
14998 if (dwarf_version == 2
14999 || die->die_parent == NULL
15000 || die->die_parent->die_tag != DW_TAG_class_type)
15001 add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_private);
15003 else if (dwarf_version > 2
15004 && die->die_parent
15005 && die->die_parent->die_tag == DW_TAG_class_type)
15006 add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_public);
15009 /* Attach the specialized form of location attribute used for data members of
15010 struct and union types. In the special case of a FIELD_DECL node which
15011 represents a bit-field, the "offset" part of this special location
15012 descriptor must indicate the distance in bytes from the lowest-addressed
15013 byte of the containing struct or union type to the lowest-addressed byte of
15014 the "containing object" for the bit-field. (See the `field_byte_offset'
15015 function above).
15017 For any given bit-field, the "containing object" is a hypothetical object
15018 (of some integral or enum type) within which the given bit-field lives. The
15019 type of this hypothetical "containing object" is always the same as the
15020 declared type of the individual bit-field itself (for GCC anyway... the
15021 DWARF spec doesn't actually mandate this). Note that it is the size (in
15022 bytes) of the hypothetical "containing object" which will be given in the
15023 DW_AT_byte_size attribute for this bit-field. (See the
15024 `byte_size_attribute' function below.) It is also used when calculating the
15025 value of the DW_AT_bit_offset attribute. (See the `bit_offset_attribute'
15026 function below.) */
15028 static void
15029 add_data_member_location_attribute (dw_die_ref die, tree decl)
15031 HOST_WIDE_INT offset;
15032 dw_loc_descr_ref loc_descr = 0;
15034 if (TREE_CODE (decl) == TREE_BINFO)
15036 /* We're working on the TAG_inheritance for a base class. */
15037 if (BINFO_VIRTUAL_P (decl) && is_cxx ())
15039 /* For C++ virtual bases we can't just use BINFO_OFFSET, as they
15040 aren't at a fixed offset from all (sub)objects of the same
15041 type. We need to extract the appropriate offset from our
15042 vtable. The following dwarf expression means
15044 BaseAddr = ObAddr + *((*ObAddr) - Offset)
15046 This is specific to the V3 ABI, of course. */
15048 dw_loc_descr_ref tmp;
15050 /* Make a copy of the object address. */
15051 tmp = new_loc_descr (DW_OP_dup, 0, 0);
15052 add_loc_descr (&loc_descr, tmp);
15054 /* Extract the vtable address. */
15055 tmp = new_loc_descr (DW_OP_deref, 0, 0);
15056 add_loc_descr (&loc_descr, tmp);
15058 /* Calculate the address of the offset. */
15059 offset = tree_to_shwi (BINFO_VPTR_FIELD (decl));
15060 gcc_assert (offset < 0);
15062 tmp = int_loc_descriptor (-offset);
15063 add_loc_descr (&loc_descr, tmp);
15064 tmp = new_loc_descr (DW_OP_minus, 0, 0);
15065 add_loc_descr (&loc_descr, tmp);
15067 /* Extract the offset. */
15068 tmp = new_loc_descr (DW_OP_deref, 0, 0);
15069 add_loc_descr (&loc_descr, tmp);
15071 /* Add it to the object address. */
15072 tmp = new_loc_descr (DW_OP_plus, 0, 0);
15073 add_loc_descr (&loc_descr, tmp);
15075 else
15076 offset = tree_to_shwi (BINFO_OFFSET (decl));
15078 else
15079 offset = field_byte_offset (decl);
15081 if (! loc_descr)
15083 if (dwarf_version > 2)
15085 /* Don't need to output a location expression, just the constant. */
15086 if (offset < 0)
15087 add_AT_int (die, DW_AT_data_member_location, offset);
15088 else
15089 add_AT_unsigned (die, DW_AT_data_member_location, offset);
15090 return;
15092 else
15094 enum dwarf_location_atom op;
15096 /* The DWARF2 standard says that we should assume that the structure
15097 address is already on the stack, so we can specify a structure
15098 field address by using DW_OP_plus_uconst. */
15099 op = DW_OP_plus_uconst;
15100 loc_descr = new_loc_descr (op, offset, 0);
15104 add_AT_loc (die, DW_AT_data_member_location, loc_descr);
15107 /* Writes integer values to dw_vec_const array. */
15109 static void
15110 insert_int (HOST_WIDE_INT val, unsigned int size, unsigned char *dest)
15112 while (size != 0)
15114 *dest++ = val & 0xff;
15115 val >>= 8;
15116 --size;
15120 /* Reads integers from dw_vec_const array. Inverse of insert_int. */
15122 static HOST_WIDE_INT
15123 extract_int (const unsigned char *src, unsigned int size)
15125 HOST_WIDE_INT val = 0;
15127 src += size;
15128 while (size != 0)
15130 val <<= 8;
15131 val |= *--src & 0xff;
15132 --size;
15134 return val;
15137 /* Writes wide_int values to dw_vec_const array. */
15139 static void
15140 insert_wide_int (const wide_int &val, unsigned char *dest, int elt_size)
15142 int i;
15144 if (elt_size <= HOST_BITS_PER_WIDE_INT/BITS_PER_UNIT)
15146 insert_int ((HOST_WIDE_INT) val.elt (0), elt_size, dest);
15147 return;
15150 /* We'd have to extend this code to support odd sizes. */
15151 gcc_assert (elt_size % (HOST_BITS_PER_WIDE_INT / BITS_PER_UNIT) == 0);
15153 int n = elt_size / (HOST_BITS_PER_WIDE_INT / BITS_PER_UNIT);
15155 if (WORDS_BIG_ENDIAN)
15156 for (i = n - 1; i >= 0; i--)
15158 insert_int ((HOST_WIDE_INT) val.elt (i), sizeof (HOST_WIDE_INT), dest);
15159 dest += sizeof (HOST_WIDE_INT);
15161 else
15162 for (i = 0; i < n; i++)
15164 insert_int ((HOST_WIDE_INT) val.elt (i), sizeof (HOST_WIDE_INT), dest);
15165 dest += sizeof (HOST_WIDE_INT);
15169 /* Writes floating point values to dw_vec_const array. */
15171 static void
15172 insert_float (const_rtx rtl, unsigned char *array)
15174 REAL_VALUE_TYPE rv;
15175 long val[4];
15176 int i;
15178 REAL_VALUE_FROM_CONST_DOUBLE (rv, rtl);
15179 real_to_target (val, &rv, GET_MODE (rtl));
15181 /* real_to_target puts 32-bit pieces in each long. Pack them. */
15182 for (i = 0; i < GET_MODE_SIZE (GET_MODE (rtl)) / 4; i++)
15184 insert_int (val[i], 4, array);
15185 array += 4;
15189 /* Attach a DW_AT_const_value attribute for a variable or a parameter which
15190 does not have a "location" either in memory or in a register. These
15191 things can arise in GNU C when a constant is passed as an actual parameter
15192 to an inlined function. They can also arise in C++ where declared
15193 constants do not necessarily get memory "homes". */
15195 static bool
15196 add_const_value_attribute (dw_die_ref die, rtx rtl)
15198 switch (GET_CODE (rtl))
15200 case CONST_INT:
15202 HOST_WIDE_INT val = INTVAL (rtl);
15204 if (val < 0)
15205 add_AT_int (die, DW_AT_const_value, val);
15206 else
15207 add_AT_unsigned (die, DW_AT_const_value, (unsigned HOST_WIDE_INT) val);
15209 return true;
15211 case CONST_WIDE_INT:
15212 add_AT_wide (die, DW_AT_const_value,
15213 std::make_pair (rtl, GET_MODE (rtl)));
15214 return true;
15216 case CONST_DOUBLE:
15217 /* Note that a CONST_DOUBLE rtx could represent either an integer or a
15218 floating-point constant. A CONST_DOUBLE is used whenever the
15219 constant requires more than one word in order to be adequately
15220 represented. */
15222 enum machine_mode mode = GET_MODE (rtl);
15224 if (TARGET_SUPPORTS_WIDE_INT == 0 && !SCALAR_FLOAT_MODE_P (mode))
15225 add_AT_double (die, DW_AT_const_value,
15226 CONST_DOUBLE_HIGH (rtl), CONST_DOUBLE_LOW (rtl));
15227 else
15229 unsigned int length = GET_MODE_SIZE (mode);
15230 unsigned char *array = ggc_vec_alloc<unsigned char> (length);
15232 insert_float (rtl, array);
15233 add_AT_vec (die, DW_AT_const_value, length / 4, 4, array);
15236 return true;
15238 case CONST_VECTOR:
15240 enum machine_mode mode = GET_MODE (rtl);
15241 unsigned int elt_size = GET_MODE_UNIT_SIZE (mode);
15242 unsigned int length = CONST_VECTOR_NUNITS (rtl);
15243 unsigned char *array
15244 = ggc_vec_alloc<unsigned char> (length * elt_size);
15245 unsigned int i;
15246 unsigned char *p;
15247 enum machine_mode imode = GET_MODE_INNER (mode);
15249 switch (GET_MODE_CLASS (mode))
15251 case MODE_VECTOR_INT:
15252 for (i = 0, p = array; i < length; i++, p += elt_size)
15254 rtx elt = CONST_VECTOR_ELT (rtl, i);
15255 insert_wide_int (std::make_pair (elt, imode), p, elt_size);
15257 break;
15259 case MODE_VECTOR_FLOAT:
15260 for (i = 0, p = array; i < length; i++, p += elt_size)
15262 rtx elt = CONST_VECTOR_ELT (rtl, i);
15263 insert_float (elt, p);
15265 break;
15267 default:
15268 gcc_unreachable ();
15271 add_AT_vec (die, DW_AT_const_value, length, elt_size, array);
15273 return true;
15275 case CONST_STRING:
15276 if (dwarf_version >= 4 || !dwarf_strict)
15278 dw_loc_descr_ref loc_result;
15279 resolve_one_addr (&rtl);
15280 rtl_addr:
15281 loc_result = new_addr_loc_descr (rtl, dtprel_false);
15282 add_loc_descr (&loc_result, new_loc_descr (DW_OP_stack_value, 0, 0));
15283 add_AT_loc (die, DW_AT_location, loc_result);
15284 vec_safe_push (used_rtx_array, rtl);
15285 return true;
15287 return false;
15289 case CONST:
15290 if (CONSTANT_P (XEXP (rtl, 0)))
15291 return add_const_value_attribute (die, XEXP (rtl, 0));
15292 /* FALLTHROUGH */
15293 case SYMBOL_REF:
15294 if (!const_ok_for_output (rtl))
15295 return false;
15296 case LABEL_REF:
15297 if (dwarf_version >= 4 || !dwarf_strict)
15298 goto rtl_addr;
15299 return false;
15301 case PLUS:
15302 /* In cases where an inlined instance of an inline function is passed
15303 the address of an `auto' variable (which is local to the caller) we
15304 can get a situation where the DECL_RTL of the artificial local
15305 variable (for the inlining) which acts as a stand-in for the
15306 corresponding formal parameter (of the inline function) will look
15307 like (plus:SI (reg:SI FRAME_PTR) (const_int ...)). This is not
15308 exactly a compile-time constant expression, but it isn't the address
15309 of the (artificial) local variable either. Rather, it represents the
15310 *value* which the artificial local variable always has during its
15311 lifetime. We currently have no way to represent such quasi-constant
15312 values in Dwarf, so for now we just punt and generate nothing. */
15313 return false;
15315 case HIGH:
15316 case CONST_FIXED:
15317 return false;
15319 case MEM:
15320 if (GET_CODE (XEXP (rtl, 0)) == CONST_STRING
15321 && MEM_READONLY_P (rtl)
15322 && GET_MODE (rtl) == BLKmode)
15324 add_AT_string (die, DW_AT_const_value, XSTR (XEXP (rtl, 0), 0));
15325 return true;
15327 return false;
15329 default:
15330 /* No other kinds of rtx should be possible here. */
15331 gcc_unreachable ();
15333 return false;
15336 /* Determine whether the evaluation of EXPR references any variables
15337 or functions which aren't otherwise used (and therefore may not be
15338 output). */
15339 static tree
15340 reference_to_unused (tree * tp, int * walk_subtrees,
15341 void * data ATTRIBUTE_UNUSED)
15343 if (! EXPR_P (*tp) && ! CONSTANT_CLASS_P (*tp))
15344 *walk_subtrees = 0;
15346 if (DECL_P (*tp) && ! TREE_PUBLIC (*tp) && ! TREE_USED (*tp)
15347 && ! TREE_ASM_WRITTEN (*tp))
15348 return *tp;
15349 /* ??? The C++ FE emits debug information for using decls, so
15350 putting gcc_unreachable here falls over. See PR31899. For now
15351 be conservative. */
15352 else if (!symtab->global_info_ready
15353 && (TREE_CODE (*tp) == VAR_DECL || TREE_CODE (*tp) == FUNCTION_DECL))
15354 return *tp;
15355 else if (TREE_CODE (*tp) == VAR_DECL)
15357 varpool_node *node = varpool_node::get (*tp);
15358 if (!node || !node->definition)
15359 return *tp;
15361 else if (TREE_CODE (*tp) == FUNCTION_DECL
15362 && (!DECL_EXTERNAL (*tp) || DECL_DECLARED_INLINE_P (*tp)))
15364 /* The call graph machinery must have finished analyzing,
15365 optimizing and gimplifying the CU by now.
15366 So if *TP has no call graph node associated
15367 to it, it means *TP will not be emitted. */
15368 if (!cgraph_node::get (*tp))
15369 return *tp;
15371 else if (TREE_CODE (*tp) == STRING_CST && !TREE_ASM_WRITTEN (*tp))
15372 return *tp;
15374 return NULL_TREE;
15377 /* Generate an RTL constant from a decl initializer INIT with decl type TYPE,
15378 for use in a later add_const_value_attribute call. */
15380 static rtx
15381 rtl_for_decl_init (tree init, tree type)
15383 rtx rtl = NULL_RTX;
15385 STRIP_NOPS (init);
15387 /* If a variable is initialized with a string constant without embedded
15388 zeros, build CONST_STRING. */
15389 if (TREE_CODE (init) == STRING_CST && TREE_CODE (type) == ARRAY_TYPE)
15391 tree enttype = TREE_TYPE (type);
15392 tree domain = TYPE_DOMAIN (type);
15393 enum machine_mode mode = TYPE_MODE (enttype);
15395 if (GET_MODE_CLASS (mode) == MODE_INT && GET_MODE_SIZE (mode) == 1
15396 && domain
15397 && integer_zerop (TYPE_MIN_VALUE (domain))
15398 && compare_tree_int (TYPE_MAX_VALUE (domain),
15399 TREE_STRING_LENGTH (init) - 1) == 0
15400 && ((size_t) TREE_STRING_LENGTH (init)
15401 == strlen (TREE_STRING_POINTER (init)) + 1))
15403 rtl = gen_rtx_CONST_STRING (VOIDmode,
15404 ggc_strdup (TREE_STRING_POINTER (init)));
15405 rtl = gen_rtx_MEM (BLKmode, rtl);
15406 MEM_READONLY_P (rtl) = 1;
15409 /* Other aggregates, and complex values, could be represented using
15410 CONCAT: FIXME! */
15411 else if (AGGREGATE_TYPE_P (type)
15412 || (TREE_CODE (init) == VIEW_CONVERT_EXPR
15413 && AGGREGATE_TYPE_P (TREE_TYPE (TREE_OPERAND (init, 0))))
15414 || TREE_CODE (type) == COMPLEX_TYPE)
15416 /* Vectors only work if their mode is supported by the target.
15417 FIXME: generic vectors ought to work too. */
15418 else if (TREE_CODE (type) == VECTOR_TYPE
15419 && !VECTOR_MODE_P (TYPE_MODE (type)))
15421 /* If the initializer is something that we know will expand into an
15422 immediate RTL constant, expand it now. We must be careful not to
15423 reference variables which won't be output. */
15424 else if (initializer_constant_valid_p (init, type)
15425 && ! walk_tree (&init, reference_to_unused, NULL, NULL))
15427 /* Convert vector CONSTRUCTOR initializers to VECTOR_CST if
15428 possible. */
15429 if (TREE_CODE (type) == VECTOR_TYPE)
15430 switch (TREE_CODE (init))
15432 case VECTOR_CST:
15433 break;
15434 case CONSTRUCTOR:
15435 if (TREE_CONSTANT (init))
15437 vec<constructor_elt, va_gc> *elts = CONSTRUCTOR_ELTS (init);
15438 bool constant_p = true;
15439 tree value;
15440 unsigned HOST_WIDE_INT ix;
15442 /* Even when ctor is constant, it might contain non-*_CST
15443 elements (e.g. { 1.0/0.0 - 1.0/0.0, 0.0 }) and those don't
15444 belong into VECTOR_CST nodes. */
15445 FOR_EACH_CONSTRUCTOR_VALUE (elts, ix, value)
15446 if (!CONSTANT_CLASS_P (value))
15448 constant_p = false;
15449 break;
15452 if (constant_p)
15454 init = build_vector_from_ctor (type, elts);
15455 break;
15458 /* FALLTHRU */
15460 default:
15461 return NULL;
15464 rtl = expand_expr (init, NULL_RTX, VOIDmode, EXPAND_INITIALIZER);
15466 /* If expand_expr returns a MEM, it wasn't immediate. */
15467 gcc_assert (!rtl || !MEM_P (rtl));
15470 return rtl;
15473 /* Generate RTL for the variable DECL to represent its location. */
15475 static rtx
15476 rtl_for_decl_location (tree decl)
15478 rtx rtl;
15480 /* Here we have to decide where we are going to say the parameter "lives"
15481 (as far as the debugger is concerned). We only have a couple of
15482 choices. GCC provides us with DECL_RTL and with DECL_INCOMING_RTL.
15484 DECL_RTL normally indicates where the parameter lives during most of the
15485 activation of the function. If optimization is enabled however, this
15486 could be either NULL or else a pseudo-reg. Both of those cases indicate
15487 that the parameter doesn't really live anywhere (as far as the code
15488 generation parts of GCC are concerned) during most of the function's
15489 activation. That will happen (for example) if the parameter is never
15490 referenced within the function.
15492 We could just generate a location descriptor here for all non-NULL
15493 non-pseudo values of DECL_RTL and ignore all of the rest, but we can be
15494 a little nicer than that if we also consider DECL_INCOMING_RTL in cases
15495 where DECL_RTL is NULL or is a pseudo-reg.
15497 Note however that we can only get away with using DECL_INCOMING_RTL as
15498 a backup substitute for DECL_RTL in certain limited cases. In cases
15499 where DECL_ARG_TYPE (decl) indicates the same type as TREE_TYPE (decl),
15500 we can be sure that the parameter was passed using the same type as it is
15501 declared to have within the function, and that its DECL_INCOMING_RTL
15502 points us to a place where a value of that type is passed.
15504 In cases where DECL_ARG_TYPE (decl) and TREE_TYPE (decl) are different,
15505 we cannot (in general) use DECL_INCOMING_RTL as a substitute for DECL_RTL
15506 because in these cases DECL_INCOMING_RTL points us to a value of some
15507 type which is *different* from the type of the parameter itself. Thus,
15508 if we tried to use DECL_INCOMING_RTL to generate a location attribute in
15509 such cases, the debugger would end up (for example) trying to fetch a
15510 `float' from a place which actually contains the first part of a
15511 `double'. That would lead to really incorrect and confusing
15512 output at debug-time.
15514 So, in general, we *do not* use DECL_INCOMING_RTL as a backup for DECL_RTL
15515 in cases where DECL_ARG_TYPE (decl) != TREE_TYPE (decl). There
15516 are a couple of exceptions however. On little-endian machines we can
15517 get away with using DECL_INCOMING_RTL even when DECL_ARG_TYPE (decl) is
15518 not the same as TREE_TYPE (decl), but only when DECL_ARG_TYPE (decl) is
15519 an integral type that is smaller than TREE_TYPE (decl). These cases arise
15520 when (on a little-endian machine) a non-prototyped function has a
15521 parameter declared to be of type `short' or `char'. In such cases,
15522 TREE_TYPE (decl) will be `short' or `char', DECL_ARG_TYPE (decl) will
15523 be `int', and DECL_INCOMING_RTL will point to the lowest-order byte of the
15524 passed `int' value. If the debugger then uses that address to fetch
15525 a `short' or a `char' (on a little-endian machine) the result will be
15526 the correct data, so we allow for such exceptional cases below.
15528 Note that our goal here is to describe the place where the given formal
15529 parameter lives during most of the function's activation (i.e. between the
15530 end of the prologue and the start of the epilogue). We'll do that as best
15531 as we can. Note however that if the given formal parameter is modified
15532 sometime during the execution of the function, then a stack backtrace (at
15533 debug-time) will show the function as having been called with the *new*
15534 value rather than the value which was originally passed in. This happens
15535 rarely enough that it is not a major problem, but it *is* a problem, and
15536 I'd like to fix it.
15538 A future version of dwarf2out.c may generate two additional attributes for
15539 any given DW_TAG_formal_parameter DIE which will describe the "passed
15540 type" and the "passed location" for the given formal parameter in addition
15541 to the attributes we now generate to indicate the "declared type" and the
15542 "active location" for each parameter. This additional set of attributes
15543 could be used by debuggers for stack backtraces. Separately, note that
15544 sometimes DECL_RTL can be NULL and DECL_INCOMING_RTL can be NULL also.
15545 This happens (for example) for inlined-instances of inline function formal
15546 parameters which are never referenced. This really shouldn't be
15547 happening. All PARM_DECL nodes should get valid non-NULL
15548 DECL_INCOMING_RTL values. FIXME. */
15550 /* Use DECL_RTL as the "location" unless we find something better. */
15551 rtl = DECL_RTL_IF_SET (decl);
15553 /* When generating abstract instances, ignore everything except
15554 constants, symbols living in memory, and symbols living in
15555 fixed registers. */
15556 if (! reload_completed)
15558 if (rtl
15559 && (CONSTANT_P (rtl)
15560 || (MEM_P (rtl)
15561 && CONSTANT_P (XEXP (rtl, 0)))
15562 || (REG_P (rtl)
15563 && TREE_CODE (decl) == VAR_DECL
15564 && TREE_STATIC (decl))))
15566 rtl = targetm.delegitimize_address (rtl);
15567 return rtl;
15569 rtl = NULL_RTX;
15571 else if (TREE_CODE (decl) == PARM_DECL)
15573 if (rtl == NULL_RTX
15574 || is_pseudo_reg (rtl)
15575 || (MEM_P (rtl)
15576 && is_pseudo_reg (XEXP (rtl, 0))
15577 && DECL_INCOMING_RTL (decl)
15578 && MEM_P (DECL_INCOMING_RTL (decl))
15579 && GET_MODE (rtl) == GET_MODE (DECL_INCOMING_RTL (decl))))
15581 tree declared_type = TREE_TYPE (decl);
15582 tree passed_type = DECL_ARG_TYPE (decl);
15583 enum machine_mode dmode = TYPE_MODE (declared_type);
15584 enum machine_mode pmode = TYPE_MODE (passed_type);
15586 /* This decl represents a formal parameter which was optimized out.
15587 Note that DECL_INCOMING_RTL may be NULL in here, but we handle
15588 all cases where (rtl == NULL_RTX) just below. */
15589 if (dmode == pmode)
15590 rtl = DECL_INCOMING_RTL (decl);
15591 else if ((rtl == NULL_RTX || is_pseudo_reg (rtl))
15592 && SCALAR_INT_MODE_P (dmode)
15593 && GET_MODE_SIZE (dmode) <= GET_MODE_SIZE (pmode)
15594 && DECL_INCOMING_RTL (decl))
15596 rtx inc = DECL_INCOMING_RTL (decl);
15597 if (REG_P (inc))
15598 rtl = inc;
15599 else if (MEM_P (inc))
15601 if (BYTES_BIG_ENDIAN)
15602 rtl = adjust_address_nv (inc, dmode,
15603 GET_MODE_SIZE (pmode)
15604 - GET_MODE_SIZE (dmode));
15605 else
15606 rtl = inc;
15611 /* If the parm was passed in registers, but lives on the stack, then
15612 make a big endian correction if the mode of the type of the
15613 parameter is not the same as the mode of the rtl. */
15614 /* ??? This is the same series of checks that are made in dbxout.c before
15615 we reach the big endian correction code there. It isn't clear if all
15616 of these checks are necessary here, but keeping them all is the safe
15617 thing to do. */
15618 else if (MEM_P (rtl)
15619 && XEXP (rtl, 0) != const0_rtx
15620 && ! CONSTANT_P (XEXP (rtl, 0))
15621 /* Not passed in memory. */
15622 && !MEM_P (DECL_INCOMING_RTL (decl))
15623 /* Not passed by invisible reference. */
15624 && (!REG_P (XEXP (rtl, 0))
15625 || REGNO (XEXP (rtl, 0)) == HARD_FRAME_POINTER_REGNUM
15626 || REGNO (XEXP (rtl, 0)) == STACK_POINTER_REGNUM
15627 #if !HARD_FRAME_POINTER_IS_ARG_POINTER
15628 || REGNO (XEXP (rtl, 0)) == ARG_POINTER_REGNUM
15629 #endif
15631 /* Big endian correction check. */
15632 && BYTES_BIG_ENDIAN
15633 && TYPE_MODE (TREE_TYPE (decl)) != GET_MODE (rtl)
15634 && (GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl)))
15635 < UNITS_PER_WORD))
15637 enum machine_mode addr_mode = get_address_mode (rtl);
15638 int offset = (UNITS_PER_WORD
15639 - GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl))));
15641 rtl = gen_rtx_MEM (TYPE_MODE (TREE_TYPE (decl)),
15642 plus_constant (addr_mode, XEXP (rtl, 0), offset));
15645 else if (TREE_CODE (decl) == VAR_DECL
15646 && rtl
15647 && MEM_P (rtl)
15648 && GET_MODE (rtl) != TYPE_MODE (TREE_TYPE (decl))
15649 && BYTES_BIG_ENDIAN)
15651 enum machine_mode addr_mode = get_address_mode (rtl);
15652 int rsize = GET_MODE_SIZE (GET_MODE (rtl));
15653 int dsize = GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl)));
15655 /* If a variable is declared "register" yet is smaller than
15656 a register, then if we store the variable to memory, it
15657 looks like we're storing a register-sized value, when in
15658 fact we are not. We need to adjust the offset of the
15659 storage location to reflect the actual value's bytes,
15660 else gdb will not be able to display it. */
15661 if (rsize > dsize)
15662 rtl = gen_rtx_MEM (TYPE_MODE (TREE_TYPE (decl)),
15663 plus_constant (addr_mode, XEXP (rtl, 0),
15664 rsize - dsize));
15667 /* A variable with no DECL_RTL but a DECL_INITIAL is a compile-time constant,
15668 and will have been substituted directly into all expressions that use it.
15669 C does not have such a concept, but C++ and other languages do. */
15670 if (!rtl && TREE_CODE (decl) == VAR_DECL && DECL_INITIAL (decl))
15671 rtl = rtl_for_decl_init (DECL_INITIAL (decl), TREE_TYPE (decl));
15673 if (rtl)
15674 rtl = targetm.delegitimize_address (rtl);
15676 /* If we don't look past the constant pool, we risk emitting a
15677 reference to a constant pool entry that isn't referenced from
15678 code, and thus is not emitted. */
15679 if (rtl)
15680 rtl = avoid_constant_pool_reference (rtl);
15682 /* Try harder to get a rtl. If this symbol ends up not being emitted
15683 in the current CU, resolve_addr will remove the expression referencing
15684 it. */
15685 if (rtl == NULL_RTX
15686 && TREE_CODE (decl) == VAR_DECL
15687 && !DECL_EXTERNAL (decl)
15688 && TREE_STATIC (decl)
15689 && DECL_NAME (decl)
15690 && !DECL_HARD_REGISTER (decl)
15691 && DECL_MODE (decl) != VOIDmode)
15693 rtl = make_decl_rtl_for_debug (decl);
15694 if (!MEM_P (rtl)
15695 || GET_CODE (XEXP (rtl, 0)) != SYMBOL_REF
15696 || SYMBOL_REF_DECL (XEXP (rtl, 0)) != decl)
15697 rtl = NULL_RTX;
15700 return rtl;
15703 /* Check whether decl is a Fortran COMMON symbol. If not, NULL_TREE is
15704 returned. If so, the decl for the COMMON block is returned, and the
15705 value is the offset into the common block for the symbol. */
15707 static tree
15708 fortran_common (tree decl, HOST_WIDE_INT *value)
15710 tree val_expr, cvar;
15711 enum machine_mode mode;
15712 HOST_WIDE_INT bitsize, bitpos;
15713 tree offset;
15714 int unsignedp, volatilep = 0;
15716 /* If the decl isn't a VAR_DECL, or if it isn't static, or if
15717 it does not have a value (the offset into the common area), or if it
15718 is thread local (as opposed to global) then it isn't common, and shouldn't
15719 be handled as such. */
15720 if (TREE_CODE (decl) != VAR_DECL
15721 || !TREE_STATIC (decl)
15722 || !DECL_HAS_VALUE_EXPR_P (decl)
15723 || !is_fortran ())
15724 return NULL_TREE;
15726 val_expr = DECL_VALUE_EXPR (decl);
15727 if (TREE_CODE (val_expr) != COMPONENT_REF)
15728 return NULL_TREE;
15730 cvar = get_inner_reference (val_expr, &bitsize, &bitpos, &offset,
15731 &mode, &unsignedp, &volatilep, true);
15733 if (cvar == NULL_TREE
15734 || TREE_CODE (cvar) != VAR_DECL
15735 || DECL_ARTIFICIAL (cvar)
15736 || !TREE_PUBLIC (cvar))
15737 return NULL_TREE;
15739 *value = 0;
15740 if (offset != NULL)
15742 if (!tree_fits_shwi_p (offset))
15743 return NULL_TREE;
15744 *value = tree_to_shwi (offset);
15746 if (bitpos != 0)
15747 *value += bitpos / BITS_PER_UNIT;
15749 return cvar;
15752 /* Generate *either* a DW_AT_location attribute or else a DW_AT_const_value
15753 data attribute for a variable or a parameter. We generate the
15754 DW_AT_const_value attribute only in those cases where the given variable
15755 or parameter does not have a true "location" either in memory or in a
15756 register. This can happen (for example) when a constant is passed as an
15757 actual argument in a call to an inline function. (It's possible that
15758 these things can crop up in other ways also.) Note that one type of
15759 constant value which can be passed into an inlined function is a constant
15760 pointer. This can happen for example if an actual argument in an inlined
15761 function call evaluates to a compile-time constant address.
15763 CACHE_P is true if it is worth caching the location list for DECL,
15764 so that future calls can reuse it rather than regenerate it from scratch.
15765 This is true for BLOCK_NONLOCALIZED_VARS in inlined subroutines,
15766 since we will need to refer to them each time the function is inlined. */
15768 static bool
15769 add_location_or_const_value_attribute (dw_die_ref die, tree decl, bool cache_p,
15770 enum dwarf_attribute attr)
15772 rtx rtl;
15773 dw_loc_list_ref list;
15774 var_loc_list *loc_list;
15775 cached_dw_loc_list *cache;
15776 void **slot;
15778 if (TREE_CODE (decl) == ERROR_MARK)
15779 return false;
15781 gcc_assert (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == PARM_DECL
15782 || TREE_CODE (decl) == RESULT_DECL);
15784 /* Try to get some constant RTL for this decl, and use that as the value of
15785 the location. */
15787 rtl = rtl_for_decl_location (decl);
15788 if (rtl && (CONSTANT_P (rtl) || GET_CODE (rtl) == CONST_STRING)
15789 && add_const_value_attribute (die, rtl))
15790 return true;
15792 /* See if we have single element location list that is equivalent to
15793 a constant value. That way we are better to use add_const_value_attribute
15794 rather than expanding constant value equivalent. */
15795 loc_list = lookup_decl_loc (decl);
15796 if (loc_list
15797 && loc_list->first
15798 && loc_list->first->next == NULL
15799 && NOTE_P (loc_list->first->loc)
15800 && NOTE_VAR_LOCATION (loc_list->first->loc)
15801 && NOTE_VAR_LOCATION_LOC (loc_list->first->loc))
15803 struct var_loc_node *node;
15805 node = loc_list->first;
15806 rtl = NOTE_VAR_LOCATION_LOC (node->loc);
15807 if (GET_CODE (rtl) == EXPR_LIST)
15808 rtl = XEXP (rtl, 0);
15809 if ((CONSTANT_P (rtl) || GET_CODE (rtl) == CONST_STRING)
15810 && add_const_value_attribute (die, rtl))
15811 return true;
15813 /* If this decl is from BLOCK_NONLOCALIZED_VARS, we might need its
15814 list several times. See if we've already cached the contents. */
15815 list = NULL;
15816 if (loc_list == NULL || cached_dw_loc_list_table == NULL)
15817 cache_p = false;
15818 if (cache_p)
15820 cache = (cached_dw_loc_list *)
15821 htab_find_with_hash (cached_dw_loc_list_table, decl, DECL_UID (decl));
15822 if (cache)
15823 list = cache->loc_list;
15825 if (list == NULL)
15827 list = loc_list_from_tree (decl, decl_by_reference_p (decl) ? 0 : 2);
15828 /* It is usually worth caching this result if the decl is from
15829 BLOCK_NONLOCALIZED_VARS and if the list has at least two elements. */
15830 if (cache_p && list && list->dw_loc_next)
15832 slot = htab_find_slot_with_hash (cached_dw_loc_list_table, decl,
15833 DECL_UID (decl), INSERT);
15834 cache = ggc_cleared_alloc<cached_dw_loc_list> ();
15835 cache->decl_id = DECL_UID (decl);
15836 cache->loc_list = list;
15837 *slot = cache;
15840 if (list)
15842 add_AT_location_description (die, attr, list);
15843 return true;
15845 /* None of that worked, so it must not really have a location;
15846 try adding a constant value attribute from the DECL_INITIAL. */
15847 return tree_add_const_value_attribute_for_decl (die, decl);
15850 /* Add VARIABLE and DIE into deferred locations list. */
15852 static void
15853 defer_location (tree variable, dw_die_ref die)
15855 deferred_locations entry;
15856 entry.variable = variable;
15857 entry.die = die;
15858 vec_safe_push (deferred_locations_list, entry);
15861 /* Helper function for tree_add_const_value_attribute. Natively encode
15862 initializer INIT into an array. Return true if successful. */
15864 static bool
15865 native_encode_initializer (tree init, unsigned char *array, int size)
15867 tree type;
15869 if (init == NULL_TREE)
15870 return false;
15872 STRIP_NOPS (init);
15873 switch (TREE_CODE (init))
15875 case STRING_CST:
15876 type = TREE_TYPE (init);
15877 if (TREE_CODE (type) == ARRAY_TYPE)
15879 tree enttype = TREE_TYPE (type);
15880 enum machine_mode mode = TYPE_MODE (enttype);
15882 if (GET_MODE_CLASS (mode) != MODE_INT || GET_MODE_SIZE (mode) != 1)
15883 return false;
15884 if (int_size_in_bytes (type) != size)
15885 return false;
15886 if (size > TREE_STRING_LENGTH (init))
15888 memcpy (array, TREE_STRING_POINTER (init),
15889 TREE_STRING_LENGTH (init));
15890 memset (array + TREE_STRING_LENGTH (init),
15891 '\0', size - TREE_STRING_LENGTH (init));
15893 else
15894 memcpy (array, TREE_STRING_POINTER (init), size);
15895 return true;
15897 return false;
15898 case CONSTRUCTOR:
15899 type = TREE_TYPE (init);
15900 if (int_size_in_bytes (type) != size)
15901 return false;
15902 if (TREE_CODE (type) == ARRAY_TYPE)
15904 HOST_WIDE_INT min_index;
15905 unsigned HOST_WIDE_INT cnt;
15906 int curpos = 0, fieldsize;
15907 constructor_elt *ce;
15909 if (TYPE_DOMAIN (type) == NULL_TREE
15910 || !tree_fits_shwi_p (TYPE_MIN_VALUE (TYPE_DOMAIN (type))))
15911 return false;
15913 fieldsize = int_size_in_bytes (TREE_TYPE (type));
15914 if (fieldsize <= 0)
15915 return false;
15917 min_index = tree_to_shwi (TYPE_MIN_VALUE (TYPE_DOMAIN (type)));
15918 memset (array, '\0', size);
15919 FOR_EACH_VEC_SAFE_ELT (CONSTRUCTOR_ELTS (init), cnt, ce)
15921 tree val = ce->value;
15922 tree index = ce->index;
15923 int pos = curpos;
15924 if (index && TREE_CODE (index) == RANGE_EXPR)
15925 pos = (tree_to_shwi (TREE_OPERAND (index, 0)) - min_index)
15926 * fieldsize;
15927 else if (index)
15928 pos = (tree_to_shwi (index) - min_index) * fieldsize;
15930 if (val)
15932 STRIP_NOPS (val);
15933 if (!native_encode_initializer (val, array + pos, fieldsize))
15934 return false;
15936 curpos = pos + fieldsize;
15937 if (index && TREE_CODE (index) == RANGE_EXPR)
15939 int count = tree_to_shwi (TREE_OPERAND (index, 1))
15940 - tree_to_shwi (TREE_OPERAND (index, 0));
15941 while (count-- > 0)
15943 if (val)
15944 memcpy (array + curpos, array + pos, fieldsize);
15945 curpos += fieldsize;
15948 gcc_assert (curpos <= size);
15950 return true;
15952 else if (TREE_CODE (type) == RECORD_TYPE
15953 || TREE_CODE (type) == UNION_TYPE)
15955 tree field = NULL_TREE;
15956 unsigned HOST_WIDE_INT cnt;
15957 constructor_elt *ce;
15959 if (int_size_in_bytes (type) != size)
15960 return false;
15962 if (TREE_CODE (type) == RECORD_TYPE)
15963 field = TYPE_FIELDS (type);
15965 FOR_EACH_VEC_SAFE_ELT (CONSTRUCTOR_ELTS (init), cnt, ce)
15967 tree val = ce->value;
15968 int pos, fieldsize;
15970 if (ce->index != 0)
15971 field = ce->index;
15973 if (val)
15974 STRIP_NOPS (val);
15976 if (field == NULL_TREE || DECL_BIT_FIELD (field))
15977 return false;
15979 if (TREE_CODE (TREE_TYPE (field)) == ARRAY_TYPE
15980 && TYPE_DOMAIN (TREE_TYPE (field))
15981 && ! TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (field))))
15982 return false;
15983 else if (DECL_SIZE_UNIT (field) == NULL_TREE
15984 || !tree_fits_shwi_p (DECL_SIZE_UNIT (field)))
15985 return false;
15986 fieldsize = tree_to_shwi (DECL_SIZE_UNIT (field));
15987 pos = int_byte_position (field);
15988 gcc_assert (pos + fieldsize <= size);
15989 if (val
15990 && !native_encode_initializer (val, array + pos, fieldsize))
15991 return false;
15993 return true;
15995 return false;
15996 case VIEW_CONVERT_EXPR:
15997 case NON_LVALUE_EXPR:
15998 return native_encode_initializer (TREE_OPERAND (init, 0), array, size);
15999 default:
16000 return native_encode_expr (init, array, size) == size;
16004 /* Attach a DW_AT_const_value attribute to DIE. The value of the
16005 attribute is the const value T. */
16007 static bool
16008 tree_add_const_value_attribute (dw_die_ref die, tree t)
16010 tree init;
16011 tree type = TREE_TYPE (t);
16012 rtx rtl;
16014 if (!t || !TREE_TYPE (t) || TREE_TYPE (t) == error_mark_node)
16015 return false;
16017 init = t;
16018 gcc_assert (!DECL_P (init));
16020 rtl = rtl_for_decl_init (init, type);
16021 if (rtl)
16022 return add_const_value_attribute (die, rtl);
16023 /* If the host and target are sane, try harder. */
16024 else if (CHAR_BIT == 8 && BITS_PER_UNIT == 8
16025 && initializer_constant_valid_p (init, type))
16027 HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (init));
16028 if (size > 0 && (int) size == size)
16030 unsigned char *array = ggc_cleared_vec_alloc<unsigned char> (size);
16032 if (native_encode_initializer (init, array, size))
16034 add_AT_vec (die, DW_AT_const_value, size, 1, array);
16035 return true;
16037 ggc_free (array);
16040 return false;
16043 /* Attach a DW_AT_const_value attribute to VAR_DIE. The value of the
16044 attribute is the const value of T, where T is an integral constant
16045 variable with static storage duration
16046 (so it can't be a PARM_DECL or a RESULT_DECL). */
16048 static bool
16049 tree_add_const_value_attribute_for_decl (dw_die_ref var_die, tree decl)
16052 if (!decl
16053 || (TREE_CODE (decl) != VAR_DECL
16054 && TREE_CODE (decl) != CONST_DECL)
16055 || (TREE_CODE (decl) == VAR_DECL
16056 && !TREE_STATIC (decl)))
16057 return false;
16059 if (TREE_READONLY (decl)
16060 && ! TREE_THIS_VOLATILE (decl)
16061 && DECL_INITIAL (decl))
16062 /* OK */;
16063 else
16064 return false;
16066 /* Don't add DW_AT_const_value if abstract origin already has one. */
16067 if (get_AT (var_die, DW_AT_const_value))
16068 return false;
16070 return tree_add_const_value_attribute (var_die, DECL_INITIAL (decl));
16073 /* Convert the CFI instructions for the current function into a
16074 location list. This is used for DW_AT_frame_base when we targeting
16075 a dwarf2 consumer that does not support the dwarf3
16076 DW_OP_call_frame_cfa. OFFSET is a constant to be added to all CFA
16077 expressions. */
16079 static dw_loc_list_ref
16080 convert_cfa_to_fb_loc_list (HOST_WIDE_INT offset)
16082 int ix;
16083 dw_fde_ref fde;
16084 dw_loc_list_ref list, *list_tail;
16085 dw_cfi_ref cfi;
16086 dw_cfa_location last_cfa, next_cfa;
16087 const char *start_label, *last_label, *section;
16088 dw_cfa_location remember;
16090 fde = cfun->fde;
16091 gcc_assert (fde != NULL);
16093 section = secname_for_decl (current_function_decl);
16094 list_tail = &list;
16095 list = NULL;
16097 memset (&next_cfa, 0, sizeof (next_cfa));
16098 next_cfa.reg = INVALID_REGNUM;
16099 remember = next_cfa;
16101 start_label = fde->dw_fde_begin;
16103 /* ??? Bald assumption that the CIE opcode list does not contain
16104 advance opcodes. */
16105 FOR_EACH_VEC_ELT (*cie_cfi_vec, ix, cfi)
16106 lookup_cfa_1 (cfi, &next_cfa, &remember);
16108 last_cfa = next_cfa;
16109 last_label = start_label;
16111 if (fde->dw_fde_second_begin && fde->dw_fde_switch_cfi_index == 0)
16113 /* If the first partition contained no CFI adjustments, the
16114 CIE opcodes apply to the whole first partition. */
16115 *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset),
16116 fde->dw_fde_begin, fde->dw_fde_end, section);
16117 list_tail =&(*list_tail)->dw_loc_next;
16118 start_label = last_label = fde->dw_fde_second_begin;
16121 FOR_EACH_VEC_SAFE_ELT (fde->dw_fde_cfi, ix, cfi)
16123 switch (cfi->dw_cfi_opc)
16125 case DW_CFA_set_loc:
16126 case DW_CFA_advance_loc1:
16127 case DW_CFA_advance_loc2:
16128 case DW_CFA_advance_loc4:
16129 if (!cfa_equal_p (&last_cfa, &next_cfa))
16131 *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset),
16132 start_label, last_label, section);
16134 list_tail = &(*list_tail)->dw_loc_next;
16135 last_cfa = next_cfa;
16136 start_label = last_label;
16138 last_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
16139 break;
16141 case DW_CFA_advance_loc:
16142 /* The encoding is complex enough that we should never emit this. */
16143 gcc_unreachable ();
16145 default:
16146 lookup_cfa_1 (cfi, &next_cfa, &remember);
16147 break;
16149 if (ix + 1 == fde->dw_fde_switch_cfi_index)
16151 if (!cfa_equal_p (&last_cfa, &next_cfa))
16153 *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset),
16154 start_label, last_label, section);
16156 list_tail = &(*list_tail)->dw_loc_next;
16157 last_cfa = next_cfa;
16158 start_label = last_label;
16160 *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset),
16161 start_label, fde->dw_fde_end, section);
16162 list_tail = &(*list_tail)->dw_loc_next;
16163 start_label = last_label = fde->dw_fde_second_begin;
16167 if (!cfa_equal_p (&last_cfa, &next_cfa))
16169 *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset),
16170 start_label, last_label, section);
16171 list_tail = &(*list_tail)->dw_loc_next;
16172 start_label = last_label;
16175 *list_tail = new_loc_list (build_cfa_loc (&next_cfa, offset),
16176 start_label,
16177 fde->dw_fde_second_begin
16178 ? fde->dw_fde_second_end : fde->dw_fde_end,
16179 section);
16181 if (list && list->dw_loc_next)
16182 gen_llsym (list);
16184 return list;
16187 /* Compute a displacement from the "steady-state frame pointer" to the
16188 frame base (often the same as the CFA), and store it in
16189 frame_pointer_fb_offset. OFFSET is added to the displacement
16190 before the latter is negated. */
16192 static void
16193 compute_frame_pointer_to_fb_displacement (HOST_WIDE_INT offset)
16195 rtx reg, elim;
16197 #ifdef FRAME_POINTER_CFA_OFFSET
16198 reg = frame_pointer_rtx;
16199 offset += FRAME_POINTER_CFA_OFFSET (current_function_decl);
16200 #else
16201 reg = arg_pointer_rtx;
16202 offset += ARG_POINTER_CFA_OFFSET (current_function_decl);
16203 #endif
16205 elim = (ira_use_lra_p
16206 ? lra_eliminate_regs (reg, VOIDmode, NULL_RTX)
16207 : eliminate_regs (reg, VOIDmode, NULL_RTX));
16208 if (GET_CODE (elim) == PLUS)
16210 offset += INTVAL (XEXP (elim, 1));
16211 elim = XEXP (elim, 0);
16214 frame_pointer_fb_offset = -offset;
16216 /* ??? AVR doesn't set up valid eliminations when there is no stack frame
16217 in which to eliminate. This is because it's stack pointer isn't
16218 directly accessible as a register within the ISA. To work around
16219 this, assume that while we cannot provide a proper value for
16220 frame_pointer_fb_offset, we won't need one either. */
16221 frame_pointer_fb_offset_valid
16222 = ((SUPPORTS_STACK_ALIGNMENT
16223 && (elim == hard_frame_pointer_rtx
16224 || elim == stack_pointer_rtx))
16225 || elim == (frame_pointer_needed
16226 ? hard_frame_pointer_rtx
16227 : stack_pointer_rtx));
16230 /* Generate a DW_AT_name attribute given some string value to be included as
16231 the value of the attribute. */
16233 static void
16234 add_name_attribute (dw_die_ref die, const char *name_string)
16236 if (name_string != NULL && *name_string != 0)
16238 if (demangle_name_func)
16239 name_string = (*demangle_name_func) (name_string);
16241 add_AT_string (die, DW_AT_name, name_string);
16245 /* Retrieve the descriptive type of TYPE, if any, make sure it has a
16246 DIE and attach a DW_AT_GNAT_descriptive_type attribute to the DIE
16247 of TYPE accordingly.
16249 ??? This is a temporary measure until after we're able to generate
16250 regular DWARF for the complex Ada type system. */
16252 static void
16253 add_gnat_descriptive_type_attribute (dw_die_ref die, tree type,
16254 dw_die_ref context_die)
16256 tree dtype;
16257 dw_die_ref dtype_die;
16259 if (!lang_hooks.types.descriptive_type)
16260 return;
16262 dtype = lang_hooks.types.descriptive_type (type);
16263 if (!dtype)
16264 return;
16266 dtype_die = lookup_type_die (dtype);
16267 if (!dtype_die)
16269 gen_type_die (dtype, context_die);
16270 dtype_die = lookup_type_die (dtype);
16271 gcc_assert (dtype_die);
16274 add_AT_die_ref (die, DW_AT_GNAT_descriptive_type, dtype_die);
16277 /* Retrieve the comp_dir string suitable for use with DW_AT_comp_dir. */
16279 static const char *
16280 comp_dir_string (void)
16282 const char *wd;
16283 char *wd1;
16284 static const char *cached_wd = NULL;
16286 if (cached_wd != NULL)
16287 return cached_wd;
16289 wd = get_src_pwd ();
16290 if (wd == NULL)
16291 return NULL;
16293 if (DWARF2_DIR_SHOULD_END_WITH_SEPARATOR)
16295 int wdlen;
16297 wdlen = strlen (wd);
16298 wd1 = ggc_vec_alloc<char> (wdlen + 2);
16299 strcpy (wd1, wd);
16300 wd1 [wdlen] = DIR_SEPARATOR;
16301 wd1 [wdlen + 1] = 0;
16302 wd = wd1;
16305 cached_wd = remap_debug_filename (wd);
16306 return cached_wd;
16309 /* Generate a DW_AT_comp_dir attribute for DIE. */
16311 static void
16312 add_comp_dir_attribute (dw_die_ref die)
16314 const char * wd = comp_dir_string ();
16315 if (wd != NULL)
16316 add_AT_string (die, DW_AT_comp_dir, wd);
16319 /* Return the default for DW_AT_lower_bound, or -1 if there is not any
16320 default. */
16322 static int
16323 lower_bound_default (void)
16325 switch (get_AT_unsigned (comp_unit_die (), DW_AT_language))
16327 case DW_LANG_C:
16328 case DW_LANG_C89:
16329 case DW_LANG_C99:
16330 case DW_LANG_C_plus_plus:
16331 case DW_LANG_ObjC:
16332 case DW_LANG_ObjC_plus_plus:
16333 case DW_LANG_Java:
16334 return 0;
16335 case DW_LANG_Fortran77:
16336 case DW_LANG_Fortran90:
16337 case DW_LANG_Fortran95:
16338 return 1;
16339 case DW_LANG_UPC:
16340 case DW_LANG_D:
16341 case DW_LANG_Python:
16342 return dwarf_version >= 4 ? 0 : -1;
16343 case DW_LANG_Ada95:
16344 case DW_LANG_Ada83:
16345 case DW_LANG_Cobol74:
16346 case DW_LANG_Cobol85:
16347 case DW_LANG_Pascal83:
16348 case DW_LANG_Modula2:
16349 case DW_LANG_PLI:
16350 return dwarf_version >= 4 ? 1 : -1;
16351 default:
16352 return -1;
16356 /* Given a tree node describing an array bound (either lower or upper) output
16357 a representation for that bound. */
16359 static void
16360 add_bound_info (dw_die_ref subrange_die, enum dwarf_attribute bound_attr, tree bound)
16362 switch (TREE_CODE (bound))
16364 case ERROR_MARK:
16365 return;
16367 /* All fixed-bounds are represented by INTEGER_CST nodes. */
16368 case INTEGER_CST:
16370 unsigned int prec = simple_type_size_in_bits (TREE_TYPE (bound));
16371 int dflt;
16373 /* Use the default if possible. */
16374 if (bound_attr == DW_AT_lower_bound
16375 && tree_fits_shwi_p (bound)
16376 && (dflt = lower_bound_default ()) != -1
16377 && tree_to_shwi (bound) == dflt)
16380 /* If HOST_WIDE_INT is big enough then represent the bound as
16381 a constant value. We need to choose a form based on
16382 whether the type is signed or unsigned. We cannot just
16383 call add_AT_unsigned if the value itself is positive
16384 (add_AT_unsigned might add the unsigned value encoded as
16385 DW_FORM_data[1248]). Some DWARF consumers will lookup the
16386 bounds type and then sign extend any unsigned values found
16387 for signed types. This is needed only for
16388 DW_AT_{lower,upper}_bound, since for most other attributes,
16389 consumers will treat DW_FORM_data[1248] as unsigned values,
16390 regardless of the underlying type. */
16391 else if (prec <= HOST_BITS_PER_WIDE_INT
16392 || tree_fits_uhwi_p (bound))
16394 if (TYPE_UNSIGNED (TREE_TYPE (bound)))
16395 add_AT_unsigned (subrange_die, bound_attr,
16396 TREE_INT_CST_LOW (bound));
16397 else
16398 add_AT_int (subrange_die, bound_attr, TREE_INT_CST_LOW (bound));
16400 else
16401 /* Otherwise represent the bound as an unsigned value with
16402 the precision of its type. The precision and signedness
16403 of the type will be necessary to re-interpret it
16404 unambiguously. */
16405 add_AT_wide (subrange_die, bound_attr, bound);
16407 break;
16409 CASE_CONVERT:
16410 case VIEW_CONVERT_EXPR:
16411 add_bound_info (subrange_die, bound_attr, TREE_OPERAND (bound, 0));
16412 break;
16414 case SAVE_EXPR:
16415 break;
16417 case VAR_DECL:
16418 case PARM_DECL:
16419 case RESULT_DECL:
16421 dw_die_ref decl_die = lookup_decl_die (bound);
16423 /* ??? Can this happen, or should the variable have been bound
16424 first? Probably it can, since I imagine that we try to create
16425 the types of parameters in the order in which they exist in
16426 the list, and won't have created a forward reference to a
16427 later parameter. */
16428 if (decl_die != NULL)
16430 add_AT_die_ref (subrange_die, bound_attr, decl_die);
16431 break;
16434 /* FALLTHRU */
16436 default:
16438 /* Otherwise try to create a stack operation procedure to
16439 evaluate the value of the array bound. */
16441 dw_die_ref ctx, decl_die;
16442 dw_loc_list_ref list;
16444 list = loc_list_from_tree (bound, 2);
16445 if (list == NULL || single_element_loc_list_p (list))
16447 /* If DW_AT_*bound is not a reference nor constant, it is
16448 a DWARF expression rather than location description.
16449 For that loc_list_from_tree (bound, 0) is needed.
16450 If that fails to give a single element list,
16451 fall back to outputting this as a reference anyway. */
16452 dw_loc_list_ref list2 = loc_list_from_tree (bound, 0);
16453 if (list2 && single_element_loc_list_p (list2))
16455 add_AT_loc (subrange_die, bound_attr, list2->expr);
16456 break;
16459 if (list == NULL)
16460 break;
16462 if (current_function_decl == 0)
16463 ctx = comp_unit_die ();
16464 else
16465 ctx = lookup_decl_die (current_function_decl);
16467 decl_die = new_die (DW_TAG_variable, ctx, bound);
16468 add_AT_flag (decl_die, DW_AT_artificial, 1);
16469 add_type_attribute (decl_die, TREE_TYPE (bound), TYPE_QUAL_CONST, ctx);
16470 add_AT_location_description (decl_die, DW_AT_location, list);
16471 add_AT_die_ref (subrange_die, bound_attr, decl_die);
16472 break;
16477 /* Add subscript info to TYPE_DIE, describing an array TYPE, collapsing
16478 possibly nested array subscripts in a flat sequence if COLLAPSE_P is true.
16479 Note that the block of subscript information for an array type also
16480 includes information about the element type of the given array type. */
16482 static void
16483 add_subscript_info (dw_die_ref type_die, tree type, bool collapse_p)
16485 unsigned dimension_number;
16486 tree lower, upper;
16487 dw_die_ref subrange_die;
16489 for (dimension_number = 0;
16490 TREE_CODE (type) == ARRAY_TYPE && (dimension_number == 0 || collapse_p);
16491 type = TREE_TYPE (type), dimension_number++)
16493 tree domain = TYPE_DOMAIN (type);
16495 if (TYPE_STRING_FLAG (type) && is_fortran () && dimension_number > 0)
16496 break;
16498 /* Arrays come in three flavors: Unspecified bounds, fixed bounds,
16499 and (in GNU C only) variable bounds. Handle all three forms
16500 here. */
16501 subrange_die = new_die (DW_TAG_subrange_type, type_die, NULL);
16502 if (domain)
16504 /* We have an array type with specified bounds. */
16505 lower = TYPE_MIN_VALUE (domain);
16506 upper = TYPE_MAX_VALUE (domain);
16508 /* Define the index type. */
16509 if (TREE_TYPE (domain))
16511 /* ??? This is probably an Ada unnamed subrange type. Ignore the
16512 TREE_TYPE field. We can't emit debug info for this
16513 because it is an unnamed integral type. */
16514 if (TREE_CODE (domain) == INTEGER_TYPE
16515 && TYPE_NAME (domain) == NULL_TREE
16516 && TREE_CODE (TREE_TYPE (domain)) == INTEGER_TYPE
16517 && TYPE_NAME (TREE_TYPE (domain)) == NULL_TREE)
16519 else
16520 add_type_attribute (subrange_die, TREE_TYPE (domain),
16521 TYPE_UNQUALIFIED, type_die);
16524 /* ??? If upper is NULL, the array has unspecified length,
16525 but it does have a lower bound. This happens with Fortran
16526 dimension arr(N:*)
16527 Since the debugger is definitely going to need to know N
16528 to produce useful results, go ahead and output the lower
16529 bound solo, and hope the debugger can cope. */
16531 add_bound_info (subrange_die, DW_AT_lower_bound, lower);
16532 if (upper)
16533 add_bound_info (subrange_die, DW_AT_upper_bound, upper);
16536 /* Otherwise we have an array type with an unspecified length. The
16537 DWARF-2 spec does not say how to handle this; let's just leave out the
16538 bounds. */
16542 /* Add a DW_AT_byte_size attribute to DIE with TREE_NODE's size. */
16544 static void
16545 add_byte_size_attribute (dw_die_ref die, tree tree_node)
16547 dw_die_ref decl_die;
16548 HOST_WIDE_INT size;
16550 switch (TREE_CODE (tree_node))
16552 case ERROR_MARK:
16553 size = 0;
16554 break;
16555 case ENUMERAL_TYPE:
16556 case RECORD_TYPE:
16557 case UNION_TYPE:
16558 case QUAL_UNION_TYPE:
16559 if (TREE_CODE (TYPE_SIZE_UNIT (tree_node)) == VAR_DECL
16560 && (decl_die = lookup_decl_die (TYPE_SIZE_UNIT (tree_node))))
16562 add_AT_die_ref (die, DW_AT_byte_size, decl_die);
16563 return;
16565 size = int_size_in_bytes (tree_node);
16566 break;
16567 case FIELD_DECL:
16568 /* For a data member of a struct or union, the DW_AT_byte_size is
16569 generally given as the number of bytes normally allocated for an
16570 object of the *declared* type of the member itself. This is true
16571 even for bit-fields. */
16572 size = int_size_in_bytes (field_type (tree_node));
16573 break;
16574 default:
16575 gcc_unreachable ();
16578 /* Note that `size' might be -1 when we get to this point. If it is, that
16579 indicates that the byte size of the entity in question is variable. We
16580 have no good way of expressing this fact in Dwarf at the present time,
16581 when location description was not used by the caller code instead. */
16582 if (size >= 0)
16583 add_AT_unsigned (die, DW_AT_byte_size, size);
16586 /* For a FIELD_DECL node which represents a bit-field, output an attribute
16587 which specifies the distance in bits from the highest order bit of the
16588 "containing object" for the bit-field to the highest order bit of the
16589 bit-field itself.
16591 For any given bit-field, the "containing object" is a hypothetical object
16592 (of some integral or enum type) within which the given bit-field lives. The
16593 type of this hypothetical "containing object" is always the same as the
16594 declared type of the individual bit-field itself. The determination of the
16595 exact location of the "containing object" for a bit-field is rather
16596 complicated. It's handled by the `field_byte_offset' function (above).
16598 Note that it is the size (in bytes) of the hypothetical "containing object"
16599 which will be given in the DW_AT_byte_size attribute for this bit-field.
16600 (See `byte_size_attribute' above). */
16602 static inline void
16603 add_bit_offset_attribute (dw_die_ref die, tree decl)
16605 HOST_WIDE_INT object_offset_in_bytes = field_byte_offset (decl);
16606 tree type = DECL_BIT_FIELD_TYPE (decl);
16607 HOST_WIDE_INT bitpos_int;
16608 HOST_WIDE_INT highest_order_object_bit_offset;
16609 HOST_WIDE_INT highest_order_field_bit_offset;
16610 HOST_WIDE_INT bit_offset;
16612 /* Must be a field and a bit field. */
16613 gcc_assert (type && TREE_CODE (decl) == FIELD_DECL);
16615 /* We can't yet handle bit-fields whose offsets are variable, so if we
16616 encounter such things, just return without generating any attribute
16617 whatsoever. Likewise for variable or too large size. */
16618 if (! tree_fits_shwi_p (bit_position (decl))
16619 || ! tree_fits_uhwi_p (DECL_SIZE (decl)))
16620 return;
16622 bitpos_int = int_bit_position (decl);
16624 /* Note that the bit offset is always the distance (in bits) from the
16625 highest-order bit of the "containing object" to the highest-order bit of
16626 the bit-field itself. Since the "high-order end" of any object or field
16627 is different on big-endian and little-endian machines, the computation
16628 below must take account of these differences. */
16629 highest_order_object_bit_offset = object_offset_in_bytes * BITS_PER_UNIT;
16630 highest_order_field_bit_offset = bitpos_int;
16632 if (! BYTES_BIG_ENDIAN)
16634 highest_order_field_bit_offset += tree_to_shwi (DECL_SIZE (decl));
16635 highest_order_object_bit_offset += simple_type_size_in_bits (type);
16638 bit_offset
16639 = (! BYTES_BIG_ENDIAN
16640 ? highest_order_object_bit_offset - highest_order_field_bit_offset
16641 : highest_order_field_bit_offset - highest_order_object_bit_offset);
16643 if (bit_offset < 0)
16644 add_AT_int (die, DW_AT_bit_offset, bit_offset);
16645 else
16646 add_AT_unsigned (die, DW_AT_bit_offset, (unsigned HOST_WIDE_INT) bit_offset);
16649 /* For a FIELD_DECL node which represents a bit field, output an attribute
16650 which specifies the length in bits of the given field. */
16652 static inline void
16653 add_bit_size_attribute (dw_die_ref die, tree decl)
16655 /* Must be a field and a bit field. */
16656 gcc_assert (TREE_CODE (decl) == FIELD_DECL
16657 && DECL_BIT_FIELD_TYPE (decl));
16659 if (tree_fits_uhwi_p (DECL_SIZE (decl)))
16660 add_AT_unsigned (die, DW_AT_bit_size, tree_to_uhwi (DECL_SIZE (decl)));
16663 /* If the compiled language is ANSI C, then add a 'prototyped'
16664 attribute, if arg types are given for the parameters of a function. */
16666 static inline void
16667 add_prototyped_attribute (dw_die_ref die, tree func_type)
16669 if (get_AT_unsigned (comp_unit_die (), DW_AT_language) == DW_LANG_C89
16670 && prototype_p (func_type))
16671 add_AT_flag (die, DW_AT_prototyped, 1);
16674 /* Add an 'abstract_origin' attribute below a given DIE. The DIE is found
16675 by looking in either the type declaration or object declaration
16676 equate table. */
16678 static inline dw_die_ref
16679 add_abstract_origin_attribute (dw_die_ref die, tree origin)
16681 dw_die_ref origin_die = NULL;
16683 if (TREE_CODE (origin) != FUNCTION_DECL)
16685 /* We may have gotten separated from the block for the inlined
16686 function, if we're in an exception handler or some such; make
16687 sure that the abstract function has been written out.
16689 Doing this for nested functions is wrong, however; functions are
16690 distinct units, and our context might not even be inline. */
16691 tree fn = origin;
16693 if (TYPE_P (fn))
16694 fn = TYPE_STUB_DECL (fn);
16696 fn = decl_function_context (fn);
16697 if (fn)
16698 dwarf2out_abstract_function (fn);
16701 if (DECL_P (origin))
16702 origin_die = lookup_decl_die (origin);
16703 else if (TYPE_P (origin))
16704 origin_die = lookup_type_die (origin);
16706 /* XXX: Functions that are never lowered don't always have correct block
16707 trees (in the case of java, they simply have no block tree, in some other
16708 languages). For these functions, there is nothing we can really do to
16709 output correct debug info for inlined functions in all cases. Rather
16710 than die, we'll just produce deficient debug info now, in that we will
16711 have variables without a proper abstract origin. In the future, when all
16712 functions are lowered, we should re-add a gcc_assert (origin_die)
16713 here. */
16715 if (origin_die)
16716 add_AT_die_ref (die, DW_AT_abstract_origin, origin_die);
16717 return origin_die;
16720 /* We do not currently support the pure_virtual attribute. */
16722 static inline void
16723 add_pure_or_virtual_attribute (dw_die_ref die, tree func_decl)
16725 if (DECL_VINDEX (func_decl))
16727 add_AT_unsigned (die, DW_AT_virtuality, DW_VIRTUALITY_virtual);
16729 if (tree_fits_shwi_p (DECL_VINDEX (func_decl)))
16730 add_AT_loc (die, DW_AT_vtable_elem_location,
16731 new_loc_descr (DW_OP_constu,
16732 tree_to_shwi (DECL_VINDEX (func_decl)),
16733 0));
16735 /* GNU extension: Record what type this method came from originally. */
16736 if (debug_info_level > DINFO_LEVEL_TERSE
16737 && DECL_CONTEXT (func_decl))
16738 add_AT_die_ref (die, DW_AT_containing_type,
16739 lookup_type_die (DECL_CONTEXT (func_decl)));
16743 /* Add a DW_AT_linkage_name or DW_AT_MIPS_linkage_name attribute for the
16744 given decl. This used to be a vendor extension until after DWARF 4
16745 standardized it. */
16747 static void
16748 add_linkage_attr (dw_die_ref die, tree decl)
16750 const char *name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
16752 /* Mimic what assemble_name_raw does with a leading '*'. */
16753 if (name[0] == '*')
16754 name = &name[1];
16756 if (dwarf_version >= 4)
16757 add_AT_string (die, DW_AT_linkage_name, name);
16758 else
16759 add_AT_string (die, DW_AT_MIPS_linkage_name, name);
16762 /* Add source coordinate attributes for the given decl. */
16764 static void
16765 add_src_coords_attributes (dw_die_ref die, tree decl)
16767 expanded_location s;
16769 if (LOCATION_LOCUS (DECL_SOURCE_LOCATION (decl)) == UNKNOWN_LOCATION)
16770 return;
16771 s = expand_location (DECL_SOURCE_LOCATION (decl));
16772 add_AT_file (die, DW_AT_decl_file, lookup_filename (s.file));
16773 add_AT_unsigned (die, DW_AT_decl_line, s.line);
16776 /* Add DW_AT_{,MIPS_}linkage_name attribute for the given decl. */
16778 static void
16779 add_linkage_name (dw_die_ref die, tree decl)
16781 if (debug_info_level > DINFO_LEVEL_NONE
16782 && (TREE_CODE (decl) == FUNCTION_DECL || TREE_CODE (decl) == VAR_DECL)
16783 && TREE_PUBLIC (decl)
16784 && !(TREE_CODE (decl) == VAR_DECL && DECL_REGISTER (decl))
16785 && die->die_tag != DW_TAG_member)
16787 /* Defer until we have an assembler name set. */
16788 if (!DECL_ASSEMBLER_NAME_SET_P (decl))
16790 limbo_die_node *asm_name;
16792 asm_name = ggc_cleared_alloc<limbo_die_node> ();
16793 asm_name->die = die;
16794 asm_name->created_for = decl;
16795 asm_name->next = deferred_asm_name;
16796 deferred_asm_name = asm_name;
16798 else if (DECL_ASSEMBLER_NAME (decl) != DECL_NAME (decl))
16799 add_linkage_attr (die, decl);
16803 /* Add a DW_AT_name attribute and source coordinate attribute for the
16804 given decl, but only if it actually has a name. */
16806 static void
16807 add_name_and_src_coords_attributes (dw_die_ref die, tree decl)
16809 tree decl_name;
16811 decl_name = DECL_NAME (decl);
16812 if (decl_name != NULL && IDENTIFIER_POINTER (decl_name) != NULL)
16814 const char *name = dwarf2_name (decl, 0);
16815 if (name)
16816 add_name_attribute (die, name);
16817 if (! DECL_ARTIFICIAL (decl))
16818 add_src_coords_attributes (die, decl);
16820 add_linkage_name (die, decl);
16823 #ifdef VMS_DEBUGGING_INFO
16824 /* Get the function's name, as described by its RTL. This may be different
16825 from the DECL_NAME name used in the source file. */
16826 if (TREE_CODE (decl) == FUNCTION_DECL && TREE_ASM_WRITTEN (decl))
16828 add_AT_addr (die, DW_AT_VMS_rtnbeg_pd_address,
16829 XEXP (DECL_RTL (decl), 0), false);
16830 vec_safe_push (used_rtx_array, XEXP (DECL_RTL (decl), 0));
16832 #endif /* VMS_DEBUGGING_INFO */
16835 #ifdef VMS_DEBUGGING_INFO
16836 /* Output the debug main pointer die for VMS */
16838 void
16839 dwarf2out_vms_debug_main_pointer (void)
16841 char label[MAX_ARTIFICIAL_LABEL_BYTES];
16842 dw_die_ref die;
16844 /* Allocate the VMS debug main subprogram die. */
16845 die = ggc_cleared_alloc<die_node> ();
16846 die->die_tag = DW_TAG_subprogram;
16847 add_name_attribute (die, VMS_DEBUG_MAIN_POINTER);
16848 ASM_GENERATE_INTERNAL_LABEL (label, PROLOGUE_END_LABEL,
16849 current_function_funcdef_no);
16850 add_AT_lbl_id (die, DW_AT_entry_pc, label);
16852 /* Make it the first child of comp_unit_die (). */
16853 die->die_parent = comp_unit_die ();
16854 if (comp_unit_die ()->die_child)
16856 die->die_sib = comp_unit_die ()->die_child->die_sib;
16857 comp_unit_die ()->die_child->die_sib = die;
16859 else
16861 die->die_sib = die;
16862 comp_unit_die ()->die_child = die;
16865 #endif /* VMS_DEBUGGING_INFO */
16867 /* Push a new declaration scope. */
16869 static void
16870 push_decl_scope (tree scope)
16872 vec_safe_push (decl_scope_table, scope);
16875 /* Pop a declaration scope. */
16877 static inline void
16878 pop_decl_scope (void)
16880 decl_scope_table->pop ();
16883 /* walk_tree helper function for uses_local_type, below. */
16885 static tree
16886 uses_local_type_r (tree *tp, int *walk_subtrees, void *data ATTRIBUTE_UNUSED)
16888 if (!TYPE_P (*tp))
16889 *walk_subtrees = 0;
16890 else
16892 tree name = TYPE_NAME (*tp);
16893 if (name && DECL_P (name) && decl_function_context (name))
16894 return *tp;
16896 return NULL_TREE;
16899 /* If TYPE involves a function-local type (including a local typedef to a
16900 non-local type), returns that type; otherwise returns NULL_TREE. */
16902 static tree
16903 uses_local_type (tree type)
16905 tree used = walk_tree_without_duplicates (&type, uses_local_type_r, NULL);
16906 return used;
16909 /* Return the DIE for the scope that immediately contains this type.
16910 Non-named types that do not involve a function-local type get global
16911 scope. Named types nested in namespaces or other types get their
16912 containing scope. All other types (i.e. function-local named types) get
16913 the current active scope. */
16915 static dw_die_ref
16916 scope_die_for (tree t, dw_die_ref context_die)
16918 dw_die_ref scope_die = NULL;
16919 tree containing_scope;
16921 /* Non-types always go in the current scope. */
16922 gcc_assert (TYPE_P (t));
16924 /* Use the scope of the typedef, rather than the scope of the type
16925 it refers to. */
16926 if (TYPE_NAME (t) && DECL_P (TYPE_NAME (t)))
16927 containing_scope = DECL_CONTEXT (TYPE_NAME (t));
16928 else
16929 containing_scope = TYPE_CONTEXT (t);
16931 /* Use the containing namespace if there is one. */
16932 if (containing_scope && TREE_CODE (containing_scope) == NAMESPACE_DECL)
16934 if (context_die == lookup_decl_die (containing_scope))
16935 /* OK */;
16936 else if (debug_info_level > DINFO_LEVEL_TERSE)
16937 context_die = get_context_die (containing_scope);
16938 else
16939 containing_scope = NULL_TREE;
16942 /* Ignore function type "scopes" from the C frontend. They mean that
16943 a tagged type is local to a parmlist of a function declarator, but
16944 that isn't useful to DWARF. */
16945 if (containing_scope && TREE_CODE (containing_scope) == FUNCTION_TYPE)
16946 containing_scope = NULL_TREE;
16948 if (SCOPE_FILE_SCOPE_P (containing_scope))
16950 /* If T uses a local type keep it local as well, to avoid references
16951 to function-local DIEs from outside the function. */
16952 if (current_function_decl && uses_local_type (t))
16953 scope_die = context_die;
16954 else
16955 scope_die = comp_unit_die ();
16957 else if (TYPE_P (containing_scope))
16959 /* For types, we can just look up the appropriate DIE. */
16960 if (debug_info_level > DINFO_LEVEL_TERSE)
16961 scope_die = get_context_die (containing_scope);
16962 else
16964 scope_die = lookup_type_die_strip_naming_typedef (containing_scope);
16965 if (scope_die == NULL)
16966 scope_die = comp_unit_die ();
16969 else
16970 scope_die = context_die;
16972 return scope_die;
16975 /* Returns nonzero if CONTEXT_DIE is internal to a function. */
16977 static inline int
16978 local_scope_p (dw_die_ref context_die)
16980 for (; context_die; context_die = context_die->die_parent)
16981 if (context_die->die_tag == DW_TAG_inlined_subroutine
16982 || context_die->die_tag == DW_TAG_subprogram)
16983 return 1;
16985 return 0;
16988 /* Returns nonzero if CONTEXT_DIE is a class. */
16990 static inline int
16991 class_scope_p (dw_die_ref context_die)
16993 return (context_die
16994 && (context_die->die_tag == DW_TAG_structure_type
16995 || context_die->die_tag == DW_TAG_class_type
16996 || context_die->die_tag == DW_TAG_interface_type
16997 || context_die->die_tag == DW_TAG_union_type));
17000 /* Returns nonzero if CONTEXT_DIE is a class or namespace, for deciding
17001 whether or not to treat a DIE in this context as a declaration. */
17003 static inline int
17004 class_or_namespace_scope_p (dw_die_ref context_die)
17006 return (class_scope_p (context_die)
17007 || (context_die && context_die->die_tag == DW_TAG_namespace));
17010 /* Many forms of DIEs require a "type description" attribute. This
17011 routine locates the proper "type descriptor" die for the type given
17012 by 'type' plus any additional qualifiers given by 'cv_quals', and
17013 adds a DW_AT_type attribute below the given die. */
17015 static void
17016 add_type_attribute (dw_die_ref object_die, tree type, int cv_quals,
17017 dw_die_ref context_die)
17019 enum tree_code code = TREE_CODE (type);
17020 dw_die_ref type_die = NULL;
17022 /* ??? If this type is an unnamed subrange type of an integral, floating-point
17023 or fixed-point type, use the inner type. This is because we have no
17024 support for unnamed types in base_type_die. This can happen if this is
17025 an Ada subrange type. Correct solution is emit a subrange type die. */
17026 if ((code == INTEGER_TYPE || code == REAL_TYPE || code == FIXED_POINT_TYPE)
17027 && TREE_TYPE (type) != 0 && TYPE_NAME (type) == 0)
17028 type = TREE_TYPE (type), code = TREE_CODE (type);
17030 if (code == ERROR_MARK
17031 /* Handle a special case. For functions whose return type is void, we
17032 generate *no* type attribute. (Note that no object may have type
17033 `void', so this only applies to function return types). */
17034 || code == VOID_TYPE)
17035 return;
17037 type_die = modified_type_die (type,
17038 cv_quals | TYPE_QUALS_NO_ADDR_SPACE (type),
17039 context_die);
17041 if (type_die != NULL)
17042 add_AT_die_ref (object_die, DW_AT_type, type_die);
17045 /* Given an object die, add the calling convention attribute for the
17046 function call type. */
17047 static void
17048 add_calling_convention_attribute (dw_die_ref subr_die, tree decl)
17050 enum dwarf_calling_convention value = DW_CC_normal;
17052 value = ((enum dwarf_calling_convention)
17053 targetm.dwarf_calling_convention (TREE_TYPE (decl)));
17055 if (is_fortran ()
17056 && !strcmp (IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)), "MAIN__"))
17058 /* DWARF 2 doesn't provide a way to identify a program's source-level
17059 entry point. DW_AT_calling_convention attributes are only meant
17060 to describe functions' calling conventions. However, lacking a
17061 better way to signal the Fortran main program, we used this for
17062 a long time, following existing custom. Now, DWARF 4 has
17063 DW_AT_main_subprogram, which we add below, but some tools still
17064 rely on the old way, which we thus keep. */
17065 value = DW_CC_program;
17067 if (dwarf_version >= 4 || !dwarf_strict)
17068 add_AT_flag (subr_die, DW_AT_main_subprogram, 1);
17071 /* Only add the attribute if the backend requests it, and
17072 is not DW_CC_normal. */
17073 if (value && (value != DW_CC_normal))
17074 add_AT_unsigned (subr_die, DW_AT_calling_convention, value);
17077 /* Given a tree pointer to a struct, class, union, or enum type node, return
17078 a pointer to the (string) tag name for the given type, or zero if the type
17079 was declared without a tag. */
17081 static const char *
17082 type_tag (const_tree type)
17084 const char *name = 0;
17086 if (TYPE_NAME (type) != 0)
17088 tree t = 0;
17090 /* Find the IDENTIFIER_NODE for the type name. */
17091 if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE
17092 && !TYPE_NAMELESS (type))
17093 t = TYPE_NAME (type);
17095 /* The g++ front end makes the TYPE_NAME of *each* tagged type point to
17096 a TYPE_DECL node, regardless of whether or not a `typedef' was
17097 involved. */
17098 else if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
17099 && ! DECL_IGNORED_P (TYPE_NAME (type)))
17101 /* We want to be extra verbose. Don't call dwarf_name if
17102 DECL_NAME isn't set. The default hook for decl_printable_name
17103 doesn't like that, and in this context it's correct to return
17104 0, instead of "<anonymous>" or the like. */
17105 if (DECL_NAME (TYPE_NAME (type))
17106 && !DECL_NAMELESS (TYPE_NAME (type)))
17107 name = lang_hooks.dwarf_name (TYPE_NAME (type), 2);
17110 /* Now get the name as a string, or invent one. */
17111 if (!name && t != 0)
17112 name = IDENTIFIER_POINTER (t);
17115 return (name == 0 || *name == '\0') ? 0 : name;
17118 /* Return the type associated with a data member, make a special check
17119 for bit field types. */
17121 static inline tree
17122 member_declared_type (const_tree member)
17124 return (DECL_BIT_FIELD_TYPE (member)
17125 ? DECL_BIT_FIELD_TYPE (member) : TREE_TYPE (member));
17128 /* Get the decl's label, as described by its RTL. This may be different
17129 from the DECL_NAME name used in the source file. */
17131 #if 0
17132 static const char *
17133 decl_start_label (tree decl)
17135 rtx x;
17136 const char *fnname;
17138 x = DECL_RTL (decl);
17139 gcc_assert (MEM_P (x));
17141 x = XEXP (x, 0);
17142 gcc_assert (GET_CODE (x) == SYMBOL_REF);
17144 fnname = XSTR (x, 0);
17145 return fnname;
17147 #endif
17149 /* These routines generate the internal representation of the DIE's for
17150 the compilation unit. Debugging information is collected by walking
17151 the declaration trees passed in from dwarf2out_decl(). */
17153 static void
17154 gen_array_type_die (tree type, dw_die_ref context_die)
17156 dw_die_ref scope_die = scope_die_for (type, context_die);
17157 dw_die_ref array_die;
17159 /* GNU compilers represent multidimensional array types as sequences of one
17160 dimensional array types whose element types are themselves array types.
17161 We sometimes squish that down to a single array_type DIE with multiple
17162 subscripts in the Dwarf debugging info. The draft Dwarf specification
17163 say that we are allowed to do this kind of compression in C, because
17164 there is no difference between an array of arrays and a multidimensional
17165 array. We don't do this for Ada to remain as close as possible to the
17166 actual representation, which is especially important against the language
17167 flexibilty wrt arrays of variable size. */
17169 bool collapse_nested_arrays = !is_ada ();
17170 tree element_type;
17172 /* Emit DW_TAG_string_type for Fortran character types (with kind 1 only, as
17173 DW_TAG_string_type doesn't have DW_AT_type attribute). */
17174 if (TYPE_STRING_FLAG (type)
17175 && TREE_CODE (type) == ARRAY_TYPE
17176 && is_fortran ()
17177 && TYPE_MODE (TREE_TYPE (type)) == TYPE_MODE (char_type_node))
17179 HOST_WIDE_INT size;
17181 array_die = new_die (DW_TAG_string_type, scope_die, type);
17182 add_name_attribute (array_die, type_tag (type));
17183 equate_type_number_to_die (type, array_die);
17184 size = int_size_in_bytes (type);
17185 if (size >= 0)
17186 add_AT_unsigned (array_die, DW_AT_byte_size, size);
17187 else if (TYPE_DOMAIN (type) != NULL_TREE
17188 && TYPE_MAX_VALUE (TYPE_DOMAIN (type)) != NULL_TREE
17189 && DECL_P (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))
17191 tree szdecl = TYPE_MAX_VALUE (TYPE_DOMAIN (type));
17192 dw_loc_list_ref loc = loc_list_from_tree (szdecl, 2);
17194 size = int_size_in_bytes (TREE_TYPE (szdecl));
17195 if (loc && size > 0)
17197 add_AT_location_description (array_die, DW_AT_string_length, loc);
17198 if (size != DWARF2_ADDR_SIZE)
17199 add_AT_unsigned (array_die, DW_AT_byte_size, size);
17202 return;
17205 array_die = new_die (DW_TAG_array_type, scope_die, type);
17206 add_name_attribute (array_die, type_tag (type));
17207 equate_type_number_to_die (type, array_die);
17209 if (TREE_CODE (type) == VECTOR_TYPE)
17210 add_AT_flag (array_die, DW_AT_GNU_vector, 1);
17212 /* For Fortran multidimensional arrays use DW_ORD_col_major ordering. */
17213 if (is_fortran ()
17214 && TREE_CODE (type) == ARRAY_TYPE
17215 && TREE_CODE (TREE_TYPE (type)) == ARRAY_TYPE
17216 && !TYPE_STRING_FLAG (TREE_TYPE (type)))
17217 add_AT_unsigned (array_die, DW_AT_ordering, DW_ORD_col_major);
17219 #if 0
17220 /* We default the array ordering. SDB will probably do
17221 the right things even if DW_AT_ordering is not present. It's not even
17222 an issue until we start to get into multidimensional arrays anyway. If
17223 SDB is ever caught doing the Wrong Thing for multi-dimensional arrays,
17224 then we'll have to put the DW_AT_ordering attribute back in. (But if
17225 and when we find out that we need to put these in, we will only do so
17226 for multidimensional arrays. */
17227 add_AT_unsigned (array_die, DW_AT_ordering, DW_ORD_row_major);
17228 #endif
17230 if (TREE_CODE (type) == VECTOR_TYPE)
17232 /* For VECTOR_TYPEs we use an array die with appropriate bounds. */
17233 dw_die_ref subrange_die = new_die (DW_TAG_subrange_type, array_die, NULL);
17234 add_bound_info (subrange_die, DW_AT_lower_bound, size_zero_node);
17235 add_bound_info (subrange_die, DW_AT_upper_bound,
17236 size_int (TYPE_VECTOR_SUBPARTS (type) - 1));
17238 else
17239 add_subscript_info (array_die, type, collapse_nested_arrays);
17241 /* Add representation of the type of the elements of this array type and
17242 emit the corresponding DIE if we haven't done it already. */
17243 element_type = TREE_TYPE (type);
17244 if (collapse_nested_arrays)
17245 while (TREE_CODE (element_type) == ARRAY_TYPE)
17247 if (TYPE_STRING_FLAG (element_type) && is_fortran ())
17248 break;
17249 element_type = TREE_TYPE (element_type);
17252 add_type_attribute (array_die, element_type, TYPE_UNQUALIFIED, context_die);
17254 add_gnat_descriptive_type_attribute (array_die, type, context_die);
17255 if (TYPE_ARTIFICIAL (type))
17256 add_AT_flag (array_die, DW_AT_artificial, 1);
17258 if (get_AT (array_die, DW_AT_name))
17259 add_pubtype (type, array_die);
17262 static dw_loc_descr_ref
17263 descr_info_loc (tree val, tree base_decl)
17265 HOST_WIDE_INT size;
17266 dw_loc_descr_ref loc, loc2;
17267 enum dwarf_location_atom op;
17269 if (val == base_decl)
17270 return new_loc_descr (DW_OP_push_object_address, 0, 0);
17272 switch (TREE_CODE (val))
17274 CASE_CONVERT:
17275 return descr_info_loc (TREE_OPERAND (val, 0), base_decl);
17276 case VAR_DECL:
17277 return loc_descriptor_from_tree (val, 0);
17278 case INTEGER_CST:
17279 if (tree_fits_shwi_p (val))
17280 return int_loc_descriptor (tree_to_shwi (val));
17281 break;
17282 case INDIRECT_REF:
17283 size = int_size_in_bytes (TREE_TYPE (val));
17284 if (size < 0)
17285 break;
17286 loc = descr_info_loc (TREE_OPERAND (val, 0), base_decl);
17287 if (!loc)
17288 break;
17289 if (size == DWARF2_ADDR_SIZE)
17290 add_loc_descr (&loc, new_loc_descr (DW_OP_deref, 0, 0));
17291 else
17292 add_loc_descr (&loc, new_loc_descr (DW_OP_deref_size, size, 0));
17293 return loc;
17294 case POINTER_PLUS_EXPR:
17295 case PLUS_EXPR:
17296 if (tree_fits_uhwi_p (TREE_OPERAND (val, 1))
17297 && tree_to_uhwi (TREE_OPERAND (val, 1)) < 16384)
17299 loc = descr_info_loc (TREE_OPERAND (val, 0), base_decl);
17300 if (!loc)
17301 break;
17302 loc_descr_plus_const (&loc, tree_to_shwi (TREE_OPERAND (val, 1)));
17304 else
17306 op = DW_OP_plus;
17307 do_binop:
17308 loc = descr_info_loc (TREE_OPERAND (val, 0), base_decl);
17309 if (!loc)
17310 break;
17311 loc2 = descr_info_loc (TREE_OPERAND (val, 1), base_decl);
17312 if (!loc2)
17313 break;
17314 add_loc_descr (&loc, loc2);
17315 add_loc_descr (&loc2, new_loc_descr (op, 0, 0));
17317 return loc;
17318 case MINUS_EXPR:
17319 op = DW_OP_minus;
17320 goto do_binop;
17321 case MULT_EXPR:
17322 op = DW_OP_mul;
17323 goto do_binop;
17324 case EQ_EXPR:
17325 op = DW_OP_eq;
17326 goto do_binop;
17327 case NE_EXPR:
17328 op = DW_OP_ne;
17329 goto do_binop;
17330 default:
17331 break;
17333 return NULL;
17336 static void
17337 add_descr_info_field (dw_die_ref die, enum dwarf_attribute attr,
17338 tree val, tree base_decl)
17340 dw_loc_descr_ref loc;
17342 if (tree_fits_shwi_p (val))
17344 add_AT_unsigned (die, attr, tree_to_shwi (val));
17345 return;
17348 loc = descr_info_loc (val, base_decl);
17349 if (!loc)
17350 return;
17352 add_AT_loc (die, attr, loc);
17355 /* This routine generates DIE for array with hidden descriptor, details
17356 are filled into *info by a langhook. */
17358 static void
17359 gen_descr_array_type_die (tree type, struct array_descr_info *info,
17360 dw_die_ref context_die)
17362 dw_die_ref scope_die = scope_die_for (type, context_die);
17363 dw_die_ref array_die;
17364 int dim;
17366 array_die = new_die (DW_TAG_array_type, scope_die, type);
17367 add_name_attribute (array_die, type_tag (type));
17368 equate_type_number_to_die (type, array_die);
17370 /* For Fortran multidimensional arrays use DW_ORD_col_major ordering. */
17371 if (is_fortran ()
17372 && info->ndimensions >= 2)
17373 add_AT_unsigned (array_die, DW_AT_ordering, DW_ORD_col_major);
17375 if (info->data_location)
17376 add_descr_info_field (array_die, DW_AT_data_location, info->data_location,
17377 info->base_decl);
17378 if (info->associated)
17379 add_descr_info_field (array_die, DW_AT_associated, info->associated,
17380 info->base_decl);
17381 if (info->allocated)
17382 add_descr_info_field (array_die, DW_AT_allocated, info->allocated,
17383 info->base_decl);
17385 for (dim = 0; dim < info->ndimensions; dim++)
17387 dw_die_ref subrange_die
17388 = new_die (DW_TAG_subrange_type, array_die, NULL);
17390 if (info->dimen[dim].lower_bound)
17392 /* If it is the default value, omit it. */
17393 int dflt;
17395 if (tree_fits_shwi_p (info->dimen[dim].lower_bound)
17396 && (dflt = lower_bound_default ()) != -1
17397 && tree_to_shwi (info->dimen[dim].lower_bound) == dflt)
17399 else
17400 add_descr_info_field (subrange_die, DW_AT_lower_bound,
17401 info->dimen[dim].lower_bound,
17402 info->base_decl);
17404 if (info->dimen[dim].upper_bound)
17405 add_descr_info_field (subrange_die, DW_AT_upper_bound,
17406 info->dimen[dim].upper_bound,
17407 info->base_decl);
17408 if (info->dimen[dim].stride)
17409 add_descr_info_field (subrange_die, DW_AT_byte_stride,
17410 info->dimen[dim].stride,
17411 info->base_decl);
17414 gen_type_die (info->element_type, context_die);
17415 add_type_attribute (array_die, info->element_type, TYPE_UNQUALIFIED,
17416 context_die);
17418 if (get_AT (array_die, DW_AT_name))
17419 add_pubtype (type, array_die);
17422 #if 0
17423 static void
17424 gen_entry_point_die (tree decl, dw_die_ref context_die)
17426 tree origin = decl_ultimate_origin (decl);
17427 dw_die_ref decl_die = new_die (DW_TAG_entry_point, context_die, decl);
17429 if (origin != NULL)
17430 add_abstract_origin_attribute (decl_die, origin);
17431 else
17433 add_name_and_src_coords_attributes (decl_die, decl);
17434 add_type_attribute (decl_die, TREE_TYPE (TREE_TYPE (decl)),
17435 TYPE_UNQUALIFIED, context_die);
17438 if (DECL_ABSTRACT (decl))
17439 equate_decl_number_to_die (decl, decl_die);
17440 else
17441 add_AT_lbl_id (decl_die, DW_AT_low_pc, decl_start_label (decl));
17443 #endif
17445 /* Walk through the list of incomplete types again, trying once more to
17446 emit full debugging info for them. */
17448 static void
17449 retry_incomplete_types (void)
17451 int i;
17453 for (i = vec_safe_length (incomplete_types) - 1; i >= 0; i--)
17454 if (should_emit_struct_debug ((*incomplete_types)[i], DINFO_USAGE_DIR_USE))
17455 gen_type_die ((*incomplete_types)[i], comp_unit_die ());
17458 /* Determine what tag to use for a record type. */
17460 static enum dwarf_tag
17461 record_type_tag (tree type)
17463 if (! lang_hooks.types.classify_record)
17464 return DW_TAG_structure_type;
17466 switch (lang_hooks.types.classify_record (type))
17468 case RECORD_IS_STRUCT:
17469 return DW_TAG_structure_type;
17471 case RECORD_IS_CLASS:
17472 return DW_TAG_class_type;
17474 case RECORD_IS_INTERFACE:
17475 if (dwarf_version >= 3 || !dwarf_strict)
17476 return DW_TAG_interface_type;
17477 return DW_TAG_structure_type;
17479 default:
17480 gcc_unreachable ();
17484 /* Generate a DIE to represent an enumeration type. Note that these DIEs
17485 include all of the information about the enumeration values also. Each
17486 enumerated type name/value is listed as a child of the enumerated type
17487 DIE. */
17489 static dw_die_ref
17490 gen_enumeration_type_die (tree type, dw_die_ref context_die)
17492 dw_die_ref type_die = lookup_type_die (type);
17494 if (type_die == NULL)
17496 type_die = new_die (DW_TAG_enumeration_type,
17497 scope_die_for (type, context_die), type);
17498 equate_type_number_to_die (type, type_die);
17499 add_name_attribute (type_die, type_tag (type));
17500 if (dwarf_version >= 4 || !dwarf_strict)
17502 if (ENUM_IS_SCOPED (type))
17503 add_AT_flag (type_die, DW_AT_enum_class, 1);
17504 if (ENUM_IS_OPAQUE (type))
17505 add_AT_flag (type_die, DW_AT_declaration, 1);
17508 else if (! TYPE_SIZE (type))
17509 return type_die;
17510 else
17511 remove_AT (type_die, DW_AT_declaration);
17513 /* Handle a GNU C/C++ extension, i.e. incomplete enum types. If the
17514 given enum type is incomplete, do not generate the DW_AT_byte_size
17515 attribute or the DW_AT_element_list attribute. */
17516 if (TYPE_SIZE (type))
17518 tree link;
17520 TREE_ASM_WRITTEN (type) = 1;
17521 add_byte_size_attribute (type_die, type);
17522 if (dwarf_version >= 3 || !dwarf_strict)
17524 tree underlying = lang_hooks.types.enum_underlying_base_type (type);
17525 add_type_attribute (type_die, underlying, TYPE_UNQUALIFIED,
17526 context_die);
17528 if (TYPE_STUB_DECL (type) != NULL_TREE)
17530 add_src_coords_attributes (type_die, TYPE_STUB_DECL (type));
17531 add_accessibility_attribute (type_die, TYPE_STUB_DECL (type));
17534 /* If the first reference to this type was as the return type of an
17535 inline function, then it may not have a parent. Fix this now. */
17536 if (type_die->die_parent == NULL)
17537 add_child_die (scope_die_for (type, context_die), type_die);
17539 for (link = TYPE_VALUES (type);
17540 link != NULL; link = TREE_CHAIN (link))
17542 dw_die_ref enum_die = new_die (DW_TAG_enumerator, type_die, link);
17543 tree value = TREE_VALUE (link);
17545 add_name_attribute (enum_die,
17546 IDENTIFIER_POINTER (TREE_PURPOSE (link)));
17548 if (TREE_CODE (value) == CONST_DECL)
17549 value = DECL_INITIAL (value);
17551 if (simple_type_size_in_bits (TREE_TYPE (value))
17552 <= HOST_BITS_PER_WIDE_INT || tree_fits_shwi_p (value))
17554 /* For constant forms created by add_AT_unsigned DWARF
17555 consumers (GDB, elfutils, etc.) always zero extend
17556 the value. Only when the actual value is negative
17557 do we need to use add_AT_int to generate a constant
17558 form that can represent negative values. */
17559 HOST_WIDE_INT val = TREE_INT_CST_LOW (value);
17560 if (TYPE_UNSIGNED (TREE_TYPE (value)) || val >= 0)
17561 add_AT_unsigned (enum_die, DW_AT_const_value,
17562 (unsigned HOST_WIDE_INT) val);
17563 else
17564 add_AT_int (enum_die, DW_AT_const_value, val);
17566 else
17567 /* Enumeration constants may be wider than HOST_WIDE_INT. Handle
17568 that here. TODO: This should be re-worked to use correct
17569 signed/unsigned double tags for all cases. */
17570 add_AT_wide (enum_die, DW_AT_const_value, value);
17573 add_gnat_descriptive_type_attribute (type_die, type, context_die);
17574 if (TYPE_ARTIFICIAL (type))
17575 add_AT_flag (type_die, DW_AT_artificial, 1);
17577 else
17578 add_AT_flag (type_die, DW_AT_declaration, 1);
17580 add_pubtype (type, type_die);
17582 return type_die;
17585 /* Generate a DIE to represent either a real live formal parameter decl or to
17586 represent just the type of some formal parameter position in some function
17587 type.
17589 Note that this routine is a bit unusual because its argument may be a
17590 ..._DECL node (i.e. either a PARM_DECL or perhaps a VAR_DECL which
17591 represents an inlining of some PARM_DECL) or else some sort of a ..._TYPE
17592 node. If it's the former then this function is being called to output a
17593 DIE to represent a formal parameter object (or some inlining thereof). If
17594 it's the latter, then this function is only being called to output a
17595 DW_TAG_formal_parameter DIE to stand as a placeholder for some formal
17596 argument type of some subprogram type.
17597 If EMIT_NAME_P is true, name and source coordinate attributes
17598 are emitted. */
17600 static dw_die_ref
17601 gen_formal_parameter_die (tree node, tree origin, bool emit_name_p,
17602 dw_die_ref context_die)
17604 tree node_or_origin = node ? node : origin;
17605 tree ultimate_origin;
17606 dw_die_ref parm_die
17607 = new_die (DW_TAG_formal_parameter, context_die, node);
17609 switch (TREE_CODE_CLASS (TREE_CODE (node_or_origin)))
17611 case tcc_declaration:
17612 ultimate_origin = decl_ultimate_origin (node_or_origin);
17613 if (node || ultimate_origin)
17614 origin = ultimate_origin;
17615 if (origin != NULL)
17616 add_abstract_origin_attribute (parm_die, origin);
17617 else if (emit_name_p)
17618 add_name_and_src_coords_attributes (parm_die, node);
17619 if (origin == NULL
17620 || (! DECL_ABSTRACT (node_or_origin)
17621 && variably_modified_type_p (TREE_TYPE (node_or_origin),
17622 decl_function_context
17623 (node_or_origin))))
17625 tree type = TREE_TYPE (node_or_origin);
17626 if (decl_by_reference_p (node_or_origin))
17627 add_type_attribute (parm_die, TREE_TYPE (type),
17628 TYPE_UNQUALIFIED, context_die);
17629 else
17630 add_type_attribute (parm_die, type,
17631 decl_quals (node_or_origin),
17632 context_die);
17634 if (origin == NULL && DECL_ARTIFICIAL (node))
17635 add_AT_flag (parm_die, DW_AT_artificial, 1);
17637 if (node && node != origin)
17638 equate_decl_number_to_die (node, parm_die);
17639 if (! DECL_ABSTRACT (node_or_origin))
17640 add_location_or_const_value_attribute (parm_die, node_or_origin,
17641 node == NULL, DW_AT_location);
17643 break;
17645 case tcc_type:
17646 /* We were called with some kind of a ..._TYPE node. */
17647 add_type_attribute (parm_die, node_or_origin, TYPE_UNQUALIFIED,
17648 context_die);
17649 break;
17651 default:
17652 gcc_unreachable ();
17655 return parm_die;
17658 /* Generate and return a DW_TAG_GNU_formal_parameter_pack. Also generate
17659 children DW_TAG_formal_parameter DIEs representing the arguments of the
17660 parameter pack.
17662 PARM_PACK must be a function parameter pack.
17663 PACK_ARG is the first argument of the parameter pack. Its TREE_CHAIN
17664 must point to the subsequent arguments of the function PACK_ARG belongs to.
17665 SUBR_DIE is the DIE of the function PACK_ARG belongs to.
17666 If NEXT_ARG is non NULL, *NEXT_ARG is set to the function argument
17667 following the last one for which a DIE was generated. */
17669 static dw_die_ref
17670 gen_formal_parameter_pack_die (tree parm_pack,
17671 tree pack_arg,
17672 dw_die_ref subr_die,
17673 tree *next_arg)
17675 tree arg;
17676 dw_die_ref parm_pack_die;
17678 gcc_assert (parm_pack
17679 && lang_hooks.function_parameter_pack_p (parm_pack)
17680 && subr_die);
17682 parm_pack_die = new_die (DW_TAG_GNU_formal_parameter_pack, subr_die, parm_pack);
17683 add_src_coords_attributes (parm_pack_die, parm_pack);
17685 for (arg = pack_arg; arg; arg = DECL_CHAIN (arg))
17687 if (! lang_hooks.decls.function_parm_expanded_from_pack_p (arg,
17688 parm_pack))
17689 break;
17690 gen_formal_parameter_die (arg, NULL,
17691 false /* Don't emit name attribute. */,
17692 parm_pack_die);
17694 if (next_arg)
17695 *next_arg = arg;
17696 return parm_pack_die;
17699 /* Generate a special type of DIE used as a stand-in for a trailing ellipsis
17700 at the end of an (ANSI prototyped) formal parameters list. */
17702 static void
17703 gen_unspecified_parameters_die (tree decl_or_type, dw_die_ref context_die)
17705 new_die (DW_TAG_unspecified_parameters, context_die, decl_or_type);
17708 /* Generate a list of nameless DW_TAG_formal_parameter DIEs (and perhaps a
17709 DW_TAG_unspecified_parameters DIE) to represent the types of the formal
17710 parameters as specified in some function type specification (except for
17711 those which appear as part of a function *definition*). */
17713 static void
17714 gen_formal_types_die (tree function_or_method_type, dw_die_ref context_die)
17716 tree link;
17717 tree formal_type = NULL;
17718 tree first_parm_type;
17719 tree arg;
17721 if (TREE_CODE (function_or_method_type) == FUNCTION_DECL)
17723 arg = DECL_ARGUMENTS (function_or_method_type);
17724 function_or_method_type = TREE_TYPE (function_or_method_type);
17726 else
17727 arg = NULL_TREE;
17729 first_parm_type = TYPE_ARG_TYPES (function_or_method_type);
17731 /* Make our first pass over the list of formal parameter types and output a
17732 DW_TAG_formal_parameter DIE for each one. */
17733 for (link = first_parm_type; link; )
17735 dw_die_ref parm_die;
17737 formal_type = TREE_VALUE (link);
17738 if (formal_type == void_type_node)
17739 break;
17741 /* Output a (nameless) DIE to represent the formal parameter itself. */
17742 parm_die = gen_formal_parameter_die (formal_type, NULL,
17743 true /* Emit name attribute. */,
17744 context_die);
17745 if (TREE_CODE (function_or_method_type) == METHOD_TYPE
17746 && link == first_parm_type)
17748 add_AT_flag (parm_die, DW_AT_artificial, 1);
17749 if (dwarf_version >= 3 || !dwarf_strict)
17750 add_AT_die_ref (context_die, DW_AT_object_pointer, parm_die);
17752 else if (arg && DECL_ARTIFICIAL (arg))
17753 add_AT_flag (parm_die, DW_AT_artificial, 1);
17755 link = TREE_CHAIN (link);
17756 if (arg)
17757 arg = DECL_CHAIN (arg);
17760 /* If this function type has an ellipsis, add a
17761 DW_TAG_unspecified_parameters DIE to the end of the parameter list. */
17762 if (formal_type != void_type_node)
17763 gen_unspecified_parameters_die (function_or_method_type, context_die);
17765 /* Make our second (and final) pass over the list of formal parameter types
17766 and output DIEs to represent those types (as necessary). */
17767 for (link = TYPE_ARG_TYPES (function_or_method_type);
17768 link && TREE_VALUE (link);
17769 link = TREE_CHAIN (link))
17770 gen_type_die (TREE_VALUE (link), context_die);
17773 /* We want to generate the DIE for TYPE so that we can generate the
17774 die for MEMBER, which has been defined; we will need to refer back
17775 to the member declaration nested within TYPE. If we're trying to
17776 generate minimal debug info for TYPE, processing TYPE won't do the
17777 trick; we need to attach the member declaration by hand. */
17779 static void
17780 gen_type_die_for_member (tree type, tree member, dw_die_ref context_die)
17782 gen_type_die (type, context_die);
17784 /* If we're trying to avoid duplicate debug info, we may not have
17785 emitted the member decl for this function. Emit it now. */
17786 if (TYPE_STUB_DECL (type)
17787 && TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type))
17788 && ! lookup_decl_die (member))
17790 dw_die_ref type_die;
17791 gcc_assert (!decl_ultimate_origin (member));
17793 push_decl_scope (type);
17794 type_die = lookup_type_die_strip_naming_typedef (type);
17795 if (TREE_CODE (member) == FUNCTION_DECL)
17796 gen_subprogram_die (member, type_die);
17797 else if (TREE_CODE (member) == FIELD_DECL)
17799 /* Ignore the nameless fields that are used to skip bits but handle
17800 C++ anonymous unions and structs. */
17801 if (DECL_NAME (member) != NULL_TREE
17802 || TREE_CODE (TREE_TYPE (member)) == UNION_TYPE
17803 || TREE_CODE (TREE_TYPE (member)) == RECORD_TYPE)
17805 gen_type_die (member_declared_type (member), type_die);
17806 gen_field_die (member, type_die);
17809 else
17810 gen_variable_die (member, NULL_TREE, type_die);
17812 pop_decl_scope ();
17816 /* Forward declare these functions, because they are mutually recursive
17817 with their set_block_* pairing functions. */
17818 static void set_decl_origin_self (tree);
17819 static void set_decl_abstract_flags (tree, int);
17821 /* Given a pointer to some BLOCK node, if the BLOCK_ABSTRACT_ORIGIN for the
17822 given BLOCK node is NULL, set the BLOCK_ABSTRACT_ORIGIN for the node so
17823 that it points to the node itself, thus indicating that the node is its
17824 own (abstract) origin. Additionally, if the BLOCK_ABSTRACT_ORIGIN for
17825 the given node is NULL, recursively descend the decl/block tree which
17826 it is the root of, and for each other ..._DECL or BLOCK node contained
17827 therein whose DECL_ABSTRACT_ORIGINs or BLOCK_ABSTRACT_ORIGINs are also
17828 still NULL, set *their* DECL_ABSTRACT_ORIGIN or BLOCK_ABSTRACT_ORIGIN
17829 values to point to themselves. */
17831 static void
17832 set_block_origin_self (tree stmt)
17834 if (BLOCK_ABSTRACT_ORIGIN (stmt) == NULL_TREE)
17836 BLOCK_ABSTRACT_ORIGIN (stmt) = stmt;
17839 tree local_decl;
17841 for (local_decl = BLOCK_VARS (stmt);
17842 local_decl != NULL_TREE;
17843 local_decl = DECL_CHAIN (local_decl))
17844 if (! DECL_EXTERNAL (local_decl))
17845 set_decl_origin_self (local_decl); /* Potential recursion. */
17849 tree subblock;
17851 for (subblock = BLOCK_SUBBLOCKS (stmt);
17852 subblock != NULL_TREE;
17853 subblock = BLOCK_CHAIN (subblock))
17854 set_block_origin_self (subblock); /* Recurse. */
17859 /* Given a pointer to some ..._DECL node, if the DECL_ABSTRACT_ORIGIN for
17860 the given ..._DECL node is NULL, set the DECL_ABSTRACT_ORIGIN for the
17861 node to so that it points to the node itself, thus indicating that the
17862 node represents its own (abstract) origin. Additionally, if the
17863 DECL_ABSTRACT_ORIGIN for the given node is NULL, recursively descend
17864 the decl/block tree of which the given node is the root of, and for
17865 each other ..._DECL or BLOCK node contained therein whose
17866 DECL_ABSTRACT_ORIGINs or BLOCK_ABSTRACT_ORIGINs are also still NULL,
17867 set *their* DECL_ABSTRACT_ORIGIN or BLOCK_ABSTRACT_ORIGIN values to
17868 point to themselves. */
17870 static void
17871 set_decl_origin_self (tree decl)
17873 if (DECL_ABSTRACT_ORIGIN (decl) == NULL_TREE)
17875 DECL_ABSTRACT_ORIGIN (decl) = decl;
17876 if (TREE_CODE (decl) == FUNCTION_DECL)
17878 tree arg;
17880 for (arg = DECL_ARGUMENTS (decl); arg; arg = DECL_CHAIN (arg))
17881 DECL_ABSTRACT_ORIGIN (arg) = arg;
17882 if (DECL_INITIAL (decl) != NULL_TREE
17883 && DECL_INITIAL (decl) != error_mark_node)
17884 set_block_origin_self (DECL_INITIAL (decl));
17889 /* Given a pointer to some BLOCK node, and a boolean value to set the
17890 "abstract" flags to, set that value into the BLOCK_ABSTRACT flag for
17891 the given block, and for all local decls and all local sub-blocks
17892 (recursively) which are contained therein. */
17894 static void
17895 set_block_abstract_flags (tree stmt, int setting)
17897 tree local_decl;
17898 tree subblock;
17899 unsigned int i;
17901 BLOCK_ABSTRACT (stmt) = setting;
17903 for (local_decl = BLOCK_VARS (stmt);
17904 local_decl != NULL_TREE;
17905 local_decl = DECL_CHAIN (local_decl))
17906 if (! DECL_EXTERNAL (local_decl))
17907 set_decl_abstract_flags (local_decl, setting);
17909 for (i = 0; i < BLOCK_NUM_NONLOCALIZED_VARS (stmt); i++)
17911 local_decl = BLOCK_NONLOCALIZED_VAR (stmt, i);
17912 if ((TREE_CODE (local_decl) == VAR_DECL && !TREE_STATIC (local_decl))
17913 || TREE_CODE (local_decl) == PARM_DECL)
17914 set_decl_abstract_flags (local_decl, setting);
17917 for (subblock = BLOCK_SUBBLOCKS (stmt);
17918 subblock != NULL_TREE;
17919 subblock = BLOCK_CHAIN (subblock))
17920 set_block_abstract_flags (subblock, setting);
17923 /* Given a pointer to some ..._DECL node, and a boolean value to set the
17924 "abstract" flags to, set that value into the DECL_ABSTRACT flag for the
17925 given decl, and (in the case where the decl is a FUNCTION_DECL) also
17926 set the abstract flags for all of the parameters, local vars, local
17927 blocks and sub-blocks (recursively) to the same setting. */
17929 static void
17930 set_decl_abstract_flags (tree decl, int setting)
17932 DECL_ABSTRACT (decl) = setting;
17933 if (TREE_CODE (decl) == FUNCTION_DECL)
17935 tree arg;
17937 for (arg = DECL_ARGUMENTS (decl); arg; arg = DECL_CHAIN (arg))
17938 DECL_ABSTRACT (arg) = setting;
17939 if (DECL_INITIAL (decl) != NULL_TREE
17940 && DECL_INITIAL (decl) != error_mark_node)
17941 set_block_abstract_flags (DECL_INITIAL (decl), setting);
17945 /* Generate the DWARF2 info for the "abstract" instance of a function which we
17946 may later generate inlined and/or out-of-line instances of. */
17948 static void
17949 dwarf2out_abstract_function (tree decl)
17951 dw_die_ref old_die;
17952 tree save_fn;
17953 tree context;
17954 int was_abstract;
17955 htab_t old_decl_loc_table;
17956 htab_t old_cached_dw_loc_list_table;
17957 int old_call_site_count, old_tail_call_site_count;
17958 struct call_arg_loc_node *old_call_arg_locations;
17960 /* Make sure we have the actual abstract inline, not a clone. */
17961 decl = DECL_ORIGIN (decl);
17963 old_die = lookup_decl_die (decl);
17964 if (old_die && get_AT (old_die, DW_AT_inline))
17965 /* We've already generated the abstract instance. */
17966 return;
17968 /* We can be called while recursively when seeing block defining inlined subroutine
17969 DIE. Be sure to not clobber the outer location table nor use it or we would
17970 get locations in abstract instantces. */
17971 old_decl_loc_table = decl_loc_table;
17972 decl_loc_table = NULL;
17973 old_cached_dw_loc_list_table = cached_dw_loc_list_table;
17974 cached_dw_loc_list_table = NULL;
17975 old_call_arg_locations = call_arg_locations;
17976 call_arg_locations = NULL;
17977 old_call_site_count = call_site_count;
17978 call_site_count = -1;
17979 old_tail_call_site_count = tail_call_site_count;
17980 tail_call_site_count = -1;
17982 /* Be sure we've emitted the in-class declaration DIE (if any) first, so
17983 we don't get confused by DECL_ABSTRACT. */
17984 if (debug_info_level > DINFO_LEVEL_TERSE)
17986 context = decl_class_context (decl);
17987 if (context)
17988 gen_type_die_for_member
17989 (context, decl, decl_function_context (decl) ? NULL : comp_unit_die ());
17992 /* Pretend we've just finished compiling this function. */
17993 save_fn = current_function_decl;
17994 current_function_decl = decl;
17996 was_abstract = DECL_ABSTRACT (decl);
17997 set_decl_abstract_flags (decl, 1);
17998 dwarf2out_decl (decl);
17999 if (! was_abstract)
18000 set_decl_abstract_flags (decl, 0);
18002 current_function_decl = save_fn;
18003 decl_loc_table = old_decl_loc_table;
18004 cached_dw_loc_list_table = old_cached_dw_loc_list_table;
18005 call_arg_locations = old_call_arg_locations;
18006 call_site_count = old_call_site_count;
18007 tail_call_site_count = old_tail_call_site_count;
18010 /* Helper function of premark_used_types() which gets called through
18011 htab_traverse.
18013 Marks the DIE of a given type in *SLOT as perennial, so it never gets
18014 marked as unused by prune_unused_types. */
18016 bool
18017 premark_used_types_helper (tree const &type, void *)
18019 dw_die_ref die;
18021 die = lookup_type_die (type);
18022 if (die != NULL)
18023 die->die_perennial_p = 1;
18024 return true;
18027 /* Helper function of premark_types_used_by_global_vars which gets called
18028 through htab_traverse.
18030 Marks the DIE of a given type in *SLOT as perennial, so it never gets
18031 marked as unused by prune_unused_types. The DIE of the type is marked
18032 only if the global variable using the type will actually be emitted. */
18034 static int
18035 premark_types_used_by_global_vars_helper (void **slot,
18036 void *data ATTRIBUTE_UNUSED)
18038 struct types_used_by_vars_entry *entry;
18039 dw_die_ref die;
18041 entry = (struct types_used_by_vars_entry *) *slot;
18042 gcc_assert (entry->type != NULL
18043 && entry->var_decl != NULL);
18044 die = lookup_type_die (entry->type);
18045 if (die)
18047 /* Ask cgraph if the global variable really is to be emitted.
18048 If yes, then we'll keep the DIE of ENTRY->TYPE. */
18049 varpool_node *node = varpool_node::get (entry->var_decl);
18050 if (node && node->definition)
18052 die->die_perennial_p = 1;
18053 /* Keep the parent DIEs as well. */
18054 while ((die = die->die_parent) && die->die_perennial_p == 0)
18055 die->die_perennial_p = 1;
18058 return 1;
18061 /* Mark all members of used_types_hash as perennial. */
18063 static void
18064 premark_used_types (struct function *fun)
18066 if (fun && fun->used_types_hash)
18067 fun->used_types_hash->traverse<void *, premark_used_types_helper> (NULL);
18070 /* Mark all members of types_used_by_vars_entry as perennial. */
18072 static void
18073 premark_types_used_by_global_vars (void)
18075 if (types_used_by_vars_hash)
18076 htab_traverse (types_used_by_vars_hash,
18077 premark_types_used_by_global_vars_helper, NULL);
18080 /* Generate a DW_TAG_GNU_call_site DIE in function DECL under SUBR_DIE
18081 for CA_LOC call arg loc node. */
18083 static dw_die_ref
18084 gen_call_site_die (tree decl, dw_die_ref subr_die,
18085 struct call_arg_loc_node *ca_loc)
18087 dw_die_ref stmt_die = NULL, die;
18088 tree block = ca_loc->block;
18090 while (block
18091 && block != DECL_INITIAL (decl)
18092 && TREE_CODE (block) == BLOCK)
18094 if (block_map.length () > BLOCK_NUMBER (block))
18095 stmt_die = block_map[BLOCK_NUMBER (block)];
18096 if (stmt_die)
18097 break;
18098 block = BLOCK_SUPERCONTEXT (block);
18100 if (stmt_die == NULL)
18101 stmt_die = subr_die;
18102 die = new_die (DW_TAG_GNU_call_site, stmt_die, NULL_TREE);
18103 add_AT_lbl_id (die, DW_AT_low_pc, ca_loc->label);
18104 if (ca_loc->tail_call_p)
18105 add_AT_flag (die, DW_AT_GNU_tail_call, 1);
18106 if (ca_loc->symbol_ref)
18108 dw_die_ref tdie = lookup_decl_die (SYMBOL_REF_DECL (ca_loc->symbol_ref));
18109 if (tdie)
18110 add_AT_die_ref (die, DW_AT_abstract_origin, tdie);
18111 else
18112 add_AT_addr (die, DW_AT_abstract_origin, ca_loc->symbol_ref, false);
18114 return die;
18117 /* Generate a DIE to represent a declared function (either file-scope or
18118 block-local). */
18120 static void
18121 gen_subprogram_die (tree decl, dw_die_ref context_die)
18123 tree origin = decl_ultimate_origin (decl);
18124 dw_die_ref subr_die;
18125 tree outer_scope;
18126 dw_die_ref old_die = lookup_decl_die (decl);
18127 int declaration = (current_function_decl != decl
18128 || class_or_namespace_scope_p (context_die));
18130 premark_used_types (DECL_STRUCT_FUNCTION (decl));
18132 /* It is possible to have both DECL_ABSTRACT and DECLARATION be true if we
18133 started to generate the abstract instance of an inline, decided to output
18134 its containing class, and proceeded to emit the declaration of the inline
18135 from the member list for the class. If so, DECLARATION takes priority;
18136 we'll get back to the abstract instance when done with the class. */
18138 /* The class-scope declaration DIE must be the primary DIE. */
18139 if (origin && declaration && class_or_namespace_scope_p (context_die))
18141 origin = NULL;
18142 gcc_assert (!old_die);
18145 /* Now that the C++ front end lazily declares artificial member fns, we
18146 might need to retrofit the declaration into its class. */
18147 if (!declaration && !origin && !old_die
18148 && DECL_CONTEXT (decl) && TYPE_P (DECL_CONTEXT (decl))
18149 && !class_or_namespace_scope_p (context_die)
18150 && debug_info_level > DINFO_LEVEL_TERSE)
18151 old_die = force_decl_die (decl);
18153 if (origin != NULL)
18155 gcc_assert (!declaration || local_scope_p (context_die));
18157 /* Fixup die_parent for the abstract instance of a nested
18158 inline function. */
18159 if (old_die && old_die->die_parent == NULL)
18160 add_child_die (context_die, old_die);
18162 subr_die = new_die (DW_TAG_subprogram, context_die, decl);
18163 add_abstract_origin_attribute (subr_die, origin);
18164 /* This is where the actual code for a cloned function is.
18165 Let's emit linkage name attribute for it. This helps
18166 debuggers to e.g, set breakpoints into
18167 constructors/destructors when the user asks "break
18168 K::K". */
18169 add_linkage_name (subr_die, decl);
18171 else if (old_die)
18173 expanded_location s = expand_location (DECL_SOURCE_LOCATION (decl));
18174 struct dwarf_file_data * file_index = lookup_filename (s.file);
18176 if (!get_AT_flag (old_die, DW_AT_declaration)
18177 /* We can have a normal definition following an inline one in the
18178 case of redefinition of GNU C extern inlines.
18179 It seems reasonable to use AT_specification in this case. */
18180 && !get_AT (old_die, DW_AT_inline))
18182 /* Detect and ignore this case, where we are trying to output
18183 something we have already output. */
18184 return;
18187 /* If the definition comes from the same place as the declaration,
18188 maybe use the old DIE. We always want the DIE for this function
18189 that has the *_pc attributes to be under comp_unit_die so the
18190 debugger can find it. We also need to do this for abstract
18191 instances of inlines, since the spec requires the out-of-line copy
18192 to have the same parent. For local class methods, this doesn't
18193 apply; we just use the old DIE. */
18194 if ((is_cu_die (old_die->die_parent) || context_die == NULL)
18195 && (DECL_ARTIFICIAL (decl)
18196 || (get_AT_file (old_die, DW_AT_decl_file) == file_index
18197 && (get_AT_unsigned (old_die, DW_AT_decl_line)
18198 == (unsigned) s.line))))
18200 subr_die = old_die;
18202 /* Clear out the declaration attribute and the formal parameters.
18203 Do not remove all children, because it is possible that this
18204 declaration die was forced using force_decl_die(). In such
18205 cases die that forced declaration die (e.g. TAG_imported_module)
18206 is one of the children that we do not want to remove. */
18207 remove_AT (subr_die, DW_AT_declaration);
18208 remove_AT (subr_die, DW_AT_object_pointer);
18209 remove_child_TAG (subr_die, DW_TAG_formal_parameter);
18211 else
18213 subr_die = new_die (DW_TAG_subprogram, context_die, decl);
18214 add_AT_specification (subr_die, old_die);
18215 add_pubname (decl, subr_die);
18216 if (get_AT_file (old_die, DW_AT_decl_file) != file_index)
18217 add_AT_file (subr_die, DW_AT_decl_file, file_index);
18218 if (get_AT_unsigned (old_die, DW_AT_decl_line) != (unsigned) s.line)
18219 add_AT_unsigned (subr_die, DW_AT_decl_line, s.line);
18221 /* If the prototype had an 'auto' or 'decltype(auto)' return type,
18222 emit the real type on the definition die. */
18223 if (is_cxx() && debug_info_level > DINFO_LEVEL_TERSE)
18225 dw_die_ref die = get_AT_ref (old_die, DW_AT_type);
18226 if (die == auto_die || die == decltype_auto_die)
18227 add_type_attribute (subr_die, TREE_TYPE (TREE_TYPE (decl)),
18228 TYPE_UNQUALIFIED, context_die);
18232 else
18234 subr_die = new_die (DW_TAG_subprogram, context_die, decl);
18236 if (TREE_PUBLIC (decl))
18237 add_AT_flag (subr_die, DW_AT_external, 1);
18239 add_name_and_src_coords_attributes (subr_die, decl);
18240 add_pubname (decl, subr_die);
18241 if (debug_info_level > DINFO_LEVEL_TERSE)
18243 add_prototyped_attribute (subr_die, TREE_TYPE (decl));
18244 add_type_attribute (subr_die, TREE_TYPE (TREE_TYPE (decl)),
18245 TYPE_UNQUALIFIED, context_die);
18248 add_pure_or_virtual_attribute (subr_die, decl);
18249 if (DECL_ARTIFICIAL (decl))
18250 add_AT_flag (subr_die, DW_AT_artificial, 1);
18252 add_accessibility_attribute (subr_die, decl);
18255 if (declaration)
18257 if (!old_die || !get_AT (old_die, DW_AT_inline))
18259 add_AT_flag (subr_die, DW_AT_declaration, 1);
18261 /* If this is an explicit function declaration then generate
18262 a DW_AT_explicit attribute. */
18263 if (lang_hooks.decls.function_decl_explicit_p (decl)
18264 && (dwarf_version >= 3 || !dwarf_strict))
18265 add_AT_flag (subr_die, DW_AT_explicit, 1);
18267 /* The first time we see a member function, it is in the context of
18268 the class to which it belongs. We make sure of this by emitting
18269 the class first. The next time is the definition, which is
18270 handled above. The two may come from the same source text.
18272 Note that force_decl_die() forces function declaration die. It is
18273 later reused to represent definition. */
18274 equate_decl_number_to_die (decl, subr_die);
18277 else if (DECL_ABSTRACT (decl))
18279 if (DECL_DECLARED_INLINE_P (decl))
18281 if (cgraph_function_possibly_inlined_p (decl))
18282 add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_declared_inlined);
18283 else
18284 add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_declared_not_inlined);
18286 else
18288 if (cgraph_function_possibly_inlined_p (decl))
18289 add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_inlined);
18290 else
18291 add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_not_inlined);
18294 if (DECL_DECLARED_INLINE_P (decl)
18295 && lookup_attribute ("artificial", DECL_ATTRIBUTES (decl)))
18296 add_AT_flag (subr_die, DW_AT_artificial, 1);
18298 equate_decl_number_to_die (decl, subr_die);
18300 else if (!DECL_EXTERNAL (decl))
18302 HOST_WIDE_INT cfa_fb_offset;
18303 struct function *fun = DECL_STRUCT_FUNCTION (decl);
18305 if (!old_die || !get_AT (old_die, DW_AT_inline))
18306 equate_decl_number_to_die (decl, subr_die);
18308 gcc_checking_assert (fun);
18309 if (!flag_reorder_blocks_and_partition)
18311 dw_fde_ref fde = fun->fde;
18312 if (fde->dw_fde_begin)
18314 /* We have already generated the labels. */
18315 add_AT_low_high_pc (subr_die, fde->dw_fde_begin,
18316 fde->dw_fde_end, false);
18318 else
18320 /* Create start/end labels and add the range. */
18321 char label_id_low[MAX_ARTIFICIAL_LABEL_BYTES];
18322 char label_id_high[MAX_ARTIFICIAL_LABEL_BYTES];
18323 ASM_GENERATE_INTERNAL_LABEL (label_id_low, FUNC_BEGIN_LABEL,
18324 current_function_funcdef_no);
18325 ASM_GENERATE_INTERNAL_LABEL (label_id_high, FUNC_END_LABEL,
18326 current_function_funcdef_no);
18327 add_AT_low_high_pc (subr_die, label_id_low, label_id_high,
18328 false);
18331 #if VMS_DEBUGGING_INFO
18332 /* HP OpenVMS Industry Standard 64: DWARF Extensions
18333 Section 2.3 Prologue and Epilogue Attributes:
18334 When a breakpoint is set on entry to a function, it is generally
18335 desirable for execution to be suspended, not on the very first
18336 instruction of the function, but rather at a point after the
18337 function's frame has been set up, after any language defined local
18338 declaration processing has been completed, and before execution of
18339 the first statement of the function begins. Debuggers generally
18340 cannot properly determine where this point is. Similarly for a
18341 breakpoint set on exit from a function. The prologue and epilogue
18342 attributes allow a compiler to communicate the location(s) to use. */
18345 if (fde->dw_fde_vms_end_prologue)
18346 add_AT_vms_delta (subr_die, DW_AT_HP_prologue,
18347 fde->dw_fde_begin, fde->dw_fde_vms_end_prologue);
18349 if (fde->dw_fde_vms_begin_epilogue)
18350 add_AT_vms_delta (subr_die, DW_AT_HP_epilogue,
18351 fde->dw_fde_begin, fde->dw_fde_vms_begin_epilogue);
18353 #endif
18356 else
18358 /* Generate pubnames entries for the split function code ranges. */
18359 dw_fde_ref fde = fun->fde;
18361 if (fde->dw_fde_second_begin)
18363 if (dwarf_version >= 3 || !dwarf_strict)
18365 /* We should use ranges for non-contiguous code section
18366 addresses. Use the actual code range for the initial
18367 section, since the HOT/COLD labels might precede an
18368 alignment offset. */
18369 bool range_list_added = false;
18370 add_ranges_by_labels (subr_die, fde->dw_fde_begin,
18371 fde->dw_fde_end, &range_list_added,
18372 false);
18373 add_ranges_by_labels (subr_die, fde->dw_fde_second_begin,
18374 fde->dw_fde_second_end,
18375 &range_list_added, false);
18376 if (range_list_added)
18377 add_ranges (NULL);
18379 else
18381 /* There is no real support in DW2 for this .. so we make
18382 a work-around. First, emit the pub name for the segment
18383 containing the function label. Then make and emit a
18384 simplified subprogram DIE for the second segment with the
18385 name pre-fixed by __hot/cold_sect_of_. We use the same
18386 linkage name for the second die so that gdb will find both
18387 sections when given "b foo". */
18388 const char *name = NULL;
18389 tree decl_name = DECL_NAME (decl);
18390 dw_die_ref seg_die;
18392 /* Do the 'primary' section. */
18393 add_AT_low_high_pc (subr_die, fde->dw_fde_begin,
18394 fde->dw_fde_end, false);
18396 /* Build a minimal DIE for the secondary section. */
18397 seg_die = new_die (DW_TAG_subprogram,
18398 subr_die->die_parent, decl);
18400 if (TREE_PUBLIC (decl))
18401 add_AT_flag (seg_die, DW_AT_external, 1);
18403 if (decl_name != NULL
18404 && IDENTIFIER_POINTER (decl_name) != NULL)
18406 name = dwarf2_name (decl, 1);
18407 if (! DECL_ARTIFICIAL (decl))
18408 add_src_coords_attributes (seg_die, decl);
18410 add_linkage_name (seg_die, decl);
18412 gcc_assert (name != NULL);
18413 add_pure_or_virtual_attribute (seg_die, decl);
18414 if (DECL_ARTIFICIAL (decl))
18415 add_AT_flag (seg_die, DW_AT_artificial, 1);
18417 name = concat ("__second_sect_of_", name, NULL);
18418 add_AT_low_high_pc (seg_die, fde->dw_fde_second_begin,
18419 fde->dw_fde_second_end, false);
18420 add_name_attribute (seg_die, name);
18421 if (want_pubnames ())
18422 add_pubname_string (name, seg_die);
18425 else
18426 add_AT_low_high_pc (subr_die, fde->dw_fde_begin, fde->dw_fde_end,
18427 false);
18430 cfa_fb_offset = CFA_FRAME_BASE_OFFSET (decl);
18432 /* We define the "frame base" as the function's CFA. This is more
18433 convenient for several reasons: (1) It's stable across the prologue
18434 and epilogue, which makes it better than just a frame pointer,
18435 (2) With dwarf3, there exists a one-byte encoding that allows us
18436 to reference the .debug_frame data by proxy, but failing that,
18437 (3) We can at least reuse the code inspection and interpretation
18438 code that determines the CFA position at various points in the
18439 function. */
18440 if (dwarf_version >= 3 && targetm.debug_unwind_info () == UI_DWARF2)
18442 dw_loc_descr_ref op = new_loc_descr (DW_OP_call_frame_cfa, 0, 0);
18443 add_AT_loc (subr_die, DW_AT_frame_base, op);
18445 else
18447 dw_loc_list_ref list = convert_cfa_to_fb_loc_list (cfa_fb_offset);
18448 if (list->dw_loc_next)
18449 add_AT_loc_list (subr_die, DW_AT_frame_base, list);
18450 else
18451 add_AT_loc (subr_die, DW_AT_frame_base, list->expr);
18454 /* Compute a displacement from the "steady-state frame pointer" to
18455 the CFA. The former is what all stack slots and argument slots
18456 will reference in the rtl; the latter is what we've told the
18457 debugger about. We'll need to adjust all frame_base references
18458 by this displacement. */
18459 compute_frame_pointer_to_fb_displacement (cfa_fb_offset);
18461 if (fun->static_chain_decl)
18462 add_AT_location_description (subr_die, DW_AT_static_link,
18463 loc_list_from_tree (fun->static_chain_decl, 2));
18466 /* Generate child dies for template paramaters. */
18467 if (debug_info_level > DINFO_LEVEL_TERSE)
18468 gen_generic_params_dies (decl);
18470 /* Now output descriptions of the arguments for this function. This gets
18471 (unnecessarily?) complex because of the fact that the DECL_ARGUMENT list
18472 for a FUNCTION_DECL doesn't indicate cases where there was a trailing
18473 `...' at the end of the formal parameter list. In order to find out if
18474 there was a trailing ellipsis or not, we must instead look at the type
18475 associated with the FUNCTION_DECL. This will be a node of type
18476 FUNCTION_TYPE. If the chain of type nodes hanging off of this
18477 FUNCTION_TYPE node ends with a void_type_node then there should *not* be
18478 an ellipsis at the end. */
18480 /* In the case where we are describing a mere function declaration, all we
18481 need to do here (and all we *can* do here) is to describe the *types* of
18482 its formal parameters. */
18483 if (debug_info_level <= DINFO_LEVEL_TERSE)
18485 else if (declaration)
18486 gen_formal_types_die (decl, subr_die);
18487 else
18489 /* Generate DIEs to represent all known formal parameters. */
18490 tree parm = DECL_ARGUMENTS (decl);
18491 tree generic_decl = lang_hooks.decls.get_generic_function_decl (decl);
18492 tree generic_decl_parm = generic_decl
18493 ? DECL_ARGUMENTS (generic_decl)
18494 : NULL;
18496 /* Now we want to walk the list of parameters of the function and
18497 emit their relevant DIEs.
18499 We consider the case of DECL being an instance of a generic function
18500 as well as it being a normal function.
18502 If DECL is an instance of a generic function we walk the
18503 parameters of the generic function declaration _and_ the parameters of
18504 DECL itself. This is useful because we want to emit specific DIEs for
18505 function parameter packs and those are declared as part of the
18506 generic function declaration. In that particular case,
18507 the parameter pack yields a DW_TAG_GNU_formal_parameter_pack DIE.
18508 That DIE has children DIEs representing the set of arguments
18509 of the pack. Note that the set of pack arguments can be empty.
18510 In that case, the DW_TAG_GNU_formal_parameter_pack DIE will not have any
18511 children DIE.
18513 Otherwise, we just consider the parameters of DECL. */
18514 while (generic_decl_parm || parm)
18516 if (generic_decl_parm
18517 && lang_hooks.function_parameter_pack_p (generic_decl_parm))
18518 gen_formal_parameter_pack_die (generic_decl_parm,
18519 parm, subr_die,
18520 &parm);
18521 else if (parm)
18523 dw_die_ref parm_die = gen_decl_die (parm, NULL, subr_die);
18525 if (parm == DECL_ARGUMENTS (decl)
18526 && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE
18527 && parm_die
18528 && (dwarf_version >= 3 || !dwarf_strict))
18529 add_AT_die_ref (subr_die, DW_AT_object_pointer, parm_die);
18531 parm = DECL_CHAIN (parm);
18534 if (generic_decl_parm)
18535 generic_decl_parm = DECL_CHAIN (generic_decl_parm);
18538 /* Decide whether we need an unspecified_parameters DIE at the end.
18539 There are 2 more cases to do this for: 1) the ansi ... declaration -
18540 this is detectable when the end of the arg list is not a
18541 void_type_node 2) an unprototyped function declaration (not a
18542 definition). This just means that we have no info about the
18543 parameters at all. */
18544 if (prototype_p (TREE_TYPE (decl)))
18546 /* This is the prototyped case, check for.... */
18547 if (stdarg_p (TREE_TYPE (decl)))
18548 gen_unspecified_parameters_die (decl, subr_die);
18550 else if (DECL_INITIAL (decl) == NULL_TREE)
18551 gen_unspecified_parameters_die (decl, subr_die);
18554 /* Output Dwarf info for all of the stuff within the body of the function
18555 (if it has one - it may be just a declaration). */
18556 outer_scope = DECL_INITIAL (decl);
18558 /* OUTER_SCOPE is a pointer to the outermost BLOCK node created to represent
18559 a function. This BLOCK actually represents the outermost binding contour
18560 for the function, i.e. the contour in which the function's formal
18561 parameters and labels get declared. Curiously, it appears that the front
18562 end doesn't actually put the PARM_DECL nodes for the current function onto
18563 the BLOCK_VARS list for this outer scope, but are strung off of the
18564 DECL_ARGUMENTS list for the function instead.
18566 The BLOCK_VARS list for the `outer_scope' does provide us with a list of
18567 the LABEL_DECL nodes for the function however, and we output DWARF info
18568 for those in decls_for_scope. Just within the `outer_scope' there will be
18569 a BLOCK node representing the function's outermost pair of curly braces,
18570 and any blocks used for the base and member initializers of a C++
18571 constructor function. */
18572 if (! declaration && outer_scope && TREE_CODE (outer_scope) != ERROR_MARK)
18574 int call_site_note_count = 0;
18575 int tail_call_site_note_count = 0;
18577 /* Emit a DW_TAG_variable DIE for a named return value. */
18578 if (DECL_NAME (DECL_RESULT (decl)))
18579 gen_decl_die (DECL_RESULT (decl), NULL, subr_die);
18581 current_function_has_inlines = 0;
18582 decls_for_scope (outer_scope, subr_die, 0);
18584 if (call_arg_locations && !dwarf_strict)
18586 struct call_arg_loc_node *ca_loc;
18587 for (ca_loc = call_arg_locations; ca_loc; ca_loc = ca_loc->next)
18589 dw_die_ref die = NULL;
18590 rtx tloc = NULL_RTX, tlocc = NULL_RTX;
18591 rtx arg, next_arg;
18593 for (arg = NOTE_VAR_LOCATION (ca_loc->call_arg_loc_note);
18594 arg; arg = next_arg)
18596 dw_loc_descr_ref reg, val;
18597 enum machine_mode mode = GET_MODE (XEXP (XEXP (arg, 0), 1));
18598 dw_die_ref cdie, tdie = NULL;
18600 next_arg = XEXP (arg, 1);
18601 if (REG_P (XEXP (XEXP (arg, 0), 0))
18602 && next_arg
18603 && MEM_P (XEXP (XEXP (next_arg, 0), 0))
18604 && REG_P (XEXP (XEXP (XEXP (next_arg, 0), 0), 0))
18605 && REGNO (XEXP (XEXP (arg, 0), 0))
18606 == REGNO (XEXP (XEXP (XEXP (next_arg, 0), 0), 0)))
18607 next_arg = XEXP (next_arg, 1);
18608 if (mode == VOIDmode)
18610 mode = GET_MODE (XEXP (XEXP (arg, 0), 0));
18611 if (mode == VOIDmode)
18612 mode = GET_MODE (XEXP (arg, 0));
18614 if (mode == VOIDmode || mode == BLKmode)
18615 continue;
18616 if (XEXP (XEXP (arg, 0), 0) == pc_rtx)
18618 gcc_assert (ca_loc->symbol_ref == NULL_RTX);
18619 tloc = XEXP (XEXP (arg, 0), 1);
18620 continue;
18622 else if (GET_CODE (XEXP (XEXP (arg, 0), 0)) == CLOBBER
18623 && XEXP (XEXP (XEXP (arg, 0), 0), 0) == pc_rtx)
18625 gcc_assert (ca_loc->symbol_ref == NULL_RTX);
18626 tlocc = XEXP (XEXP (arg, 0), 1);
18627 continue;
18629 reg = NULL;
18630 if (REG_P (XEXP (XEXP (arg, 0), 0)))
18631 reg = reg_loc_descriptor (XEXP (XEXP (arg, 0), 0),
18632 VAR_INIT_STATUS_INITIALIZED);
18633 else if (MEM_P (XEXP (XEXP (arg, 0), 0)))
18635 rtx mem = XEXP (XEXP (arg, 0), 0);
18636 reg = mem_loc_descriptor (XEXP (mem, 0),
18637 get_address_mode (mem),
18638 GET_MODE (mem),
18639 VAR_INIT_STATUS_INITIALIZED);
18641 else if (GET_CODE (XEXP (XEXP (arg, 0), 0))
18642 == DEBUG_PARAMETER_REF)
18644 tree tdecl
18645 = DEBUG_PARAMETER_REF_DECL (XEXP (XEXP (arg, 0), 0));
18646 tdie = lookup_decl_die (tdecl);
18647 if (tdie == NULL)
18648 continue;
18650 else
18651 continue;
18652 if (reg == NULL
18653 && GET_CODE (XEXP (XEXP (arg, 0), 0))
18654 != DEBUG_PARAMETER_REF)
18655 continue;
18656 val = mem_loc_descriptor (XEXP (XEXP (arg, 0), 1), mode,
18657 VOIDmode,
18658 VAR_INIT_STATUS_INITIALIZED);
18659 if (val == NULL)
18660 continue;
18661 if (die == NULL)
18662 die = gen_call_site_die (decl, subr_die, ca_loc);
18663 cdie = new_die (DW_TAG_GNU_call_site_parameter, die,
18664 NULL_TREE);
18665 if (reg != NULL)
18666 add_AT_loc (cdie, DW_AT_location, reg);
18667 else if (tdie != NULL)
18668 add_AT_die_ref (cdie, DW_AT_abstract_origin, tdie);
18669 add_AT_loc (cdie, DW_AT_GNU_call_site_value, val);
18670 if (next_arg != XEXP (arg, 1))
18672 mode = GET_MODE (XEXP (XEXP (XEXP (arg, 1), 0), 1));
18673 if (mode == VOIDmode)
18674 mode = GET_MODE (XEXP (XEXP (XEXP (arg, 1), 0), 0));
18675 val = mem_loc_descriptor (XEXP (XEXP (XEXP (arg, 1),
18676 0), 1),
18677 mode, VOIDmode,
18678 VAR_INIT_STATUS_INITIALIZED);
18679 if (val != NULL)
18680 add_AT_loc (cdie, DW_AT_GNU_call_site_data_value, val);
18683 if (die == NULL
18684 && (ca_loc->symbol_ref || tloc))
18685 die = gen_call_site_die (decl, subr_die, ca_loc);
18686 if (die != NULL && (tloc != NULL_RTX || tlocc != NULL_RTX))
18688 dw_loc_descr_ref tval = NULL;
18690 if (tloc != NULL_RTX)
18691 tval = mem_loc_descriptor (tloc,
18692 GET_MODE (tloc) == VOIDmode
18693 ? Pmode : GET_MODE (tloc),
18694 VOIDmode,
18695 VAR_INIT_STATUS_INITIALIZED);
18696 if (tval)
18697 add_AT_loc (die, DW_AT_GNU_call_site_target, tval);
18698 else if (tlocc != NULL_RTX)
18700 tval = mem_loc_descriptor (tlocc,
18701 GET_MODE (tlocc) == VOIDmode
18702 ? Pmode : GET_MODE (tlocc),
18703 VOIDmode,
18704 VAR_INIT_STATUS_INITIALIZED);
18705 if (tval)
18706 add_AT_loc (die, DW_AT_GNU_call_site_target_clobbered,
18707 tval);
18710 if (die != NULL)
18712 call_site_note_count++;
18713 if (ca_loc->tail_call_p)
18714 tail_call_site_note_count++;
18718 call_arg_locations = NULL;
18719 call_arg_loc_last = NULL;
18720 if (tail_call_site_count >= 0
18721 && tail_call_site_count == tail_call_site_note_count
18722 && !dwarf_strict)
18724 if (call_site_count >= 0
18725 && call_site_count == call_site_note_count)
18726 add_AT_flag (subr_die, DW_AT_GNU_all_call_sites, 1);
18727 else
18728 add_AT_flag (subr_die, DW_AT_GNU_all_tail_call_sites, 1);
18730 call_site_count = -1;
18731 tail_call_site_count = -1;
18734 if (subr_die != old_die)
18735 /* Add the calling convention attribute if requested. */
18736 add_calling_convention_attribute (subr_die, decl);
18739 /* Returns a hash value for X (which really is a die_struct). */
18741 static hashval_t
18742 common_block_die_table_hash (const void *x)
18744 const_dw_die_ref d = (const_dw_die_ref) x;
18745 return (hashval_t) d->decl_id ^ htab_hash_pointer (d->die_parent);
18748 /* Return nonzero if decl_id and die_parent of die_struct X is the same
18749 as decl_id and die_parent of die_struct Y. */
18751 static int
18752 common_block_die_table_eq (const void *x, const void *y)
18754 const_dw_die_ref d = (const_dw_die_ref) x;
18755 const_dw_die_ref e = (const_dw_die_ref) y;
18756 return d->decl_id == e->decl_id && d->die_parent == e->die_parent;
18759 /* Generate a DIE to represent a declared data object.
18760 Either DECL or ORIGIN must be non-null. */
18762 static void
18763 gen_variable_die (tree decl, tree origin, dw_die_ref context_die)
18765 HOST_WIDE_INT off = 0;
18766 tree com_decl;
18767 tree decl_or_origin = decl ? decl : origin;
18768 tree ultimate_origin;
18769 dw_die_ref var_die;
18770 dw_die_ref old_die = decl ? lookup_decl_die (decl) : NULL;
18771 dw_die_ref origin_die;
18772 bool declaration = (DECL_EXTERNAL (decl_or_origin)
18773 || class_or_namespace_scope_p (context_die));
18774 bool specialization_p = false;
18776 ultimate_origin = decl_ultimate_origin (decl_or_origin);
18777 if (decl || ultimate_origin)
18778 origin = ultimate_origin;
18779 com_decl = fortran_common (decl_or_origin, &off);
18781 /* Symbol in common gets emitted as a child of the common block, in the form
18782 of a data member. */
18783 if (com_decl)
18785 dw_die_ref com_die;
18786 dw_loc_list_ref loc;
18787 die_node com_die_arg;
18789 var_die = lookup_decl_die (decl_or_origin);
18790 if (var_die)
18792 if (get_AT (var_die, DW_AT_location) == NULL)
18794 loc = loc_list_from_tree (com_decl, off ? 1 : 2);
18795 if (loc)
18797 if (off)
18799 /* Optimize the common case. */
18800 if (single_element_loc_list_p (loc)
18801 && loc->expr->dw_loc_opc == DW_OP_addr
18802 && loc->expr->dw_loc_next == NULL
18803 && GET_CODE (loc->expr->dw_loc_oprnd1.v.val_addr)
18804 == SYMBOL_REF)
18806 rtx x = loc->expr->dw_loc_oprnd1.v.val_addr;
18807 loc->expr->dw_loc_oprnd1.v.val_addr
18808 = plus_constant (GET_MODE (x), x , off);
18810 else
18811 loc_list_plus_const (loc, off);
18813 add_AT_location_description (var_die, DW_AT_location, loc);
18814 remove_AT (var_die, DW_AT_declaration);
18817 return;
18820 if (common_block_die_table == NULL)
18821 common_block_die_table
18822 = htab_create_ggc (10, common_block_die_table_hash,
18823 common_block_die_table_eq, NULL);
18825 com_die_arg.decl_id = DECL_UID (com_decl);
18826 com_die_arg.die_parent = context_die;
18827 com_die = (dw_die_ref) htab_find (common_block_die_table, &com_die_arg);
18828 loc = loc_list_from_tree (com_decl, 2);
18829 if (com_die == NULL)
18831 const char *cnam
18832 = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (com_decl));
18833 void **slot;
18835 com_die = new_die (DW_TAG_common_block, context_die, decl);
18836 add_name_and_src_coords_attributes (com_die, com_decl);
18837 if (loc)
18839 add_AT_location_description (com_die, DW_AT_location, loc);
18840 /* Avoid sharing the same loc descriptor between
18841 DW_TAG_common_block and DW_TAG_variable. */
18842 loc = loc_list_from_tree (com_decl, 2);
18844 else if (DECL_EXTERNAL (decl))
18845 add_AT_flag (com_die, DW_AT_declaration, 1);
18846 if (want_pubnames ())
18847 add_pubname_string (cnam, com_die); /* ??? needed? */
18848 com_die->decl_id = DECL_UID (com_decl);
18849 slot = htab_find_slot (common_block_die_table, com_die, INSERT);
18850 *slot = (void *) com_die;
18852 else if (get_AT (com_die, DW_AT_location) == NULL && loc)
18854 add_AT_location_description (com_die, DW_AT_location, loc);
18855 loc = loc_list_from_tree (com_decl, 2);
18856 remove_AT (com_die, DW_AT_declaration);
18858 var_die = new_die (DW_TAG_variable, com_die, decl);
18859 add_name_and_src_coords_attributes (var_die, decl);
18860 add_type_attribute (var_die, TREE_TYPE (decl), decl_quals (decl),
18861 context_die);
18862 add_AT_flag (var_die, DW_AT_external, 1);
18863 if (loc)
18865 if (off)
18867 /* Optimize the common case. */
18868 if (single_element_loc_list_p (loc)
18869 && loc->expr->dw_loc_opc == DW_OP_addr
18870 && loc->expr->dw_loc_next == NULL
18871 && GET_CODE (loc->expr->dw_loc_oprnd1.v.val_addr) == SYMBOL_REF)
18873 rtx x = loc->expr->dw_loc_oprnd1.v.val_addr;
18874 loc->expr->dw_loc_oprnd1.v.val_addr
18875 = plus_constant (GET_MODE (x), x, off);
18877 else
18878 loc_list_plus_const (loc, off);
18880 add_AT_location_description (var_die, DW_AT_location, loc);
18882 else if (DECL_EXTERNAL (decl))
18883 add_AT_flag (var_die, DW_AT_declaration, 1);
18884 equate_decl_number_to_die (decl, var_die);
18885 return;
18888 /* If the compiler emitted a definition for the DECL declaration
18889 and if we already emitted a DIE for it, don't emit a second
18890 DIE for it again. Allow re-declarations of DECLs that are
18891 inside functions, though. */
18892 if (old_die && declaration && !local_scope_p (context_die))
18893 return;
18895 /* For static data members, the declaration in the class is supposed
18896 to have DW_TAG_member tag; the specification should still be
18897 DW_TAG_variable referencing the DW_TAG_member DIE. */
18898 if (declaration && class_scope_p (context_die))
18899 var_die = new_die (DW_TAG_member, context_die, decl);
18900 else
18901 var_die = new_die (DW_TAG_variable, context_die, decl);
18903 origin_die = NULL;
18904 if (origin != NULL)
18905 origin_die = add_abstract_origin_attribute (var_die, origin);
18907 /* Loop unrolling can create multiple blocks that refer to the same
18908 static variable, so we must test for the DW_AT_declaration flag.
18910 ??? Loop unrolling/reorder_blocks should perhaps be rewritten to
18911 copy decls and set the DECL_ABSTRACT flag on them instead of
18912 sharing them.
18914 ??? Duplicated blocks have been rewritten to use .debug_ranges.
18916 ??? The declare_in_namespace support causes us to get two DIEs for one
18917 variable, both of which are declarations. We want to avoid considering
18918 one to be a specification, so we must test that this DIE is not a
18919 declaration. */
18920 else if (old_die && TREE_STATIC (decl) && ! declaration
18921 && get_AT_flag (old_die, DW_AT_declaration) == 1)
18923 /* This is a definition of a C++ class level static. */
18924 add_AT_specification (var_die, old_die);
18925 specialization_p = true;
18926 if (DECL_NAME (decl))
18928 expanded_location s = expand_location (DECL_SOURCE_LOCATION (decl));
18929 struct dwarf_file_data * file_index = lookup_filename (s.file);
18931 if (get_AT_file (old_die, DW_AT_decl_file) != file_index)
18932 add_AT_file (var_die, DW_AT_decl_file, file_index);
18934 if (get_AT_unsigned (old_die, DW_AT_decl_line) != (unsigned) s.line)
18935 add_AT_unsigned (var_die, DW_AT_decl_line, s.line);
18937 if (old_die->die_tag == DW_TAG_member)
18938 add_linkage_name (var_die, decl);
18941 else
18942 add_name_and_src_coords_attributes (var_die, decl);
18944 if ((origin == NULL && !specialization_p)
18945 || (origin != NULL
18946 && !DECL_ABSTRACT (decl_or_origin)
18947 && variably_modified_type_p (TREE_TYPE (decl_or_origin),
18948 decl_function_context
18949 (decl_or_origin))))
18951 tree type = TREE_TYPE (decl_or_origin);
18953 if (decl_by_reference_p (decl_or_origin))
18954 add_type_attribute (var_die, TREE_TYPE (type), TYPE_UNQUALIFIED,
18955 context_die);
18956 else
18957 add_type_attribute (var_die, type, decl_quals (decl_or_origin),
18958 context_die);
18961 if (origin == NULL && !specialization_p)
18963 if (TREE_PUBLIC (decl))
18964 add_AT_flag (var_die, DW_AT_external, 1);
18966 if (DECL_ARTIFICIAL (decl))
18967 add_AT_flag (var_die, DW_AT_artificial, 1);
18969 add_accessibility_attribute (var_die, decl);
18972 if (declaration)
18973 add_AT_flag (var_die, DW_AT_declaration, 1);
18975 if (decl && (DECL_ABSTRACT (decl) || declaration || old_die == NULL))
18976 equate_decl_number_to_die (decl, var_die);
18978 if (! declaration
18979 && (! DECL_ABSTRACT (decl_or_origin)
18980 /* Local static vars are shared between all clones/inlines,
18981 so emit DW_AT_location on the abstract DIE if DECL_RTL is
18982 already set. */
18983 || (TREE_CODE (decl_or_origin) == VAR_DECL
18984 && TREE_STATIC (decl_or_origin)
18985 && DECL_RTL_SET_P (decl_or_origin)))
18986 /* When abstract origin already has DW_AT_location attribute, no need
18987 to add it again. */
18988 && (origin_die == NULL || get_AT (origin_die, DW_AT_location) == NULL))
18990 if (TREE_CODE (decl_or_origin) == VAR_DECL && TREE_STATIC (decl_or_origin)
18991 && !TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl_or_origin)))
18992 defer_location (decl_or_origin, var_die);
18993 else
18994 add_location_or_const_value_attribute (var_die, decl_or_origin,
18995 decl == NULL, DW_AT_location);
18996 add_pubname (decl_or_origin, var_die);
18998 else
18999 tree_add_const_value_attribute_for_decl (var_die, decl_or_origin);
19002 /* Generate a DIE to represent a named constant. */
19004 static void
19005 gen_const_die (tree decl, dw_die_ref context_die)
19007 dw_die_ref const_die;
19008 tree type = TREE_TYPE (decl);
19010 const_die = new_die (DW_TAG_constant, context_die, decl);
19011 add_name_and_src_coords_attributes (const_die, decl);
19012 add_type_attribute (const_die, type, TYPE_QUAL_CONST, context_die);
19013 if (TREE_PUBLIC (decl))
19014 add_AT_flag (const_die, DW_AT_external, 1);
19015 if (DECL_ARTIFICIAL (decl))
19016 add_AT_flag (const_die, DW_AT_artificial, 1);
19017 tree_add_const_value_attribute_for_decl (const_die, decl);
19020 /* Generate a DIE to represent a label identifier. */
19022 static void
19023 gen_label_die (tree decl, dw_die_ref context_die)
19025 tree origin = decl_ultimate_origin (decl);
19026 dw_die_ref lbl_die = new_die (DW_TAG_label, context_die, decl);
19027 rtx insn;
19028 char label[MAX_ARTIFICIAL_LABEL_BYTES];
19030 if (origin != NULL)
19031 add_abstract_origin_attribute (lbl_die, origin);
19032 else
19033 add_name_and_src_coords_attributes (lbl_die, decl);
19035 if (DECL_ABSTRACT (decl))
19036 equate_decl_number_to_die (decl, lbl_die);
19037 else
19039 insn = DECL_RTL_IF_SET (decl);
19041 /* Deleted labels are programmer specified labels which have been
19042 eliminated because of various optimizations. We still emit them
19043 here so that it is possible to put breakpoints on them. */
19044 if (insn
19045 && (LABEL_P (insn)
19046 || ((NOTE_P (insn)
19047 && NOTE_KIND (insn) == NOTE_INSN_DELETED_LABEL))))
19049 /* When optimization is enabled (via -O) some parts of the compiler
19050 (e.g. jump.c and cse.c) may try to delete CODE_LABEL insns which
19051 represent source-level labels which were explicitly declared by
19052 the user. This really shouldn't be happening though, so catch
19053 it if it ever does happen. */
19054 gcc_assert (!as_a<rtx_insn *> (insn)->deleted ());
19056 ASM_GENERATE_INTERNAL_LABEL (label, "L", CODE_LABEL_NUMBER (insn));
19057 add_AT_lbl_id (lbl_die, DW_AT_low_pc, label);
19059 else if (insn
19060 && NOTE_P (insn)
19061 && NOTE_KIND (insn) == NOTE_INSN_DELETED_DEBUG_LABEL
19062 && CODE_LABEL_NUMBER (insn) != -1)
19064 ASM_GENERATE_INTERNAL_LABEL (label, "LDL", CODE_LABEL_NUMBER (insn));
19065 add_AT_lbl_id (lbl_die, DW_AT_low_pc, label);
19070 /* A helper function for gen_inlined_subroutine_die. Add source coordinate
19071 attributes to the DIE for a block STMT, to describe where the inlined
19072 function was called from. This is similar to add_src_coords_attributes. */
19074 static inline void
19075 add_call_src_coords_attributes (tree stmt, dw_die_ref die)
19077 expanded_location s = expand_location (BLOCK_SOURCE_LOCATION (stmt));
19079 if (dwarf_version >= 3 || !dwarf_strict)
19081 add_AT_file (die, DW_AT_call_file, lookup_filename (s.file));
19082 add_AT_unsigned (die, DW_AT_call_line, s.line);
19087 /* A helper function for gen_lexical_block_die and gen_inlined_subroutine_die.
19088 Add low_pc and high_pc attributes to the DIE for a block STMT. */
19090 static inline void
19091 add_high_low_attributes (tree stmt, dw_die_ref die)
19093 char label[MAX_ARTIFICIAL_LABEL_BYTES];
19095 if (BLOCK_FRAGMENT_CHAIN (stmt)
19096 && (dwarf_version >= 3 || !dwarf_strict))
19098 tree chain, superblock = NULL_TREE;
19099 dw_die_ref pdie;
19100 dw_attr_ref attr = NULL;
19102 if (inlined_function_outer_scope_p (stmt))
19104 ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_BEGIN_LABEL,
19105 BLOCK_NUMBER (stmt));
19106 add_AT_lbl_id (die, DW_AT_entry_pc, label);
19109 /* Optimize duplicate .debug_ranges lists or even tails of
19110 lists. If this BLOCK has same ranges as its supercontext,
19111 lookup DW_AT_ranges attribute in the supercontext (and
19112 recursively so), verify that the ranges_table contains the
19113 right values and use it instead of adding a new .debug_range. */
19114 for (chain = stmt, pdie = die;
19115 BLOCK_SAME_RANGE (chain);
19116 chain = BLOCK_SUPERCONTEXT (chain))
19118 dw_attr_ref new_attr;
19120 pdie = pdie->die_parent;
19121 if (pdie == NULL)
19122 break;
19123 if (BLOCK_SUPERCONTEXT (chain) == NULL_TREE)
19124 break;
19125 new_attr = get_AT (pdie, DW_AT_ranges);
19126 if (new_attr == NULL
19127 || new_attr->dw_attr_val.val_class != dw_val_class_range_list)
19128 break;
19129 attr = new_attr;
19130 superblock = BLOCK_SUPERCONTEXT (chain);
19132 if (attr != NULL
19133 && (ranges_table[attr->dw_attr_val.v.val_offset
19134 / 2 / DWARF2_ADDR_SIZE].num
19135 == BLOCK_NUMBER (superblock))
19136 && BLOCK_FRAGMENT_CHAIN (superblock))
19138 unsigned long off = attr->dw_attr_val.v.val_offset
19139 / 2 / DWARF2_ADDR_SIZE;
19140 unsigned long supercnt = 0, thiscnt = 0;
19141 for (chain = BLOCK_FRAGMENT_CHAIN (superblock);
19142 chain; chain = BLOCK_FRAGMENT_CHAIN (chain))
19144 ++supercnt;
19145 gcc_checking_assert (ranges_table[off + supercnt].num
19146 == BLOCK_NUMBER (chain));
19148 gcc_checking_assert (ranges_table[off + supercnt + 1].num == 0);
19149 for (chain = BLOCK_FRAGMENT_CHAIN (stmt);
19150 chain; chain = BLOCK_FRAGMENT_CHAIN (chain))
19151 ++thiscnt;
19152 gcc_assert (supercnt >= thiscnt);
19153 add_AT_range_list (die, DW_AT_ranges,
19154 ((off + supercnt - thiscnt)
19155 * 2 * DWARF2_ADDR_SIZE),
19156 false);
19157 return;
19160 add_AT_range_list (die, DW_AT_ranges, add_ranges (stmt), false);
19162 chain = BLOCK_FRAGMENT_CHAIN (stmt);
19165 add_ranges (chain);
19166 chain = BLOCK_FRAGMENT_CHAIN (chain);
19168 while (chain);
19169 add_ranges (NULL);
19171 else
19173 char label_high[MAX_ARTIFICIAL_LABEL_BYTES];
19174 ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_BEGIN_LABEL,
19175 BLOCK_NUMBER (stmt));
19176 ASM_GENERATE_INTERNAL_LABEL (label_high, BLOCK_END_LABEL,
19177 BLOCK_NUMBER (stmt));
19178 add_AT_low_high_pc (die, label, label_high, false);
19182 /* Generate a DIE for a lexical block. */
19184 static void
19185 gen_lexical_block_die (tree stmt, dw_die_ref context_die, int depth)
19187 dw_die_ref stmt_die = new_die (DW_TAG_lexical_block, context_die, stmt);
19189 if (call_arg_locations)
19191 if (block_map.length () <= BLOCK_NUMBER (stmt))
19192 block_map.safe_grow_cleared (BLOCK_NUMBER (stmt) + 1);
19193 block_map[BLOCK_NUMBER (stmt)] = stmt_die;
19196 if (! BLOCK_ABSTRACT (stmt) && TREE_ASM_WRITTEN (stmt))
19197 add_high_low_attributes (stmt, stmt_die);
19199 decls_for_scope (stmt, stmt_die, depth);
19202 /* Generate a DIE for an inlined subprogram. */
19204 static void
19205 gen_inlined_subroutine_die (tree stmt, dw_die_ref context_die, int depth)
19207 tree decl;
19209 /* The instance of function that is effectively being inlined shall not
19210 be abstract. */
19211 gcc_assert (! BLOCK_ABSTRACT (stmt));
19213 decl = block_ultimate_origin (stmt);
19215 /* Emit info for the abstract instance first, if we haven't yet. We
19216 must emit this even if the block is abstract, otherwise when we
19217 emit the block below (or elsewhere), we may end up trying to emit
19218 a die whose origin die hasn't been emitted, and crashing. */
19219 dwarf2out_abstract_function (decl);
19221 if (! BLOCK_ABSTRACT (stmt))
19223 dw_die_ref subr_die
19224 = new_die (DW_TAG_inlined_subroutine, context_die, stmt);
19226 if (call_arg_locations)
19228 if (block_map.length () <= BLOCK_NUMBER (stmt))
19229 block_map.safe_grow_cleared (BLOCK_NUMBER (stmt) + 1);
19230 block_map[BLOCK_NUMBER (stmt)] = subr_die;
19232 add_abstract_origin_attribute (subr_die, decl);
19233 if (TREE_ASM_WRITTEN (stmt))
19234 add_high_low_attributes (stmt, subr_die);
19235 add_call_src_coords_attributes (stmt, subr_die);
19237 decls_for_scope (stmt, subr_die, depth);
19238 current_function_has_inlines = 1;
19242 /* Generate a DIE for a field in a record, or structure. */
19244 static void
19245 gen_field_die (tree decl, dw_die_ref context_die)
19247 dw_die_ref decl_die;
19249 if (TREE_TYPE (decl) == error_mark_node)
19250 return;
19252 decl_die = new_die (DW_TAG_member, context_die, decl);
19253 add_name_and_src_coords_attributes (decl_die, decl);
19254 add_type_attribute (decl_die, member_declared_type (decl),
19255 decl_quals (decl), context_die);
19257 if (DECL_BIT_FIELD_TYPE (decl))
19259 add_byte_size_attribute (decl_die, decl);
19260 add_bit_size_attribute (decl_die, decl);
19261 add_bit_offset_attribute (decl_die, decl);
19264 if (TREE_CODE (DECL_FIELD_CONTEXT (decl)) != UNION_TYPE)
19265 add_data_member_location_attribute (decl_die, decl);
19267 if (DECL_ARTIFICIAL (decl))
19268 add_AT_flag (decl_die, DW_AT_artificial, 1);
19270 add_accessibility_attribute (decl_die, decl);
19272 /* Equate decl number to die, so that we can look up this decl later on. */
19273 equate_decl_number_to_die (decl, decl_die);
19276 #if 0
19277 /* Don't generate either pointer_type DIEs or reference_type DIEs here.
19278 Use modified_type_die instead.
19279 We keep this code here just in case these types of DIEs may be needed to
19280 represent certain things in other languages (e.g. Pascal) someday. */
19282 static void
19283 gen_pointer_type_die (tree type, dw_die_ref context_die)
19285 dw_die_ref ptr_die
19286 = new_die (DW_TAG_pointer_type, scope_die_for (type, context_die), type);
19288 equate_type_number_to_die (type, ptr_die);
19289 add_type_attribute (ptr_die, TREE_TYPE (type), TYPE_UNQUALIFIED,
19290 context_die);
19291 add_AT_unsigned (mod_type_die, DW_AT_byte_size, PTR_SIZE);
19294 /* Don't generate either pointer_type DIEs or reference_type DIEs here.
19295 Use modified_type_die instead.
19296 We keep this code here just in case these types of DIEs may be needed to
19297 represent certain things in other languages (e.g. Pascal) someday. */
19299 static void
19300 gen_reference_type_die (tree type, dw_die_ref context_die)
19302 dw_die_ref ref_die, scope_die = scope_die_for (type, context_die);
19304 if (TYPE_REF_IS_RVALUE (type) && dwarf_version >= 4)
19305 ref_die = new_die (DW_TAG_rvalue_reference_type, scope_die, type);
19306 else
19307 ref_die = new_die (DW_TAG_reference_type, scope_die, type);
19309 equate_type_number_to_die (type, ref_die);
19310 add_type_attribute (ref_die, TREE_TYPE (type), TYPE_UNQUALIFIED,
19311 context_die);
19312 add_AT_unsigned (mod_type_die, DW_AT_byte_size, PTR_SIZE);
19314 #endif
19316 /* Generate a DIE for a pointer to a member type. */
19318 static void
19319 gen_ptr_to_mbr_type_die (tree type, dw_die_ref context_die)
19321 dw_die_ref ptr_die
19322 = new_die (DW_TAG_ptr_to_member_type,
19323 scope_die_for (type, context_die), type);
19325 equate_type_number_to_die (type, ptr_die);
19326 add_AT_die_ref (ptr_die, DW_AT_containing_type,
19327 lookup_type_die (TYPE_OFFSET_BASETYPE (type)));
19328 add_type_attribute (ptr_die, TREE_TYPE (type), TYPE_UNQUALIFIED,
19329 context_die);
19332 typedef const char *dchar_p; /* For DEF_VEC_P. */
19334 static char *producer_string;
19336 /* Return a heap allocated producer string including command line options
19337 if -grecord-gcc-switches. */
19339 static char *
19340 gen_producer_string (void)
19342 size_t j;
19343 auto_vec<dchar_p> switches;
19344 const char *language_string = lang_hooks.name;
19345 char *producer, *tail;
19346 const char *p;
19347 size_t len = dwarf_record_gcc_switches ? 0 : 3;
19348 size_t plen = strlen (language_string) + 1 + strlen (version_string);
19350 for (j = 1; dwarf_record_gcc_switches && j < save_decoded_options_count; j++)
19351 switch (save_decoded_options[j].opt_index)
19353 case OPT_o:
19354 case OPT_d:
19355 case OPT_dumpbase:
19356 case OPT_dumpdir:
19357 case OPT_auxbase:
19358 case OPT_auxbase_strip:
19359 case OPT_quiet:
19360 case OPT_version:
19361 case OPT_v:
19362 case OPT_w:
19363 case OPT_L:
19364 case OPT_D:
19365 case OPT_I:
19366 case OPT_U:
19367 case OPT_SPECIAL_unknown:
19368 case OPT_SPECIAL_ignore:
19369 case OPT_SPECIAL_program_name:
19370 case OPT_SPECIAL_input_file:
19371 case OPT_grecord_gcc_switches:
19372 case OPT_gno_record_gcc_switches:
19373 case OPT__output_pch_:
19374 case OPT_fdiagnostics_show_location_:
19375 case OPT_fdiagnostics_show_option:
19376 case OPT_fdiagnostics_show_caret:
19377 case OPT_fdiagnostics_color_:
19378 case OPT_fverbose_asm:
19379 case OPT____:
19380 case OPT__sysroot_:
19381 case OPT_nostdinc:
19382 case OPT_nostdinc__:
19383 /* Ignore these. */
19384 continue;
19385 default:
19386 if (cl_options[save_decoded_options[j].opt_index].flags
19387 & CL_NO_DWARF_RECORD)
19388 continue;
19389 gcc_checking_assert (save_decoded_options[j].canonical_option[0][0]
19390 == '-');
19391 switch (save_decoded_options[j].canonical_option[0][1])
19393 case 'M':
19394 case 'i':
19395 case 'W':
19396 continue;
19397 case 'f':
19398 if (strncmp (save_decoded_options[j].canonical_option[0] + 2,
19399 "dump", 4) == 0)
19400 continue;
19401 break;
19402 default:
19403 break;
19405 switches.safe_push (save_decoded_options[j].orig_option_with_args_text);
19406 len += strlen (save_decoded_options[j].orig_option_with_args_text) + 1;
19407 break;
19410 producer = XNEWVEC (char, plen + 1 + len + 1);
19411 tail = producer;
19412 sprintf (tail, "%s %s", language_string, version_string);
19413 tail += plen;
19415 FOR_EACH_VEC_ELT (switches, j, p)
19417 len = strlen (p);
19418 *tail = ' ';
19419 memcpy (tail + 1, p, len);
19420 tail += len + 1;
19423 *tail = '\0';
19424 return producer;
19427 /* Generate the DIE for the compilation unit. */
19429 static dw_die_ref
19430 gen_compile_unit_die (const char *filename)
19432 dw_die_ref die;
19433 const char *language_string = lang_hooks.name;
19434 int language;
19436 die = new_die (DW_TAG_compile_unit, NULL, NULL);
19438 if (filename)
19440 add_name_attribute (die, filename);
19441 /* Don't add cwd for <built-in>. */
19442 if (!IS_ABSOLUTE_PATH (filename) && filename[0] != '<')
19443 add_comp_dir_attribute (die);
19446 add_AT_string (die, DW_AT_producer, producer_string ? producer_string : "");
19448 /* If our producer is LTO try to figure out a common language to use
19449 from the global list of translation units. */
19450 if (strcmp (language_string, "GNU GIMPLE") == 0)
19452 unsigned i;
19453 tree t;
19454 const char *common_lang = NULL;
19456 FOR_EACH_VEC_SAFE_ELT (all_translation_units, i, t)
19458 if (!TRANSLATION_UNIT_LANGUAGE (t))
19459 continue;
19460 if (!common_lang)
19461 common_lang = TRANSLATION_UNIT_LANGUAGE (t);
19462 else if (strcmp (common_lang, TRANSLATION_UNIT_LANGUAGE (t)) == 0)
19464 else if (strncmp (common_lang, "GNU C", 5) == 0
19465 && strncmp (TRANSLATION_UNIT_LANGUAGE (t), "GNU C", 5) == 0)
19466 /* Mixing C and C++ is ok, use C++ in that case. */
19467 common_lang = "GNU C++";
19468 else
19470 /* Fall back to C. */
19471 common_lang = NULL;
19472 break;
19476 if (common_lang)
19477 language_string = common_lang;
19480 language = DW_LANG_C89;
19481 if (strcmp (language_string, "GNU C++") == 0)
19482 language = DW_LANG_C_plus_plus;
19483 else if (strcmp (language_string, "GNU F77") == 0)
19484 language = DW_LANG_Fortran77;
19485 else if (strcmp (language_string, "GNU Pascal") == 0)
19486 language = DW_LANG_Pascal83;
19487 else if (dwarf_version >= 3 || !dwarf_strict)
19489 if (strcmp (language_string, "GNU Ada") == 0)
19490 language = DW_LANG_Ada95;
19491 else if (strcmp (language_string, "GNU Fortran") == 0)
19492 language = DW_LANG_Fortran95;
19493 else if (strcmp (language_string, "GNU Java") == 0)
19494 language = DW_LANG_Java;
19495 else if (strcmp (language_string, "GNU Objective-C") == 0)
19496 language = DW_LANG_ObjC;
19497 else if (strcmp (language_string, "GNU Objective-C++") == 0)
19498 language = DW_LANG_ObjC_plus_plus;
19499 else if (dwarf_version >= 5 || !dwarf_strict)
19501 if (strcmp (language_string, "GNU Go") == 0)
19502 language = DW_LANG_Go;
19505 /* Use a degraded Fortran setting in strict DWARF2 so is_fortran works. */
19506 else if (strcmp (language_string, "GNU Fortran") == 0)
19507 language = DW_LANG_Fortran90;
19509 add_AT_unsigned (die, DW_AT_language, language);
19511 switch (language)
19513 case DW_LANG_Fortran77:
19514 case DW_LANG_Fortran90:
19515 case DW_LANG_Fortran95:
19516 /* Fortran has case insensitive identifiers and the front-end
19517 lowercases everything. */
19518 add_AT_unsigned (die, DW_AT_identifier_case, DW_ID_down_case);
19519 break;
19520 default:
19521 /* The default DW_ID_case_sensitive doesn't need to be specified. */
19522 break;
19524 return die;
19527 /* Generate the DIE for a base class. */
19529 static void
19530 gen_inheritance_die (tree binfo, tree access, dw_die_ref context_die)
19532 dw_die_ref die = new_die (DW_TAG_inheritance, context_die, binfo);
19534 add_type_attribute (die, BINFO_TYPE (binfo), TYPE_UNQUALIFIED, context_die);
19535 add_data_member_location_attribute (die, binfo);
19537 if (BINFO_VIRTUAL_P (binfo))
19538 add_AT_unsigned (die, DW_AT_virtuality, DW_VIRTUALITY_virtual);
19540 /* In DWARF3+ the default is DW_ACCESS_private only in DW_TAG_class_type
19541 children, otherwise the default is DW_ACCESS_public. In DWARF2
19542 the default has always been DW_ACCESS_private. */
19543 if (access == access_public_node)
19545 if (dwarf_version == 2
19546 || context_die->die_tag == DW_TAG_class_type)
19547 add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_public);
19549 else if (access == access_protected_node)
19550 add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_protected);
19551 else if (dwarf_version > 2
19552 && context_die->die_tag != DW_TAG_class_type)
19553 add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_private);
19556 /* Generate a DIE for a class member. */
19558 static void
19559 gen_member_die (tree type, dw_die_ref context_die)
19561 tree member;
19562 tree binfo = TYPE_BINFO (type);
19563 dw_die_ref child;
19565 /* If this is not an incomplete type, output descriptions of each of its
19566 members. Note that as we output the DIEs necessary to represent the
19567 members of this record or union type, we will also be trying to output
19568 DIEs to represent the *types* of those members. However the `type'
19569 function (above) will specifically avoid generating type DIEs for member
19570 types *within* the list of member DIEs for this (containing) type except
19571 for those types (of members) which are explicitly marked as also being
19572 members of this (containing) type themselves. The g++ front- end can
19573 force any given type to be treated as a member of some other (containing)
19574 type by setting the TYPE_CONTEXT of the given (member) type to point to
19575 the TREE node representing the appropriate (containing) type. */
19577 /* First output info about the base classes. */
19578 if (binfo)
19580 vec<tree, va_gc> *accesses = BINFO_BASE_ACCESSES (binfo);
19581 int i;
19582 tree base;
19584 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base); i++)
19585 gen_inheritance_die (base,
19586 (accesses ? (*accesses)[i] : access_public_node),
19587 context_die);
19590 /* Now output info about the data members and type members. */
19591 for (member = TYPE_FIELDS (type); member; member = DECL_CHAIN (member))
19593 /* If we thought we were generating minimal debug info for TYPE
19594 and then changed our minds, some of the member declarations
19595 may have already been defined. Don't define them again, but
19596 do put them in the right order. */
19598 child = lookup_decl_die (member);
19599 if (child)
19600 splice_child_die (context_die, child);
19601 else
19602 gen_decl_die (member, NULL, context_die);
19605 /* Now output info about the function members (if any). */
19606 for (member = TYPE_METHODS (type); member; member = DECL_CHAIN (member))
19608 /* Don't include clones in the member list. */
19609 if (DECL_ABSTRACT_ORIGIN (member))
19610 continue;
19612 child = lookup_decl_die (member);
19613 if (child)
19614 splice_child_die (context_die, child);
19615 else
19616 gen_decl_die (member, NULL, context_die);
19620 /* Generate a DIE for a structure or union type. If TYPE_DECL_SUPPRESS_DEBUG
19621 is set, we pretend that the type was never defined, so we only get the
19622 member DIEs needed by later specification DIEs. */
19624 static void
19625 gen_struct_or_union_type_die (tree type, dw_die_ref context_die,
19626 enum debug_info_usage usage)
19628 dw_die_ref type_die = lookup_type_die (type);
19629 dw_die_ref scope_die = 0;
19630 int nested = 0;
19631 int complete = (TYPE_SIZE (type)
19632 && (! TYPE_STUB_DECL (type)
19633 || ! TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type))));
19634 int ns_decl = (context_die && context_die->die_tag == DW_TAG_namespace);
19635 complete = complete && should_emit_struct_debug (type, usage);
19637 if (type_die && ! complete)
19638 return;
19640 if (TYPE_CONTEXT (type) != NULL_TREE
19641 && (AGGREGATE_TYPE_P (TYPE_CONTEXT (type))
19642 || TREE_CODE (TYPE_CONTEXT (type)) == NAMESPACE_DECL))
19643 nested = 1;
19645 scope_die = scope_die_for (type, context_die);
19647 /* Generate child dies for template paramaters. */
19648 if (!type_die && debug_info_level > DINFO_LEVEL_TERSE)
19649 schedule_generic_params_dies_gen (type);
19651 if (! type_die || (nested && is_cu_die (scope_die)))
19652 /* First occurrence of type or toplevel definition of nested class. */
19654 dw_die_ref old_die = type_die;
19656 type_die = new_die (TREE_CODE (type) == RECORD_TYPE
19657 ? record_type_tag (type) : DW_TAG_union_type,
19658 scope_die, type);
19659 equate_type_number_to_die (type, type_die);
19660 if (old_die)
19661 add_AT_specification (type_die, old_die);
19662 else
19663 add_name_attribute (type_die, type_tag (type));
19665 else
19666 remove_AT (type_die, DW_AT_declaration);
19668 /* If this type has been completed, then give it a byte_size attribute and
19669 then give a list of members. */
19670 if (complete && !ns_decl)
19672 /* Prevent infinite recursion in cases where the type of some member of
19673 this type is expressed in terms of this type itself. */
19674 TREE_ASM_WRITTEN (type) = 1;
19675 add_byte_size_attribute (type_die, type);
19676 if (TYPE_STUB_DECL (type) != NULL_TREE)
19678 add_src_coords_attributes (type_die, TYPE_STUB_DECL (type));
19679 add_accessibility_attribute (type_die, TYPE_STUB_DECL (type));
19682 /* If the first reference to this type was as the return type of an
19683 inline function, then it may not have a parent. Fix this now. */
19684 if (type_die->die_parent == NULL)
19685 add_child_die (scope_die, type_die);
19687 push_decl_scope (type);
19688 gen_member_die (type, type_die);
19689 pop_decl_scope ();
19691 add_gnat_descriptive_type_attribute (type_die, type, context_die);
19692 if (TYPE_ARTIFICIAL (type))
19693 add_AT_flag (type_die, DW_AT_artificial, 1);
19695 /* GNU extension: Record what type our vtable lives in. */
19696 if (TYPE_VFIELD (type))
19698 tree vtype = DECL_FCONTEXT (TYPE_VFIELD (type));
19700 gen_type_die (vtype, context_die);
19701 add_AT_die_ref (type_die, DW_AT_containing_type,
19702 lookup_type_die (vtype));
19705 else
19707 add_AT_flag (type_die, DW_AT_declaration, 1);
19709 /* We don't need to do this for function-local types. */
19710 if (TYPE_STUB_DECL (type)
19711 && ! decl_function_context (TYPE_STUB_DECL (type)))
19712 vec_safe_push (incomplete_types, type);
19715 if (get_AT (type_die, DW_AT_name))
19716 add_pubtype (type, type_die);
19719 /* Generate a DIE for a subroutine _type_. */
19721 static void
19722 gen_subroutine_type_die (tree type, dw_die_ref context_die)
19724 tree return_type = TREE_TYPE (type);
19725 dw_die_ref subr_die
19726 = new_die (DW_TAG_subroutine_type,
19727 scope_die_for (type, context_die), type);
19729 equate_type_number_to_die (type, subr_die);
19730 add_prototyped_attribute (subr_die, type);
19731 add_type_attribute (subr_die, return_type, TYPE_UNQUALIFIED, context_die);
19732 gen_formal_types_die (type, subr_die);
19734 if (get_AT (subr_die, DW_AT_name))
19735 add_pubtype (type, subr_die);
19738 /* Generate a DIE for a type definition. */
19740 static void
19741 gen_typedef_die (tree decl, dw_die_ref context_die)
19743 dw_die_ref type_die;
19744 tree origin;
19746 if (TREE_ASM_WRITTEN (decl))
19747 return;
19749 TREE_ASM_WRITTEN (decl) = 1;
19750 type_die = new_die (DW_TAG_typedef, context_die, decl);
19751 origin = decl_ultimate_origin (decl);
19752 if (origin != NULL)
19753 add_abstract_origin_attribute (type_die, origin);
19754 else
19756 tree type;
19758 add_name_and_src_coords_attributes (type_die, decl);
19759 if (DECL_ORIGINAL_TYPE (decl))
19761 type = DECL_ORIGINAL_TYPE (decl);
19763 gcc_assert (type != TREE_TYPE (decl));
19764 equate_type_number_to_die (TREE_TYPE (decl), type_die);
19766 else
19768 type = TREE_TYPE (decl);
19770 if (is_naming_typedef_decl (TYPE_NAME (type)))
19772 /* Here, we are in the case of decl being a typedef naming
19773 an anonymous type, e.g:
19774 typedef struct {...} foo;
19775 In that case TREE_TYPE (decl) is not a typedef variant
19776 type and TYPE_NAME of the anonymous type is set to the
19777 TYPE_DECL of the typedef. This construct is emitted by
19778 the C++ FE.
19780 TYPE is the anonymous struct named by the typedef
19781 DECL. As we need the DW_AT_type attribute of the
19782 DW_TAG_typedef to point to the DIE of TYPE, let's
19783 generate that DIE right away. add_type_attribute
19784 called below will then pick (via lookup_type_die) that
19785 anonymous struct DIE. */
19786 if (!TREE_ASM_WRITTEN (type))
19787 gen_tagged_type_die (type, context_die, DINFO_USAGE_DIR_USE);
19789 /* This is a GNU Extension. We are adding a
19790 DW_AT_linkage_name attribute to the DIE of the
19791 anonymous struct TYPE. The value of that attribute
19792 is the name of the typedef decl naming the anonymous
19793 struct. This greatly eases the work of consumers of
19794 this debug info. */
19795 add_linkage_attr (lookup_type_die (type), decl);
19799 add_type_attribute (type_die, type, decl_quals (decl), context_die);
19801 if (is_naming_typedef_decl (decl))
19802 /* We want that all subsequent calls to lookup_type_die with
19803 TYPE in argument yield the DW_TAG_typedef we have just
19804 created. */
19805 equate_type_number_to_die (type, type_die);
19807 add_accessibility_attribute (type_die, decl);
19810 if (DECL_ABSTRACT (decl))
19811 equate_decl_number_to_die (decl, type_die);
19813 if (get_AT (type_die, DW_AT_name))
19814 add_pubtype (decl, type_die);
19817 /* Generate a DIE for a struct, class, enum or union type. */
19819 static void
19820 gen_tagged_type_die (tree type,
19821 dw_die_ref context_die,
19822 enum debug_info_usage usage)
19824 int need_pop;
19826 if (type == NULL_TREE
19827 || !is_tagged_type (type))
19828 return;
19830 /* If this is a nested type whose containing class hasn't been written
19831 out yet, writing it out will cover this one, too. This does not apply
19832 to instantiations of member class templates; they need to be added to
19833 the containing class as they are generated. FIXME: This hurts the
19834 idea of combining type decls from multiple TUs, since we can't predict
19835 what set of template instantiations we'll get. */
19836 if (TYPE_CONTEXT (type)
19837 && AGGREGATE_TYPE_P (TYPE_CONTEXT (type))
19838 && ! TREE_ASM_WRITTEN (TYPE_CONTEXT (type)))
19840 gen_type_die_with_usage (TYPE_CONTEXT (type), context_die, usage);
19842 if (TREE_ASM_WRITTEN (type))
19843 return;
19845 /* If that failed, attach ourselves to the stub. */
19846 push_decl_scope (TYPE_CONTEXT (type));
19847 context_die = lookup_type_die (TYPE_CONTEXT (type));
19848 need_pop = 1;
19850 else if (TYPE_CONTEXT (type) != NULL_TREE
19851 && (TREE_CODE (TYPE_CONTEXT (type)) == FUNCTION_DECL))
19853 /* If this type is local to a function that hasn't been written
19854 out yet, use a NULL context for now; it will be fixed up in
19855 decls_for_scope. */
19856 context_die = lookup_decl_die (TYPE_CONTEXT (type));
19857 /* A declaration DIE doesn't count; nested types need to go in the
19858 specification. */
19859 if (context_die && is_declaration_die (context_die))
19860 context_die = NULL;
19861 need_pop = 0;
19863 else
19865 context_die = declare_in_namespace (type, context_die);
19866 need_pop = 0;
19869 if (TREE_CODE (type) == ENUMERAL_TYPE)
19871 /* This might have been written out by the call to
19872 declare_in_namespace. */
19873 if (!TREE_ASM_WRITTEN (type))
19874 gen_enumeration_type_die (type, context_die);
19876 else
19877 gen_struct_or_union_type_die (type, context_die, usage);
19879 if (need_pop)
19880 pop_decl_scope ();
19882 /* Don't set TREE_ASM_WRITTEN on an incomplete struct; we want to fix
19883 it up if it is ever completed. gen_*_type_die will set it for us
19884 when appropriate. */
19887 /* Generate a type description DIE. */
19889 static void
19890 gen_type_die_with_usage (tree type, dw_die_ref context_die,
19891 enum debug_info_usage usage)
19893 struct array_descr_info info;
19895 if (type == NULL_TREE || type == error_mark_node)
19896 return;
19898 if (TYPE_NAME (type) != NULL_TREE
19899 && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
19900 && is_redundant_typedef (TYPE_NAME (type))
19901 && DECL_ORIGINAL_TYPE (TYPE_NAME (type)))
19902 /* The DECL of this type is a typedef we don't want to emit debug
19903 info for but we want debug info for its underlying typedef.
19904 This can happen for e.g, the injected-class-name of a C++
19905 type. */
19906 type = DECL_ORIGINAL_TYPE (TYPE_NAME (type));
19908 /* If TYPE is a typedef type variant, let's generate debug info
19909 for the parent typedef which TYPE is a type of. */
19910 if (typedef_variant_p (type))
19912 if (TREE_ASM_WRITTEN (type))
19913 return;
19915 /* Prevent broken recursion; we can't hand off to the same type. */
19916 gcc_assert (DECL_ORIGINAL_TYPE (TYPE_NAME (type)) != type);
19918 /* Give typedefs the right scope. */
19919 context_die = scope_die_for (type, context_die);
19921 TREE_ASM_WRITTEN (type) = 1;
19923 gen_decl_die (TYPE_NAME (type), NULL, context_die);
19924 return;
19927 /* If type is an anonymous tagged type named by a typedef, let's
19928 generate debug info for the typedef. */
19929 if (is_naming_typedef_decl (TYPE_NAME (type)))
19931 /* Use the DIE of the containing namespace as the parent DIE of
19932 the type description DIE we want to generate. */
19933 if (DECL_CONTEXT (TYPE_NAME (type))
19934 && TREE_CODE (DECL_CONTEXT (TYPE_NAME (type))) == NAMESPACE_DECL)
19935 context_die = get_context_die (DECL_CONTEXT (TYPE_NAME (type)));
19937 gen_decl_die (TYPE_NAME (type), NULL, context_die);
19938 return;
19941 /* If this is an array type with hidden descriptor, handle it first. */
19942 if (!TREE_ASM_WRITTEN (type)
19943 && lang_hooks.types.get_array_descr_info
19944 && lang_hooks.types.get_array_descr_info (type, &info)
19945 && (dwarf_version >= 3 || !dwarf_strict))
19947 gen_descr_array_type_die (type, &info, context_die);
19948 TREE_ASM_WRITTEN (type) = 1;
19949 return;
19952 /* We are going to output a DIE to represent the unqualified version
19953 of this type (i.e. without any const or volatile qualifiers) so
19954 get the main variant (i.e. the unqualified version) of this type
19955 now. (Vectors are special because the debugging info is in the
19956 cloned type itself). */
19957 if (TREE_CODE (type) != VECTOR_TYPE)
19958 type = type_main_variant (type);
19960 if (TREE_ASM_WRITTEN (type))
19961 return;
19963 switch (TREE_CODE (type))
19965 case ERROR_MARK:
19966 break;
19968 case POINTER_TYPE:
19969 case REFERENCE_TYPE:
19970 /* We must set TREE_ASM_WRITTEN in case this is a recursive type. This
19971 ensures that the gen_type_die recursion will terminate even if the
19972 type is recursive. Recursive types are possible in Ada. */
19973 /* ??? We could perhaps do this for all types before the switch
19974 statement. */
19975 TREE_ASM_WRITTEN (type) = 1;
19977 /* For these types, all that is required is that we output a DIE (or a
19978 set of DIEs) to represent the "basis" type. */
19979 gen_type_die_with_usage (TREE_TYPE (type), context_die,
19980 DINFO_USAGE_IND_USE);
19981 break;
19983 case OFFSET_TYPE:
19984 /* This code is used for C++ pointer-to-data-member types.
19985 Output a description of the relevant class type. */
19986 gen_type_die_with_usage (TYPE_OFFSET_BASETYPE (type), context_die,
19987 DINFO_USAGE_IND_USE);
19989 /* Output a description of the type of the object pointed to. */
19990 gen_type_die_with_usage (TREE_TYPE (type), context_die,
19991 DINFO_USAGE_IND_USE);
19993 /* Now output a DIE to represent this pointer-to-data-member type
19994 itself. */
19995 gen_ptr_to_mbr_type_die (type, context_die);
19996 break;
19998 case FUNCTION_TYPE:
19999 /* Force out return type (in case it wasn't forced out already). */
20000 gen_type_die_with_usage (TREE_TYPE (type), context_die,
20001 DINFO_USAGE_DIR_USE);
20002 gen_subroutine_type_die (type, context_die);
20003 break;
20005 case METHOD_TYPE:
20006 /* Force out return type (in case it wasn't forced out already). */
20007 gen_type_die_with_usage (TREE_TYPE (type), context_die,
20008 DINFO_USAGE_DIR_USE);
20009 gen_subroutine_type_die (type, context_die);
20010 break;
20012 case ARRAY_TYPE:
20013 gen_array_type_die (type, context_die);
20014 break;
20016 case VECTOR_TYPE:
20017 gen_array_type_die (type, context_die);
20018 break;
20020 case ENUMERAL_TYPE:
20021 case RECORD_TYPE:
20022 case UNION_TYPE:
20023 case QUAL_UNION_TYPE:
20024 gen_tagged_type_die (type, context_die, usage);
20025 return;
20027 case VOID_TYPE:
20028 case INTEGER_TYPE:
20029 case REAL_TYPE:
20030 case FIXED_POINT_TYPE:
20031 case COMPLEX_TYPE:
20032 case BOOLEAN_TYPE:
20033 /* No DIEs needed for fundamental types. */
20034 break;
20036 case NULLPTR_TYPE:
20037 case LANG_TYPE:
20038 /* Just use DW_TAG_unspecified_type. */
20040 dw_die_ref type_die = lookup_type_die (type);
20041 if (type_die == NULL)
20043 tree name = TYPE_IDENTIFIER (type);
20044 type_die = new_die (DW_TAG_unspecified_type, comp_unit_die (),
20045 type);
20046 add_name_attribute (type_die, IDENTIFIER_POINTER (name));
20047 equate_type_number_to_die (type, type_die);
20050 break;
20052 default:
20053 if (is_cxx_auto (type))
20055 tree name = TYPE_IDENTIFIER (type);
20056 dw_die_ref *die = (name == get_identifier ("auto")
20057 ? &auto_die : &decltype_auto_die);
20058 if (!*die)
20060 *die = new_die (DW_TAG_unspecified_type,
20061 comp_unit_die (), NULL_TREE);
20062 add_name_attribute (*die, IDENTIFIER_POINTER (name));
20064 equate_type_number_to_die (type, *die);
20065 break;
20067 gcc_unreachable ();
20070 TREE_ASM_WRITTEN (type) = 1;
20073 static void
20074 gen_type_die (tree type, dw_die_ref context_die)
20076 gen_type_die_with_usage (type, context_die, DINFO_USAGE_DIR_USE);
20079 /* Generate a DW_TAG_lexical_block DIE followed by DIEs to represent all of the
20080 things which are local to the given block. */
20082 static void
20083 gen_block_die (tree stmt, dw_die_ref context_die, int depth)
20085 int must_output_die = 0;
20086 bool inlined_func;
20088 /* Ignore blocks that are NULL. */
20089 if (stmt == NULL_TREE)
20090 return;
20092 inlined_func = inlined_function_outer_scope_p (stmt);
20094 /* If the block is one fragment of a non-contiguous block, do not
20095 process the variables, since they will have been done by the
20096 origin block. Do process subblocks. */
20097 if (BLOCK_FRAGMENT_ORIGIN (stmt))
20099 tree sub;
20101 for (sub = BLOCK_SUBBLOCKS (stmt); sub; sub = BLOCK_CHAIN (sub))
20102 gen_block_die (sub, context_die, depth + 1);
20104 return;
20107 /* Determine if we need to output any Dwarf DIEs at all to represent this
20108 block. */
20109 if (inlined_func)
20110 /* The outer scopes for inlinings *must* always be represented. We
20111 generate DW_TAG_inlined_subroutine DIEs for them. (See below.) */
20112 must_output_die = 1;
20113 else
20115 /* Determine if this block directly contains any "significant"
20116 local declarations which we will need to output DIEs for. */
20117 if (debug_info_level > DINFO_LEVEL_TERSE)
20118 /* We are not in terse mode so *any* local declaration counts
20119 as being a "significant" one. */
20120 must_output_die = ((BLOCK_VARS (stmt) != NULL
20121 || BLOCK_NUM_NONLOCALIZED_VARS (stmt))
20122 && (TREE_USED (stmt)
20123 || TREE_ASM_WRITTEN (stmt)
20124 || BLOCK_ABSTRACT (stmt)));
20125 else if ((TREE_USED (stmt)
20126 || TREE_ASM_WRITTEN (stmt)
20127 || BLOCK_ABSTRACT (stmt))
20128 && !dwarf2out_ignore_block (stmt))
20129 must_output_die = 1;
20132 /* It would be a waste of space to generate a Dwarf DW_TAG_lexical_block
20133 DIE for any block which contains no significant local declarations at
20134 all. Rather, in such cases we just call `decls_for_scope' so that any
20135 needed Dwarf info for any sub-blocks will get properly generated. Note
20136 that in terse mode, our definition of what constitutes a "significant"
20137 local declaration gets restricted to include only inlined function
20138 instances and local (nested) function definitions. */
20139 if (must_output_die)
20141 if (inlined_func)
20143 /* If STMT block is abstract, that means we have been called
20144 indirectly from dwarf2out_abstract_function.
20145 That function rightfully marks the descendent blocks (of
20146 the abstract function it is dealing with) as being abstract,
20147 precisely to prevent us from emitting any
20148 DW_TAG_inlined_subroutine DIE as a descendent
20149 of an abstract function instance. So in that case, we should
20150 not call gen_inlined_subroutine_die.
20152 Later though, when cgraph asks dwarf2out to emit info
20153 for the concrete instance of the function decl into which
20154 the concrete instance of STMT got inlined, the later will lead
20155 to the generation of a DW_TAG_inlined_subroutine DIE. */
20156 if (! BLOCK_ABSTRACT (stmt))
20157 gen_inlined_subroutine_die (stmt, context_die, depth);
20159 else
20160 gen_lexical_block_die (stmt, context_die, depth);
20162 else
20163 decls_for_scope (stmt, context_die, depth);
20166 /* Process variable DECL (or variable with origin ORIGIN) within
20167 block STMT and add it to CONTEXT_DIE. */
20168 static void
20169 process_scope_var (tree stmt, tree decl, tree origin, dw_die_ref context_die)
20171 dw_die_ref die;
20172 tree decl_or_origin = decl ? decl : origin;
20174 if (TREE_CODE (decl_or_origin) == FUNCTION_DECL)
20175 die = lookup_decl_die (decl_or_origin);
20176 else if (TREE_CODE (decl_or_origin) == TYPE_DECL
20177 && TYPE_DECL_IS_STUB (decl_or_origin))
20178 die = lookup_type_die (TREE_TYPE (decl_or_origin));
20179 else
20180 die = NULL;
20182 if (die != NULL && die->die_parent == NULL)
20183 add_child_die (context_die, die);
20184 else if (TREE_CODE (decl_or_origin) == IMPORTED_DECL)
20185 dwarf2out_imported_module_or_decl_1 (decl_or_origin, DECL_NAME (decl_or_origin),
20186 stmt, context_die);
20187 else
20188 gen_decl_die (decl, origin, context_die);
20191 /* Generate all of the decls declared within a given scope and (recursively)
20192 all of its sub-blocks. */
20194 static void
20195 decls_for_scope (tree stmt, dw_die_ref context_die, int depth)
20197 tree decl;
20198 unsigned int i;
20199 tree subblocks;
20201 /* Ignore NULL blocks. */
20202 if (stmt == NULL_TREE)
20203 return;
20205 /* Output the DIEs to represent all of the data objects and typedefs
20206 declared directly within this block but not within any nested
20207 sub-blocks. Also, nested function and tag DIEs have been
20208 generated with a parent of NULL; fix that up now. We don't
20209 have to do this if we're at -g1. */
20210 if (debug_info_level > DINFO_LEVEL_TERSE)
20212 for (decl = BLOCK_VARS (stmt); decl != NULL; decl = DECL_CHAIN (decl))
20213 process_scope_var (stmt, decl, NULL_TREE, context_die);
20214 for (i = 0; i < BLOCK_NUM_NONLOCALIZED_VARS (stmt); i++)
20215 process_scope_var (stmt, NULL, BLOCK_NONLOCALIZED_VAR (stmt, i),
20216 context_die);
20219 /* Even if we're at -g1, we need to process the subblocks in order to get
20220 inlined call information. */
20222 /* Output the DIEs to represent all sub-blocks (and the items declared
20223 therein) of this block. */
20224 for (subblocks = BLOCK_SUBBLOCKS (stmt);
20225 subblocks != NULL;
20226 subblocks = BLOCK_CHAIN (subblocks))
20227 gen_block_die (subblocks, context_die, depth + 1);
20230 /* Is this a typedef we can avoid emitting? */
20232 static inline int
20233 is_redundant_typedef (const_tree decl)
20235 if (TYPE_DECL_IS_STUB (decl))
20236 return 1;
20238 if (DECL_ARTIFICIAL (decl)
20239 && DECL_CONTEXT (decl)
20240 && is_tagged_type (DECL_CONTEXT (decl))
20241 && TREE_CODE (TYPE_NAME (DECL_CONTEXT (decl))) == TYPE_DECL
20242 && DECL_NAME (decl) == DECL_NAME (TYPE_NAME (DECL_CONTEXT (decl))))
20243 /* Also ignore the artificial member typedef for the class name. */
20244 return 1;
20246 return 0;
20249 /* Return TRUE if TYPE is a typedef that names a type for linkage
20250 purposes. This kind of typedefs is produced by the C++ FE for
20251 constructs like:
20253 typedef struct {...} foo;
20255 In that case, there is no typedef variant type produced for foo.
20256 Rather, the TREE_TYPE of the TYPE_DECL of foo is the anonymous
20257 struct type. */
20259 static bool
20260 is_naming_typedef_decl (const_tree decl)
20262 if (decl == NULL_TREE
20263 || TREE_CODE (decl) != TYPE_DECL
20264 || !is_tagged_type (TREE_TYPE (decl))
20265 || DECL_IS_BUILTIN (decl)
20266 || is_redundant_typedef (decl)
20267 /* It looks like Ada produces TYPE_DECLs that are very similar
20268 to C++ naming typedefs but that have different
20269 semantics. Let's be specific to c++ for now. */
20270 || !is_cxx ())
20271 return FALSE;
20273 return (DECL_ORIGINAL_TYPE (decl) == NULL_TREE
20274 && TYPE_NAME (TREE_TYPE (decl)) == decl
20275 && (TYPE_STUB_DECL (TREE_TYPE (decl))
20276 != TYPE_NAME (TREE_TYPE (decl))));
20279 /* Returns the DIE for a context. */
20281 static inline dw_die_ref
20282 get_context_die (tree context)
20284 if (context)
20286 /* Find die that represents this context. */
20287 if (TYPE_P (context))
20289 context = TYPE_MAIN_VARIANT (context);
20290 return strip_naming_typedef (context, force_type_die (context));
20292 else
20293 return force_decl_die (context);
20295 return comp_unit_die ();
20298 /* Returns the DIE for decl. A DIE will always be returned. */
20300 static dw_die_ref
20301 force_decl_die (tree decl)
20303 dw_die_ref decl_die;
20304 unsigned saved_external_flag;
20305 tree save_fn = NULL_TREE;
20306 decl_die = lookup_decl_die (decl);
20307 if (!decl_die)
20309 dw_die_ref context_die = get_context_die (DECL_CONTEXT (decl));
20311 decl_die = lookup_decl_die (decl);
20312 if (decl_die)
20313 return decl_die;
20315 switch (TREE_CODE (decl))
20317 case FUNCTION_DECL:
20318 /* Clear current_function_decl, so that gen_subprogram_die thinks
20319 that this is a declaration. At this point, we just want to force
20320 declaration die. */
20321 save_fn = current_function_decl;
20322 current_function_decl = NULL_TREE;
20323 gen_subprogram_die (decl, context_die);
20324 current_function_decl = save_fn;
20325 break;
20327 case VAR_DECL:
20328 /* Set external flag to force declaration die. Restore it after
20329 gen_decl_die() call. */
20330 saved_external_flag = DECL_EXTERNAL (decl);
20331 DECL_EXTERNAL (decl) = 1;
20332 gen_decl_die (decl, NULL, context_die);
20333 DECL_EXTERNAL (decl) = saved_external_flag;
20334 break;
20336 case NAMESPACE_DECL:
20337 if (dwarf_version >= 3 || !dwarf_strict)
20338 dwarf2out_decl (decl);
20339 else
20340 /* DWARF2 has neither DW_TAG_module, nor DW_TAG_namespace. */
20341 decl_die = comp_unit_die ();
20342 break;
20344 case TRANSLATION_UNIT_DECL:
20345 decl_die = comp_unit_die ();
20346 break;
20348 default:
20349 gcc_unreachable ();
20352 /* We should be able to find the DIE now. */
20353 if (!decl_die)
20354 decl_die = lookup_decl_die (decl);
20355 gcc_assert (decl_die);
20358 return decl_die;
20361 /* Returns the DIE for TYPE, that must not be a base type. A DIE is
20362 always returned. */
20364 static dw_die_ref
20365 force_type_die (tree type)
20367 dw_die_ref type_die;
20369 type_die = lookup_type_die (type);
20370 if (!type_die)
20372 dw_die_ref context_die = get_context_die (TYPE_CONTEXT (type));
20374 type_die = modified_type_die (type, TYPE_QUALS_NO_ADDR_SPACE (type),
20375 context_die);
20376 gcc_assert (type_die);
20378 return type_die;
20381 /* Force out any required namespaces to be able to output DECL,
20382 and return the new context_die for it, if it's changed. */
20384 static dw_die_ref
20385 setup_namespace_context (tree thing, dw_die_ref context_die)
20387 tree context = (DECL_P (thing)
20388 ? DECL_CONTEXT (thing) : TYPE_CONTEXT (thing));
20389 if (context && TREE_CODE (context) == NAMESPACE_DECL)
20390 /* Force out the namespace. */
20391 context_die = force_decl_die (context);
20393 return context_die;
20396 /* Emit a declaration DIE for THING (which is either a DECL or a tagged
20397 type) within its namespace, if appropriate.
20399 For compatibility with older debuggers, namespace DIEs only contain
20400 declarations; all definitions are emitted at CU scope. */
20402 static dw_die_ref
20403 declare_in_namespace (tree thing, dw_die_ref context_die)
20405 dw_die_ref ns_context;
20407 if (debug_info_level <= DINFO_LEVEL_TERSE)
20408 return context_die;
20410 /* If this decl is from an inlined function, then don't try to emit it in its
20411 namespace, as we will get confused. It would have already been emitted
20412 when the abstract instance of the inline function was emitted anyways. */
20413 if (DECL_P (thing) && DECL_ABSTRACT_ORIGIN (thing))
20414 return context_die;
20416 ns_context = setup_namespace_context (thing, context_die);
20418 if (ns_context != context_die)
20420 if (is_fortran ())
20421 return ns_context;
20422 if (DECL_P (thing))
20423 gen_decl_die (thing, NULL, ns_context);
20424 else
20425 gen_type_die (thing, ns_context);
20427 return context_die;
20430 /* Generate a DIE for a namespace or namespace alias. */
20432 static void
20433 gen_namespace_die (tree decl, dw_die_ref context_die)
20435 dw_die_ref namespace_die;
20437 /* Namespace aliases have a DECL_ABSTRACT_ORIGIN of the namespace
20438 they are an alias of. */
20439 if (DECL_ABSTRACT_ORIGIN (decl) == NULL)
20441 /* Output a real namespace or module. */
20442 context_die = setup_namespace_context (decl, comp_unit_die ());
20443 namespace_die = new_die (is_fortran ()
20444 ? DW_TAG_module : DW_TAG_namespace,
20445 context_die, decl);
20446 /* For Fortran modules defined in different CU don't add src coords. */
20447 if (namespace_die->die_tag == DW_TAG_module && DECL_EXTERNAL (decl))
20449 const char *name = dwarf2_name (decl, 0);
20450 if (name)
20451 add_name_attribute (namespace_die, name);
20453 else
20454 add_name_and_src_coords_attributes (namespace_die, decl);
20455 if (DECL_EXTERNAL (decl))
20456 add_AT_flag (namespace_die, DW_AT_declaration, 1);
20457 equate_decl_number_to_die (decl, namespace_die);
20459 else
20461 /* Output a namespace alias. */
20463 /* Force out the namespace we are an alias of, if necessary. */
20464 dw_die_ref origin_die
20465 = force_decl_die (DECL_ABSTRACT_ORIGIN (decl));
20467 if (DECL_FILE_SCOPE_P (decl)
20468 || TREE_CODE (DECL_CONTEXT (decl)) == NAMESPACE_DECL)
20469 context_die = setup_namespace_context (decl, comp_unit_die ());
20470 /* Now create the namespace alias DIE. */
20471 namespace_die = new_die (DW_TAG_imported_declaration, context_die, decl);
20472 add_name_and_src_coords_attributes (namespace_die, decl);
20473 add_AT_die_ref (namespace_die, DW_AT_import, origin_die);
20474 equate_decl_number_to_die (decl, namespace_die);
20476 /* Bypass dwarf2_name's check for DECL_NAMELESS. */
20477 if (want_pubnames ())
20478 add_pubname_string (lang_hooks.dwarf_name (decl, 1), namespace_die);
20481 /* Generate Dwarf debug information for a decl described by DECL.
20482 The return value is currently only meaningful for PARM_DECLs,
20483 for all other decls it returns NULL. */
20485 static dw_die_ref
20486 gen_decl_die (tree decl, tree origin, dw_die_ref context_die)
20488 tree decl_or_origin = decl ? decl : origin;
20489 tree class_origin = NULL, ultimate_origin;
20491 if (DECL_P (decl_or_origin) && DECL_IGNORED_P (decl_or_origin))
20492 return NULL;
20494 switch (TREE_CODE (decl_or_origin))
20496 case ERROR_MARK:
20497 break;
20499 case CONST_DECL:
20500 if (!is_fortran () && !is_ada ())
20502 /* The individual enumerators of an enum type get output when we output
20503 the Dwarf representation of the relevant enum type itself. */
20504 break;
20507 /* Emit its type. */
20508 gen_type_die (TREE_TYPE (decl), context_die);
20510 /* And its containing namespace. */
20511 context_die = declare_in_namespace (decl, context_die);
20513 gen_const_die (decl, context_die);
20514 break;
20516 case FUNCTION_DECL:
20517 /* Don't output any DIEs to represent mere function declarations,
20518 unless they are class members or explicit block externs. */
20519 if (DECL_INITIAL (decl_or_origin) == NULL_TREE
20520 && DECL_FILE_SCOPE_P (decl_or_origin)
20521 && (current_function_decl == NULL_TREE
20522 || DECL_ARTIFICIAL (decl_or_origin)))
20523 break;
20525 #if 0
20526 /* FIXME */
20527 /* This doesn't work because the C frontend sets DECL_ABSTRACT_ORIGIN
20528 on local redeclarations of global functions. That seems broken. */
20529 if (current_function_decl != decl)
20530 /* This is only a declaration. */;
20531 #endif
20533 /* If we're emitting a clone, emit info for the abstract instance. */
20534 if (origin || DECL_ORIGIN (decl) != decl)
20535 dwarf2out_abstract_function (origin
20536 ? DECL_ORIGIN (origin)
20537 : DECL_ABSTRACT_ORIGIN (decl));
20539 /* If we're emitting an out-of-line copy of an inline function,
20540 emit info for the abstract instance and set up to refer to it. */
20541 else if (cgraph_function_possibly_inlined_p (decl)
20542 && ! DECL_ABSTRACT (decl)
20543 && ! class_or_namespace_scope_p (context_die)
20544 /* dwarf2out_abstract_function won't emit a die if this is just
20545 a declaration. We must avoid setting DECL_ABSTRACT_ORIGIN in
20546 that case, because that works only if we have a die. */
20547 && DECL_INITIAL (decl) != NULL_TREE)
20549 dwarf2out_abstract_function (decl);
20550 set_decl_origin_self (decl);
20553 /* Otherwise we're emitting the primary DIE for this decl. */
20554 else if (debug_info_level > DINFO_LEVEL_TERSE)
20556 /* Before we describe the FUNCTION_DECL itself, make sure that we
20557 have its containing type. */
20558 if (!origin)
20559 origin = decl_class_context (decl);
20560 if (origin != NULL_TREE)
20561 gen_type_die (origin, context_die);
20563 /* And its return type. */
20564 gen_type_die (TREE_TYPE (TREE_TYPE (decl)), context_die);
20566 /* And its virtual context. */
20567 if (DECL_VINDEX (decl) != NULL_TREE)
20568 gen_type_die (DECL_CONTEXT (decl), context_die);
20570 /* Make sure we have a member DIE for decl. */
20571 if (origin != NULL_TREE)
20572 gen_type_die_for_member (origin, decl, context_die);
20574 /* And its containing namespace. */
20575 context_die = declare_in_namespace (decl, context_die);
20578 /* Now output a DIE to represent the function itself. */
20579 if (decl)
20580 gen_subprogram_die (decl, context_die);
20581 break;
20583 case TYPE_DECL:
20584 /* If we are in terse mode, don't generate any DIEs to represent any
20585 actual typedefs. */
20586 if (debug_info_level <= DINFO_LEVEL_TERSE)
20587 break;
20589 /* In the special case of a TYPE_DECL node representing the declaration
20590 of some type tag, if the given TYPE_DECL is marked as having been
20591 instantiated from some other (original) TYPE_DECL node (e.g. one which
20592 was generated within the original definition of an inline function) we
20593 used to generate a special (abbreviated) DW_TAG_structure_type,
20594 DW_TAG_union_type, or DW_TAG_enumeration_type DIE here. But nothing
20595 should be actually referencing those DIEs, as variable DIEs with that
20596 type would be emitted already in the abstract origin, so it was always
20597 removed during unused type prunning. Don't add anything in this
20598 case. */
20599 if (TYPE_DECL_IS_STUB (decl) && decl_ultimate_origin (decl) != NULL_TREE)
20600 break;
20602 if (is_redundant_typedef (decl))
20603 gen_type_die (TREE_TYPE (decl), context_die);
20604 else
20605 /* Output a DIE to represent the typedef itself. */
20606 gen_typedef_die (decl, context_die);
20607 break;
20609 case LABEL_DECL:
20610 if (debug_info_level >= DINFO_LEVEL_NORMAL)
20611 gen_label_die (decl, context_die);
20612 break;
20614 case VAR_DECL:
20615 case RESULT_DECL:
20616 /* If we are in terse mode, don't generate any DIEs to represent any
20617 variable declarations or definitions. */
20618 if (debug_info_level <= DINFO_LEVEL_TERSE)
20619 break;
20621 /* Output any DIEs that are needed to specify the type of this data
20622 object. */
20623 if (decl_by_reference_p (decl_or_origin))
20624 gen_type_die (TREE_TYPE (TREE_TYPE (decl_or_origin)), context_die);
20625 else
20626 gen_type_die (TREE_TYPE (decl_or_origin), context_die);
20628 /* And its containing type. */
20629 class_origin = decl_class_context (decl_or_origin);
20630 if (class_origin != NULL_TREE)
20631 gen_type_die_for_member (class_origin, decl_or_origin, context_die);
20633 /* And its containing namespace. */
20634 context_die = declare_in_namespace (decl_or_origin, context_die);
20636 /* Now output the DIE to represent the data object itself. This gets
20637 complicated because of the possibility that the VAR_DECL really
20638 represents an inlined instance of a formal parameter for an inline
20639 function. */
20640 ultimate_origin = decl_ultimate_origin (decl_or_origin);
20641 if (ultimate_origin != NULL_TREE
20642 && TREE_CODE (ultimate_origin) == PARM_DECL)
20643 gen_formal_parameter_die (decl, origin,
20644 true /* Emit name attribute. */,
20645 context_die);
20646 else
20647 gen_variable_die (decl, origin, context_die);
20648 break;
20650 case FIELD_DECL:
20651 /* Ignore the nameless fields that are used to skip bits but handle C++
20652 anonymous unions and structs. */
20653 if (DECL_NAME (decl) != NULL_TREE
20654 || TREE_CODE (TREE_TYPE (decl)) == UNION_TYPE
20655 || TREE_CODE (TREE_TYPE (decl)) == RECORD_TYPE)
20657 gen_type_die (member_declared_type (decl), context_die);
20658 gen_field_die (decl, context_die);
20660 break;
20662 case PARM_DECL:
20663 if (DECL_BY_REFERENCE (decl_or_origin))
20664 gen_type_die (TREE_TYPE (TREE_TYPE (decl_or_origin)), context_die);
20665 else
20666 gen_type_die (TREE_TYPE (decl_or_origin), context_die);
20667 return gen_formal_parameter_die (decl, origin,
20668 true /* Emit name attribute. */,
20669 context_die);
20671 case NAMESPACE_DECL:
20672 case IMPORTED_DECL:
20673 if (dwarf_version >= 3 || !dwarf_strict)
20674 gen_namespace_die (decl, context_die);
20675 break;
20677 case NAMELIST_DECL:
20678 gen_namelist_decl (DECL_NAME (decl), context_die,
20679 NAMELIST_DECL_ASSOCIATED_DECL (decl));
20680 break;
20682 default:
20683 /* Probably some frontend-internal decl. Assume we don't care. */
20684 gcc_assert ((int)TREE_CODE (decl) > NUM_TREE_CODES);
20685 break;
20688 return NULL;
20691 /* Output debug information for global decl DECL. Called from toplev.c after
20692 compilation proper has finished. */
20694 static void
20695 dwarf2out_global_decl (tree decl)
20697 /* Output DWARF2 information for file-scope tentative data object
20698 declarations, file-scope (extern) function declarations (which
20699 had no corresponding body) and file-scope tagged type declarations
20700 and definitions which have not yet been forced out. */
20701 if (TREE_CODE (decl) != FUNCTION_DECL || !DECL_INITIAL (decl))
20702 dwarf2out_decl (decl);
20705 /* Output debug information for type decl DECL. Called from toplev.c
20706 and from language front ends (to record built-in types). */
20707 static void
20708 dwarf2out_type_decl (tree decl, int local)
20710 if (!local)
20711 dwarf2out_decl (decl);
20714 /* Output debug information for imported module or decl DECL.
20715 NAME is non-NULL name in the lexical block if the decl has been renamed.
20716 LEXICAL_BLOCK is the lexical block (which TREE_CODE is a BLOCK)
20717 that DECL belongs to.
20718 LEXICAL_BLOCK_DIE is the DIE of LEXICAL_BLOCK. */
20719 static void
20720 dwarf2out_imported_module_or_decl_1 (tree decl,
20721 tree name,
20722 tree lexical_block,
20723 dw_die_ref lexical_block_die)
20725 expanded_location xloc;
20726 dw_die_ref imported_die = NULL;
20727 dw_die_ref at_import_die;
20729 if (TREE_CODE (decl) == IMPORTED_DECL)
20731 xloc = expand_location (DECL_SOURCE_LOCATION (decl));
20732 decl = IMPORTED_DECL_ASSOCIATED_DECL (decl);
20733 gcc_assert (decl);
20735 else
20736 xloc = expand_location (input_location);
20738 if (TREE_CODE (decl) == TYPE_DECL || TREE_CODE (decl) == CONST_DECL)
20740 at_import_die = force_type_die (TREE_TYPE (decl));
20741 /* For namespace N { typedef void T; } using N::T; base_type_die
20742 returns NULL, but DW_TAG_imported_declaration requires
20743 the DW_AT_import tag. Force creation of DW_TAG_typedef. */
20744 if (!at_import_die)
20746 gcc_assert (TREE_CODE (decl) == TYPE_DECL);
20747 gen_typedef_die (decl, get_context_die (DECL_CONTEXT (decl)));
20748 at_import_die = lookup_type_die (TREE_TYPE (decl));
20749 gcc_assert (at_import_die);
20752 else
20754 at_import_die = lookup_decl_die (decl);
20755 if (!at_import_die)
20757 /* If we're trying to avoid duplicate debug info, we may not have
20758 emitted the member decl for this field. Emit it now. */
20759 if (TREE_CODE (decl) == FIELD_DECL)
20761 tree type = DECL_CONTEXT (decl);
20763 if (TYPE_CONTEXT (type)
20764 && TYPE_P (TYPE_CONTEXT (type))
20765 && !should_emit_struct_debug (TYPE_CONTEXT (type),
20766 DINFO_USAGE_DIR_USE))
20767 return;
20768 gen_type_die_for_member (type, decl,
20769 get_context_die (TYPE_CONTEXT (type)));
20771 if (TREE_CODE (decl) == NAMELIST_DECL)
20772 at_import_die = gen_namelist_decl (DECL_NAME (decl),
20773 get_context_die (DECL_CONTEXT (decl)),
20774 NULL_TREE);
20775 else
20776 at_import_die = force_decl_die (decl);
20780 if (TREE_CODE (decl) == NAMESPACE_DECL)
20782 if (dwarf_version >= 3 || !dwarf_strict)
20783 imported_die = new_die (DW_TAG_imported_module,
20784 lexical_block_die,
20785 lexical_block);
20786 else
20787 return;
20789 else
20790 imported_die = new_die (DW_TAG_imported_declaration,
20791 lexical_block_die,
20792 lexical_block);
20794 add_AT_file (imported_die, DW_AT_decl_file, lookup_filename (xloc.file));
20795 add_AT_unsigned (imported_die, DW_AT_decl_line, xloc.line);
20796 if (name)
20797 add_AT_string (imported_die, DW_AT_name,
20798 IDENTIFIER_POINTER (name));
20799 add_AT_die_ref (imported_die, DW_AT_import, at_import_die);
20802 /* Output debug information for imported module or decl DECL.
20803 NAME is non-NULL name in context if the decl has been renamed.
20804 CHILD is true if decl is one of the renamed decls as part of
20805 importing whole module. */
20807 static void
20808 dwarf2out_imported_module_or_decl (tree decl, tree name, tree context,
20809 bool child)
20811 /* dw_die_ref at_import_die; */
20812 dw_die_ref scope_die;
20814 if (debug_info_level <= DINFO_LEVEL_TERSE)
20815 return;
20817 gcc_assert (decl);
20819 /* To emit DW_TAG_imported_module or DW_TAG_imported_decl, we need two DIEs.
20820 We need decl DIE for reference and scope die. First, get DIE for the decl
20821 itself. */
20823 /* Get the scope die for decl context. Use comp_unit_die for global module
20824 or decl. If die is not found for non globals, force new die. */
20825 if (context
20826 && TYPE_P (context)
20827 && !should_emit_struct_debug (context, DINFO_USAGE_DIR_USE))
20828 return;
20830 if (!(dwarf_version >= 3 || !dwarf_strict))
20831 return;
20833 scope_die = get_context_die (context);
20835 if (child)
20837 gcc_assert (scope_die->die_child);
20838 gcc_assert (scope_die->die_child->die_tag == DW_TAG_imported_module);
20839 gcc_assert (TREE_CODE (decl) != NAMESPACE_DECL);
20840 scope_die = scope_die->die_child;
20843 /* OK, now we have DIEs for decl as well as scope. Emit imported die. */
20844 dwarf2out_imported_module_or_decl_1 (decl, name, context, scope_die);
20848 /* Output debug information for namelists. */
20850 static dw_die_ref
20851 gen_namelist_decl (tree name, dw_die_ref scope_die, tree item_decls)
20853 dw_die_ref nml_die, nml_item_die, nml_item_ref_die;
20854 tree value;
20855 unsigned i;
20857 if (debug_info_level <= DINFO_LEVEL_TERSE)
20858 return NULL;
20860 gcc_assert (scope_die != NULL);
20861 nml_die = new_die (DW_TAG_namelist, scope_die, NULL);
20862 add_AT_string (nml_die, DW_AT_name, IDENTIFIER_POINTER (name));
20864 /* If there are no item_decls, we have a nondefining namelist, e.g.
20865 with USE association; hence, set DW_AT_declaration. */
20866 if (item_decls == NULL_TREE)
20868 add_AT_flag (nml_die, DW_AT_declaration, 1);
20869 return nml_die;
20872 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (item_decls), i, value)
20874 nml_item_ref_die = lookup_decl_die (value);
20875 if (!nml_item_ref_die)
20876 nml_item_ref_die = force_decl_die (value);
20878 nml_item_die = new_die (DW_TAG_namelist_item, nml_die, NULL);
20879 add_AT_die_ref (nml_item_die, DW_AT_namelist_items, nml_item_ref_die);
20881 return nml_die;
20885 /* Write the debugging output for DECL. */
20887 static void
20888 dwarf2out_decl (tree decl)
20890 dw_die_ref context_die = comp_unit_die ();
20892 switch (TREE_CODE (decl))
20894 case ERROR_MARK:
20895 return;
20897 case FUNCTION_DECL:
20898 /* What we would really like to do here is to filter out all mere
20899 file-scope declarations of file-scope functions which are never
20900 referenced later within this translation unit (and keep all of ones
20901 that *are* referenced later on) but we aren't clairvoyant, so we have
20902 no idea which functions will be referenced in the future (i.e. later
20903 on within the current translation unit). So here we just ignore all
20904 file-scope function declarations which are not also definitions. If
20905 and when the debugger needs to know something about these functions,
20906 it will have to hunt around and find the DWARF information associated
20907 with the definition of the function.
20909 We can't just check DECL_EXTERNAL to find out which FUNCTION_DECL
20910 nodes represent definitions and which ones represent mere
20911 declarations. We have to check DECL_INITIAL instead. That's because
20912 the C front-end supports some weird semantics for "extern inline"
20913 function definitions. These can get inlined within the current
20914 translation unit (and thus, we need to generate Dwarf info for their
20915 abstract instances so that the Dwarf info for the concrete inlined
20916 instances can have something to refer to) but the compiler never
20917 generates any out-of-lines instances of such things (despite the fact
20918 that they *are* definitions).
20920 The important point is that the C front-end marks these "extern
20921 inline" functions as DECL_EXTERNAL, but we need to generate DWARF for
20922 them anyway. Note that the C++ front-end also plays some similar games
20923 for inline function definitions appearing within include files which
20924 also contain `#pragma interface' pragmas.
20926 If we are called from dwarf2out_abstract_function output a DIE
20927 anyway. We can end up here this way with early inlining and LTO
20928 where the inlined function is output in a different LTRANS unit
20929 or not at all. */
20930 if (DECL_INITIAL (decl) == NULL_TREE
20931 && ! DECL_ABSTRACT (decl))
20932 return;
20934 /* If we're a nested function, initially use a parent of NULL; if we're
20935 a plain function, this will be fixed up in decls_for_scope. If
20936 we're a method, it will be ignored, since we already have a DIE. */
20937 if (decl_function_context (decl)
20938 /* But if we're in terse mode, we don't care about scope. */
20939 && debug_info_level > DINFO_LEVEL_TERSE)
20940 context_die = NULL;
20941 break;
20943 case VAR_DECL:
20944 /* Ignore this VAR_DECL if it refers to a file-scope extern data object
20945 declaration and if the declaration was never even referenced from
20946 within this entire compilation unit. We suppress these DIEs in
20947 order to save space in the .debug section (by eliminating entries
20948 which are probably useless). Note that we must not suppress
20949 block-local extern declarations (whether used or not) because that
20950 would screw-up the debugger's name lookup mechanism and cause it to
20951 miss things which really ought to be in scope at a given point. */
20952 if (DECL_EXTERNAL (decl) && !TREE_USED (decl))
20953 return;
20955 /* For local statics lookup proper context die. */
20956 if (TREE_STATIC (decl)
20957 && DECL_CONTEXT (decl)
20958 && TREE_CODE (DECL_CONTEXT (decl)) == FUNCTION_DECL)
20959 context_die = lookup_decl_die (DECL_CONTEXT (decl));
20961 /* If we are in terse mode, don't generate any DIEs to represent any
20962 variable declarations or definitions. */
20963 if (debug_info_level <= DINFO_LEVEL_TERSE)
20964 return;
20965 break;
20967 case CONST_DECL:
20968 if (debug_info_level <= DINFO_LEVEL_TERSE)
20969 return;
20970 if (!is_fortran () && !is_ada ())
20971 return;
20972 if (TREE_STATIC (decl) && decl_function_context (decl))
20973 context_die = lookup_decl_die (DECL_CONTEXT (decl));
20974 break;
20976 case NAMESPACE_DECL:
20977 case IMPORTED_DECL:
20978 if (debug_info_level <= DINFO_LEVEL_TERSE)
20979 return;
20980 if (lookup_decl_die (decl) != NULL)
20981 return;
20982 break;
20984 case TYPE_DECL:
20985 /* Don't emit stubs for types unless they are needed by other DIEs. */
20986 if (TYPE_DECL_SUPPRESS_DEBUG (decl))
20987 return;
20989 /* Don't bother trying to generate any DIEs to represent any of the
20990 normal built-in types for the language we are compiling. */
20991 if (DECL_IS_BUILTIN (decl))
20992 return;
20994 /* If we are in terse mode, don't generate any DIEs for types. */
20995 if (debug_info_level <= DINFO_LEVEL_TERSE)
20996 return;
20998 /* If we're a function-scope tag, initially use a parent of NULL;
20999 this will be fixed up in decls_for_scope. */
21000 if (decl_function_context (decl))
21001 context_die = NULL;
21003 break;
21005 case NAMELIST_DECL:
21006 break;
21008 default:
21009 return;
21012 gen_decl_die (decl, NULL, context_die);
21015 /* Write the debugging output for DECL. */
21017 static void
21018 dwarf2out_function_decl (tree decl)
21020 dwarf2out_decl (decl);
21021 call_arg_locations = NULL;
21022 call_arg_loc_last = NULL;
21023 call_site_count = -1;
21024 tail_call_site_count = -1;
21025 block_map.release ();
21026 htab_empty (decl_loc_table);
21027 htab_empty (cached_dw_loc_list_table);
21030 /* Output a marker (i.e. a label) for the beginning of the generated code for
21031 a lexical block. */
21033 static void
21034 dwarf2out_begin_block (unsigned int line ATTRIBUTE_UNUSED,
21035 unsigned int blocknum)
21037 switch_to_section (current_function_section ());
21038 ASM_OUTPUT_DEBUG_LABEL (asm_out_file, BLOCK_BEGIN_LABEL, blocknum);
21041 /* Output a marker (i.e. a label) for the end of the generated code for a
21042 lexical block. */
21044 static void
21045 dwarf2out_end_block (unsigned int line ATTRIBUTE_UNUSED, unsigned int blocknum)
21047 switch_to_section (current_function_section ());
21048 ASM_OUTPUT_DEBUG_LABEL (asm_out_file, BLOCK_END_LABEL, blocknum);
21051 /* Returns nonzero if it is appropriate not to emit any debugging
21052 information for BLOCK, because it doesn't contain any instructions.
21054 Don't allow this for blocks with nested functions or local classes
21055 as we would end up with orphans, and in the presence of scheduling
21056 we may end up calling them anyway. */
21058 static bool
21059 dwarf2out_ignore_block (const_tree block)
21061 tree decl;
21062 unsigned int i;
21064 for (decl = BLOCK_VARS (block); decl; decl = DECL_CHAIN (decl))
21065 if (TREE_CODE (decl) == FUNCTION_DECL
21066 || (TREE_CODE (decl) == TYPE_DECL && TYPE_DECL_IS_STUB (decl)))
21067 return 0;
21068 for (i = 0; i < BLOCK_NUM_NONLOCALIZED_VARS (block); i++)
21070 decl = BLOCK_NONLOCALIZED_VAR (block, i);
21071 if (TREE_CODE (decl) == FUNCTION_DECL
21072 || (TREE_CODE (decl) == TYPE_DECL && TYPE_DECL_IS_STUB (decl)))
21073 return 0;
21076 return 1;
21079 /* Hash table routines for file_hash. */
21081 static int
21082 file_table_eq (const void *p1_p, const void *p2_p)
21084 const struct dwarf_file_data *const p1 =
21085 (const struct dwarf_file_data *) p1_p;
21086 const char *const p2 = (const char *) p2_p;
21087 return filename_cmp (p1->filename, p2) == 0;
21090 static hashval_t
21091 file_table_hash (const void *p_p)
21093 const struct dwarf_file_data *const p = (const struct dwarf_file_data *) p_p;
21094 return htab_hash_string (p->filename);
21097 /* Lookup FILE_NAME (in the list of filenames that we know about here in
21098 dwarf2out.c) and return its "index". The index of each (known) filename is
21099 just a unique number which is associated with only that one filename. We
21100 need such numbers for the sake of generating labels (in the .debug_sfnames
21101 section) and references to those files numbers (in the .debug_srcinfo
21102 and.debug_macinfo sections). If the filename given as an argument is not
21103 found in our current list, add it to the list and assign it the next
21104 available unique index number. In order to speed up searches, we remember
21105 the index of the filename was looked up last. This handles the majority of
21106 all searches. */
21108 static struct dwarf_file_data *
21109 lookup_filename (const char *file_name)
21111 void ** slot;
21112 struct dwarf_file_data * created;
21114 /* Check to see if the file name that was searched on the previous
21115 call matches this file name. If so, return the index. */
21116 if (file_table_last_lookup
21117 && (file_name == file_table_last_lookup->filename
21118 || filename_cmp (file_table_last_lookup->filename, file_name) == 0))
21119 return file_table_last_lookup;
21121 /* Didn't match the previous lookup, search the table. */
21122 slot = htab_find_slot_with_hash (file_table, file_name,
21123 htab_hash_string (file_name), INSERT);
21124 if (*slot)
21125 return (struct dwarf_file_data *) *slot;
21127 created = ggc_alloc<dwarf_file_data> ();
21128 created->filename = file_name;
21129 created->emitted_number = 0;
21130 *slot = created;
21131 return created;
21134 /* If the assembler will construct the file table, then translate the compiler
21135 internal file table number into the assembler file table number, and emit
21136 a .file directive if we haven't already emitted one yet. The file table
21137 numbers are different because we prune debug info for unused variables and
21138 types, which may include filenames. */
21140 static int
21141 maybe_emit_file (struct dwarf_file_data * fd)
21143 if (! fd->emitted_number)
21145 if (last_emitted_file)
21146 fd->emitted_number = last_emitted_file->emitted_number + 1;
21147 else
21148 fd->emitted_number = 1;
21149 last_emitted_file = fd;
21151 if (DWARF2_ASM_LINE_DEBUG_INFO)
21153 fprintf (asm_out_file, "\t.file %u ", fd->emitted_number);
21154 output_quoted_string (asm_out_file,
21155 remap_debug_filename (fd->filename));
21156 fputc ('\n', asm_out_file);
21160 return fd->emitted_number;
21163 /* Schedule generation of a DW_AT_const_value attribute to DIE.
21164 That generation should happen after function debug info has been
21165 generated. The value of the attribute is the constant value of ARG. */
21167 static void
21168 append_entry_to_tmpl_value_parm_die_table (dw_die_ref die, tree arg)
21170 die_arg_entry entry;
21172 if (!die || !arg)
21173 return;
21175 if (!tmpl_value_parm_die_table)
21176 vec_alloc (tmpl_value_parm_die_table, 32);
21178 entry.die = die;
21179 entry.arg = arg;
21180 vec_safe_push (tmpl_value_parm_die_table, entry);
21183 /* Return TRUE if T is an instance of generic type, FALSE
21184 otherwise. */
21186 static bool
21187 generic_type_p (tree t)
21189 if (t == NULL_TREE || !TYPE_P (t))
21190 return false;
21191 return lang_hooks.get_innermost_generic_parms (t) != NULL_TREE;
21194 /* Schedule the generation of the generic parameter dies for the
21195 instance of generic type T. The proper generation itself is later
21196 done by gen_scheduled_generic_parms_dies. */
21198 static void
21199 schedule_generic_params_dies_gen (tree t)
21201 if (!generic_type_p (t))
21202 return;
21204 if (!generic_type_instances)
21205 vec_alloc (generic_type_instances, 256);
21207 vec_safe_push (generic_type_instances, t);
21210 /* Add a DW_AT_const_value attribute to DIEs that were scheduled
21211 by append_entry_to_tmpl_value_parm_die_table. This function must
21212 be called after function DIEs have been generated. */
21214 static void
21215 gen_remaining_tmpl_value_param_die_attribute (void)
21217 if (tmpl_value_parm_die_table)
21219 unsigned i;
21220 die_arg_entry *e;
21222 FOR_EACH_VEC_ELT (*tmpl_value_parm_die_table, i, e)
21223 tree_add_const_value_attribute (e->die, e->arg);
21227 /* Generate generic parameters DIEs for instances of generic types
21228 that have been previously scheduled by
21229 schedule_generic_params_dies_gen. This function must be called
21230 after all the types of the CU have been laid out. */
21232 static void
21233 gen_scheduled_generic_parms_dies (void)
21235 unsigned i;
21236 tree t;
21238 if (!generic_type_instances)
21239 return;
21241 FOR_EACH_VEC_ELT (*generic_type_instances, i, t)
21242 if (COMPLETE_TYPE_P (t))
21243 gen_generic_params_dies (t);
21247 /* Replace DW_AT_name for the decl with name. */
21249 static void
21250 dwarf2out_set_name (tree decl, tree name)
21252 dw_die_ref die;
21253 dw_attr_ref attr;
21254 const char *dname;
21256 die = TYPE_SYMTAB_DIE (decl);
21257 if (!die)
21258 return;
21260 dname = dwarf2_name (name, 0);
21261 if (!dname)
21262 return;
21264 attr = get_AT (die, DW_AT_name);
21265 if (attr)
21267 struct indirect_string_node *node;
21269 node = find_AT_string (dname);
21270 /* replace the string. */
21271 attr->dw_attr_val.v.val_str = node;
21274 else
21275 add_name_attribute (die, dname);
21278 /* True if before or during processing of the first function being emitted. */
21279 static bool in_first_function_p = true;
21280 /* True if loc_note during dwarf2out_var_location call might still be
21281 before first real instruction at address equal to .Ltext0. */
21282 static bool maybe_at_text_label_p = true;
21283 /* One above highest N where .LVLN label might be equal to .Ltext0 label. */
21284 static unsigned int first_loclabel_num_not_at_text_label;
21286 /* Called by the final INSN scan whenever we see a var location. We
21287 use it to drop labels in the right places, and throw the location in
21288 our lookup table. */
21290 static void
21291 dwarf2out_var_location (rtx_insn *loc_note)
21293 char loclabel[MAX_ARTIFICIAL_LABEL_BYTES + 2];
21294 struct var_loc_node *newloc;
21295 rtx_insn *next_real, *next_note;
21296 static const char *last_label;
21297 static const char *last_postcall_label;
21298 static bool last_in_cold_section_p;
21299 static rtx_insn *expected_next_loc_note;
21300 tree decl;
21301 bool var_loc_p;
21303 if (!NOTE_P (loc_note))
21305 if (CALL_P (loc_note))
21307 call_site_count++;
21308 if (SIBLING_CALL_P (loc_note))
21309 tail_call_site_count++;
21311 return;
21314 var_loc_p = NOTE_KIND (loc_note) == NOTE_INSN_VAR_LOCATION;
21315 if (var_loc_p && !DECL_P (NOTE_VAR_LOCATION_DECL (loc_note)))
21316 return;
21318 /* Optimize processing a large consecutive sequence of location
21319 notes so we don't spend too much time in next_real_insn. If the
21320 next insn is another location note, remember the next_real_insn
21321 calculation for next time. */
21322 next_real = cached_next_real_insn;
21323 if (next_real)
21325 if (expected_next_loc_note != loc_note)
21326 next_real = NULL;
21329 next_note = NEXT_INSN (loc_note);
21330 if (! next_note
21331 || next_note->deleted ()
21332 || ! NOTE_P (next_note)
21333 || (NOTE_KIND (next_note) != NOTE_INSN_VAR_LOCATION
21334 && NOTE_KIND (next_note) != NOTE_INSN_CALL_ARG_LOCATION))
21335 next_note = NULL;
21337 if (! next_real)
21338 next_real = next_real_insn (loc_note);
21340 if (next_note)
21342 expected_next_loc_note = next_note;
21343 cached_next_real_insn = next_real;
21345 else
21346 cached_next_real_insn = NULL;
21348 /* If there are no instructions which would be affected by this note,
21349 don't do anything. */
21350 if (var_loc_p
21351 && next_real == NULL_RTX
21352 && !NOTE_DURING_CALL_P (loc_note))
21353 return;
21355 if (next_real == NULL_RTX)
21356 next_real = get_last_insn ();
21358 /* If there were any real insns between note we processed last time
21359 and this note (or if it is the first note), clear
21360 last_{,postcall_}label so that they are not reused this time. */
21361 if (last_var_location_insn == NULL_RTX
21362 || last_var_location_insn != next_real
21363 || last_in_cold_section_p != in_cold_section_p)
21365 last_label = NULL;
21366 last_postcall_label = NULL;
21369 if (var_loc_p)
21371 decl = NOTE_VAR_LOCATION_DECL (loc_note);
21372 newloc = add_var_loc_to_decl (decl, loc_note,
21373 NOTE_DURING_CALL_P (loc_note)
21374 ? last_postcall_label : last_label);
21375 if (newloc == NULL)
21376 return;
21378 else
21380 decl = NULL_TREE;
21381 newloc = NULL;
21384 /* If there were no real insns between note we processed last time
21385 and this note, use the label we emitted last time. Otherwise
21386 create a new label and emit it. */
21387 if (last_label == NULL)
21389 ASM_GENERATE_INTERNAL_LABEL (loclabel, "LVL", loclabel_num);
21390 ASM_OUTPUT_DEBUG_LABEL (asm_out_file, "LVL", loclabel_num);
21391 loclabel_num++;
21392 last_label = ggc_strdup (loclabel);
21393 /* See if loclabel might be equal to .Ltext0. If yes,
21394 bump first_loclabel_num_not_at_text_label. */
21395 if (!have_multiple_function_sections
21396 && in_first_function_p
21397 && maybe_at_text_label_p)
21399 static rtx_insn *last_start;
21400 rtx_insn *insn;
21401 for (insn = loc_note; insn; insn = previous_insn (insn))
21402 if (insn == last_start)
21403 break;
21404 else if (!NONDEBUG_INSN_P (insn))
21405 continue;
21406 else
21408 rtx body = PATTERN (insn);
21409 if (GET_CODE (body) == USE || GET_CODE (body) == CLOBBER)
21410 continue;
21411 /* Inline asm could occupy zero bytes. */
21412 else if (GET_CODE (body) == ASM_INPUT
21413 || asm_noperands (body) >= 0)
21414 continue;
21415 #ifdef HAVE_attr_length
21416 else if (get_attr_min_length (insn) == 0)
21417 continue;
21418 #endif
21419 else
21421 /* Assume insn has non-zero length. */
21422 maybe_at_text_label_p = false;
21423 break;
21426 if (maybe_at_text_label_p)
21428 last_start = loc_note;
21429 first_loclabel_num_not_at_text_label = loclabel_num;
21434 if (!var_loc_p)
21436 struct call_arg_loc_node *ca_loc
21437 = ggc_cleared_alloc<call_arg_loc_node> ();
21438 rtx_insn *prev = prev_real_insn (loc_note);
21439 rtx x;
21440 ca_loc->call_arg_loc_note = loc_note;
21441 ca_loc->next = NULL;
21442 ca_loc->label = last_label;
21443 gcc_assert (prev
21444 && (CALL_P (prev)
21445 || (NONJUMP_INSN_P (prev)
21446 && GET_CODE (PATTERN (prev)) == SEQUENCE
21447 && CALL_P (XVECEXP (PATTERN (prev), 0, 0)))));
21448 if (!CALL_P (prev))
21449 prev = as_a <rtx_sequence *> (PATTERN (prev))->insn (0);
21450 ca_loc->tail_call_p = SIBLING_CALL_P (prev);
21451 x = get_call_rtx_from (PATTERN (prev));
21452 if (x)
21454 x = XEXP (XEXP (x, 0), 0);
21455 if (GET_CODE (x) == SYMBOL_REF
21456 && SYMBOL_REF_DECL (x)
21457 && TREE_CODE (SYMBOL_REF_DECL (x)) == FUNCTION_DECL)
21458 ca_loc->symbol_ref = x;
21460 ca_loc->block = insn_scope (prev);
21461 if (call_arg_locations)
21462 call_arg_loc_last->next = ca_loc;
21463 else
21464 call_arg_locations = ca_loc;
21465 call_arg_loc_last = ca_loc;
21467 else if (!NOTE_DURING_CALL_P (loc_note))
21468 newloc->label = last_label;
21469 else
21471 if (!last_postcall_label)
21473 sprintf (loclabel, "%s-1", last_label);
21474 last_postcall_label = ggc_strdup (loclabel);
21476 newloc->label = last_postcall_label;
21479 last_var_location_insn = next_real;
21480 last_in_cold_section_p = in_cold_section_p;
21483 /* Note in one location list that text section has changed. */
21485 static int
21486 var_location_switch_text_section_1 (void **slot, void *data ATTRIBUTE_UNUSED)
21488 var_loc_list *list = (var_loc_list *) *slot;
21489 if (list->first)
21490 list->last_before_switch
21491 = list->last->next ? list->last->next : list->last;
21492 return 1;
21495 /* Note in all location lists that text section has changed. */
21497 static void
21498 var_location_switch_text_section (void)
21500 if (decl_loc_table == NULL)
21501 return;
21503 htab_traverse (decl_loc_table, var_location_switch_text_section_1, NULL);
21506 /* Create a new line number table. */
21508 static dw_line_info_table *
21509 new_line_info_table (void)
21511 dw_line_info_table *table;
21513 table = ggc_cleared_alloc<dw_line_info_table_struct> ();
21514 table->file_num = 1;
21515 table->line_num = 1;
21516 table->is_stmt = DWARF_LINE_DEFAULT_IS_STMT_START;
21518 return table;
21521 /* Lookup the "current" table into which we emit line info, so
21522 that we don't have to do it for every source line. */
21524 static void
21525 set_cur_line_info_table (section *sec)
21527 dw_line_info_table *table;
21529 if (sec == text_section)
21530 table = text_section_line_info;
21531 else if (sec == cold_text_section)
21533 table = cold_text_section_line_info;
21534 if (!table)
21536 cold_text_section_line_info = table = new_line_info_table ();
21537 table->end_label = cold_end_label;
21540 else
21542 const char *end_label;
21544 if (flag_reorder_blocks_and_partition)
21546 if (in_cold_section_p)
21547 end_label = crtl->subsections.cold_section_end_label;
21548 else
21549 end_label = crtl->subsections.hot_section_end_label;
21551 else
21553 char label[MAX_ARTIFICIAL_LABEL_BYTES];
21554 ASM_GENERATE_INTERNAL_LABEL (label, FUNC_END_LABEL,
21555 current_function_funcdef_no);
21556 end_label = ggc_strdup (label);
21559 table = new_line_info_table ();
21560 table->end_label = end_label;
21562 vec_safe_push (separate_line_info, table);
21565 if (DWARF2_ASM_LINE_DEBUG_INFO)
21566 table->is_stmt = (cur_line_info_table
21567 ? cur_line_info_table->is_stmt
21568 : DWARF_LINE_DEFAULT_IS_STMT_START);
21569 cur_line_info_table = table;
21573 /* We need to reset the locations at the beginning of each
21574 function. We can't do this in the end_function hook, because the
21575 declarations that use the locations won't have been output when
21576 that hook is called. Also compute have_multiple_function_sections here. */
21578 static void
21579 dwarf2out_begin_function (tree fun)
21581 section *sec = function_section (fun);
21583 if (sec != text_section)
21584 have_multiple_function_sections = true;
21586 if (flag_reorder_blocks_and_partition && !cold_text_section)
21588 gcc_assert (current_function_decl == fun);
21589 cold_text_section = unlikely_text_section ();
21590 switch_to_section (cold_text_section);
21591 ASM_OUTPUT_LABEL (asm_out_file, cold_text_section_label);
21592 switch_to_section (sec);
21595 dwarf2out_note_section_used ();
21596 call_site_count = 0;
21597 tail_call_site_count = 0;
21599 set_cur_line_info_table (sec);
21602 /* Helper function of dwarf2out_end_function, called only after emitting
21603 the very first function into assembly. Check if some .debug_loc range
21604 might end with a .LVL* label that could be equal to .Ltext0.
21605 In that case we must force using absolute addresses in .debug_loc ranges,
21606 because this range could be .LVLN-.Ltext0 .. .LVLM-.Ltext0 for
21607 .LVLN == .LVLM == .Ltext0, thus 0 .. 0, which is a .debug_loc
21608 list terminator.
21609 Set have_multiple_function_sections to true in that case and
21610 terminate htab traversal. */
21612 static int
21613 find_empty_loc_ranges_at_text_label (void **slot, void *)
21615 var_loc_list *entry;
21616 struct var_loc_node *node;
21618 entry = (var_loc_list *) *slot;
21619 node = entry->first;
21620 if (node && node->next && node->next->label)
21622 unsigned int i;
21623 const char *label = node->next->label;
21624 char loclabel[MAX_ARTIFICIAL_LABEL_BYTES];
21626 for (i = 0; i < first_loclabel_num_not_at_text_label; i++)
21628 ASM_GENERATE_INTERNAL_LABEL (loclabel, "LVL", i);
21629 if (strcmp (label, loclabel) == 0)
21631 have_multiple_function_sections = true;
21632 return 0;
21636 return 1;
21639 /* Hook called after emitting a function into assembly.
21640 This does something only for the very first function emitted. */
21642 static void
21643 dwarf2out_end_function (unsigned int)
21645 if (in_first_function_p
21646 && !have_multiple_function_sections
21647 && first_loclabel_num_not_at_text_label
21648 && decl_loc_table)
21649 htab_traverse (decl_loc_table, find_empty_loc_ranges_at_text_label,
21650 NULL);
21651 in_first_function_p = false;
21652 maybe_at_text_label_p = false;
21655 /* Add OPCODE+VAL as an entry at the end of the opcode array in TABLE. */
21657 static void
21658 push_dw_line_info_entry (dw_line_info_table *table,
21659 enum dw_line_info_opcode opcode, unsigned int val)
21661 dw_line_info_entry e;
21662 e.opcode = opcode;
21663 e.val = val;
21664 vec_safe_push (table->entries, e);
21667 /* Output a label to mark the beginning of a source code line entry
21668 and record information relating to this source line, in
21669 'line_info_table' for later output of the .debug_line section. */
21670 /* ??? The discriminator parameter ought to be unsigned. */
21672 static void
21673 dwarf2out_source_line (unsigned int line, const char *filename,
21674 int discriminator, bool is_stmt)
21676 unsigned int file_num;
21677 dw_line_info_table *table;
21679 if (debug_info_level < DINFO_LEVEL_TERSE || line == 0)
21680 return;
21682 /* The discriminator column was added in dwarf4. Simplify the below
21683 by simply removing it if we're not supposed to output it. */
21684 if (dwarf_version < 4 && dwarf_strict)
21685 discriminator = 0;
21687 table = cur_line_info_table;
21688 file_num = maybe_emit_file (lookup_filename (filename));
21690 /* ??? TODO: Elide duplicate line number entries. Traditionally,
21691 the debugger has used the second (possibly duplicate) line number
21692 at the beginning of the function to mark the end of the prologue.
21693 We could eliminate any other duplicates within the function. For
21694 Dwarf3, we ought to include the DW_LNS_set_prologue_end mark in
21695 that second line number entry. */
21696 /* Recall that this end-of-prologue indication is *not* the same thing
21697 as the end_prologue debug hook. The NOTE_INSN_PROLOGUE_END note,
21698 to which the hook corresponds, follows the last insn that was
21699 emitted by gen_prologue. What we need is to precede the first insn
21700 that had been emitted after NOTE_INSN_FUNCTION_BEG, i.e. the first
21701 insn that corresponds to something the user wrote. These may be
21702 very different locations once scheduling is enabled. */
21704 if (0 && file_num == table->file_num
21705 && line == table->line_num
21706 && discriminator == table->discrim_num
21707 && is_stmt == table->is_stmt)
21708 return;
21710 switch_to_section (current_function_section ());
21712 /* If requested, emit something human-readable. */
21713 if (flag_debug_asm)
21714 fprintf (asm_out_file, "\t%s %s:%d\n", ASM_COMMENT_START, filename, line);
21716 if (DWARF2_ASM_LINE_DEBUG_INFO)
21718 /* Emit the .loc directive understood by GNU as. */
21719 /* "\t.loc %u %u 0 is_stmt %u discriminator %u",
21720 file_num, line, is_stmt, discriminator */
21721 fputs ("\t.loc ", asm_out_file);
21722 fprint_ul (asm_out_file, file_num);
21723 putc (' ', asm_out_file);
21724 fprint_ul (asm_out_file, line);
21725 putc (' ', asm_out_file);
21726 putc ('0', asm_out_file);
21728 if (is_stmt != table->is_stmt)
21730 fputs (" is_stmt ", asm_out_file);
21731 putc (is_stmt ? '1' : '0', asm_out_file);
21733 if (SUPPORTS_DISCRIMINATOR && discriminator != 0)
21735 gcc_assert (discriminator > 0);
21736 fputs (" discriminator ", asm_out_file);
21737 fprint_ul (asm_out_file, (unsigned long) discriminator);
21739 putc ('\n', asm_out_file);
21741 else
21743 unsigned int label_num = ++line_info_label_num;
21745 targetm.asm_out.internal_label (asm_out_file, LINE_CODE_LABEL, label_num);
21747 push_dw_line_info_entry (table, LI_set_address, label_num);
21748 if (file_num != table->file_num)
21749 push_dw_line_info_entry (table, LI_set_file, file_num);
21750 if (discriminator != table->discrim_num)
21751 push_dw_line_info_entry (table, LI_set_discriminator, discriminator);
21752 if (is_stmt != table->is_stmt)
21753 push_dw_line_info_entry (table, LI_negate_stmt, 0);
21754 push_dw_line_info_entry (table, LI_set_line, line);
21757 table->file_num = file_num;
21758 table->line_num = line;
21759 table->discrim_num = discriminator;
21760 table->is_stmt = is_stmt;
21761 table->in_use = true;
21764 /* Record the beginning of a new source file. */
21766 static void
21767 dwarf2out_start_source_file (unsigned int lineno, const char *filename)
21769 if (flag_eliminate_dwarf2_dups)
21771 /* Record the beginning of the file for break_out_includes. */
21772 dw_die_ref bincl_die;
21774 bincl_die = new_die (DW_TAG_GNU_BINCL, comp_unit_die (), NULL);
21775 add_AT_string (bincl_die, DW_AT_name, remap_debug_filename (filename));
21778 if (debug_info_level >= DINFO_LEVEL_VERBOSE)
21780 macinfo_entry e;
21781 e.code = DW_MACINFO_start_file;
21782 e.lineno = lineno;
21783 e.info = ggc_strdup (filename);
21784 vec_safe_push (macinfo_table, e);
21788 /* Record the end of a source file. */
21790 static void
21791 dwarf2out_end_source_file (unsigned int lineno ATTRIBUTE_UNUSED)
21793 if (flag_eliminate_dwarf2_dups)
21794 /* Record the end of the file for break_out_includes. */
21795 new_die (DW_TAG_GNU_EINCL, comp_unit_die (), NULL);
21797 if (debug_info_level >= DINFO_LEVEL_VERBOSE)
21799 macinfo_entry e;
21800 e.code = DW_MACINFO_end_file;
21801 e.lineno = lineno;
21802 e.info = NULL;
21803 vec_safe_push (macinfo_table, e);
21807 /* Called from debug_define in toplev.c. The `buffer' parameter contains
21808 the tail part of the directive line, i.e. the part which is past the
21809 initial whitespace, #, whitespace, directive-name, whitespace part. */
21811 static void
21812 dwarf2out_define (unsigned int lineno ATTRIBUTE_UNUSED,
21813 const char *buffer ATTRIBUTE_UNUSED)
21815 if (debug_info_level >= DINFO_LEVEL_VERBOSE)
21817 macinfo_entry e;
21818 /* Insert a dummy first entry to be able to optimize the whole
21819 predefined macro block using DW_MACRO_GNU_transparent_include. */
21820 if (macinfo_table->is_empty () && lineno <= 1)
21822 e.code = 0;
21823 e.lineno = 0;
21824 e.info = NULL;
21825 vec_safe_push (macinfo_table, e);
21827 e.code = DW_MACINFO_define;
21828 e.lineno = lineno;
21829 e.info = ggc_strdup (buffer);
21830 vec_safe_push (macinfo_table, e);
21834 /* Called from debug_undef in toplev.c. The `buffer' parameter contains
21835 the tail part of the directive line, i.e. the part which is past the
21836 initial whitespace, #, whitespace, directive-name, whitespace part. */
21838 static void
21839 dwarf2out_undef (unsigned int lineno ATTRIBUTE_UNUSED,
21840 const char *buffer ATTRIBUTE_UNUSED)
21842 if (debug_info_level >= DINFO_LEVEL_VERBOSE)
21844 macinfo_entry e;
21845 /* Insert a dummy first entry to be able to optimize the whole
21846 predefined macro block using DW_MACRO_GNU_transparent_include. */
21847 if (macinfo_table->is_empty () && lineno <= 1)
21849 e.code = 0;
21850 e.lineno = 0;
21851 e.info = NULL;
21852 vec_safe_push (macinfo_table, e);
21854 e.code = DW_MACINFO_undef;
21855 e.lineno = lineno;
21856 e.info = ggc_strdup (buffer);
21857 vec_safe_push (macinfo_table, e);
21861 /* Helpers to manipulate hash table of CUs. */
21863 struct macinfo_entry_hasher : typed_noop_remove <macinfo_entry>
21865 typedef macinfo_entry value_type;
21866 typedef macinfo_entry compare_type;
21867 static inline hashval_t hash (const value_type *);
21868 static inline bool equal (const value_type *, const compare_type *);
21871 inline hashval_t
21872 macinfo_entry_hasher::hash (const value_type *entry)
21874 return htab_hash_string (entry->info);
21877 inline bool
21878 macinfo_entry_hasher::equal (const value_type *entry1,
21879 const compare_type *entry2)
21881 return !strcmp (entry1->info, entry2->info);
21884 typedef hash_table<macinfo_entry_hasher> macinfo_hash_type;
21886 /* Output a single .debug_macinfo entry. */
21888 static void
21889 output_macinfo_op (macinfo_entry *ref)
21891 int file_num;
21892 size_t len;
21893 struct indirect_string_node *node;
21894 char label[MAX_ARTIFICIAL_LABEL_BYTES];
21895 struct dwarf_file_data *fd;
21897 switch (ref->code)
21899 case DW_MACINFO_start_file:
21900 fd = lookup_filename (ref->info);
21901 file_num = maybe_emit_file (fd);
21902 dw2_asm_output_data (1, DW_MACINFO_start_file, "Start new file");
21903 dw2_asm_output_data_uleb128 (ref->lineno,
21904 "Included from line number %lu",
21905 (unsigned long) ref->lineno);
21906 dw2_asm_output_data_uleb128 (file_num, "file %s", ref->info);
21907 break;
21908 case DW_MACINFO_end_file:
21909 dw2_asm_output_data (1, DW_MACINFO_end_file, "End file");
21910 break;
21911 case DW_MACINFO_define:
21912 case DW_MACINFO_undef:
21913 len = strlen (ref->info) + 1;
21914 if (!dwarf_strict
21915 && len > DWARF_OFFSET_SIZE
21916 && !DWARF2_INDIRECT_STRING_SUPPORT_MISSING_ON_TARGET
21917 && (debug_str_section->common.flags & SECTION_MERGE) != 0)
21919 ref->code = ref->code == DW_MACINFO_define
21920 ? DW_MACRO_GNU_define_indirect
21921 : DW_MACRO_GNU_undef_indirect;
21922 output_macinfo_op (ref);
21923 return;
21925 dw2_asm_output_data (1, ref->code,
21926 ref->code == DW_MACINFO_define
21927 ? "Define macro" : "Undefine macro");
21928 dw2_asm_output_data_uleb128 (ref->lineno, "At line number %lu",
21929 (unsigned long) ref->lineno);
21930 dw2_asm_output_nstring (ref->info, -1, "The macro");
21931 break;
21932 case DW_MACRO_GNU_define_indirect:
21933 case DW_MACRO_GNU_undef_indirect:
21934 node = find_AT_string (ref->info);
21935 gcc_assert (node
21936 && ((node->form == DW_FORM_strp)
21937 || (node->form == DW_FORM_GNU_str_index)));
21938 dw2_asm_output_data (1, ref->code,
21939 ref->code == DW_MACRO_GNU_define_indirect
21940 ? "Define macro indirect"
21941 : "Undefine macro indirect");
21942 dw2_asm_output_data_uleb128 (ref->lineno, "At line number %lu",
21943 (unsigned long) ref->lineno);
21944 if (node->form == DW_FORM_strp)
21945 dw2_asm_output_offset (DWARF_OFFSET_SIZE, node->label,
21946 debug_str_section, "The macro: \"%s\"",
21947 ref->info);
21948 else
21949 dw2_asm_output_data_uleb128 (node->index, "The macro: \"%s\"",
21950 ref->info);
21951 break;
21952 case DW_MACRO_GNU_transparent_include:
21953 dw2_asm_output_data (1, ref->code, "Transparent include");
21954 ASM_GENERATE_INTERNAL_LABEL (label,
21955 DEBUG_MACRO_SECTION_LABEL, ref->lineno);
21956 dw2_asm_output_offset (DWARF_OFFSET_SIZE, label, NULL, NULL);
21957 break;
21958 default:
21959 fprintf (asm_out_file, "%s unrecognized macinfo code %lu\n",
21960 ASM_COMMENT_START, (unsigned long) ref->code);
21961 break;
21965 /* Attempt to make a sequence of define/undef macinfo ops shareable with
21966 other compilation unit .debug_macinfo sections. IDX is the first
21967 index of a define/undef, return the number of ops that should be
21968 emitted in a comdat .debug_macinfo section and emit
21969 a DW_MACRO_GNU_transparent_include entry referencing it.
21970 If the define/undef entry should be emitted normally, return 0. */
21972 static unsigned
21973 optimize_macinfo_range (unsigned int idx, vec<macinfo_entry, va_gc> *files,
21974 macinfo_hash_type **macinfo_htab)
21976 macinfo_entry *first, *second, *cur, *inc;
21977 char linebuf[sizeof (HOST_WIDE_INT) * 3 + 1];
21978 unsigned char checksum[16];
21979 struct md5_ctx ctx;
21980 char *grp_name, *tail;
21981 const char *base;
21982 unsigned int i, count, encoded_filename_len, linebuf_len;
21983 macinfo_entry **slot;
21985 first = &(*macinfo_table)[idx];
21986 second = &(*macinfo_table)[idx + 1];
21988 /* Optimize only if there are at least two consecutive define/undef ops,
21989 and either all of them are before first DW_MACINFO_start_file
21990 with lineno {0,1} (i.e. predefined macro block), or all of them are
21991 in some included header file. */
21992 if (second->code != DW_MACINFO_define && second->code != DW_MACINFO_undef)
21993 return 0;
21994 if (vec_safe_is_empty (files))
21996 if (first->lineno > 1 || second->lineno > 1)
21997 return 0;
21999 else if (first->lineno == 0)
22000 return 0;
22002 /* Find the last define/undef entry that can be grouped together
22003 with first and at the same time compute md5 checksum of their
22004 codes, linenumbers and strings. */
22005 md5_init_ctx (&ctx);
22006 for (i = idx; macinfo_table->iterate (i, &cur); i++)
22007 if (cur->code != DW_MACINFO_define && cur->code != DW_MACINFO_undef)
22008 break;
22009 else if (vec_safe_is_empty (files) && cur->lineno > 1)
22010 break;
22011 else
22013 unsigned char code = cur->code;
22014 md5_process_bytes (&code, 1, &ctx);
22015 checksum_uleb128 (cur->lineno, &ctx);
22016 md5_process_bytes (cur->info, strlen (cur->info) + 1, &ctx);
22018 md5_finish_ctx (&ctx, checksum);
22019 count = i - idx;
22021 /* From the containing include filename (if any) pick up just
22022 usable characters from its basename. */
22023 if (vec_safe_is_empty (files))
22024 base = "";
22025 else
22026 base = lbasename (files->last ().info);
22027 for (encoded_filename_len = 0, i = 0; base[i]; i++)
22028 if (ISIDNUM (base[i]) || base[i] == '.')
22029 encoded_filename_len++;
22030 /* Count . at the end. */
22031 if (encoded_filename_len)
22032 encoded_filename_len++;
22034 sprintf (linebuf, HOST_WIDE_INT_PRINT_UNSIGNED, first->lineno);
22035 linebuf_len = strlen (linebuf);
22037 /* The group name format is: wmN.[<encoded filename>.]<lineno>.<md5sum> */
22038 grp_name = XALLOCAVEC (char, 4 + encoded_filename_len + linebuf_len + 1
22039 + 16 * 2 + 1);
22040 memcpy (grp_name, DWARF_OFFSET_SIZE == 4 ? "wm4." : "wm8.", 4);
22041 tail = grp_name + 4;
22042 if (encoded_filename_len)
22044 for (i = 0; base[i]; i++)
22045 if (ISIDNUM (base[i]) || base[i] == '.')
22046 *tail++ = base[i];
22047 *tail++ = '.';
22049 memcpy (tail, linebuf, linebuf_len);
22050 tail += linebuf_len;
22051 *tail++ = '.';
22052 for (i = 0; i < 16; i++)
22053 sprintf (tail + i * 2, "%02x", checksum[i] & 0xff);
22055 /* Construct a macinfo_entry for DW_MACRO_GNU_transparent_include
22056 in the empty vector entry before the first define/undef. */
22057 inc = &(*macinfo_table)[idx - 1];
22058 inc->code = DW_MACRO_GNU_transparent_include;
22059 inc->lineno = 0;
22060 inc->info = ggc_strdup (grp_name);
22061 if (!*macinfo_htab)
22062 *macinfo_htab = new macinfo_hash_type (10);
22063 /* Avoid emitting duplicates. */
22064 slot = (*macinfo_htab)->find_slot (inc, INSERT);
22065 if (*slot != NULL)
22067 inc->code = 0;
22068 inc->info = NULL;
22069 /* If such an entry has been used before, just emit
22070 a DW_MACRO_GNU_transparent_include op. */
22071 inc = *slot;
22072 output_macinfo_op (inc);
22073 /* And clear all macinfo_entry in the range to avoid emitting them
22074 in the second pass. */
22075 for (i = idx; macinfo_table->iterate (i, &cur) && i < idx + count; i++)
22077 cur->code = 0;
22078 cur->info = NULL;
22081 else
22083 *slot = inc;
22084 inc->lineno = (*macinfo_htab)->elements ();
22085 output_macinfo_op (inc);
22087 return count;
22090 /* Save any strings needed by the macinfo table in the debug str
22091 table. All strings must be collected into the table by the time
22092 index_string is called. */
22094 static void
22095 save_macinfo_strings (void)
22097 unsigned len;
22098 unsigned i;
22099 macinfo_entry *ref;
22101 for (i = 0; macinfo_table && macinfo_table->iterate (i, &ref); i++)
22103 switch (ref->code)
22105 /* Match the logic in output_macinfo_op to decide on
22106 indirect strings. */
22107 case DW_MACINFO_define:
22108 case DW_MACINFO_undef:
22109 len = strlen (ref->info) + 1;
22110 if (!dwarf_strict
22111 && len > DWARF_OFFSET_SIZE
22112 && !DWARF2_INDIRECT_STRING_SUPPORT_MISSING_ON_TARGET
22113 && (debug_str_section->common.flags & SECTION_MERGE) != 0)
22114 set_indirect_string (find_AT_string (ref->info));
22115 break;
22116 case DW_MACRO_GNU_define_indirect:
22117 case DW_MACRO_GNU_undef_indirect:
22118 set_indirect_string (find_AT_string (ref->info));
22119 break;
22120 default:
22121 break;
22126 /* Output macinfo section(s). */
22128 static void
22129 output_macinfo (void)
22131 unsigned i;
22132 unsigned long length = vec_safe_length (macinfo_table);
22133 macinfo_entry *ref;
22134 vec<macinfo_entry, va_gc> *files = NULL;
22135 macinfo_hash_type *macinfo_htab = NULL;
22137 if (! length)
22138 return;
22140 /* output_macinfo* uses these interchangeably. */
22141 gcc_assert ((int) DW_MACINFO_define == (int) DW_MACRO_GNU_define
22142 && (int) DW_MACINFO_undef == (int) DW_MACRO_GNU_undef
22143 && (int) DW_MACINFO_start_file == (int) DW_MACRO_GNU_start_file
22144 && (int) DW_MACINFO_end_file == (int) DW_MACRO_GNU_end_file);
22146 /* For .debug_macro emit the section header. */
22147 if (!dwarf_strict)
22149 dw2_asm_output_data (2, 4, "DWARF macro version number");
22150 if (DWARF_OFFSET_SIZE == 8)
22151 dw2_asm_output_data (1, 3, "Flags: 64-bit, lineptr present");
22152 else
22153 dw2_asm_output_data (1, 2, "Flags: 32-bit, lineptr present");
22154 dw2_asm_output_offset (DWARF_OFFSET_SIZE,
22155 (!dwarf_split_debug_info ? debug_line_section_label
22156 : debug_skeleton_line_section_label),
22157 debug_line_section, NULL);
22160 /* In the first loop, it emits the primary .debug_macinfo section
22161 and after each emitted op the macinfo_entry is cleared.
22162 If a longer range of define/undef ops can be optimized using
22163 DW_MACRO_GNU_transparent_include, the
22164 DW_MACRO_GNU_transparent_include op is emitted and kept in
22165 the vector before the first define/undef in the range and the
22166 whole range of define/undef ops is not emitted and kept. */
22167 for (i = 0; macinfo_table->iterate (i, &ref); i++)
22169 switch (ref->code)
22171 case DW_MACINFO_start_file:
22172 vec_safe_push (files, *ref);
22173 break;
22174 case DW_MACINFO_end_file:
22175 if (!vec_safe_is_empty (files))
22176 files->pop ();
22177 break;
22178 case DW_MACINFO_define:
22179 case DW_MACINFO_undef:
22180 if (!dwarf_strict
22181 && HAVE_COMDAT_GROUP
22182 && vec_safe_length (files) != 1
22183 && i > 0
22184 && i + 1 < length
22185 && (*macinfo_table)[i - 1].code == 0)
22187 unsigned count = optimize_macinfo_range (i, files, &macinfo_htab);
22188 if (count)
22190 i += count - 1;
22191 continue;
22194 break;
22195 case 0:
22196 /* A dummy entry may be inserted at the beginning to be able
22197 to optimize the whole block of predefined macros. */
22198 if (i == 0)
22199 continue;
22200 default:
22201 break;
22203 output_macinfo_op (ref);
22204 ref->info = NULL;
22205 ref->code = 0;
22208 if (!macinfo_htab)
22209 return;
22211 delete macinfo_htab;
22212 macinfo_htab = NULL;
22214 /* If any DW_MACRO_GNU_transparent_include were used, on those
22215 DW_MACRO_GNU_transparent_include entries terminate the
22216 current chain and switch to a new comdat .debug_macinfo
22217 section and emit the define/undef entries within it. */
22218 for (i = 0; macinfo_table->iterate (i, &ref); i++)
22219 switch (ref->code)
22221 case 0:
22222 continue;
22223 case DW_MACRO_GNU_transparent_include:
22225 char label[MAX_ARTIFICIAL_LABEL_BYTES];
22226 tree comdat_key = get_identifier (ref->info);
22227 /* Terminate the previous .debug_macinfo section. */
22228 dw2_asm_output_data (1, 0, "End compilation unit");
22229 targetm.asm_out.named_section (DEBUG_MACRO_SECTION,
22230 SECTION_DEBUG
22231 | SECTION_LINKONCE,
22232 comdat_key);
22233 ASM_GENERATE_INTERNAL_LABEL (label,
22234 DEBUG_MACRO_SECTION_LABEL,
22235 ref->lineno);
22236 ASM_OUTPUT_LABEL (asm_out_file, label);
22237 ref->code = 0;
22238 ref->info = NULL;
22239 dw2_asm_output_data (2, 4, "DWARF macro version number");
22240 if (DWARF_OFFSET_SIZE == 8)
22241 dw2_asm_output_data (1, 1, "Flags: 64-bit");
22242 else
22243 dw2_asm_output_data (1, 0, "Flags: 32-bit");
22245 break;
22246 case DW_MACINFO_define:
22247 case DW_MACINFO_undef:
22248 output_macinfo_op (ref);
22249 ref->code = 0;
22250 ref->info = NULL;
22251 break;
22252 default:
22253 gcc_unreachable ();
22257 /* Set up for Dwarf output at the start of compilation. */
22259 static void
22260 dwarf2out_init (const char *filename ATTRIBUTE_UNUSED)
22262 /* Allocate the file_table. */
22263 file_table = htab_create_ggc (50, file_table_hash,
22264 file_table_eq, NULL);
22266 /* Allocate the decl_die_table. */
22267 decl_die_table = htab_create_ggc (10, decl_die_table_hash,
22268 decl_die_table_eq, NULL);
22270 /* Allocate the decl_loc_table. */
22271 decl_loc_table = htab_create_ggc (10, decl_loc_table_hash,
22272 decl_loc_table_eq, NULL);
22274 /* Allocate the cached_dw_loc_list_table. */
22275 cached_dw_loc_list_table
22276 = htab_create_ggc (10, cached_dw_loc_list_table_hash,
22277 cached_dw_loc_list_table_eq, NULL);
22279 /* Allocate the initial hunk of the decl_scope_table. */
22280 vec_alloc (decl_scope_table, 256);
22282 /* Allocate the initial hunk of the abbrev_die_table. */
22283 abbrev_die_table = ggc_cleared_vec_alloc<dw_die_ref>
22284 (ABBREV_DIE_TABLE_INCREMENT);
22285 abbrev_die_table_allocated = ABBREV_DIE_TABLE_INCREMENT;
22286 /* Zero-th entry is allocated, but unused. */
22287 abbrev_die_table_in_use = 1;
22289 /* Allocate the pubtypes and pubnames vectors. */
22290 vec_alloc (pubname_table, 32);
22291 vec_alloc (pubtype_table, 32);
22293 vec_alloc (incomplete_types, 64);
22295 vec_alloc (used_rtx_array, 32);
22297 if (!dwarf_split_debug_info)
22299 debug_info_section = get_section (DEBUG_INFO_SECTION,
22300 SECTION_DEBUG, NULL);
22301 debug_abbrev_section = get_section (DEBUG_ABBREV_SECTION,
22302 SECTION_DEBUG, NULL);
22303 debug_loc_section = get_section (DEBUG_LOC_SECTION,
22304 SECTION_DEBUG, NULL);
22306 else
22308 debug_info_section = get_section (DEBUG_DWO_INFO_SECTION,
22309 SECTION_DEBUG | SECTION_EXCLUDE, NULL);
22310 debug_abbrev_section = get_section (DEBUG_DWO_ABBREV_SECTION,
22311 SECTION_DEBUG | SECTION_EXCLUDE,
22312 NULL);
22313 debug_addr_section = get_section (DEBUG_ADDR_SECTION,
22314 SECTION_DEBUG, NULL);
22315 debug_skeleton_info_section = get_section (DEBUG_INFO_SECTION,
22316 SECTION_DEBUG, NULL);
22317 debug_skeleton_abbrev_section = get_section (DEBUG_ABBREV_SECTION,
22318 SECTION_DEBUG, NULL);
22319 ASM_GENERATE_INTERNAL_LABEL (debug_skeleton_abbrev_section_label,
22320 DEBUG_SKELETON_ABBREV_SECTION_LABEL, 0);
22322 /* Somewhat confusing detail: The skeleton_[abbrev|info] sections stay in
22323 the main .o, but the skeleton_line goes into the split off dwo. */
22324 debug_skeleton_line_section
22325 = get_section (DEBUG_DWO_LINE_SECTION,
22326 SECTION_DEBUG | SECTION_EXCLUDE, NULL);
22327 ASM_GENERATE_INTERNAL_LABEL (debug_skeleton_line_section_label,
22328 DEBUG_SKELETON_LINE_SECTION_LABEL, 0);
22329 debug_str_offsets_section = get_section (DEBUG_STR_OFFSETS_SECTION,
22330 SECTION_DEBUG | SECTION_EXCLUDE,
22331 NULL);
22332 ASM_GENERATE_INTERNAL_LABEL (debug_skeleton_info_section_label,
22333 DEBUG_SKELETON_INFO_SECTION_LABEL, 0);
22334 debug_loc_section = get_section (DEBUG_DWO_LOC_SECTION,
22335 SECTION_DEBUG | SECTION_EXCLUDE, NULL);
22336 debug_str_dwo_section = get_section (DEBUG_STR_DWO_SECTION,
22337 DEBUG_STR_DWO_SECTION_FLAGS, NULL);
22339 debug_aranges_section = get_section (DEBUG_ARANGES_SECTION,
22340 SECTION_DEBUG, NULL);
22341 debug_macinfo_section = get_section (dwarf_strict
22342 ? DEBUG_MACINFO_SECTION
22343 : DEBUG_MACRO_SECTION,
22344 DEBUG_MACRO_SECTION_FLAGS, NULL);
22345 debug_line_section = get_section (DEBUG_LINE_SECTION,
22346 SECTION_DEBUG, NULL);
22347 debug_pubnames_section = get_section (DEBUG_PUBNAMES_SECTION,
22348 SECTION_DEBUG, NULL);
22349 debug_pubtypes_section = get_section (DEBUG_PUBTYPES_SECTION,
22350 SECTION_DEBUG, NULL);
22351 debug_str_section = get_section (DEBUG_STR_SECTION,
22352 DEBUG_STR_SECTION_FLAGS, NULL);
22353 debug_ranges_section = get_section (DEBUG_RANGES_SECTION,
22354 SECTION_DEBUG, NULL);
22355 debug_frame_section = get_section (DEBUG_FRAME_SECTION,
22356 SECTION_DEBUG, NULL);
22358 ASM_GENERATE_INTERNAL_LABEL (text_end_label, TEXT_END_LABEL, 0);
22359 ASM_GENERATE_INTERNAL_LABEL (abbrev_section_label,
22360 DEBUG_ABBREV_SECTION_LABEL, 0);
22361 ASM_GENERATE_INTERNAL_LABEL (text_section_label, TEXT_SECTION_LABEL, 0);
22362 ASM_GENERATE_INTERNAL_LABEL (cold_text_section_label,
22363 COLD_TEXT_SECTION_LABEL, 0);
22364 ASM_GENERATE_INTERNAL_LABEL (cold_end_label, COLD_END_LABEL, 0);
22366 ASM_GENERATE_INTERNAL_LABEL (debug_info_section_label,
22367 DEBUG_INFO_SECTION_LABEL, 0);
22368 ASM_GENERATE_INTERNAL_LABEL (debug_line_section_label,
22369 DEBUG_LINE_SECTION_LABEL, 0);
22370 ASM_GENERATE_INTERNAL_LABEL (ranges_section_label,
22371 DEBUG_RANGES_SECTION_LABEL, 0);
22372 ASM_GENERATE_INTERNAL_LABEL (debug_addr_section_label,
22373 DEBUG_ADDR_SECTION_LABEL, 0);
22374 ASM_GENERATE_INTERNAL_LABEL (macinfo_section_label,
22375 dwarf_strict
22376 ? DEBUG_MACINFO_SECTION_LABEL
22377 : DEBUG_MACRO_SECTION_LABEL, 0);
22378 ASM_GENERATE_INTERNAL_LABEL (loc_section_label, DEBUG_LOC_SECTION_LABEL, 0);
22380 if (debug_info_level >= DINFO_LEVEL_VERBOSE)
22381 vec_alloc (macinfo_table, 64);
22383 switch_to_section (text_section);
22384 ASM_OUTPUT_LABEL (asm_out_file, text_section_label);
22386 /* Make sure the line number table for .text always exists. */
22387 text_section_line_info = new_line_info_table ();
22388 text_section_line_info->end_label = text_end_label;
22391 /* Called before compile () starts outputtting functions, variables
22392 and toplevel asms into assembly. */
22394 static void
22395 dwarf2out_assembly_start (void)
22397 if (HAVE_GAS_CFI_SECTIONS_DIRECTIVE
22398 && dwarf2out_do_cfi_asm ()
22399 && (!(flag_unwind_tables || flag_exceptions)
22400 || targetm_common.except_unwind_info (&global_options) != UI_DWARF2))
22401 fprintf (asm_out_file, "\t.cfi_sections\t.debug_frame\n");
22404 /* A helper function for dwarf2out_finish called through
22405 htab_traverse. Assign a string its index. All strings must be
22406 collected into the table by the time index_string is called,
22407 because the indexing code relies on htab_traverse to traverse nodes
22408 in the same order for each run. */
22410 static int
22411 index_string (void **h, void *v)
22413 struct indirect_string_node *node = (struct indirect_string_node *) *h;
22414 unsigned int *index = (unsigned int *) v;
22416 find_string_form (node);
22417 if (node->form == DW_FORM_GNU_str_index && node->refcount > 0)
22419 gcc_assert (node->index == NO_INDEX_ASSIGNED);
22420 node->index = *index;
22421 *index += 1;
22423 return 1;
22426 /* A helper function for output_indirect_strings called through
22427 htab_traverse. Output the offset to a string and update the
22428 current offset. */
22430 static int
22431 output_index_string_offset (void **h, void *v)
22433 struct indirect_string_node *node = (struct indirect_string_node *) *h;
22434 unsigned int *offset = (unsigned int *) v;
22436 if (node->form == DW_FORM_GNU_str_index && node->refcount > 0)
22438 /* Assert that this node has been assigned an index. */
22439 gcc_assert (node->index != NO_INDEX_ASSIGNED
22440 && node->index != NOT_INDEXED);
22441 dw2_asm_output_data (DWARF_OFFSET_SIZE, *offset,
22442 "indexed string 0x%x: %s", node->index, node->str);
22443 *offset += strlen (node->str) + 1;
22445 return 1;
22448 /* A helper function for dwarf2out_finish called through
22449 htab_traverse. Output the indexed string. */
22451 static int
22452 output_index_string (void **h, void *v)
22454 struct indirect_string_node *node = (struct indirect_string_node *) *h;
22455 unsigned int *cur_idx = (unsigned int *) v;
22457 if (node->form == DW_FORM_GNU_str_index && node->refcount > 0)
22459 /* Assert that the strings are output in the same order as their
22460 indexes were assigned. */
22461 gcc_assert (*cur_idx == node->index);
22462 assemble_string (node->str, strlen (node->str) + 1);
22463 *cur_idx += 1;
22465 return 1;
22468 /* A helper function for dwarf2out_finish called through
22469 htab_traverse. Emit one queued .debug_str string. */
22471 static int
22472 output_indirect_string (void **h, void *v ATTRIBUTE_UNUSED)
22474 struct indirect_string_node *node = (struct indirect_string_node *) *h;
22476 node->form = find_string_form (node);
22477 if (node->form == DW_FORM_strp && node->refcount > 0)
22479 ASM_OUTPUT_LABEL (asm_out_file, node->label);
22480 assemble_string (node->str, strlen (node->str) + 1);
22483 return 1;
22486 /* Output the indexed string table. */
22488 static void
22489 output_indirect_strings (void)
22491 switch_to_section (debug_str_section);
22492 if (!dwarf_split_debug_info)
22493 htab_traverse (debug_str_hash, output_indirect_string, NULL);
22494 else
22496 unsigned int offset = 0;
22497 unsigned int cur_idx = 0;
22499 htab_traverse (skeleton_debug_str_hash, output_indirect_string, NULL);
22501 switch_to_section (debug_str_offsets_section);
22502 htab_traverse_noresize (debug_str_hash,
22503 output_index_string_offset,
22504 &offset);
22505 switch_to_section (debug_str_dwo_section);
22506 htab_traverse_noresize (debug_str_hash,
22507 output_index_string,
22508 &cur_idx);
22512 /* Callback for htab_traverse to assign an index to an entry in the
22513 table, and to write that entry to the .debug_addr section. */
22515 static int
22516 output_addr_table_entry (void **slot, void *data)
22518 addr_table_entry *entry = (addr_table_entry *) *slot;
22519 unsigned int *cur_index = (unsigned int *)data;
22521 if (entry->refcount == 0)
22523 gcc_assert (entry->index == NO_INDEX_ASSIGNED
22524 || entry->index == NOT_INDEXED);
22525 return 1;
22528 gcc_assert (entry->index == *cur_index);
22529 (*cur_index)++;
22531 switch (entry->kind)
22533 case ate_kind_rtx:
22534 dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE, entry->addr.rtl,
22535 "0x%x", entry->index);
22536 break;
22537 case ate_kind_rtx_dtprel:
22538 gcc_assert (targetm.asm_out.output_dwarf_dtprel);
22539 targetm.asm_out.output_dwarf_dtprel (asm_out_file,
22540 DWARF2_ADDR_SIZE,
22541 entry->addr.rtl);
22542 fputc ('\n', asm_out_file);
22543 break;
22544 case ate_kind_label:
22545 dw2_asm_output_addr (DWARF2_ADDR_SIZE, entry->addr.label,
22546 "0x%x", entry->index);
22547 break;
22548 default:
22549 gcc_unreachable ();
22551 return 1;
22554 /* Produce the .debug_addr section. */
22556 static void
22557 output_addr_table (void)
22559 unsigned int index = 0;
22560 if (addr_index_table == NULL || htab_size (addr_index_table) == 0)
22561 return;
22563 switch_to_section (debug_addr_section);
22564 htab_traverse_noresize (addr_index_table, output_addr_table_entry, &index);
22567 #if ENABLE_ASSERT_CHECKING
22568 /* Verify that all marks are clear. */
22570 static void
22571 verify_marks_clear (dw_die_ref die)
22573 dw_die_ref c;
22575 gcc_assert (! die->die_mark);
22576 FOR_EACH_CHILD (die, c, verify_marks_clear (c));
22578 #endif /* ENABLE_ASSERT_CHECKING */
22580 /* Clear the marks for a die and its children.
22581 Be cool if the mark isn't set. */
22583 static void
22584 prune_unmark_dies (dw_die_ref die)
22586 dw_die_ref c;
22588 if (die->die_mark)
22589 die->die_mark = 0;
22590 FOR_EACH_CHILD (die, c, prune_unmark_dies (c));
22593 /* Given DIE that we're marking as used, find any other dies
22594 it references as attributes and mark them as used. */
22596 static void
22597 prune_unused_types_walk_attribs (dw_die_ref die)
22599 dw_attr_ref a;
22600 unsigned ix;
22602 FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
22604 if (a->dw_attr_val.val_class == dw_val_class_die_ref)
22606 /* A reference to another DIE.
22607 Make sure that it will get emitted.
22608 If it was broken out into a comdat group, don't follow it. */
22609 if (! AT_ref (a)->comdat_type_p
22610 || a->dw_attr == DW_AT_specification)
22611 prune_unused_types_mark (a->dw_attr_val.v.val_die_ref.die, 1);
22613 /* Set the string's refcount to 0 so that prune_unused_types_mark
22614 accounts properly for it. */
22615 if (AT_class (a) == dw_val_class_str)
22616 a->dw_attr_val.v.val_str->refcount = 0;
22620 /* Mark the generic parameters and arguments children DIEs of DIE. */
22622 static void
22623 prune_unused_types_mark_generic_parms_dies (dw_die_ref die)
22625 dw_die_ref c;
22627 if (die == NULL || die->die_child == NULL)
22628 return;
22629 c = die->die_child;
22632 if (is_template_parameter (c))
22633 prune_unused_types_mark (c, 1);
22634 c = c->die_sib;
22635 } while (c && c != die->die_child);
22638 /* Mark DIE as being used. If DOKIDS is true, then walk down
22639 to DIE's children. */
22641 static void
22642 prune_unused_types_mark (dw_die_ref die, int dokids)
22644 dw_die_ref c;
22646 if (die->die_mark == 0)
22648 /* We haven't done this node yet. Mark it as used. */
22649 die->die_mark = 1;
22650 /* If this is the DIE of a generic type instantiation,
22651 mark the children DIEs that describe its generic parms and
22652 args. */
22653 prune_unused_types_mark_generic_parms_dies (die);
22655 /* We also have to mark its parents as used.
22656 (But we don't want to mark our parent's kids due to this,
22657 unless it is a class.) */
22658 if (die->die_parent)
22659 prune_unused_types_mark (die->die_parent,
22660 class_scope_p (die->die_parent));
22662 /* Mark any referenced nodes. */
22663 prune_unused_types_walk_attribs (die);
22665 /* If this node is a specification,
22666 also mark the definition, if it exists. */
22667 if (get_AT_flag (die, DW_AT_declaration) && die->die_definition)
22668 prune_unused_types_mark (die->die_definition, 1);
22671 if (dokids && die->die_mark != 2)
22673 /* We need to walk the children, but haven't done so yet.
22674 Remember that we've walked the kids. */
22675 die->die_mark = 2;
22677 /* If this is an array type, we need to make sure our
22678 kids get marked, even if they're types. If we're
22679 breaking out types into comdat sections, do this
22680 for all type definitions. */
22681 if (die->die_tag == DW_TAG_array_type
22682 || (use_debug_types
22683 && is_type_die (die) && ! is_declaration_die (die)))
22684 FOR_EACH_CHILD (die, c, prune_unused_types_mark (c, 1));
22685 else
22686 FOR_EACH_CHILD (die, c, prune_unused_types_walk (c));
22690 /* For local classes, look if any static member functions were emitted
22691 and if so, mark them. */
22693 static void
22694 prune_unused_types_walk_local_classes (dw_die_ref die)
22696 dw_die_ref c;
22698 if (die->die_mark == 2)
22699 return;
22701 switch (die->die_tag)
22703 case DW_TAG_structure_type:
22704 case DW_TAG_union_type:
22705 case DW_TAG_class_type:
22706 break;
22708 case DW_TAG_subprogram:
22709 if (!get_AT_flag (die, DW_AT_declaration)
22710 || die->die_definition != NULL)
22711 prune_unused_types_mark (die, 1);
22712 return;
22714 default:
22715 return;
22718 /* Mark children. */
22719 FOR_EACH_CHILD (die, c, prune_unused_types_walk_local_classes (c));
22722 /* Walk the tree DIE and mark types that we actually use. */
22724 static void
22725 prune_unused_types_walk (dw_die_ref die)
22727 dw_die_ref c;
22729 /* Don't do anything if this node is already marked and
22730 children have been marked as well. */
22731 if (die->die_mark == 2)
22732 return;
22734 switch (die->die_tag)
22736 case DW_TAG_structure_type:
22737 case DW_TAG_union_type:
22738 case DW_TAG_class_type:
22739 if (die->die_perennial_p)
22740 break;
22742 for (c = die->die_parent; c; c = c->die_parent)
22743 if (c->die_tag == DW_TAG_subprogram)
22744 break;
22746 /* Finding used static member functions inside of classes
22747 is needed just for local classes, because for other classes
22748 static member function DIEs with DW_AT_specification
22749 are emitted outside of the DW_TAG_*_type. If we ever change
22750 it, we'd need to call this even for non-local classes. */
22751 if (c)
22752 prune_unused_types_walk_local_classes (die);
22754 /* It's a type node --- don't mark it. */
22755 return;
22757 case DW_TAG_const_type:
22758 case DW_TAG_packed_type:
22759 case DW_TAG_pointer_type:
22760 case DW_TAG_reference_type:
22761 case DW_TAG_rvalue_reference_type:
22762 case DW_TAG_volatile_type:
22763 case DW_TAG_typedef:
22764 case DW_TAG_array_type:
22765 case DW_TAG_interface_type:
22766 case DW_TAG_friend:
22767 case DW_TAG_variant_part:
22768 case DW_TAG_enumeration_type:
22769 case DW_TAG_subroutine_type:
22770 case DW_TAG_string_type:
22771 case DW_TAG_set_type:
22772 case DW_TAG_subrange_type:
22773 case DW_TAG_ptr_to_member_type:
22774 case DW_TAG_file_type:
22775 if (die->die_perennial_p)
22776 break;
22778 /* It's a type node --- don't mark it. */
22779 return;
22781 default:
22782 /* Mark everything else. */
22783 break;
22786 if (die->die_mark == 0)
22788 die->die_mark = 1;
22790 /* Now, mark any dies referenced from here. */
22791 prune_unused_types_walk_attribs (die);
22794 die->die_mark = 2;
22796 /* Mark children. */
22797 FOR_EACH_CHILD (die, c, prune_unused_types_walk (c));
22800 /* Increment the string counts on strings referred to from DIE's
22801 attributes. */
22803 static void
22804 prune_unused_types_update_strings (dw_die_ref die)
22806 dw_attr_ref a;
22807 unsigned ix;
22809 FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
22810 if (AT_class (a) == dw_val_class_str)
22812 struct indirect_string_node *s = a->dw_attr_val.v.val_str;
22813 s->refcount++;
22814 /* Avoid unnecessarily putting strings that are used less than
22815 twice in the hash table. */
22816 if (s->refcount
22817 == ((DEBUG_STR_SECTION_FLAGS & SECTION_MERGE) ? 1 : 2))
22819 void ** slot;
22820 slot = htab_find_slot_with_hash (debug_str_hash, s->str,
22821 htab_hash_string (s->str),
22822 INSERT);
22823 gcc_assert (*slot == NULL);
22824 *slot = s;
22829 /* Remove from the tree DIE any dies that aren't marked. */
22831 static void
22832 prune_unused_types_prune (dw_die_ref die)
22834 dw_die_ref c;
22836 gcc_assert (die->die_mark);
22837 prune_unused_types_update_strings (die);
22839 if (! die->die_child)
22840 return;
22842 c = die->die_child;
22843 do {
22844 dw_die_ref prev = c;
22845 for (c = c->die_sib; ! c->die_mark; c = c->die_sib)
22846 if (c == die->die_child)
22848 /* No marked children between 'prev' and the end of the list. */
22849 if (prev == c)
22850 /* No marked children at all. */
22851 die->die_child = NULL;
22852 else
22854 prev->die_sib = c->die_sib;
22855 die->die_child = prev;
22857 return;
22860 if (c != prev->die_sib)
22861 prev->die_sib = c;
22862 prune_unused_types_prune (c);
22863 } while (c != die->die_child);
22866 /* Remove dies representing declarations that we never use. */
22868 static void
22869 prune_unused_types (void)
22871 unsigned int i;
22872 limbo_die_node *node;
22873 comdat_type_node *ctnode;
22874 pubname_ref pub;
22875 dw_die_ref base_type;
22877 #if ENABLE_ASSERT_CHECKING
22878 /* All the marks should already be clear. */
22879 verify_marks_clear (comp_unit_die ());
22880 for (node = limbo_die_list; node; node = node->next)
22881 verify_marks_clear (node->die);
22882 for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next)
22883 verify_marks_clear (ctnode->root_die);
22884 #endif /* ENABLE_ASSERT_CHECKING */
22886 /* Mark types that are used in global variables. */
22887 premark_types_used_by_global_vars ();
22889 /* Set the mark on nodes that are actually used. */
22890 prune_unused_types_walk (comp_unit_die ());
22891 for (node = limbo_die_list; node; node = node->next)
22892 prune_unused_types_walk (node->die);
22893 for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next)
22895 prune_unused_types_walk (ctnode->root_die);
22896 prune_unused_types_mark (ctnode->type_die, 1);
22899 /* Also set the mark on nodes referenced from the pubname_table. Enumerators
22900 are unusual in that they are pubnames that are the children of pubtypes.
22901 They should only be marked via their parent DW_TAG_enumeration_type die,
22902 not as roots in themselves. */
22903 FOR_EACH_VEC_ELT (*pubname_table, i, pub)
22904 if (pub->die->die_tag != DW_TAG_enumerator)
22905 prune_unused_types_mark (pub->die, 1);
22906 for (i = 0; base_types.iterate (i, &base_type); i++)
22907 prune_unused_types_mark (base_type, 1);
22909 if (debug_str_hash)
22910 htab_empty (debug_str_hash);
22911 if (skeleton_debug_str_hash)
22912 htab_empty (skeleton_debug_str_hash);
22913 prune_unused_types_prune (comp_unit_die ());
22914 for (node = limbo_die_list; node; node = node->next)
22915 prune_unused_types_prune (node->die);
22916 for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next)
22917 prune_unused_types_prune (ctnode->root_die);
22919 /* Leave the marks clear. */
22920 prune_unmark_dies (comp_unit_die ());
22921 for (node = limbo_die_list; node; node = node->next)
22922 prune_unmark_dies (node->die);
22923 for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next)
22924 prune_unmark_dies (ctnode->root_die);
22927 /* Set the parameter to true if there are any relative pathnames in
22928 the file table. */
22929 static int
22930 file_table_relative_p (void ** slot, void *param)
22932 bool *p = (bool *) param;
22933 struct dwarf_file_data *d = (struct dwarf_file_data *) *slot;
22934 if (!IS_ABSOLUTE_PATH (d->filename))
22936 *p = true;
22937 return 0;
22939 return 1;
22942 /* Helpers to manipulate hash table of comdat type units. */
22944 struct comdat_type_hasher : typed_noop_remove <comdat_type_node>
22946 typedef comdat_type_node value_type;
22947 typedef comdat_type_node compare_type;
22948 static inline hashval_t hash (const value_type *);
22949 static inline bool equal (const value_type *, const compare_type *);
22952 inline hashval_t
22953 comdat_type_hasher::hash (const value_type *type_node)
22955 hashval_t h;
22956 memcpy (&h, type_node->signature, sizeof (h));
22957 return h;
22960 inline bool
22961 comdat_type_hasher::equal (const value_type *type_node_1,
22962 const compare_type *type_node_2)
22964 return (! memcmp (type_node_1->signature, type_node_2->signature,
22965 DWARF_TYPE_SIGNATURE_SIZE));
22968 /* Move a DW_AT_{,MIPS_}linkage_name attribute just added to dw_die_ref
22969 to the location it would have been added, should we know its
22970 DECL_ASSEMBLER_NAME when we added other attributes. This will
22971 probably improve compactness of debug info, removing equivalent
22972 abbrevs, and hide any differences caused by deferring the
22973 computation of the assembler name, triggered by e.g. PCH. */
22975 static inline void
22976 move_linkage_attr (dw_die_ref die)
22978 unsigned ix = vec_safe_length (die->die_attr);
22979 dw_attr_node linkage = (*die->die_attr)[ix - 1];
22981 gcc_assert (linkage.dw_attr == DW_AT_linkage_name
22982 || linkage.dw_attr == DW_AT_MIPS_linkage_name);
22984 while (--ix > 0)
22986 dw_attr_node *prev = &(*die->die_attr)[ix - 1];
22988 if (prev->dw_attr == DW_AT_decl_line || prev->dw_attr == DW_AT_name)
22989 break;
22992 if (ix != vec_safe_length (die->die_attr) - 1)
22994 die->die_attr->pop ();
22995 die->die_attr->quick_insert (ix, linkage);
22999 /* Helper function for resolve_addr, mark DW_TAG_base_type nodes
23000 referenced from typed stack ops and count how often they are used. */
23002 static void
23003 mark_base_types (dw_loc_descr_ref loc)
23005 dw_die_ref base_type = NULL;
23007 for (; loc; loc = loc->dw_loc_next)
23009 switch (loc->dw_loc_opc)
23011 case DW_OP_GNU_regval_type:
23012 case DW_OP_GNU_deref_type:
23013 base_type = loc->dw_loc_oprnd2.v.val_die_ref.die;
23014 break;
23015 case DW_OP_GNU_convert:
23016 case DW_OP_GNU_reinterpret:
23017 if (loc->dw_loc_oprnd1.val_class == dw_val_class_unsigned_const)
23018 continue;
23019 /* FALLTHRU */
23020 case DW_OP_GNU_const_type:
23021 base_type = loc->dw_loc_oprnd1.v.val_die_ref.die;
23022 break;
23023 case DW_OP_GNU_entry_value:
23024 mark_base_types (loc->dw_loc_oprnd1.v.val_loc);
23025 continue;
23026 default:
23027 continue;
23029 gcc_assert (base_type->die_parent == comp_unit_die ());
23030 if (base_type->die_mark)
23031 base_type->die_mark++;
23032 else
23034 base_types.safe_push (base_type);
23035 base_type->die_mark = 1;
23040 /* Comparison function for sorting marked base types. */
23042 static int
23043 base_type_cmp (const void *x, const void *y)
23045 dw_die_ref dx = *(const dw_die_ref *) x;
23046 dw_die_ref dy = *(const dw_die_ref *) y;
23047 unsigned int byte_size1, byte_size2;
23048 unsigned int encoding1, encoding2;
23049 if (dx->die_mark > dy->die_mark)
23050 return -1;
23051 if (dx->die_mark < dy->die_mark)
23052 return 1;
23053 byte_size1 = get_AT_unsigned (dx, DW_AT_byte_size);
23054 byte_size2 = get_AT_unsigned (dy, DW_AT_byte_size);
23055 if (byte_size1 < byte_size2)
23056 return 1;
23057 if (byte_size1 > byte_size2)
23058 return -1;
23059 encoding1 = get_AT_unsigned (dx, DW_AT_encoding);
23060 encoding2 = get_AT_unsigned (dy, DW_AT_encoding);
23061 if (encoding1 < encoding2)
23062 return 1;
23063 if (encoding1 > encoding2)
23064 return -1;
23065 return 0;
23068 /* Move base types marked by mark_base_types as early as possible
23069 in the CU, sorted by decreasing usage count both to make the
23070 uleb128 references as small as possible and to make sure they
23071 will have die_offset already computed by calc_die_sizes when
23072 sizes of typed stack loc ops is computed. */
23074 static void
23075 move_marked_base_types (void)
23077 unsigned int i;
23078 dw_die_ref base_type, die, c;
23080 if (base_types.is_empty ())
23081 return;
23083 /* Sort by decreasing usage count, they will be added again in that
23084 order later on. */
23085 base_types.qsort (base_type_cmp);
23086 die = comp_unit_die ();
23087 c = die->die_child;
23090 dw_die_ref prev = c;
23091 c = c->die_sib;
23092 while (c->die_mark)
23094 remove_child_with_prev (c, prev);
23095 /* As base types got marked, there must be at least
23096 one node other than DW_TAG_base_type. */
23097 gcc_assert (c != c->die_sib);
23098 c = c->die_sib;
23101 while (c != die->die_child);
23102 gcc_assert (die->die_child);
23103 c = die->die_child;
23104 for (i = 0; base_types.iterate (i, &base_type); i++)
23106 base_type->die_mark = 0;
23107 base_type->die_sib = c->die_sib;
23108 c->die_sib = base_type;
23109 c = base_type;
23113 /* Helper function for resolve_addr, attempt to resolve
23114 one CONST_STRING, return true if successful. Similarly verify that
23115 SYMBOL_REFs refer to variables emitted in the current CU. */
23117 static bool
23118 resolve_one_addr (rtx *addr)
23120 rtx rtl = *addr;
23122 if (GET_CODE (rtl) == CONST_STRING)
23124 size_t len = strlen (XSTR (rtl, 0)) + 1;
23125 tree t = build_string (len, XSTR (rtl, 0));
23126 tree tlen = size_int (len - 1);
23127 TREE_TYPE (t)
23128 = build_array_type (char_type_node, build_index_type (tlen));
23129 rtl = lookup_constant_def (t);
23130 if (!rtl || !MEM_P (rtl))
23131 return false;
23132 rtl = XEXP (rtl, 0);
23133 if (GET_CODE (rtl) == SYMBOL_REF
23134 && SYMBOL_REF_DECL (rtl)
23135 && !TREE_ASM_WRITTEN (SYMBOL_REF_DECL (rtl)))
23136 return false;
23137 vec_safe_push (used_rtx_array, rtl);
23138 *addr = rtl;
23139 return true;
23142 if (GET_CODE (rtl) == SYMBOL_REF
23143 && SYMBOL_REF_DECL (rtl))
23145 if (TREE_CONSTANT_POOL_ADDRESS_P (rtl))
23147 if (!TREE_ASM_WRITTEN (DECL_INITIAL (SYMBOL_REF_DECL (rtl))))
23148 return false;
23150 else if (!TREE_ASM_WRITTEN (SYMBOL_REF_DECL (rtl)))
23151 return false;
23154 if (GET_CODE (rtl) == CONST)
23156 subrtx_ptr_iterator::array_type array;
23157 FOR_EACH_SUBRTX_PTR (iter, array, &XEXP (rtl, 0), ALL)
23158 if (!resolve_one_addr (*iter))
23159 return false;
23162 return true;
23165 /* For STRING_CST, return SYMBOL_REF of its constant pool entry,
23166 if possible, and create DW_TAG_dwarf_procedure that can be referenced
23167 from DW_OP_GNU_implicit_pointer if the string hasn't been seen yet. */
23169 static rtx
23170 string_cst_pool_decl (tree t)
23172 rtx rtl = output_constant_def (t, 1);
23173 unsigned char *array;
23174 dw_loc_descr_ref l;
23175 tree decl;
23176 size_t len;
23177 dw_die_ref ref;
23179 if (!rtl || !MEM_P (rtl))
23180 return NULL_RTX;
23181 rtl = XEXP (rtl, 0);
23182 if (GET_CODE (rtl) != SYMBOL_REF
23183 || SYMBOL_REF_DECL (rtl) == NULL_TREE)
23184 return NULL_RTX;
23186 decl = SYMBOL_REF_DECL (rtl);
23187 if (!lookup_decl_die (decl))
23189 len = TREE_STRING_LENGTH (t);
23190 vec_safe_push (used_rtx_array, rtl);
23191 ref = new_die (DW_TAG_dwarf_procedure, comp_unit_die (), decl);
23192 array = ggc_vec_alloc<unsigned char> (len);
23193 memcpy (array, TREE_STRING_POINTER (t), len);
23194 l = new_loc_descr (DW_OP_implicit_value, len, 0);
23195 l->dw_loc_oprnd2.val_class = dw_val_class_vec;
23196 l->dw_loc_oprnd2.v.val_vec.length = len;
23197 l->dw_loc_oprnd2.v.val_vec.elt_size = 1;
23198 l->dw_loc_oprnd2.v.val_vec.array = array;
23199 add_AT_loc (ref, DW_AT_location, l);
23200 equate_decl_number_to_die (decl, ref);
23202 return rtl;
23205 /* Helper function of resolve_addr_in_expr. LOC is
23206 a DW_OP_addr followed by DW_OP_stack_value, either at the start
23207 of exprloc or after DW_OP_{,bit_}piece, and val_addr can't be
23208 resolved. Replace it (both DW_OP_addr and DW_OP_stack_value)
23209 with DW_OP_GNU_implicit_pointer if possible
23210 and return true, if unsuccessful, return false. */
23212 static bool
23213 optimize_one_addr_into_implicit_ptr (dw_loc_descr_ref loc)
23215 rtx rtl = loc->dw_loc_oprnd1.v.val_addr;
23216 HOST_WIDE_INT offset = 0;
23217 dw_die_ref ref = NULL;
23218 tree decl;
23220 if (GET_CODE (rtl) == CONST
23221 && GET_CODE (XEXP (rtl, 0)) == PLUS
23222 && CONST_INT_P (XEXP (XEXP (rtl, 0), 1)))
23224 offset = INTVAL (XEXP (XEXP (rtl, 0), 1));
23225 rtl = XEXP (XEXP (rtl, 0), 0);
23227 if (GET_CODE (rtl) == CONST_STRING)
23229 size_t len = strlen (XSTR (rtl, 0)) + 1;
23230 tree t = build_string (len, XSTR (rtl, 0));
23231 tree tlen = size_int (len - 1);
23233 TREE_TYPE (t)
23234 = build_array_type (char_type_node, build_index_type (tlen));
23235 rtl = string_cst_pool_decl (t);
23236 if (!rtl)
23237 return false;
23239 if (GET_CODE (rtl) == SYMBOL_REF && SYMBOL_REF_DECL (rtl))
23241 decl = SYMBOL_REF_DECL (rtl);
23242 if (TREE_CODE (decl) == VAR_DECL && !DECL_EXTERNAL (decl))
23244 ref = lookup_decl_die (decl);
23245 if (ref && (get_AT (ref, DW_AT_location)
23246 || get_AT (ref, DW_AT_const_value)))
23248 loc->dw_loc_opc = DW_OP_GNU_implicit_pointer;
23249 loc->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
23250 loc->dw_loc_oprnd1.val_entry = NULL;
23251 loc->dw_loc_oprnd1.v.val_die_ref.die = ref;
23252 loc->dw_loc_oprnd1.v.val_die_ref.external = 0;
23253 loc->dw_loc_next = loc->dw_loc_next->dw_loc_next;
23254 loc->dw_loc_oprnd2.v.val_int = offset;
23255 return true;
23259 return false;
23262 /* Helper function for resolve_addr, handle one location
23263 expression, return false if at least one CONST_STRING or SYMBOL_REF in
23264 the location list couldn't be resolved. */
23266 static bool
23267 resolve_addr_in_expr (dw_loc_descr_ref loc)
23269 dw_loc_descr_ref keep = NULL;
23270 for (dw_loc_descr_ref prev = NULL; loc; prev = loc, loc = loc->dw_loc_next)
23271 switch (loc->dw_loc_opc)
23273 case DW_OP_addr:
23274 if (!resolve_one_addr (&loc->dw_loc_oprnd1.v.val_addr))
23276 if ((prev == NULL
23277 || prev->dw_loc_opc == DW_OP_piece
23278 || prev->dw_loc_opc == DW_OP_bit_piece)
23279 && loc->dw_loc_next
23280 && loc->dw_loc_next->dw_loc_opc == DW_OP_stack_value
23281 && !dwarf_strict
23282 && optimize_one_addr_into_implicit_ptr (loc))
23283 break;
23284 return false;
23286 break;
23287 case DW_OP_GNU_addr_index:
23288 case DW_OP_GNU_const_index:
23289 if (loc->dw_loc_opc == DW_OP_GNU_addr_index
23290 || (loc->dw_loc_opc == DW_OP_GNU_const_index && loc->dtprel))
23292 rtx rtl = loc->dw_loc_oprnd1.val_entry->addr.rtl;
23293 if (!resolve_one_addr (&rtl))
23294 return false;
23295 remove_addr_table_entry (loc->dw_loc_oprnd1.val_entry);
23296 loc->dw_loc_oprnd1.val_entry =
23297 add_addr_table_entry (rtl, ate_kind_rtx);
23299 break;
23300 case DW_OP_const4u:
23301 case DW_OP_const8u:
23302 if (loc->dtprel
23303 && !resolve_one_addr (&loc->dw_loc_oprnd1.v.val_addr))
23304 return false;
23305 break;
23306 case DW_OP_plus_uconst:
23307 if (size_of_loc_descr (loc)
23308 > size_of_int_loc_descriptor (loc->dw_loc_oprnd1.v.val_unsigned)
23310 && loc->dw_loc_oprnd1.v.val_unsigned > 0)
23312 dw_loc_descr_ref repl
23313 = int_loc_descriptor (loc->dw_loc_oprnd1.v.val_unsigned);
23314 add_loc_descr (&repl, new_loc_descr (DW_OP_plus, 0, 0));
23315 add_loc_descr (&repl, loc->dw_loc_next);
23316 *loc = *repl;
23318 break;
23319 case DW_OP_implicit_value:
23320 if (loc->dw_loc_oprnd2.val_class == dw_val_class_addr
23321 && !resolve_one_addr (&loc->dw_loc_oprnd2.v.val_addr))
23322 return false;
23323 break;
23324 case DW_OP_GNU_implicit_pointer:
23325 case DW_OP_GNU_parameter_ref:
23326 if (loc->dw_loc_oprnd1.val_class == dw_val_class_decl_ref)
23328 dw_die_ref ref
23329 = lookup_decl_die (loc->dw_loc_oprnd1.v.val_decl_ref);
23330 if (ref == NULL)
23331 return false;
23332 loc->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
23333 loc->dw_loc_oprnd1.v.val_die_ref.die = ref;
23334 loc->dw_loc_oprnd1.v.val_die_ref.external = 0;
23336 break;
23337 case DW_OP_GNU_const_type:
23338 case DW_OP_GNU_regval_type:
23339 case DW_OP_GNU_deref_type:
23340 case DW_OP_GNU_convert:
23341 case DW_OP_GNU_reinterpret:
23342 while (loc->dw_loc_next
23343 && loc->dw_loc_next->dw_loc_opc == DW_OP_GNU_convert)
23345 dw_die_ref base1, base2;
23346 unsigned enc1, enc2, size1, size2;
23347 if (loc->dw_loc_opc == DW_OP_GNU_regval_type
23348 || loc->dw_loc_opc == DW_OP_GNU_deref_type)
23349 base1 = loc->dw_loc_oprnd2.v.val_die_ref.die;
23350 else if (loc->dw_loc_oprnd1.val_class
23351 == dw_val_class_unsigned_const)
23352 break;
23353 else
23354 base1 = loc->dw_loc_oprnd1.v.val_die_ref.die;
23355 if (loc->dw_loc_next->dw_loc_oprnd1.val_class
23356 == dw_val_class_unsigned_const)
23357 break;
23358 base2 = loc->dw_loc_next->dw_loc_oprnd1.v.val_die_ref.die;
23359 gcc_assert (base1->die_tag == DW_TAG_base_type
23360 && base2->die_tag == DW_TAG_base_type);
23361 enc1 = get_AT_unsigned (base1, DW_AT_encoding);
23362 enc2 = get_AT_unsigned (base2, DW_AT_encoding);
23363 size1 = get_AT_unsigned (base1, DW_AT_byte_size);
23364 size2 = get_AT_unsigned (base2, DW_AT_byte_size);
23365 if (size1 == size2
23366 && (((enc1 == DW_ATE_unsigned || enc1 == DW_ATE_signed)
23367 && (enc2 == DW_ATE_unsigned || enc2 == DW_ATE_signed)
23368 && loc != keep)
23369 || enc1 == enc2))
23371 /* Optimize away next DW_OP_GNU_convert after
23372 adjusting LOC's base type die reference. */
23373 if (loc->dw_loc_opc == DW_OP_GNU_regval_type
23374 || loc->dw_loc_opc == DW_OP_GNU_deref_type)
23375 loc->dw_loc_oprnd2.v.val_die_ref.die = base2;
23376 else
23377 loc->dw_loc_oprnd1.v.val_die_ref.die = base2;
23378 loc->dw_loc_next = loc->dw_loc_next->dw_loc_next;
23379 continue;
23381 /* Don't change integer DW_OP_GNU_convert after e.g. floating
23382 point typed stack entry. */
23383 else if (enc1 != DW_ATE_unsigned && enc1 != DW_ATE_signed)
23384 keep = loc->dw_loc_next;
23385 break;
23387 break;
23388 default:
23389 break;
23391 return true;
23394 /* Helper function of resolve_addr. DIE had DW_AT_location of
23395 DW_OP_addr alone, which referred to DECL in DW_OP_addr's operand
23396 and DW_OP_addr couldn't be resolved. resolve_addr has already
23397 removed the DW_AT_location attribute. This function attempts to
23398 add a new DW_AT_location attribute with DW_OP_GNU_implicit_pointer
23399 to it or DW_AT_const_value attribute, if possible. */
23401 static void
23402 optimize_location_into_implicit_ptr (dw_die_ref die, tree decl)
23404 if (TREE_CODE (decl) != VAR_DECL
23405 || lookup_decl_die (decl) != die
23406 || DECL_EXTERNAL (decl)
23407 || !TREE_STATIC (decl)
23408 || DECL_INITIAL (decl) == NULL_TREE
23409 || DECL_P (DECL_INITIAL (decl))
23410 || get_AT (die, DW_AT_const_value))
23411 return;
23413 tree init = DECL_INITIAL (decl);
23414 HOST_WIDE_INT offset = 0;
23415 /* For variables that have been optimized away and thus
23416 don't have a memory location, see if we can emit
23417 DW_AT_const_value instead. */
23418 if (tree_add_const_value_attribute (die, init))
23419 return;
23420 if (dwarf_strict)
23421 return;
23422 /* If init is ADDR_EXPR or POINTER_PLUS_EXPR of ADDR_EXPR,
23423 and ADDR_EXPR refers to a decl that has DW_AT_location or
23424 DW_AT_const_value (but isn't addressable, otherwise
23425 resolving the original DW_OP_addr wouldn't fail), see if
23426 we can add DW_OP_GNU_implicit_pointer. */
23427 STRIP_NOPS (init);
23428 if (TREE_CODE (init) == POINTER_PLUS_EXPR
23429 && tree_fits_shwi_p (TREE_OPERAND (init, 1)))
23431 offset = tree_to_shwi (TREE_OPERAND (init, 1));
23432 init = TREE_OPERAND (init, 0);
23433 STRIP_NOPS (init);
23435 if (TREE_CODE (init) != ADDR_EXPR)
23436 return;
23437 if ((TREE_CODE (TREE_OPERAND (init, 0)) == STRING_CST
23438 && !TREE_ASM_WRITTEN (TREE_OPERAND (init, 0)))
23439 || (TREE_CODE (TREE_OPERAND (init, 0)) == VAR_DECL
23440 && !DECL_EXTERNAL (TREE_OPERAND (init, 0))
23441 && TREE_OPERAND (init, 0) != decl))
23443 dw_die_ref ref;
23444 dw_loc_descr_ref l;
23446 if (TREE_CODE (TREE_OPERAND (init, 0)) == STRING_CST)
23448 rtx rtl = string_cst_pool_decl (TREE_OPERAND (init, 0));
23449 if (!rtl)
23450 return;
23451 decl = SYMBOL_REF_DECL (rtl);
23453 else
23454 decl = TREE_OPERAND (init, 0);
23455 ref = lookup_decl_die (decl);
23456 if (ref == NULL
23457 || (!get_AT (ref, DW_AT_location)
23458 && !get_AT (ref, DW_AT_const_value)))
23459 return;
23460 l = new_loc_descr (DW_OP_GNU_implicit_pointer, 0, offset);
23461 l->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
23462 l->dw_loc_oprnd1.v.val_die_ref.die = ref;
23463 l->dw_loc_oprnd1.v.val_die_ref.external = 0;
23464 add_AT_loc (die, DW_AT_location, l);
23468 /* Resolve DW_OP_addr and DW_AT_const_value CONST_STRING arguments to
23469 an address in .rodata section if the string literal is emitted there,
23470 or remove the containing location list or replace DW_AT_const_value
23471 with DW_AT_location and empty location expression, if it isn't found
23472 in .rodata. Similarly for SYMBOL_REFs, keep only those that refer
23473 to something that has been emitted in the current CU. */
23475 static void
23476 resolve_addr (dw_die_ref die)
23478 dw_die_ref c;
23479 dw_attr_ref a;
23480 dw_loc_list_ref *curr, *start, loc;
23481 unsigned ix;
23483 FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
23484 switch (AT_class (a))
23486 case dw_val_class_loc_list:
23487 start = curr = AT_loc_list_ptr (a);
23488 loc = *curr;
23489 gcc_assert (loc);
23490 /* The same list can be referenced more than once. See if we have
23491 already recorded the result from a previous pass. */
23492 if (loc->replaced)
23493 *curr = loc->dw_loc_next;
23494 else if (!loc->resolved_addr)
23496 /* As things stand, we do not expect or allow one die to
23497 reference a suffix of another die's location list chain.
23498 References must be identical or completely separate.
23499 There is therefore no need to cache the result of this
23500 pass on any list other than the first; doing so
23501 would lead to unnecessary writes. */
23502 while (*curr)
23504 gcc_assert (!(*curr)->replaced && !(*curr)->resolved_addr);
23505 if (!resolve_addr_in_expr ((*curr)->expr))
23507 dw_loc_list_ref next = (*curr)->dw_loc_next;
23508 dw_loc_descr_ref l = (*curr)->expr;
23510 if (next && (*curr)->ll_symbol)
23512 gcc_assert (!next->ll_symbol);
23513 next->ll_symbol = (*curr)->ll_symbol;
23515 if (dwarf_split_debug_info)
23516 remove_loc_list_addr_table_entries (l);
23517 *curr = next;
23519 else
23521 mark_base_types ((*curr)->expr);
23522 curr = &(*curr)->dw_loc_next;
23525 if (loc == *start)
23526 loc->resolved_addr = 1;
23527 else
23529 loc->replaced = 1;
23530 loc->dw_loc_next = *start;
23533 if (!*start)
23535 remove_AT (die, a->dw_attr);
23536 ix--;
23538 break;
23539 case dw_val_class_loc:
23541 dw_loc_descr_ref l = AT_loc (a);
23542 /* For -gdwarf-2 don't attempt to optimize
23543 DW_AT_data_member_location containing
23544 DW_OP_plus_uconst - older consumers might
23545 rely on it being that op instead of a more complex,
23546 but shorter, location description. */
23547 if ((dwarf_version > 2
23548 || a->dw_attr != DW_AT_data_member_location
23549 || l == NULL
23550 || l->dw_loc_opc != DW_OP_plus_uconst
23551 || l->dw_loc_next != NULL)
23552 && !resolve_addr_in_expr (l))
23554 if (dwarf_split_debug_info)
23555 remove_loc_list_addr_table_entries (l);
23556 if (l != NULL
23557 && l->dw_loc_next == NULL
23558 && l->dw_loc_opc == DW_OP_addr
23559 && GET_CODE (l->dw_loc_oprnd1.v.val_addr) == SYMBOL_REF
23560 && SYMBOL_REF_DECL (l->dw_loc_oprnd1.v.val_addr)
23561 && a->dw_attr == DW_AT_location)
23563 tree decl = SYMBOL_REF_DECL (l->dw_loc_oprnd1.v.val_addr);
23564 remove_AT (die, a->dw_attr);
23565 ix--;
23566 optimize_location_into_implicit_ptr (die, decl);
23567 break;
23569 remove_AT (die, a->dw_attr);
23570 ix--;
23572 else
23573 mark_base_types (l);
23575 break;
23576 case dw_val_class_addr:
23577 if (a->dw_attr == DW_AT_const_value
23578 && !resolve_one_addr (&a->dw_attr_val.v.val_addr))
23580 if (AT_index (a) != NOT_INDEXED)
23581 remove_addr_table_entry (a->dw_attr_val.val_entry);
23582 remove_AT (die, a->dw_attr);
23583 ix--;
23585 if (die->die_tag == DW_TAG_GNU_call_site
23586 && a->dw_attr == DW_AT_abstract_origin)
23588 tree tdecl = SYMBOL_REF_DECL (a->dw_attr_val.v.val_addr);
23589 dw_die_ref tdie = lookup_decl_die (tdecl);
23590 if (tdie == NULL
23591 && DECL_EXTERNAL (tdecl)
23592 && DECL_ABSTRACT_ORIGIN (tdecl) == NULL_TREE)
23594 force_decl_die (tdecl);
23595 tdie = lookup_decl_die (tdecl);
23597 if (tdie)
23599 a->dw_attr_val.val_class = dw_val_class_die_ref;
23600 a->dw_attr_val.v.val_die_ref.die = tdie;
23601 a->dw_attr_val.v.val_die_ref.external = 0;
23603 else
23605 if (AT_index (a) != NOT_INDEXED)
23606 remove_addr_table_entry (a->dw_attr_val.val_entry);
23607 remove_AT (die, a->dw_attr);
23608 ix--;
23611 break;
23612 default:
23613 break;
23616 FOR_EACH_CHILD (die, c, resolve_addr (c));
23619 /* Helper routines for optimize_location_lists.
23620 This pass tries to share identical local lists in .debug_loc
23621 section. */
23623 /* Iteratively hash operands of LOC opcode into HSTATE. */
23625 static void
23626 hash_loc_operands (dw_loc_descr_ref loc, inchash::hash &hstate)
23628 dw_val_ref val1 = &loc->dw_loc_oprnd1;
23629 dw_val_ref val2 = &loc->dw_loc_oprnd2;
23631 switch (loc->dw_loc_opc)
23633 case DW_OP_const4u:
23634 case DW_OP_const8u:
23635 if (loc->dtprel)
23636 goto hash_addr;
23637 /* FALLTHRU */
23638 case DW_OP_const1u:
23639 case DW_OP_const1s:
23640 case DW_OP_const2u:
23641 case DW_OP_const2s:
23642 case DW_OP_const4s:
23643 case DW_OP_const8s:
23644 case DW_OP_constu:
23645 case DW_OP_consts:
23646 case DW_OP_pick:
23647 case DW_OP_plus_uconst:
23648 case DW_OP_breg0:
23649 case DW_OP_breg1:
23650 case DW_OP_breg2:
23651 case DW_OP_breg3:
23652 case DW_OP_breg4:
23653 case DW_OP_breg5:
23654 case DW_OP_breg6:
23655 case DW_OP_breg7:
23656 case DW_OP_breg8:
23657 case DW_OP_breg9:
23658 case DW_OP_breg10:
23659 case DW_OP_breg11:
23660 case DW_OP_breg12:
23661 case DW_OP_breg13:
23662 case DW_OP_breg14:
23663 case DW_OP_breg15:
23664 case DW_OP_breg16:
23665 case DW_OP_breg17:
23666 case DW_OP_breg18:
23667 case DW_OP_breg19:
23668 case DW_OP_breg20:
23669 case DW_OP_breg21:
23670 case DW_OP_breg22:
23671 case DW_OP_breg23:
23672 case DW_OP_breg24:
23673 case DW_OP_breg25:
23674 case DW_OP_breg26:
23675 case DW_OP_breg27:
23676 case DW_OP_breg28:
23677 case DW_OP_breg29:
23678 case DW_OP_breg30:
23679 case DW_OP_breg31:
23680 case DW_OP_regx:
23681 case DW_OP_fbreg:
23682 case DW_OP_piece:
23683 case DW_OP_deref_size:
23684 case DW_OP_xderef_size:
23685 hstate.add_object (val1->v.val_int);
23686 break;
23687 case DW_OP_skip:
23688 case DW_OP_bra:
23690 int offset;
23692 gcc_assert (val1->val_class == dw_val_class_loc);
23693 offset = val1->v.val_loc->dw_loc_addr - (loc->dw_loc_addr + 3);
23694 hstate.add_object (offset);
23696 break;
23697 case DW_OP_implicit_value:
23698 hstate.add_object (val1->v.val_unsigned);
23699 switch (val2->val_class)
23701 case dw_val_class_const:
23702 hstate.add_object (val2->v.val_int);
23703 break;
23704 case dw_val_class_vec:
23706 unsigned int elt_size = val2->v.val_vec.elt_size;
23707 unsigned int len = val2->v.val_vec.length;
23709 hstate.add_int (elt_size);
23710 hstate.add_int (len);
23711 hstate.add (val2->v.val_vec.array, len * elt_size);
23713 break;
23714 case dw_val_class_const_double:
23715 hstate.add_object (val2->v.val_double.low);
23716 hstate.add_object (val2->v.val_double.high);
23717 break;
23718 case dw_val_class_wide_int:
23719 hstate.add_object (*val2->v.val_wide);
23720 break;
23721 case dw_val_class_addr:
23722 inchash::add_rtx (val2->v.val_addr, hstate);
23723 break;
23724 default:
23725 gcc_unreachable ();
23727 break;
23728 case DW_OP_bregx:
23729 case DW_OP_bit_piece:
23730 hstate.add_object (val1->v.val_int);
23731 hstate.add_object (val2->v.val_int);
23732 break;
23733 case DW_OP_addr:
23734 hash_addr:
23735 if (loc->dtprel)
23737 unsigned char dtprel = 0xd1;
23738 hstate.add_object (dtprel);
23740 inchash::add_rtx (val1->v.val_addr, hstate);
23741 break;
23742 case DW_OP_GNU_addr_index:
23743 case DW_OP_GNU_const_index:
23745 if (loc->dtprel)
23747 unsigned char dtprel = 0xd1;
23748 hstate.add_object (dtprel);
23750 inchash::add_rtx (val1->val_entry->addr.rtl, hstate);
23752 break;
23753 case DW_OP_GNU_implicit_pointer:
23754 hstate.add_int (val2->v.val_int);
23755 break;
23756 case DW_OP_GNU_entry_value:
23757 hstate.add_object (val1->v.val_loc);
23758 break;
23759 case DW_OP_GNU_regval_type:
23760 case DW_OP_GNU_deref_type:
23762 unsigned int byte_size
23763 = get_AT_unsigned (val2->v.val_die_ref.die, DW_AT_byte_size);
23764 unsigned int encoding
23765 = get_AT_unsigned (val2->v.val_die_ref.die, DW_AT_encoding);
23766 hstate.add_object (val1->v.val_int);
23767 hstate.add_object (byte_size);
23768 hstate.add_object (encoding);
23770 break;
23771 case DW_OP_GNU_convert:
23772 case DW_OP_GNU_reinterpret:
23773 if (val1->val_class == dw_val_class_unsigned_const)
23775 hstate.add_object (val1->v.val_unsigned);
23776 break;
23778 /* FALLTHRU */
23779 case DW_OP_GNU_const_type:
23781 unsigned int byte_size
23782 = get_AT_unsigned (val1->v.val_die_ref.die, DW_AT_byte_size);
23783 unsigned int encoding
23784 = get_AT_unsigned (val1->v.val_die_ref.die, DW_AT_encoding);
23785 hstate.add_object (byte_size);
23786 hstate.add_object (encoding);
23787 if (loc->dw_loc_opc != DW_OP_GNU_const_type)
23788 break;
23789 hstate.add_object (val2->val_class);
23790 switch (val2->val_class)
23792 case dw_val_class_const:
23793 hstate.add_object (val2->v.val_int);
23794 break;
23795 case dw_val_class_vec:
23797 unsigned int elt_size = val2->v.val_vec.elt_size;
23798 unsigned int len = val2->v.val_vec.length;
23800 hstate.add_object (elt_size);
23801 hstate.add_object (len);
23802 hstate.add (val2->v.val_vec.array, len * elt_size);
23804 break;
23805 case dw_val_class_const_double:
23806 hstate.add_object (val2->v.val_double.low);
23807 hstate.add_object (val2->v.val_double.high);
23808 break;
23809 case dw_val_class_wide_int:
23810 hstate.add_object (*val2->v.val_wide);
23811 break;
23812 default:
23813 gcc_unreachable ();
23816 break;
23818 default:
23819 /* Other codes have no operands. */
23820 break;
23824 /* Iteratively hash the whole DWARF location expression LOC into HSTATE. */
23826 static inline void
23827 hash_locs (dw_loc_descr_ref loc, inchash::hash &hstate)
23829 dw_loc_descr_ref l;
23830 bool sizes_computed = false;
23831 /* Compute sizes, so that DW_OP_skip/DW_OP_bra can be checksummed. */
23832 size_of_locs (loc);
23834 for (l = loc; l != NULL; l = l->dw_loc_next)
23836 enum dwarf_location_atom opc = l->dw_loc_opc;
23837 hstate.add_object (opc);
23838 if ((opc == DW_OP_skip || opc == DW_OP_bra) && !sizes_computed)
23840 size_of_locs (loc);
23841 sizes_computed = true;
23843 hash_loc_operands (l, hstate);
23847 /* Compute hash of the whole location list LIST_HEAD. */
23849 static inline void
23850 hash_loc_list (dw_loc_list_ref list_head)
23852 dw_loc_list_ref curr = list_head;
23853 inchash::hash hstate;
23855 for (curr = list_head; curr != NULL; curr = curr->dw_loc_next)
23857 hstate.add (curr->begin, strlen (curr->begin) + 1);
23858 hstate.add (curr->end, strlen (curr->end) + 1);
23859 if (curr->section)
23860 hstate.add (curr->section, strlen (curr->section) + 1);
23861 hash_locs (curr->expr, hstate);
23863 list_head->hash = hstate.end ();
23866 /* Return true if X and Y opcodes have the same operands. */
23868 static inline bool
23869 compare_loc_operands (dw_loc_descr_ref x, dw_loc_descr_ref y)
23871 dw_val_ref valx1 = &x->dw_loc_oprnd1;
23872 dw_val_ref valx2 = &x->dw_loc_oprnd2;
23873 dw_val_ref valy1 = &y->dw_loc_oprnd1;
23874 dw_val_ref valy2 = &y->dw_loc_oprnd2;
23876 switch (x->dw_loc_opc)
23878 case DW_OP_const4u:
23879 case DW_OP_const8u:
23880 if (x->dtprel)
23881 goto hash_addr;
23882 /* FALLTHRU */
23883 case DW_OP_const1u:
23884 case DW_OP_const1s:
23885 case DW_OP_const2u:
23886 case DW_OP_const2s:
23887 case DW_OP_const4s:
23888 case DW_OP_const8s:
23889 case DW_OP_constu:
23890 case DW_OP_consts:
23891 case DW_OP_pick:
23892 case DW_OP_plus_uconst:
23893 case DW_OP_breg0:
23894 case DW_OP_breg1:
23895 case DW_OP_breg2:
23896 case DW_OP_breg3:
23897 case DW_OP_breg4:
23898 case DW_OP_breg5:
23899 case DW_OP_breg6:
23900 case DW_OP_breg7:
23901 case DW_OP_breg8:
23902 case DW_OP_breg9:
23903 case DW_OP_breg10:
23904 case DW_OP_breg11:
23905 case DW_OP_breg12:
23906 case DW_OP_breg13:
23907 case DW_OP_breg14:
23908 case DW_OP_breg15:
23909 case DW_OP_breg16:
23910 case DW_OP_breg17:
23911 case DW_OP_breg18:
23912 case DW_OP_breg19:
23913 case DW_OP_breg20:
23914 case DW_OP_breg21:
23915 case DW_OP_breg22:
23916 case DW_OP_breg23:
23917 case DW_OP_breg24:
23918 case DW_OP_breg25:
23919 case DW_OP_breg26:
23920 case DW_OP_breg27:
23921 case DW_OP_breg28:
23922 case DW_OP_breg29:
23923 case DW_OP_breg30:
23924 case DW_OP_breg31:
23925 case DW_OP_regx:
23926 case DW_OP_fbreg:
23927 case DW_OP_piece:
23928 case DW_OP_deref_size:
23929 case DW_OP_xderef_size:
23930 return valx1->v.val_int == valy1->v.val_int;
23931 case DW_OP_skip:
23932 case DW_OP_bra:
23933 /* If splitting debug info, the use of DW_OP_GNU_addr_index
23934 can cause irrelevant differences in dw_loc_addr. */
23935 gcc_assert (valx1->val_class == dw_val_class_loc
23936 && valy1->val_class == dw_val_class_loc
23937 && (dwarf_split_debug_info
23938 || x->dw_loc_addr == y->dw_loc_addr));
23939 return valx1->v.val_loc->dw_loc_addr == valy1->v.val_loc->dw_loc_addr;
23940 case DW_OP_implicit_value:
23941 if (valx1->v.val_unsigned != valy1->v.val_unsigned
23942 || valx2->val_class != valy2->val_class)
23943 return false;
23944 switch (valx2->val_class)
23946 case dw_val_class_const:
23947 return valx2->v.val_int == valy2->v.val_int;
23948 case dw_val_class_vec:
23949 return valx2->v.val_vec.elt_size == valy2->v.val_vec.elt_size
23950 && valx2->v.val_vec.length == valy2->v.val_vec.length
23951 && memcmp (valx2->v.val_vec.array, valy2->v.val_vec.array,
23952 valx2->v.val_vec.elt_size
23953 * valx2->v.val_vec.length) == 0;
23954 case dw_val_class_const_double:
23955 return valx2->v.val_double.low == valy2->v.val_double.low
23956 && valx2->v.val_double.high == valy2->v.val_double.high;
23957 case dw_val_class_wide_int:
23958 return *valx2->v.val_wide == *valy2->v.val_wide;
23959 case dw_val_class_addr:
23960 return rtx_equal_p (valx2->v.val_addr, valy2->v.val_addr);
23961 default:
23962 gcc_unreachable ();
23964 case DW_OP_bregx:
23965 case DW_OP_bit_piece:
23966 return valx1->v.val_int == valy1->v.val_int
23967 && valx2->v.val_int == valy2->v.val_int;
23968 case DW_OP_addr:
23969 hash_addr:
23970 return rtx_equal_p (valx1->v.val_addr, valy1->v.val_addr);
23971 case DW_OP_GNU_addr_index:
23972 case DW_OP_GNU_const_index:
23974 rtx ax1 = valx1->val_entry->addr.rtl;
23975 rtx ay1 = valy1->val_entry->addr.rtl;
23976 return rtx_equal_p (ax1, ay1);
23978 case DW_OP_GNU_implicit_pointer:
23979 return valx1->val_class == dw_val_class_die_ref
23980 && valx1->val_class == valy1->val_class
23981 && valx1->v.val_die_ref.die == valy1->v.val_die_ref.die
23982 && valx2->v.val_int == valy2->v.val_int;
23983 case DW_OP_GNU_entry_value:
23984 return compare_loc_operands (valx1->v.val_loc, valy1->v.val_loc);
23985 case DW_OP_GNU_const_type:
23986 if (valx1->v.val_die_ref.die != valy1->v.val_die_ref.die
23987 || valx2->val_class != valy2->val_class)
23988 return false;
23989 switch (valx2->val_class)
23991 case dw_val_class_const:
23992 return valx2->v.val_int == valy2->v.val_int;
23993 case dw_val_class_vec:
23994 return valx2->v.val_vec.elt_size == valy2->v.val_vec.elt_size
23995 && valx2->v.val_vec.length == valy2->v.val_vec.length
23996 && memcmp (valx2->v.val_vec.array, valy2->v.val_vec.array,
23997 valx2->v.val_vec.elt_size
23998 * valx2->v.val_vec.length) == 0;
23999 case dw_val_class_const_double:
24000 return valx2->v.val_double.low == valy2->v.val_double.low
24001 && valx2->v.val_double.high == valy2->v.val_double.high;
24002 case dw_val_class_wide_int:
24003 return *valx2->v.val_wide == *valy2->v.val_wide;
24004 default:
24005 gcc_unreachable ();
24007 case DW_OP_GNU_regval_type:
24008 case DW_OP_GNU_deref_type:
24009 return valx1->v.val_int == valy1->v.val_int
24010 && valx2->v.val_die_ref.die == valy2->v.val_die_ref.die;
24011 case DW_OP_GNU_convert:
24012 case DW_OP_GNU_reinterpret:
24013 if (valx1->val_class != valy1->val_class)
24014 return false;
24015 if (valx1->val_class == dw_val_class_unsigned_const)
24016 return valx1->v.val_unsigned == valy1->v.val_unsigned;
24017 return valx1->v.val_die_ref.die == valy1->v.val_die_ref.die;
24018 case DW_OP_GNU_parameter_ref:
24019 return valx1->val_class == dw_val_class_die_ref
24020 && valx1->val_class == valy1->val_class
24021 && valx1->v.val_die_ref.die == valy1->v.val_die_ref.die;
24022 default:
24023 /* Other codes have no operands. */
24024 return true;
24028 /* Return true if DWARF location expressions X and Y are the same. */
24030 static inline bool
24031 compare_locs (dw_loc_descr_ref x, dw_loc_descr_ref y)
24033 for (; x != NULL && y != NULL; x = x->dw_loc_next, y = y->dw_loc_next)
24034 if (x->dw_loc_opc != y->dw_loc_opc
24035 || x->dtprel != y->dtprel
24036 || !compare_loc_operands (x, y))
24037 break;
24038 return x == NULL && y == NULL;
24041 /* Hashtable helpers. */
24043 struct loc_list_hasher : typed_noop_remove <dw_loc_list_struct>
24045 typedef dw_loc_list_struct value_type;
24046 typedef dw_loc_list_struct compare_type;
24047 static inline hashval_t hash (const value_type *);
24048 static inline bool equal (const value_type *, const compare_type *);
24051 /* Return precomputed hash of location list X. */
24053 inline hashval_t
24054 loc_list_hasher::hash (const value_type *x)
24056 return x->hash;
24059 /* Return true if location lists A and B are the same. */
24061 inline bool
24062 loc_list_hasher::equal (const value_type *a, const compare_type *b)
24064 if (a == b)
24065 return 1;
24066 if (a->hash != b->hash)
24067 return 0;
24068 for (; a != NULL && b != NULL; a = a->dw_loc_next, b = b->dw_loc_next)
24069 if (strcmp (a->begin, b->begin) != 0
24070 || strcmp (a->end, b->end) != 0
24071 || (a->section == NULL) != (b->section == NULL)
24072 || (a->section && strcmp (a->section, b->section) != 0)
24073 || !compare_locs (a->expr, b->expr))
24074 break;
24075 return a == NULL && b == NULL;
24078 typedef hash_table<loc_list_hasher> loc_list_hash_type;
24081 /* Recursively optimize location lists referenced from DIE
24082 children and share them whenever possible. */
24084 static void
24085 optimize_location_lists_1 (dw_die_ref die, loc_list_hash_type *htab)
24087 dw_die_ref c;
24088 dw_attr_ref a;
24089 unsigned ix;
24090 dw_loc_list_struct **slot;
24092 FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
24093 if (AT_class (a) == dw_val_class_loc_list)
24095 dw_loc_list_ref list = AT_loc_list (a);
24096 /* TODO: perform some optimizations here, before hashing
24097 it and storing into the hash table. */
24098 hash_loc_list (list);
24099 slot = htab->find_slot_with_hash (list, list->hash, INSERT);
24100 if (*slot == NULL)
24101 *slot = list;
24102 else
24103 a->dw_attr_val.v.val_loc_list = *slot;
24106 FOR_EACH_CHILD (die, c, optimize_location_lists_1 (c, htab));
24110 /* Recursively assign each location list a unique index into the debug_addr
24111 section. */
24113 static void
24114 index_location_lists (dw_die_ref die)
24116 dw_die_ref c;
24117 dw_attr_ref a;
24118 unsigned ix;
24120 FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
24121 if (AT_class (a) == dw_val_class_loc_list)
24123 dw_loc_list_ref list = AT_loc_list (a);
24124 dw_loc_list_ref curr;
24125 for (curr = list; curr != NULL; curr = curr->dw_loc_next)
24127 /* Don't index an entry that has already been indexed
24128 or won't be output. */
24129 if (curr->begin_entry != NULL
24130 || (strcmp (curr->begin, curr->end) == 0 && !curr->force))
24131 continue;
24133 curr->begin_entry
24134 = add_addr_table_entry (xstrdup (curr->begin),
24135 ate_kind_label);
24139 FOR_EACH_CHILD (die, c, index_location_lists (c));
24142 /* Optimize location lists referenced from DIE
24143 children and share them whenever possible. */
24145 static void
24146 optimize_location_lists (dw_die_ref die)
24148 loc_list_hash_type htab (500);
24149 optimize_location_lists_1 (die, &htab);
24152 /* Output stuff that dwarf requires at the end of every file,
24153 and generate the DWARF-2 debugging info. */
24155 static void
24156 dwarf2out_finish (const char *filename)
24158 limbo_die_node *node, *next_node;
24159 comdat_type_node *ctnode;
24160 unsigned int i;
24161 dw_die_ref main_comp_unit_die;
24163 /* PCH might result in DW_AT_producer string being restored from the
24164 header compilation, so always fill it with empty string initially
24165 and overwrite only here. */
24166 dw_attr_ref producer = get_AT (comp_unit_die (), DW_AT_producer);
24167 producer_string = gen_producer_string ();
24168 producer->dw_attr_val.v.val_str->refcount--;
24169 producer->dw_attr_val.v.val_str = find_AT_string (producer_string);
24171 gen_scheduled_generic_parms_dies ();
24172 gen_remaining_tmpl_value_param_die_attribute ();
24174 /* Add the name for the main input file now. We delayed this from
24175 dwarf2out_init to avoid complications with PCH. */
24176 add_name_attribute (comp_unit_die (), remap_debug_filename (filename));
24177 if (!IS_ABSOLUTE_PATH (filename) || targetm.force_at_comp_dir)
24178 add_comp_dir_attribute (comp_unit_die ());
24179 else if (get_AT (comp_unit_die (), DW_AT_comp_dir) == NULL)
24181 bool p = false;
24182 htab_traverse (file_table, file_table_relative_p, &p);
24183 if (p)
24184 add_comp_dir_attribute (comp_unit_die ());
24187 if (deferred_locations_list)
24188 for (i = 0; i < deferred_locations_list->length (); i++)
24190 add_location_or_const_value_attribute (
24191 (*deferred_locations_list)[i].die,
24192 (*deferred_locations_list)[i].variable,
24193 false,
24194 DW_AT_location);
24197 /* Traverse the limbo die list, and add parent/child links. The only
24198 dies without parents that should be here are concrete instances of
24199 inline functions, and the comp_unit_die. We can ignore the comp_unit_die.
24200 For concrete instances, we can get the parent die from the abstract
24201 instance. */
24202 for (node = limbo_die_list; node; node = next_node)
24204 dw_die_ref die = node->die;
24205 next_node = node->next;
24207 if (die->die_parent == NULL)
24209 dw_die_ref origin = get_AT_ref (die, DW_AT_abstract_origin);
24211 if (origin && origin->die_parent)
24212 add_child_die (origin->die_parent, die);
24213 else if (is_cu_die (die))
24215 else if (seen_error ())
24216 /* It's OK to be confused by errors in the input. */
24217 add_child_die (comp_unit_die (), die);
24218 else
24220 /* In certain situations, the lexical block containing a
24221 nested function can be optimized away, which results
24222 in the nested function die being orphaned. Likewise
24223 with the return type of that nested function. Force
24224 this to be a child of the containing function.
24226 It may happen that even the containing function got fully
24227 inlined and optimized out. In that case we are lost and
24228 assign the empty child. This should not be big issue as
24229 the function is likely unreachable too. */
24230 gcc_assert (node->created_for);
24232 if (DECL_P (node->created_for))
24233 origin = get_context_die (DECL_CONTEXT (node->created_for));
24234 else if (TYPE_P (node->created_for))
24235 origin = scope_die_for (node->created_for, comp_unit_die ());
24236 else
24237 origin = comp_unit_die ();
24239 add_child_die (origin, die);
24244 limbo_die_list = NULL;
24246 #if ENABLE_ASSERT_CHECKING
24248 dw_die_ref die = comp_unit_die (), c;
24249 FOR_EACH_CHILD (die, c, gcc_assert (! c->die_mark));
24251 #endif
24252 resolve_addr (comp_unit_die ());
24253 move_marked_base_types ();
24255 for (node = deferred_asm_name; node; node = node->next)
24257 tree decl = node->created_for;
24258 /* When generating LTO bytecode we can not generate new assembler
24259 names at this point and all important decls got theirs via
24260 free-lang-data. */
24261 if ((!flag_generate_lto || DECL_ASSEMBLER_NAME_SET_P (decl))
24262 && DECL_ASSEMBLER_NAME (decl) != DECL_NAME (decl))
24264 add_linkage_attr (node->die, decl);
24265 move_linkage_attr (node->die);
24269 deferred_asm_name = NULL;
24271 /* Walk through the list of incomplete types again, trying once more to
24272 emit full debugging info for them. */
24273 retry_incomplete_types ();
24275 if (flag_eliminate_unused_debug_types)
24276 prune_unused_types ();
24278 /* Generate separate COMDAT sections for type DIEs. */
24279 if (use_debug_types)
24281 break_out_comdat_types (comp_unit_die ());
24283 /* Each new type_unit DIE was added to the limbo die list when created.
24284 Since these have all been added to comdat_type_list, clear the
24285 limbo die list. */
24286 limbo_die_list = NULL;
24288 /* For each new comdat type unit, copy declarations for incomplete
24289 types to make the new unit self-contained (i.e., no direct
24290 references to the main compile unit). */
24291 for (ctnode = comdat_type_list; ctnode != NULL; ctnode = ctnode->next)
24292 copy_decls_for_unworthy_types (ctnode->root_die);
24293 copy_decls_for_unworthy_types (comp_unit_die ());
24295 /* In the process of copying declarations from one unit to another,
24296 we may have left some declarations behind that are no longer
24297 referenced. Prune them. */
24298 prune_unused_types ();
24301 /* Generate separate CUs for each of the include files we've seen.
24302 They will go into limbo_die_list. */
24303 if (flag_eliminate_dwarf2_dups)
24304 break_out_includes (comp_unit_die ());
24306 /* Traverse the DIE's and add add sibling attributes to those DIE's
24307 that have children. */
24308 add_sibling_attributes (comp_unit_die ());
24309 for (node = limbo_die_list; node; node = node->next)
24310 add_sibling_attributes (node->die);
24311 for (ctnode = comdat_type_list; ctnode != NULL; ctnode = ctnode->next)
24312 add_sibling_attributes (ctnode->root_die);
24314 /* When splitting DWARF info, we put some attributes in the
24315 skeleton compile_unit DIE that remains in the .o, while
24316 most attributes go in the DWO compile_unit_die. */
24317 if (dwarf_split_debug_info)
24318 main_comp_unit_die = gen_compile_unit_die (NULL);
24319 else
24320 main_comp_unit_die = comp_unit_die ();
24322 /* Output a terminator label for the .text section. */
24323 switch_to_section (text_section);
24324 targetm.asm_out.internal_label (asm_out_file, TEXT_END_LABEL, 0);
24325 if (cold_text_section)
24327 switch_to_section (cold_text_section);
24328 targetm.asm_out.internal_label (asm_out_file, COLD_END_LABEL, 0);
24331 /* We can only use the low/high_pc attributes if all of the code was
24332 in .text. */
24333 if (!have_multiple_function_sections
24334 || (dwarf_version < 3 && dwarf_strict))
24336 /* Don't add if the CU has no associated code. */
24337 if (text_section_used)
24338 add_AT_low_high_pc (main_comp_unit_die, text_section_label,
24339 text_end_label, true);
24341 else
24343 unsigned fde_idx;
24344 dw_fde_ref fde;
24345 bool range_list_added = false;
24347 if (text_section_used)
24348 add_ranges_by_labels (main_comp_unit_die, text_section_label,
24349 text_end_label, &range_list_added, true);
24350 if (cold_text_section_used)
24351 add_ranges_by_labels (main_comp_unit_die, cold_text_section_label,
24352 cold_end_label, &range_list_added, true);
24354 FOR_EACH_VEC_ELT (*fde_vec, fde_idx, fde)
24356 if (DECL_IGNORED_P (fde->decl))
24357 continue;
24358 if (!fde->in_std_section)
24359 add_ranges_by_labels (main_comp_unit_die, fde->dw_fde_begin,
24360 fde->dw_fde_end, &range_list_added,
24361 true);
24362 if (fde->dw_fde_second_begin && !fde->second_in_std_section)
24363 add_ranges_by_labels (main_comp_unit_die, fde->dw_fde_second_begin,
24364 fde->dw_fde_second_end, &range_list_added,
24365 true);
24368 if (range_list_added)
24370 /* We need to give .debug_loc and .debug_ranges an appropriate
24371 "base address". Use zero so that these addresses become
24372 absolute. Historically, we've emitted the unexpected
24373 DW_AT_entry_pc instead of DW_AT_low_pc for this purpose.
24374 Emit both to give time for other tools to adapt. */
24375 add_AT_addr (main_comp_unit_die, DW_AT_low_pc, const0_rtx, true);
24376 if (! dwarf_strict && dwarf_version < 4)
24377 add_AT_addr (main_comp_unit_die, DW_AT_entry_pc, const0_rtx, true);
24379 add_ranges (NULL);
24383 if (debug_info_level >= DINFO_LEVEL_TERSE)
24384 add_AT_lineptr (main_comp_unit_die, DW_AT_stmt_list,
24385 debug_line_section_label);
24387 if (have_macinfo)
24388 add_AT_macptr (comp_unit_die (),
24389 dwarf_strict ? DW_AT_macro_info : DW_AT_GNU_macros,
24390 macinfo_section_label);
24392 if (dwarf_split_debug_info)
24394 /* optimize_location_lists calculates the size of the lists,
24395 so index them first, and assign indices to the entries.
24396 Although optimize_location_lists will remove entries from
24397 the table, it only does so for duplicates, and therefore
24398 only reduces ref_counts to 1. */
24399 index_location_lists (comp_unit_die ());
24401 if (addr_index_table != NULL)
24403 unsigned int index = 0;
24404 htab_traverse_noresize (addr_index_table,
24405 index_addr_table_entry, &index);
24409 if (have_location_lists)
24410 optimize_location_lists (comp_unit_die ());
24412 save_macinfo_strings ();
24414 if (dwarf_split_debug_info)
24416 unsigned int index = 0;
24418 /* Add attributes common to skeleton compile_units and
24419 type_units. Because these attributes include strings, it
24420 must be done before freezing the string table. Top-level
24421 skeleton die attrs are added when the skeleton type unit is
24422 created, so ensure it is created by this point. */
24423 add_top_level_skeleton_die_attrs (main_comp_unit_die);
24424 htab_traverse_noresize (debug_str_hash, index_string, &index);
24427 /* Output all of the compilation units. We put the main one last so that
24428 the offsets are available to output_pubnames. */
24429 for (node = limbo_die_list; node; node = node->next)
24430 output_comp_unit (node->die, 0);
24432 hash_table<comdat_type_hasher> comdat_type_table (100);
24433 for (ctnode = comdat_type_list; ctnode != NULL; ctnode = ctnode->next)
24435 comdat_type_node **slot = comdat_type_table.find_slot (ctnode, INSERT);
24437 /* Don't output duplicate types. */
24438 if (*slot != HTAB_EMPTY_ENTRY)
24439 continue;
24441 /* Add a pointer to the line table for the main compilation unit
24442 so that the debugger can make sense of DW_AT_decl_file
24443 attributes. */
24444 if (debug_info_level >= DINFO_LEVEL_TERSE)
24445 add_AT_lineptr (ctnode->root_die, DW_AT_stmt_list,
24446 (!dwarf_split_debug_info
24447 ? debug_line_section_label
24448 : debug_skeleton_line_section_label));
24450 output_comdat_type_unit (ctnode);
24451 *slot = ctnode;
24454 /* The AT_pubnames attribute needs to go in all skeleton dies, including
24455 both the main_cu and all skeleton TUs. Making this call unconditional
24456 would end up either adding a second copy of the AT_pubnames attribute, or
24457 requiring a special case in add_top_level_skeleton_die_attrs. */
24458 if (!dwarf_split_debug_info)
24459 add_AT_pubnames (comp_unit_die ());
24461 if (dwarf_split_debug_info)
24463 int mark;
24464 unsigned char checksum[16];
24465 struct md5_ctx ctx;
24467 /* Compute a checksum of the comp_unit to use as the dwo_id. */
24468 md5_init_ctx (&ctx);
24469 mark = 0;
24470 die_checksum (comp_unit_die (), &ctx, &mark);
24471 unmark_all_dies (comp_unit_die ());
24472 md5_finish_ctx (&ctx, checksum);
24474 /* Use the first 8 bytes of the checksum as the dwo_id,
24475 and add it to both comp-unit DIEs. */
24476 add_AT_data8 (main_comp_unit_die, DW_AT_GNU_dwo_id, checksum);
24477 add_AT_data8 (comp_unit_die (), DW_AT_GNU_dwo_id, checksum);
24479 /* Add the base offset of the ranges table to the skeleton
24480 comp-unit DIE. */
24481 if (ranges_table_in_use)
24482 add_AT_lineptr (main_comp_unit_die, DW_AT_GNU_ranges_base,
24483 ranges_section_label);
24485 switch_to_section (debug_addr_section);
24486 ASM_OUTPUT_LABEL (asm_out_file, debug_addr_section_label);
24487 output_addr_table ();
24490 /* Output the main compilation unit if non-empty or if .debug_macinfo
24491 or .debug_macro will be emitted. */
24492 output_comp_unit (comp_unit_die (), have_macinfo);
24494 if (dwarf_split_debug_info && info_section_emitted)
24495 output_skeleton_debug_sections (main_comp_unit_die);
24497 /* Output the abbreviation table. */
24498 if (abbrev_die_table_in_use != 1)
24500 switch_to_section (debug_abbrev_section);
24501 ASM_OUTPUT_LABEL (asm_out_file, abbrev_section_label);
24502 output_abbrev_section ();
24505 /* Output location list section if necessary. */
24506 if (have_location_lists)
24508 /* Output the location lists info. */
24509 switch_to_section (debug_loc_section);
24510 ASM_OUTPUT_LABEL (asm_out_file, loc_section_label);
24511 output_location_lists (comp_unit_die ());
24514 output_pubtables ();
24516 /* Output the address range information if a CU (.debug_info section)
24517 was emitted. We output an empty table even if we had no functions
24518 to put in it. This because the consumer has no way to tell the
24519 difference between an empty table that we omitted and failure to
24520 generate a table that would have contained data. */
24521 if (info_section_emitted)
24523 unsigned long aranges_length = size_of_aranges ();
24525 switch_to_section (debug_aranges_section);
24526 output_aranges (aranges_length);
24529 /* Output ranges section if necessary. */
24530 if (ranges_table_in_use)
24532 switch_to_section (debug_ranges_section);
24533 ASM_OUTPUT_LABEL (asm_out_file, ranges_section_label);
24534 output_ranges ();
24537 /* Have to end the macro section. */
24538 if (have_macinfo)
24540 switch_to_section (debug_macinfo_section);
24541 ASM_OUTPUT_LABEL (asm_out_file, macinfo_section_label);
24542 output_macinfo ();
24543 dw2_asm_output_data (1, 0, "End compilation unit");
24546 /* Output the source line correspondence table. We must do this
24547 even if there is no line information. Otherwise, on an empty
24548 translation unit, we will generate a present, but empty,
24549 .debug_info section. IRIX 6.5 `nm' will then complain when
24550 examining the file. This is done late so that any filenames
24551 used by the debug_info section are marked as 'used'. */
24552 switch_to_section (debug_line_section);
24553 ASM_OUTPUT_LABEL (asm_out_file, debug_line_section_label);
24554 if (! DWARF2_ASM_LINE_DEBUG_INFO)
24555 output_line_info (false);
24557 if (dwarf_split_debug_info && info_section_emitted)
24559 switch_to_section (debug_skeleton_line_section);
24560 ASM_OUTPUT_LABEL (asm_out_file, debug_skeleton_line_section_label);
24561 output_line_info (true);
24564 /* If we emitted any indirect strings, output the string table too. */
24565 if (debug_str_hash || skeleton_debug_str_hash)
24566 output_indirect_strings ();
24569 #include "gt-dwarf2out.h"