* prerequisites.xml: Refer to GCC (instead of gcc) and GNU/Linux.
[official-gcc.git] / gcc / dwarf2out.c
blob8d5a9f0fc813fe6cc2b9e218059718fa4c557e3f
1 /* Output Dwarf2 format symbol table information from GCC.
2 Copyright (C) 1992, 1993, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
3 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
4 Free Software Foundation, Inc.
5 Contributed by Gary Funck (gary@intrepid.com).
6 Derived from DWARF 1 implementation of Ron Guilmette (rfg@monkeys.com).
7 Extensively modified by Jason Merrill (jason@cygnus.com).
9 This file is part of GCC.
11 GCC is free software; you can redistribute it and/or modify it under
12 the terms of the GNU General Public License as published by the Free
13 Software Foundation; either version 3, or (at your option) any later
14 version.
16 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
17 WARRANTY; without even the implied warranty of MERCHANTABILITY or
18 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
19 for more details.
21 You should have received a copy of the GNU General Public License
22 along with GCC; see the file COPYING3. If not see
23 <http://www.gnu.org/licenses/>. */
25 /* TODO: Emit .debug_line header even when there are no functions, since
26 the file numbers are used by .debug_info. Alternately, leave
27 out locations for types and decls.
28 Avoid talking about ctors and op= for PODs.
29 Factor out common prologue sequences into multiple CIEs. */
31 /* The first part of this file deals with the DWARF 2 frame unwind
32 information, which is also used by the GCC efficient exception handling
33 mechanism. The second part, controlled only by an #ifdef
34 DWARF2_DEBUGGING_INFO, deals with the other DWARF 2 debugging
35 information. */
37 /* DWARF2 Abbreviation Glossary:
39 CFA = Canonical Frame Address
40 a fixed address on the stack which identifies a call frame.
41 We define it to be the value of SP just before the call insn.
42 The CFA register and offset, which may change during the course
43 of the function, are used to calculate its value at runtime.
45 CFI = Call Frame Instruction
46 an instruction for the DWARF2 abstract machine
48 CIE = Common Information Entry
49 information describing information common to one or more FDEs
51 DIE = Debugging Information Entry
53 FDE = Frame Description Entry
54 information describing the stack call frame, in particular,
55 how to restore registers
57 DW_CFA_... = DWARF2 CFA call frame instruction
58 DW_TAG_... = DWARF2 DIE tag */
60 #include "config.h"
61 #include "system.h"
62 #include "coretypes.h"
63 #include "tm.h"
64 #include "tree.h"
65 #include "version.h"
66 #include "flags.h"
67 #include "rtl.h"
68 #include "hard-reg-set.h"
69 #include "regs.h"
70 #include "insn-config.h"
71 #include "reload.h"
72 #include "function.h"
73 #include "output.h"
74 #include "expr.h"
75 #include "libfuncs.h"
76 #include "except.h"
77 #include "dwarf2.h"
78 #include "dwarf2out.h"
79 #include "dwarf2asm.h"
80 #include "toplev.h"
81 #include "ggc.h"
82 #include "md5.h"
83 #include "tm_p.h"
84 #include "diagnostic.h"
85 #include "tree-pretty-print.h"
86 #include "debug.h"
87 #include "target.h"
88 #include "common/common-target.h"
89 #include "langhooks.h"
90 #include "hashtab.h"
91 #include "cgraph.h"
92 #include "input.h"
93 #include "gimple.h"
94 #include "tree-pass.h"
95 #include "tree-flow.h"
96 #include "cfglayout.h"
97 #include "opts.h"
99 static void dwarf2out_source_line (unsigned int, const char *, int, bool);
100 static rtx last_var_location_insn;
102 #ifdef VMS_DEBUGGING_INFO
103 int vms_file_stats_name (const char *, long long *, long *, char *, int *);
105 /* Define this macro to be a nonzero value if the directory specifications
106 which are output in the debug info should end with a separator. */
107 #define DWARF2_DIR_SHOULD_END_WITH_SEPARATOR 1
108 /* Define this macro to evaluate to a nonzero value if GCC should refrain
109 from generating indirect strings in DWARF2 debug information, for instance
110 if your target is stuck with an old version of GDB that is unable to
111 process them properly or uses VMS Debug. */
112 #define DWARF2_INDIRECT_STRING_SUPPORT_MISSING_ON_TARGET 1
113 #else
114 #define DWARF2_DIR_SHOULD_END_WITH_SEPARATOR 0
115 #define DWARF2_INDIRECT_STRING_SUPPORT_MISSING_ON_TARGET 0
116 #endif
118 /* ??? Poison these here until it can be done generically. They've been
119 totally replaced in this file; make sure it stays that way. */
120 #undef DWARF2_UNWIND_INFO
121 #undef DWARF2_FRAME_INFO
122 #if (GCC_VERSION >= 3000)
123 #pragma GCC poison DWARF2_UNWIND_INFO DWARF2_FRAME_INFO
124 #endif
126 /* The size of the target's pointer type. */
127 #ifndef PTR_SIZE
128 #define PTR_SIZE (POINTER_SIZE / BITS_PER_UNIT)
129 #endif
131 /* Array of RTXes referenced by the debugging information, which therefore
132 must be kept around forever. */
133 static GTY(()) VEC(rtx,gc) *used_rtx_array;
135 /* A pointer to the base of a list of incomplete types which might be
136 completed at some later time. incomplete_types_list needs to be a
137 VEC(tree,gc) because we want to tell the garbage collector about
138 it. */
139 static GTY(()) VEC(tree,gc) *incomplete_types;
141 /* A pointer to the base of a table of references to declaration
142 scopes. This table is a display which tracks the nesting
143 of declaration scopes at the current scope and containing
144 scopes. This table is used to find the proper place to
145 define type declaration DIE's. */
146 static GTY(()) VEC(tree,gc) *decl_scope_table;
148 /* Pointers to various DWARF2 sections. */
149 static GTY(()) section *debug_info_section;
150 static GTY(()) section *debug_abbrev_section;
151 static GTY(()) section *debug_aranges_section;
152 static GTY(()) section *debug_macinfo_section;
153 static GTY(()) section *debug_line_section;
154 static GTY(()) section *debug_loc_section;
155 static GTY(()) section *debug_pubnames_section;
156 static GTY(()) section *debug_pubtypes_section;
157 static GTY(()) section *debug_str_section;
158 static GTY(()) section *debug_ranges_section;
159 static GTY(()) section *debug_frame_section;
161 /* Maximum size (in bytes) of an artificially generated label. */
162 #define MAX_ARTIFICIAL_LABEL_BYTES 30
164 /* According to the (draft) DWARF 3 specification, the initial length
165 should either be 4 or 12 bytes. When it's 12 bytes, the first 4
166 bytes are 0xffffffff, followed by the length stored in the next 8
167 bytes.
169 However, the SGI/MIPS ABI uses an initial length which is equal to
170 DWARF_OFFSET_SIZE. It is defined (elsewhere) accordingly. */
172 #ifndef DWARF_INITIAL_LENGTH_SIZE
173 #define DWARF_INITIAL_LENGTH_SIZE (DWARF_OFFSET_SIZE == 4 ? 4 : 12)
174 #endif
176 /* Round SIZE up to the nearest BOUNDARY. */
177 #define DWARF_ROUND(SIZE,BOUNDARY) \
178 ((((SIZE) + (BOUNDARY) - 1) / (BOUNDARY)) * (BOUNDARY))
180 /* CIE identifier. */
181 #if HOST_BITS_PER_WIDE_INT >= 64
182 #define DWARF_CIE_ID \
183 (unsigned HOST_WIDE_INT) (DWARF_OFFSET_SIZE == 4 ? DW_CIE_ID : DW64_CIE_ID)
184 #else
185 #define DWARF_CIE_ID DW_CIE_ID
186 #endif
188 DEF_VEC_P (dw_fde_ref);
189 DEF_VEC_ALLOC_P (dw_fde_ref, gc);
191 /* A vector for a table that contains frame description
192 information for each routine. */
193 static GTY(()) VEC(dw_fde_ref, gc) *fde_vec;
195 struct GTY(()) indirect_string_node {
196 const char *str;
197 unsigned int refcount;
198 enum dwarf_form form;
199 char *label;
202 static GTY ((param_is (struct indirect_string_node))) htab_t debug_str_hash;
204 static GTY(()) int dw2_string_counter;
206 /* True if the compilation unit places functions in more than one section. */
207 static GTY(()) bool have_multiple_function_sections = false;
209 /* Whether the default text and cold text sections have been used at all. */
211 static GTY(()) bool text_section_used = false;
212 static GTY(()) bool cold_text_section_used = false;
214 /* The default cold text section. */
215 static GTY(()) section *cold_text_section;
217 /* Forward declarations for functions defined in this file. */
219 static char *stripattributes (const char *);
220 static void output_call_frame_info (int);
221 static void dwarf2out_note_section_used (void);
223 /* Personality decl of current unit. Used only when assembler does not support
224 personality CFI. */
225 static GTY(()) rtx current_unit_personality;
227 /* Data and reference forms for relocatable data. */
228 #define DW_FORM_data (DWARF_OFFSET_SIZE == 8 ? DW_FORM_data8 : DW_FORM_data4)
229 #define DW_FORM_ref (DWARF_OFFSET_SIZE == 8 ? DW_FORM_ref8 : DW_FORM_ref4)
231 #ifndef DEBUG_FRAME_SECTION
232 #define DEBUG_FRAME_SECTION ".debug_frame"
233 #endif
235 #ifndef FUNC_BEGIN_LABEL
236 #define FUNC_BEGIN_LABEL "LFB"
237 #endif
239 #ifndef FUNC_END_LABEL
240 #define FUNC_END_LABEL "LFE"
241 #endif
243 #ifndef PROLOGUE_END_LABEL
244 #define PROLOGUE_END_LABEL "LPE"
245 #endif
247 #ifndef EPILOGUE_BEGIN_LABEL
248 #define EPILOGUE_BEGIN_LABEL "LEB"
249 #endif
251 #ifndef FRAME_BEGIN_LABEL
252 #define FRAME_BEGIN_LABEL "Lframe"
253 #endif
254 #define CIE_AFTER_SIZE_LABEL "LSCIE"
255 #define CIE_END_LABEL "LECIE"
256 #define FDE_LABEL "LSFDE"
257 #define FDE_AFTER_SIZE_LABEL "LASFDE"
258 #define FDE_END_LABEL "LEFDE"
259 #define LINE_NUMBER_BEGIN_LABEL "LSLT"
260 #define LINE_NUMBER_END_LABEL "LELT"
261 #define LN_PROLOG_AS_LABEL "LASLTP"
262 #define LN_PROLOG_END_LABEL "LELTP"
263 #define DIE_LABEL_PREFIX "DW"
265 /* Match the base name of a file to the base name of a compilation unit. */
267 static int
268 matches_main_base (const char *path)
270 /* Cache the last query. */
271 static const char *last_path = NULL;
272 static int last_match = 0;
273 if (path != last_path)
275 const char *base;
276 int length = base_of_path (path, &base);
277 last_path = path;
278 last_match = (length == main_input_baselength
279 && memcmp (base, main_input_basename, length) == 0);
281 return last_match;
284 #ifdef DEBUG_DEBUG_STRUCT
286 static int
287 dump_struct_debug (tree type, enum debug_info_usage usage,
288 enum debug_struct_file criterion, int generic,
289 int matches, int result)
291 /* Find the type name. */
292 tree type_decl = TYPE_STUB_DECL (type);
293 tree t = type_decl;
294 const char *name = 0;
295 if (TREE_CODE (t) == TYPE_DECL)
296 t = DECL_NAME (t);
297 if (t)
298 name = IDENTIFIER_POINTER (t);
300 fprintf (stderr, " struct %d %s %s %s %s %d %p %s\n",
301 criterion,
302 DECL_IN_SYSTEM_HEADER (type_decl) ? "sys" : "usr",
303 matches ? "bas" : "hdr",
304 generic ? "gen" : "ord",
305 usage == DINFO_USAGE_DFN ? ";" :
306 usage == DINFO_USAGE_DIR_USE ? "." : "*",
307 result,
308 (void*) type_decl, name);
309 return result;
311 #define DUMP_GSTRUCT(type, usage, criterion, generic, matches, result) \
312 dump_struct_debug (type, usage, criterion, generic, matches, result)
314 #else
316 #define DUMP_GSTRUCT(type, usage, criterion, generic, matches, result) \
317 (result)
319 #endif
321 static bool
322 should_emit_struct_debug (tree type, enum debug_info_usage usage)
324 enum debug_struct_file criterion;
325 tree type_decl;
326 bool generic = lang_hooks.types.generic_p (type);
328 if (generic)
329 criterion = debug_struct_generic[usage];
330 else
331 criterion = debug_struct_ordinary[usage];
333 if (criterion == DINFO_STRUCT_FILE_NONE)
334 return DUMP_GSTRUCT (type, usage, criterion, generic, false, false);
335 if (criterion == DINFO_STRUCT_FILE_ANY)
336 return DUMP_GSTRUCT (type, usage, criterion, generic, false, true);
338 type_decl = TYPE_STUB_DECL (TYPE_MAIN_VARIANT (type));
340 if (criterion == DINFO_STRUCT_FILE_SYS && DECL_IN_SYSTEM_HEADER (type_decl))
341 return DUMP_GSTRUCT (type, usage, criterion, generic, false, true);
343 if (matches_main_base (DECL_SOURCE_FILE (type_decl)))
344 return DUMP_GSTRUCT (type, usage, criterion, generic, true, true);
345 return DUMP_GSTRUCT (type, usage, criterion, generic, false, false);
348 /* Return a pointer to a copy of the section string name S with all
349 attributes stripped off, and an asterisk prepended (for assemble_name). */
351 static inline char *
352 stripattributes (const char *s)
354 char *stripped = XNEWVEC (char, strlen (s) + 2);
355 char *p = stripped;
357 *p++ = '*';
359 while (*s && *s != ',')
360 *p++ = *s++;
362 *p = '\0';
363 return stripped;
366 /* Switch [BACK] to eh_frame_section. If we don't have an eh_frame_section,
367 switch to the data section instead, and write out a synthetic start label
368 for collect2 the first time around. */
370 static void
371 switch_to_eh_frame_section (bool back)
373 tree label;
375 #ifdef EH_FRAME_SECTION_NAME
376 if (eh_frame_section == 0)
378 int flags;
380 if (EH_TABLES_CAN_BE_READ_ONLY)
382 int fde_encoding;
383 int per_encoding;
384 int lsda_encoding;
386 fde_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/1,
387 /*global=*/0);
388 per_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2,
389 /*global=*/1);
390 lsda_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0,
391 /*global=*/0);
392 flags = ((! flag_pic
393 || ((fde_encoding & 0x70) != DW_EH_PE_absptr
394 && (fde_encoding & 0x70) != DW_EH_PE_aligned
395 && (per_encoding & 0x70) != DW_EH_PE_absptr
396 && (per_encoding & 0x70) != DW_EH_PE_aligned
397 && (lsda_encoding & 0x70) != DW_EH_PE_absptr
398 && (lsda_encoding & 0x70) != DW_EH_PE_aligned))
399 ? 0 : SECTION_WRITE);
401 else
402 flags = SECTION_WRITE;
403 eh_frame_section = get_section (EH_FRAME_SECTION_NAME, flags, NULL);
405 #endif /* EH_FRAME_SECTION_NAME */
407 if (eh_frame_section)
408 switch_to_section (eh_frame_section);
409 else
411 /* We have no special eh_frame section. Put the information in
412 the data section and emit special labels to guide collect2. */
413 switch_to_section (data_section);
415 if (!back)
417 label = get_file_function_name ("F");
418 ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (PTR_SIZE));
419 targetm.asm_out.globalize_label (asm_out_file,
420 IDENTIFIER_POINTER (label));
421 ASM_OUTPUT_LABEL (asm_out_file, IDENTIFIER_POINTER (label));
426 /* Switch [BACK] to the eh or debug frame table section, depending on
427 FOR_EH. */
429 static void
430 switch_to_frame_table_section (int for_eh, bool back)
432 if (for_eh)
433 switch_to_eh_frame_section (back);
434 else
436 if (!debug_frame_section)
437 debug_frame_section = get_section (DEBUG_FRAME_SECTION,
438 SECTION_DEBUG, NULL);
439 switch_to_section (debug_frame_section);
443 /* Describe for the GTY machinery what parts of dw_cfi_oprnd1 are used. */
445 enum dw_cfi_oprnd_type
446 dw_cfi_oprnd1_desc (enum dwarf_call_frame_info cfi)
448 switch (cfi)
450 case DW_CFA_nop:
451 case DW_CFA_GNU_window_save:
452 case DW_CFA_remember_state:
453 case DW_CFA_restore_state:
454 return dw_cfi_oprnd_unused;
456 case DW_CFA_set_loc:
457 case DW_CFA_advance_loc1:
458 case DW_CFA_advance_loc2:
459 case DW_CFA_advance_loc4:
460 case DW_CFA_MIPS_advance_loc8:
461 return dw_cfi_oprnd_addr;
463 case DW_CFA_offset:
464 case DW_CFA_offset_extended:
465 case DW_CFA_def_cfa:
466 case DW_CFA_offset_extended_sf:
467 case DW_CFA_def_cfa_sf:
468 case DW_CFA_restore:
469 case DW_CFA_restore_extended:
470 case DW_CFA_undefined:
471 case DW_CFA_same_value:
472 case DW_CFA_def_cfa_register:
473 case DW_CFA_register:
474 case DW_CFA_expression:
475 return dw_cfi_oprnd_reg_num;
477 case DW_CFA_def_cfa_offset:
478 case DW_CFA_GNU_args_size:
479 case DW_CFA_def_cfa_offset_sf:
480 return dw_cfi_oprnd_offset;
482 case DW_CFA_def_cfa_expression:
483 return dw_cfi_oprnd_loc;
485 default:
486 gcc_unreachable ();
490 /* Describe for the GTY machinery what parts of dw_cfi_oprnd2 are used. */
492 enum dw_cfi_oprnd_type
493 dw_cfi_oprnd2_desc (enum dwarf_call_frame_info cfi)
495 switch (cfi)
497 case DW_CFA_def_cfa:
498 case DW_CFA_def_cfa_sf:
499 case DW_CFA_offset:
500 case DW_CFA_offset_extended_sf:
501 case DW_CFA_offset_extended:
502 return dw_cfi_oprnd_offset;
504 case DW_CFA_register:
505 return dw_cfi_oprnd_reg_num;
507 case DW_CFA_expression:
508 return dw_cfi_oprnd_loc;
510 default:
511 return dw_cfi_oprnd_unused;
515 /* Output one FDE. */
517 static void
518 output_fde (dw_fde_ref fde, bool for_eh, bool second,
519 char *section_start_label, int fde_encoding, char *augmentation,
520 bool any_lsda_needed, int lsda_encoding)
522 const char *begin, *end;
523 static unsigned int j;
524 char l1[20], l2[20];
526 targetm.asm_out.emit_unwind_label (asm_out_file, fde->decl, for_eh,
527 /* empty */ 0);
528 targetm.asm_out.internal_label (asm_out_file, FDE_LABEL,
529 for_eh + j);
530 ASM_GENERATE_INTERNAL_LABEL (l1, FDE_AFTER_SIZE_LABEL, for_eh + j);
531 ASM_GENERATE_INTERNAL_LABEL (l2, FDE_END_LABEL, for_eh + j);
532 if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4 && !for_eh)
533 dw2_asm_output_data (4, 0xffffffff, "Initial length escape value"
534 " indicating 64-bit DWARF extension");
535 dw2_asm_output_delta (for_eh ? 4 : DWARF_OFFSET_SIZE, l2, l1,
536 "FDE Length");
537 ASM_OUTPUT_LABEL (asm_out_file, l1);
539 if (for_eh)
540 dw2_asm_output_delta (4, l1, section_start_label, "FDE CIE offset");
541 else
542 dw2_asm_output_offset (DWARF_OFFSET_SIZE, section_start_label,
543 debug_frame_section, "FDE CIE offset");
545 begin = second ? fde->dw_fde_second_begin : fde->dw_fde_begin;
546 end = second ? fde->dw_fde_second_end : fde->dw_fde_end;
548 if (for_eh)
550 rtx sym_ref = gen_rtx_SYMBOL_REF (Pmode, begin);
551 SYMBOL_REF_FLAGS (sym_ref) |= SYMBOL_FLAG_LOCAL;
552 dw2_asm_output_encoded_addr_rtx (fde_encoding, sym_ref, false,
553 "FDE initial location");
554 dw2_asm_output_delta (size_of_encoded_value (fde_encoding),
555 end, begin, "FDE address range");
557 else
559 dw2_asm_output_addr (DWARF2_ADDR_SIZE, begin, "FDE initial location");
560 dw2_asm_output_delta (DWARF2_ADDR_SIZE, end, begin, "FDE address range");
563 if (augmentation[0])
565 if (any_lsda_needed)
567 int size = size_of_encoded_value (lsda_encoding);
569 if (lsda_encoding == DW_EH_PE_aligned)
571 int offset = ( 4 /* Length */
572 + 4 /* CIE offset */
573 + 2 * size_of_encoded_value (fde_encoding)
574 + 1 /* Augmentation size */ );
575 int pad = -offset & (PTR_SIZE - 1);
577 size += pad;
578 gcc_assert (size_of_uleb128 (size) == 1);
581 dw2_asm_output_data_uleb128 (size, "Augmentation size");
583 if (fde->uses_eh_lsda)
585 ASM_GENERATE_INTERNAL_LABEL (l1, second ? "LLSDAC" : "LLSDA",
586 fde->funcdef_number);
587 dw2_asm_output_encoded_addr_rtx (lsda_encoding,
588 gen_rtx_SYMBOL_REF (Pmode, l1),
589 false,
590 "Language Specific Data Area");
592 else
594 if (lsda_encoding == DW_EH_PE_aligned)
595 ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (PTR_SIZE));
596 dw2_asm_output_data (size_of_encoded_value (lsda_encoding), 0,
597 "Language Specific Data Area (none)");
600 else
601 dw2_asm_output_data_uleb128 (0, "Augmentation size");
604 /* Loop through the Call Frame Instructions associated with this FDE. */
605 fde->dw_fde_current_label = begin;
607 size_t from, until, i;
609 from = 0;
610 until = VEC_length (dw_cfi_ref, fde->dw_fde_cfi);
612 if (fde->dw_fde_second_begin == NULL)
614 else if (!second)
615 until = fde->dw_fde_switch_cfi_index;
616 else
617 from = fde->dw_fde_switch_cfi_index;
619 for (i = from; i < until; i++)
620 output_cfi (VEC_index (dw_cfi_ref, fde->dw_fde_cfi, i), fde, for_eh);
623 /* If we are to emit a ref/link from function bodies to their frame tables,
624 do it now. This is typically performed to make sure that tables
625 associated with functions are dragged with them and not discarded in
626 garbage collecting links. We need to do this on a per function basis to
627 cope with -ffunction-sections. */
629 #ifdef ASM_OUTPUT_DWARF_TABLE_REF
630 /* Switch to the function section, emit the ref to the tables, and
631 switch *back* into the table section. */
632 switch_to_section (function_section (fde->decl));
633 ASM_OUTPUT_DWARF_TABLE_REF (section_start_label);
634 switch_to_frame_table_section (for_eh, true);
635 #endif
637 /* Pad the FDE out to an address sized boundary. */
638 ASM_OUTPUT_ALIGN (asm_out_file,
639 floor_log2 ((for_eh ? PTR_SIZE : DWARF2_ADDR_SIZE)));
640 ASM_OUTPUT_LABEL (asm_out_file, l2);
642 j += 2;
645 /* Return true if frame description entry FDE is needed for EH. */
647 static bool
648 fde_needed_for_eh_p (dw_fde_ref fde)
650 if (flag_asynchronous_unwind_tables)
651 return true;
653 if (TARGET_USES_WEAK_UNWIND_INFO && DECL_WEAK (fde->decl))
654 return true;
656 if (fde->uses_eh_lsda)
657 return true;
659 /* If exceptions are enabled, we have collected nothrow info. */
660 if (flag_exceptions && (fde->all_throwers_are_sibcalls || fde->nothrow))
661 return false;
663 return true;
666 /* Output the call frame information used to record information
667 that relates to calculating the frame pointer, and records the
668 location of saved registers. */
670 static void
671 output_call_frame_info (int for_eh)
673 unsigned int i;
674 dw_fde_ref fde;
675 dw_cfi_ref cfi;
676 char l1[20], l2[20], section_start_label[20];
677 bool any_lsda_needed = false;
678 char augmentation[6];
679 int augmentation_size;
680 int fde_encoding = DW_EH_PE_absptr;
681 int per_encoding = DW_EH_PE_absptr;
682 int lsda_encoding = DW_EH_PE_absptr;
683 int return_reg;
684 rtx personality = NULL;
685 int dw_cie_version;
687 /* Don't emit a CIE if there won't be any FDEs. */
688 if (fde_vec == NULL)
689 return;
691 /* Nothing to do if the assembler's doing it all. */
692 if (dwarf2out_do_cfi_asm ())
693 return;
695 /* If we don't have any functions we'll want to unwind out of, don't emit
696 any EH unwind information. If we make FDEs linkonce, we may have to
697 emit an empty label for an FDE that wouldn't otherwise be emitted. We
698 want to avoid having an FDE kept around when the function it refers to
699 is discarded. Example where this matters: a primary function template
700 in C++ requires EH information, an explicit specialization doesn't. */
701 if (for_eh)
703 bool any_eh_needed = false;
705 FOR_EACH_VEC_ELT (dw_fde_ref, fde_vec, i, fde)
707 if (fde->uses_eh_lsda)
708 any_eh_needed = any_lsda_needed = true;
709 else if (fde_needed_for_eh_p (fde))
710 any_eh_needed = true;
711 else if (TARGET_USES_WEAK_UNWIND_INFO)
712 targetm.asm_out.emit_unwind_label (asm_out_file, fde->decl, 1, 1);
715 if (!any_eh_needed)
716 return;
719 /* We're going to be generating comments, so turn on app. */
720 if (flag_debug_asm)
721 app_enable ();
723 /* Switch to the proper frame section, first time. */
724 switch_to_frame_table_section (for_eh, false);
726 ASM_GENERATE_INTERNAL_LABEL (section_start_label, FRAME_BEGIN_LABEL, for_eh);
727 ASM_OUTPUT_LABEL (asm_out_file, section_start_label);
729 /* Output the CIE. */
730 ASM_GENERATE_INTERNAL_LABEL (l1, CIE_AFTER_SIZE_LABEL, for_eh);
731 ASM_GENERATE_INTERNAL_LABEL (l2, CIE_END_LABEL, for_eh);
732 if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4 && !for_eh)
733 dw2_asm_output_data (4, 0xffffffff,
734 "Initial length escape value indicating 64-bit DWARF extension");
735 dw2_asm_output_delta (for_eh ? 4 : DWARF_OFFSET_SIZE, l2, l1,
736 "Length of Common Information Entry");
737 ASM_OUTPUT_LABEL (asm_out_file, l1);
739 /* Now that the CIE pointer is PC-relative for EH,
740 use 0 to identify the CIE. */
741 dw2_asm_output_data ((for_eh ? 4 : DWARF_OFFSET_SIZE),
742 (for_eh ? 0 : DWARF_CIE_ID),
743 "CIE Identifier Tag");
745 /* Use the CIE version 3 for DWARF3; allow DWARF2 to continue to
746 use CIE version 1, unless that would produce incorrect results
747 due to overflowing the return register column. */
748 return_reg = DWARF2_FRAME_REG_OUT (DWARF_FRAME_RETURN_COLUMN, for_eh);
749 dw_cie_version = 1;
750 if (return_reg >= 256 || dwarf_version > 2)
751 dw_cie_version = 3;
752 dw2_asm_output_data (1, dw_cie_version, "CIE Version");
754 augmentation[0] = 0;
755 augmentation_size = 0;
757 personality = current_unit_personality;
758 if (for_eh)
760 char *p;
762 /* Augmentation:
763 z Indicates that a uleb128 is present to size the
764 augmentation section.
765 L Indicates the encoding (and thus presence) of
766 an LSDA pointer in the FDE augmentation.
767 R Indicates a non-default pointer encoding for
768 FDE code pointers.
769 P Indicates the presence of an encoding + language
770 personality routine in the CIE augmentation. */
772 fde_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/1, /*global=*/0);
773 per_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2, /*global=*/1);
774 lsda_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0, /*global=*/0);
776 p = augmentation + 1;
777 if (personality)
779 *p++ = 'P';
780 augmentation_size += 1 + size_of_encoded_value (per_encoding);
781 assemble_external_libcall (personality);
783 if (any_lsda_needed)
785 *p++ = 'L';
786 augmentation_size += 1;
788 if (fde_encoding != DW_EH_PE_absptr)
790 *p++ = 'R';
791 augmentation_size += 1;
793 if (p > augmentation + 1)
795 augmentation[0] = 'z';
796 *p = '\0';
799 /* Ug. Some platforms can't do unaligned dynamic relocations at all. */
800 if (personality && per_encoding == DW_EH_PE_aligned)
802 int offset = ( 4 /* Length */
803 + 4 /* CIE Id */
804 + 1 /* CIE version */
805 + strlen (augmentation) + 1 /* Augmentation */
806 + size_of_uleb128 (1) /* Code alignment */
807 + size_of_sleb128 (DWARF_CIE_DATA_ALIGNMENT)
808 + 1 /* RA column */
809 + 1 /* Augmentation size */
810 + 1 /* Personality encoding */ );
811 int pad = -offset & (PTR_SIZE - 1);
813 augmentation_size += pad;
815 /* Augmentations should be small, so there's scarce need to
816 iterate for a solution. Die if we exceed one uleb128 byte. */
817 gcc_assert (size_of_uleb128 (augmentation_size) == 1);
821 dw2_asm_output_nstring (augmentation, -1, "CIE Augmentation");
822 if (dw_cie_version >= 4)
824 dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "CIE Address Size");
825 dw2_asm_output_data (1, 0, "CIE Segment Size");
827 dw2_asm_output_data_uleb128 (1, "CIE Code Alignment Factor");
828 dw2_asm_output_data_sleb128 (DWARF_CIE_DATA_ALIGNMENT,
829 "CIE Data Alignment Factor");
831 if (dw_cie_version == 1)
832 dw2_asm_output_data (1, return_reg, "CIE RA Column");
833 else
834 dw2_asm_output_data_uleb128 (return_reg, "CIE RA Column");
836 if (augmentation[0])
838 dw2_asm_output_data_uleb128 (augmentation_size, "Augmentation size");
839 if (personality)
841 dw2_asm_output_data (1, per_encoding, "Personality (%s)",
842 eh_data_format_name (per_encoding));
843 dw2_asm_output_encoded_addr_rtx (per_encoding,
844 personality,
845 true, NULL);
848 if (any_lsda_needed)
849 dw2_asm_output_data (1, lsda_encoding, "LSDA Encoding (%s)",
850 eh_data_format_name (lsda_encoding));
852 if (fde_encoding != DW_EH_PE_absptr)
853 dw2_asm_output_data (1, fde_encoding, "FDE Encoding (%s)",
854 eh_data_format_name (fde_encoding));
857 FOR_EACH_VEC_ELT (dw_cfi_ref, cie_cfi_vec, i, cfi)
858 output_cfi (cfi, NULL, for_eh);
860 /* Pad the CIE out to an address sized boundary. */
861 ASM_OUTPUT_ALIGN (asm_out_file,
862 floor_log2 (for_eh ? PTR_SIZE : DWARF2_ADDR_SIZE));
863 ASM_OUTPUT_LABEL (asm_out_file, l2);
865 /* Loop through all of the FDE's. */
866 FOR_EACH_VEC_ELT (dw_fde_ref, fde_vec, i, fde)
868 unsigned int k;
870 /* Don't emit EH unwind info for leaf functions that don't need it. */
871 if (for_eh && !fde_needed_for_eh_p (fde))
872 continue;
874 for (k = 0; k < (fde->dw_fde_second_begin ? 2 : 1); k++)
875 output_fde (fde, for_eh, k, section_start_label, fde_encoding,
876 augmentation, any_lsda_needed, lsda_encoding);
879 if (for_eh && targetm.terminate_dw2_eh_frame_info)
880 dw2_asm_output_data (4, 0, "End of Table");
881 #ifdef MIPS_DEBUGGING_INFO
882 /* Work around Irix 6 assembler bug whereby labels at the end of a section
883 get a value of 0. Putting .align 0 after the label fixes it. */
884 ASM_OUTPUT_ALIGN (asm_out_file, 0);
885 #endif
887 /* Turn off app to make assembly quicker. */
888 if (flag_debug_asm)
889 app_disable ();
892 /* Emit .cfi_startproc and .cfi_personality/.cfi_lsda if needed. */
894 static void
895 dwarf2out_do_cfi_startproc (bool second)
897 int enc;
898 rtx ref;
899 rtx personality = get_personality_function (current_function_decl);
901 fprintf (asm_out_file, "\t.cfi_startproc\n");
903 if (personality)
905 enc = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2, /*global=*/1);
906 ref = personality;
908 /* ??? The GAS support isn't entirely consistent. We have to
909 handle indirect support ourselves, but PC-relative is done
910 in the assembler. Further, the assembler can't handle any
911 of the weirder relocation types. */
912 if (enc & DW_EH_PE_indirect)
913 ref = dw2_force_const_mem (ref, true);
915 fprintf (asm_out_file, "\t.cfi_personality %#x,", enc);
916 output_addr_const (asm_out_file, ref);
917 fputc ('\n', asm_out_file);
920 if (crtl->uses_eh_lsda)
922 char lab[20];
924 enc = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0, /*global=*/0);
925 ASM_GENERATE_INTERNAL_LABEL (lab, second ? "LLSDAC" : "LLSDA",
926 current_function_funcdef_no);
927 ref = gen_rtx_SYMBOL_REF (Pmode, lab);
928 SYMBOL_REF_FLAGS (ref) = SYMBOL_FLAG_LOCAL;
930 if (enc & DW_EH_PE_indirect)
931 ref = dw2_force_const_mem (ref, true);
933 fprintf (asm_out_file, "\t.cfi_lsda %#x,", enc);
934 output_addr_const (asm_out_file, ref);
935 fputc ('\n', asm_out_file);
939 /* Allocate CURRENT_FDE. Immediately initialize all we can, noting that
940 this allocation may be done before pass_final. */
942 dw_fde_ref
943 dwarf2out_alloc_current_fde (void)
945 dw_fde_ref fde;
947 fde = ggc_alloc_cleared_dw_fde_node ();
948 fde->decl = current_function_decl;
949 fde->funcdef_number = current_function_funcdef_no;
950 fde->fde_index = VEC_length (dw_fde_ref, fde_vec);
951 fde->all_throwers_are_sibcalls = crtl->all_throwers_are_sibcalls;
952 fde->uses_eh_lsda = crtl->uses_eh_lsda;
953 fde->nothrow = crtl->nothrow;
954 fde->drap_reg = INVALID_REGNUM;
955 fde->vdrap_reg = INVALID_REGNUM;
957 /* Record the FDE associated with this function. */
958 cfun->fde = fde;
959 VEC_safe_push (dw_fde_ref, gc, fde_vec, fde);
961 return fde;
964 /* Output a marker (i.e. a label) for the beginning of a function, before
965 the prologue. */
967 void
968 dwarf2out_begin_prologue (unsigned int line ATTRIBUTE_UNUSED,
969 const char *file ATTRIBUTE_UNUSED)
971 char label[MAX_ARTIFICIAL_LABEL_BYTES];
972 char * dup_label;
973 dw_fde_ref fde;
974 section *fnsec;
975 bool do_frame;
977 current_function_func_begin_label = NULL;
979 do_frame = dwarf2out_do_frame ();
981 /* ??? current_function_func_begin_label is also used by except.c for
982 call-site information. We must emit this label if it might be used. */
983 if (!do_frame
984 && (!flag_exceptions
985 || targetm_common.except_unwind_info (&global_options) != UI_TARGET))
986 return;
988 fnsec = function_section (current_function_decl);
989 switch_to_section (fnsec);
990 ASM_GENERATE_INTERNAL_LABEL (label, FUNC_BEGIN_LABEL,
991 current_function_funcdef_no);
992 ASM_OUTPUT_DEBUG_LABEL (asm_out_file, FUNC_BEGIN_LABEL,
993 current_function_funcdef_no);
994 dup_label = xstrdup (label);
995 current_function_func_begin_label = dup_label;
997 /* We can elide the fde allocation if we're not emitting debug info. */
998 if (!do_frame)
999 return;
1001 /* Cater to the various TARGET_ASM_OUTPUT_MI_THUNK implementations that
1002 emit insns as rtx but bypass the bulk of rest_of_compilation, which
1003 would include pass_dwarf2_frame. If we've not created the FDE yet,
1004 do so now. */
1005 fde = cfun->fde;
1006 if (fde == NULL)
1007 fde = dwarf2out_alloc_current_fde ();
1009 /* Initialize the bits of CURRENT_FDE that were not available earlier. */
1010 fde->dw_fde_begin = dup_label;
1011 fde->dw_fde_current_label = dup_label;
1012 fde->in_std_section = (fnsec == text_section
1013 || (cold_text_section && fnsec == cold_text_section));
1015 /* We only want to output line number information for the genuine dwarf2
1016 prologue case, not the eh frame case. */
1017 #ifdef DWARF2_DEBUGGING_INFO
1018 if (file)
1019 dwarf2out_source_line (line, file, 0, true);
1020 #endif
1022 if (dwarf2out_do_cfi_asm ())
1023 dwarf2out_do_cfi_startproc (false);
1024 else
1026 rtx personality = get_personality_function (current_function_decl);
1027 if (!current_unit_personality)
1028 current_unit_personality = personality;
1030 /* We cannot keep a current personality per function as without CFI
1031 asm, at the point where we emit the CFI data, there is no current
1032 function anymore. */
1033 if (personality && current_unit_personality != personality)
1034 sorry ("multiple EH personalities are supported only with assemblers "
1035 "supporting .cfi_personality directive");
1039 /* Output a marker (i.e. a label) for the end of the generated code
1040 for a function prologue. This gets called *after* the prologue code has
1041 been generated. */
1043 void
1044 dwarf2out_vms_end_prologue (unsigned int line ATTRIBUTE_UNUSED,
1045 const char *file ATTRIBUTE_UNUSED)
1047 char label[MAX_ARTIFICIAL_LABEL_BYTES];
1049 /* Output a label to mark the endpoint of the code generated for this
1050 function. */
1051 ASM_GENERATE_INTERNAL_LABEL (label, PROLOGUE_END_LABEL,
1052 current_function_funcdef_no);
1053 ASM_OUTPUT_DEBUG_LABEL (asm_out_file, PROLOGUE_END_LABEL,
1054 current_function_funcdef_no);
1055 cfun->fde->dw_fde_vms_end_prologue = xstrdup (label);
1058 /* Output a marker (i.e. a label) for the beginning of the generated code
1059 for a function epilogue. This gets called *before* the prologue code has
1060 been generated. */
1062 void
1063 dwarf2out_vms_begin_epilogue (unsigned int line ATTRIBUTE_UNUSED,
1064 const char *file ATTRIBUTE_UNUSED)
1066 dw_fde_ref fde = cfun->fde;
1067 char label[MAX_ARTIFICIAL_LABEL_BYTES];
1069 if (fde->dw_fde_vms_begin_epilogue)
1070 return;
1072 /* Output a label to mark the endpoint of the code generated for this
1073 function. */
1074 ASM_GENERATE_INTERNAL_LABEL (label, EPILOGUE_BEGIN_LABEL,
1075 current_function_funcdef_no);
1076 ASM_OUTPUT_DEBUG_LABEL (asm_out_file, EPILOGUE_BEGIN_LABEL,
1077 current_function_funcdef_no);
1078 fde->dw_fde_vms_begin_epilogue = xstrdup (label);
1081 /* Output a marker (i.e. a label) for the absolute end of the generated code
1082 for a function definition. This gets called *after* the epilogue code has
1083 been generated. */
1085 void
1086 dwarf2out_end_epilogue (unsigned int line ATTRIBUTE_UNUSED,
1087 const char *file ATTRIBUTE_UNUSED)
1089 dw_fde_ref fde;
1090 char label[MAX_ARTIFICIAL_LABEL_BYTES];
1092 last_var_location_insn = NULL_RTX;
1094 if (dwarf2out_do_cfi_asm ())
1095 fprintf (asm_out_file, "\t.cfi_endproc\n");
1097 /* Output a label to mark the endpoint of the code generated for this
1098 function. */
1099 ASM_GENERATE_INTERNAL_LABEL (label, FUNC_END_LABEL,
1100 current_function_funcdef_no);
1101 ASM_OUTPUT_LABEL (asm_out_file, label);
1102 fde = cfun->fde;
1103 gcc_assert (fde != NULL);
1104 if (fde->dw_fde_second_begin == NULL)
1105 fde->dw_fde_end = xstrdup (label);
1108 void
1109 dwarf2out_frame_finish (void)
1111 /* Output call frame information. */
1112 if (targetm.debug_unwind_info () == UI_DWARF2)
1113 output_call_frame_info (0);
1115 /* Output another copy for the unwinder. */
1116 if ((flag_unwind_tables || flag_exceptions)
1117 && targetm_common.except_unwind_info (&global_options) == UI_DWARF2)
1118 output_call_frame_info (1);
1121 /* Note that the current function section is being used for code. */
1123 static void
1124 dwarf2out_note_section_used (void)
1126 section *sec = current_function_section ();
1127 if (sec == text_section)
1128 text_section_used = true;
1129 else if (sec == cold_text_section)
1130 cold_text_section_used = true;
1133 static void var_location_switch_text_section (void);
1134 static void set_cur_line_info_table (section *);
1136 void
1137 dwarf2out_switch_text_section (void)
1139 section *sect;
1140 dw_fde_ref fde = cfun->fde;
1142 gcc_assert (cfun && fde && fde->dw_fde_second_begin == NULL);
1144 if (!in_cold_section_p)
1146 fde->dw_fde_end = crtl->subsections.cold_section_end_label;
1147 fde->dw_fde_second_begin = crtl->subsections.hot_section_label;
1148 fde->dw_fde_second_end = crtl->subsections.hot_section_end_label;
1150 else
1152 fde->dw_fde_end = crtl->subsections.hot_section_end_label;
1153 fde->dw_fde_second_begin = crtl->subsections.cold_section_label;
1154 fde->dw_fde_second_end = crtl->subsections.cold_section_end_label;
1156 have_multiple_function_sections = true;
1158 /* There is no need to mark used sections when not debugging. */
1159 if (cold_text_section != NULL)
1160 dwarf2out_note_section_used ();
1162 if (dwarf2out_do_cfi_asm ())
1163 fprintf (asm_out_file, "\t.cfi_endproc\n");
1165 /* Now do the real section switch. */
1166 sect = current_function_section ();
1167 switch_to_section (sect);
1169 fde->second_in_std_section
1170 = (sect == text_section
1171 || (cold_text_section && sect == cold_text_section));
1173 if (dwarf2out_do_cfi_asm ())
1174 dwarf2out_do_cfi_startproc (true);
1176 var_location_switch_text_section ();
1178 set_cur_line_info_table (sect);
1181 /* And now, the subset of the debugging information support code necessary
1182 for emitting location expressions. */
1184 /* Data about a single source file. */
1185 struct GTY(()) dwarf_file_data {
1186 const char * filename;
1187 int emitted_number;
1190 typedef struct GTY(()) deferred_locations_struct
1192 tree variable;
1193 dw_die_ref die;
1194 } deferred_locations;
1196 DEF_VEC_O(deferred_locations);
1197 DEF_VEC_ALLOC_O(deferred_locations,gc);
1199 static GTY(()) VEC(deferred_locations, gc) *deferred_locations_list;
1201 DEF_VEC_P(dw_die_ref);
1202 DEF_VEC_ALLOC_P(dw_die_ref,heap);
1204 /* Location lists are ranges + location descriptions for that range,
1205 so you can track variables that are in different places over
1206 their entire life. */
1207 typedef struct GTY(()) dw_loc_list_struct {
1208 dw_loc_list_ref dw_loc_next;
1209 const char *begin; /* Label for begin address of range */
1210 const char *end; /* Label for end address of range */
1211 char *ll_symbol; /* Label for beginning of location list.
1212 Only on head of list */
1213 const char *section; /* Section this loclist is relative to */
1214 dw_loc_descr_ref expr;
1215 hashval_t hash;
1216 /* True if all addresses in this and subsequent lists are known to be
1217 resolved. */
1218 bool resolved_addr;
1219 /* True if this list has been replaced by dw_loc_next. */
1220 bool replaced;
1221 bool emitted;
1222 /* True if the range should be emitted even if begin and end
1223 are the same. */
1224 bool force;
1225 } dw_loc_list_node;
1227 static dw_loc_descr_ref int_loc_descriptor (HOST_WIDE_INT);
1229 /* Convert a DWARF stack opcode into its string name. */
1231 static const char *
1232 dwarf_stack_op_name (unsigned int op)
1234 switch (op)
1236 case DW_OP_addr:
1237 return "DW_OP_addr";
1238 case DW_OP_deref:
1239 return "DW_OP_deref";
1240 case DW_OP_const1u:
1241 return "DW_OP_const1u";
1242 case DW_OP_const1s:
1243 return "DW_OP_const1s";
1244 case DW_OP_const2u:
1245 return "DW_OP_const2u";
1246 case DW_OP_const2s:
1247 return "DW_OP_const2s";
1248 case DW_OP_const4u:
1249 return "DW_OP_const4u";
1250 case DW_OP_const4s:
1251 return "DW_OP_const4s";
1252 case DW_OP_const8u:
1253 return "DW_OP_const8u";
1254 case DW_OP_const8s:
1255 return "DW_OP_const8s";
1256 case DW_OP_constu:
1257 return "DW_OP_constu";
1258 case DW_OP_consts:
1259 return "DW_OP_consts";
1260 case DW_OP_dup:
1261 return "DW_OP_dup";
1262 case DW_OP_drop:
1263 return "DW_OP_drop";
1264 case DW_OP_over:
1265 return "DW_OP_over";
1266 case DW_OP_pick:
1267 return "DW_OP_pick";
1268 case DW_OP_swap:
1269 return "DW_OP_swap";
1270 case DW_OP_rot:
1271 return "DW_OP_rot";
1272 case DW_OP_xderef:
1273 return "DW_OP_xderef";
1274 case DW_OP_abs:
1275 return "DW_OP_abs";
1276 case DW_OP_and:
1277 return "DW_OP_and";
1278 case DW_OP_div:
1279 return "DW_OP_div";
1280 case DW_OP_minus:
1281 return "DW_OP_minus";
1282 case DW_OP_mod:
1283 return "DW_OP_mod";
1284 case DW_OP_mul:
1285 return "DW_OP_mul";
1286 case DW_OP_neg:
1287 return "DW_OP_neg";
1288 case DW_OP_not:
1289 return "DW_OP_not";
1290 case DW_OP_or:
1291 return "DW_OP_or";
1292 case DW_OP_plus:
1293 return "DW_OP_plus";
1294 case DW_OP_plus_uconst:
1295 return "DW_OP_plus_uconst";
1296 case DW_OP_shl:
1297 return "DW_OP_shl";
1298 case DW_OP_shr:
1299 return "DW_OP_shr";
1300 case DW_OP_shra:
1301 return "DW_OP_shra";
1302 case DW_OP_xor:
1303 return "DW_OP_xor";
1304 case DW_OP_bra:
1305 return "DW_OP_bra";
1306 case DW_OP_eq:
1307 return "DW_OP_eq";
1308 case DW_OP_ge:
1309 return "DW_OP_ge";
1310 case DW_OP_gt:
1311 return "DW_OP_gt";
1312 case DW_OP_le:
1313 return "DW_OP_le";
1314 case DW_OP_lt:
1315 return "DW_OP_lt";
1316 case DW_OP_ne:
1317 return "DW_OP_ne";
1318 case DW_OP_skip:
1319 return "DW_OP_skip";
1320 case DW_OP_lit0:
1321 return "DW_OP_lit0";
1322 case DW_OP_lit1:
1323 return "DW_OP_lit1";
1324 case DW_OP_lit2:
1325 return "DW_OP_lit2";
1326 case DW_OP_lit3:
1327 return "DW_OP_lit3";
1328 case DW_OP_lit4:
1329 return "DW_OP_lit4";
1330 case DW_OP_lit5:
1331 return "DW_OP_lit5";
1332 case DW_OP_lit6:
1333 return "DW_OP_lit6";
1334 case DW_OP_lit7:
1335 return "DW_OP_lit7";
1336 case DW_OP_lit8:
1337 return "DW_OP_lit8";
1338 case DW_OP_lit9:
1339 return "DW_OP_lit9";
1340 case DW_OP_lit10:
1341 return "DW_OP_lit10";
1342 case DW_OP_lit11:
1343 return "DW_OP_lit11";
1344 case DW_OP_lit12:
1345 return "DW_OP_lit12";
1346 case DW_OP_lit13:
1347 return "DW_OP_lit13";
1348 case DW_OP_lit14:
1349 return "DW_OP_lit14";
1350 case DW_OP_lit15:
1351 return "DW_OP_lit15";
1352 case DW_OP_lit16:
1353 return "DW_OP_lit16";
1354 case DW_OP_lit17:
1355 return "DW_OP_lit17";
1356 case DW_OP_lit18:
1357 return "DW_OP_lit18";
1358 case DW_OP_lit19:
1359 return "DW_OP_lit19";
1360 case DW_OP_lit20:
1361 return "DW_OP_lit20";
1362 case DW_OP_lit21:
1363 return "DW_OP_lit21";
1364 case DW_OP_lit22:
1365 return "DW_OP_lit22";
1366 case DW_OP_lit23:
1367 return "DW_OP_lit23";
1368 case DW_OP_lit24:
1369 return "DW_OP_lit24";
1370 case DW_OP_lit25:
1371 return "DW_OP_lit25";
1372 case DW_OP_lit26:
1373 return "DW_OP_lit26";
1374 case DW_OP_lit27:
1375 return "DW_OP_lit27";
1376 case DW_OP_lit28:
1377 return "DW_OP_lit28";
1378 case DW_OP_lit29:
1379 return "DW_OP_lit29";
1380 case DW_OP_lit30:
1381 return "DW_OP_lit30";
1382 case DW_OP_lit31:
1383 return "DW_OP_lit31";
1384 case DW_OP_reg0:
1385 return "DW_OP_reg0";
1386 case DW_OP_reg1:
1387 return "DW_OP_reg1";
1388 case DW_OP_reg2:
1389 return "DW_OP_reg2";
1390 case DW_OP_reg3:
1391 return "DW_OP_reg3";
1392 case DW_OP_reg4:
1393 return "DW_OP_reg4";
1394 case DW_OP_reg5:
1395 return "DW_OP_reg5";
1396 case DW_OP_reg6:
1397 return "DW_OP_reg6";
1398 case DW_OP_reg7:
1399 return "DW_OP_reg7";
1400 case DW_OP_reg8:
1401 return "DW_OP_reg8";
1402 case DW_OP_reg9:
1403 return "DW_OP_reg9";
1404 case DW_OP_reg10:
1405 return "DW_OP_reg10";
1406 case DW_OP_reg11:
1407 return "DW_OP_reg11";
1408 case DW_OP_reg12:
1409 return "DW_OP_reg12";
1410 case DW_OP_reg13:
1411 return "DW_OP_reg13";
1412 case DW_OP_reg14:
1413 return "DW_OP_reg14";
1414 case DW_OP_reg15:
1415 return "DW_OP_reg15";
1416 case DW_OP_reg16:
1417 return "DW_OP_reg16";
1418 case DW_OP_reg17:
1419 return "DW_OP_reg17";
1420 case DW_OP_reg18:
1421 return "DW_OP_reg18";
1422 case DW_OP_reg19:
1423 return "DW_OP_reg19";
1424 case DW_OP_reg20:
1425 return "DW_OP_reg20";
1426 case DW_OP_reg21:
1427 return "DW_OP_reg21";
1428 case DW_OP_reg22:
1429 return "DW_OP_reg22";
1430 case DW_OP_reg23:
1431 return "DW_OP_reg23";
1432 case DW_OP_reg24:
1433 return "DW_OP_reg24";
1434 case DW_OP_reg25:
1435 return "DW_OP_reg25";
1436 case DW_OP_reg26:
1437 return "DW_OP_reg26";
1438 case DW_OP_reg27:
1439 return "DW_OP_reg27";
1440 case DW_OP_reg28:
1441 return "DW_OP_reg28";
1442 case DW_OP_reg29:
1443 return "DW_OP_reg29";
1444 case DW_OP_reg30:
1445 return "DW_OP_reg30";
1446 case DW_OP_reg31:
1447 return "DW_OP_reg31";
1448 case DW_OP_breg0:
1449 return "DW_OP_breg0";
1450 case DW_OP_breg1:
1451 return "DW_OP_breg1";
1452 case DW_OP_breg2:
1453 return "DW_OP_breg2";
1454 case DW_OP_breg3:
1455 return "DW_OP_breg3";
1456 case DW_OP_breg4:
1457 return "DW_OP_breg4";
1458 case DW_OP_breg5:
1459 return "DW_OP_breg5";
1460 case DW_OP_breg6:
1461 return "DW_OP_breg6";
1462 case DW_OP_breg7:
1463 return "DW_OP_breg7";
1464 case DW_OP_breg8:
1465 return "DW_OP_breg8";
1466 case DW_OP_breg9:
1467 return "DW_OP_breg9";
1468 case DW_OP_breg10:
1469 return "DW_OP_breg10";
1470 case DW_OP_breg11:
1471 return "DW_OP_breg11";
1472 case DW_OP_breg12:
1473 return "DW_OP_breg12";
1474 case DW_OP_breg13:
1475 return "DW_OP_breg13";
1476 case DW_OP_breg14:
1477 return "DW_OP_breg14";
1478 case DW_OP_breg15:
1479 return "DW_OP_breg15";
1480 case DW_OP_breg16:
1481 return "DW_OP_breg16";
1482 case DW_OP_breg17:
1483 return "DW_OP_breg17";
1484 case DW_OP_breg18:
1485 return "DW_OP_breg18";
1486 case DW_OP_breg19:
1487 return "DW_OP_breg19";
1488 case DW_OP_breg20:
1489 return "DW_OP_breg20";
1490 case DW_OP_breg21:
1491 return "DW_OP_breg21";
1492 case DW_OP_breg22:
1493 return "DW_OP_breg22";
1494 case DW_OP_breg23:
1495 return "DW_OP_breg23";
1496 case DW_OP_breg24:
1497 return "DW_OP_breg24";
1498 case DW_OP_breg25:
1499 return "DW_OP_breg25";
1500 case DW_OP_breg26:
1501 return "DW_OP_breg26";
1502 case DW_OP_breg27:
1503 return "DW_OP_breg27";
1504 case DW_OP_breg28:
1505 return "DW_OP_breg28";
1506 case DW_OP_breg29:
1507 return "DW_OP_breg29";
1508 case DW_OP_breg30:
1509 return "DW_OP_breg30";
1510 case DW_OP_breg31:
1511 return "DW_OP_breg31";
1512 case DW_OP_regx:
1513 return "DW_OP_regx";
1514 case DW_OP_fbreg:
1515 return "DW_OP_fbreg";
1516 case DW_OP_bregx:
1517 return "DW_OP_bregx";
1518 case DW_OP_piece:
1519 return "DW_OP_piece";
1520 case DW_OP_deref_size:
1521 return "DW_OP_deref_size";
1522 case DW_OP_xderef_size:
1523 return "DW_OP_xderef_size";
1524 case DW_OP_nop:
1525 return "DW_OP_nop";
1527 case DW_OP_push_object_address:
1528 return "DW_OP_push_object_address";
1529 case DW_OP_call2:
1530 return "DW_OP_call2";
1531 case DW_OP_call4:
1532 return "DW_OP_call4";
1533 case DW_OP_call_ref:
1534 return "DW_OP_call_ref";
1535 case DW_OP_implicit_value:
1536 return "DW_OP_implicit_value";
1537 case DW_OP_stack_value:
1538 return "DW_OP_stack_value";
1539 case DW_OP_form_tls_address:
1540 return "DW_OP_form_tls_address";
1541 case DW_OP_call_frame_cfa:
1542 return "DW_OP_call_frame_cfa";
1543 case DW_OP_bit_piece:
1544 return "DW_OP_bit_piece";
1546 case DW_OP_GNU_push_tls_address:
1547 return "DW_OP_GNU_push_tls_address";
1548 case DW_OP_GNU_uninit:
1549 return "DW_OP_GNU_uninit";
1550 case DW_OP_GNU_encoded_addr:
1551 return "DW_OP_GNU_encoded_addr";
1552 case DW_OP_GNU_implicit_pointer:
1553 return "DW_OP_GNU_implicit_pointer";
1554 case DW_OP_GNU_entry_value:
1555 return "DW_OP_GNU_entry_value";
1556 case DW_OP_GNU_const_type:
1557 return "DW_OP_GNU_const_type";
1558 case DW_OP_GNU_regval_type:
1559 return "DW_OP_GNU_regval_type";
1560 case DW_OP_GNU_deref_type:
1561 return "DW_OP_GNU_deref_type";
1562 case DW_OP_GNU_convert:
1563 return "DW_OP_GNU_convert";
1564 case DW_OP_GNU_reinterpret:
1565 return "DW_OP_GNU_reinterpret";
1566 case DW_OP_GNU_parameter_ref:
1567 return "DW_OP_GNU_parameter_ref";
1569 default:
1570 return "OP_<unknown>";
1574 /* Return a pointer to a newly allocated location description. Location
1575 descriptions are simple expression terms that can be strung
1576 together to form more complicated location (address) descriptions. */
1578 static inline dw_loc_descr_ref
1579 new_loc_descr (enum dwarf_location_atom op, unsigned HOST_WIDE_INT oprnd1,
1580 unsigned HOST_WIDE_INT oprnd2)
1582 dw_loc_descr_ref descr = ggc_alloc_cleared_dw_loc_descr_node ();
1584 descr->dw_loc_opc = op;
1585 descr->dw_loc_oprnd1.val_class = dw_val_class_unsigned_const;
1586 descr->dw_loc_oprnd1.v.val_unsigned = oprnd1;
1587 descr->dw_loc_oprnd2.val_class = dw_val_class_unsigned_const;
1588 descr->dw_loc_oprnd2.v.val_unsigned = oprnd2;
1590 return descr;
1593 /* Return a pointer to a newly allocated location description for
1594 REG and OFFSET. */
1596 static inline dw_loc_descr_ref
1597 new_reg_loc_descr (unsigned int reg, unsigned HOST_WIDE_INT offset)
1599 if (reg <= 31)
1600 return new_loc_descr ((enum dwarf_location_atom) (DW_OP_breg0 + reg),
1601 offset, 0);
1602 else
1603 return new_loc_descr (DW_OP_bregx, reg, offset);
1606 /* Add a location description term to a location description expression. */
1608 static inline void
1609 add_loc_descr (dw_loc_descr_ref *list_head, dw_loc_descr_ref descr)
1611 dw_loc_descr_ref *d;
1613 /* Find the end of the chain. */
1614 for (d = list_head; (*d) != NULL; d = &(*d)->dw_loc_next)
1617 *d = descr;
1620 /* Compare two location operands for exact equality. */
1622 static bool
1623 dw_val_equal_p (dw_val_node *a, dw_val_node *b)
1625 if (a->val_class != b->val_class)
1626 return false;
1627 switch (a->val_class)
1629 case dw_val_class_none:
1630 return true;
1631 case dw_val_class_addr:
1632 return rtx_equal_p (a->v.val_addr, b->v.val_addr);
1634 case dw_val_class_offset:
1635 case dw_val_class_unsigned_const:
1636 case dw_val_class_const:
1637 case dw_val_class_range_list:
1638 case dw_val_class_lineptr:
1639 case dw_val_class_macptr:
1640 /* These are all HOST_WIDE_INT, signed or unsigned. */
1641 return a->v.val_unsigned == b->v.val_unsigned;
1643 case dw_val_class_loc:
1644 return a->v.val_loc == b->v.val_loc;
1645 case dw_val_class_loc_list:
1646 return a->v.val_loc_list == b->v.val_loc_list;
1647 case dw_val_class_die_ref:
1648 return a->v.val_die_ref.die == b->v.val_die_ref.die;
1649 case dw_val_class_fde_ref:
1650 return a->v.val_fde_index == b->v.val_fde_index;
1651 case dw_val_class_lbl_id:
1652 return strcmp (a->v.val_lbl_id, b->v.val_lbl_id) == 0;
1653 case dw_val_class_str:
1654 return a->v.val_str == b->v.val_str;
1655 case dw_val_class_flag:
1656 return a->v.val_flag == b->v.val_flag;
1657 case dw_val_class_file:
1658 return a->v.val_file == b->v.val_file;
1659 case dw_val_class_decl_ref:
1660 return a->v.val_decl_ref == b->v.val_decl_ref;
1662 case dw_val_class_const_double:
1663 return (a->v.val_double.high == b->v.val_double.high
1664 && a->v.val_double.low == b->v.val_double.low);
1666 case dw_val_class_vec:
1668 size_t a_len = a->v.val_vec.elt_size * a->v.val_vec.length;
1669 size_t b_len = b->v.val_vec.elt_size * b->v.val_vec.length;
1671 return (a_len == b_len
1672 && !memcmp (a->v.val_vec.array, b->v.val_vec.array, a_len));
1675 case dw_val_class_data8:
1676 return memcmp (a->v.val_data8, b->v.val_data8, 8) == 0;
1678 case dw_val_class_vms_delta:
1679 return (!strcmp (a->v.val_vms_delta.lbl1, b->v.val_vms_delta.lbl1)
1680 && !strcmp (a->v.val_vms_delta.lbl1, b->v.val_vms_delta.lbl1));
1682 gcc_unreachable ();
1685 /* Compare two location atoms for exact equality. */
1687 static bool
1688 loc_descr_equal_p_1 (dw_loc_descr_ref a, dw_loc_descr_ref b)
1690 if (a->dw_loc_opc != b->dw_loc_opc)
1691 return false;
1693 /* ??? This is only ever set for DW_OP_constNu, for N equal to the
1694 address size, but since we always allocate cleared storage it
1695 should be zero for other types of locations. */
1696 if (a->dtprel != b->dtprel)
1697 return false;
1699 return (dw_val_equal_p (&a->dw_loc_oprnd1, &b->dw_loc_oprnd1)
1700 && dw_val_equal_p (&a->dw_loc_oprnd2, &b->dw_loc_oprnd2));
1703 /* Compare two complete location expressions for exact equality. */
1705 bool
1706 loc_descr_equal_p (dw_loc_descr_ref a, dw_loc_descr_ref b)
1708 while (1)
1710 if (a == b)
1711 return true;
1712 if (a == NULL || b == NULL)
1713 return false;
1714 if (!loc_descr_equal_p_1 (a, b))
1715 return false;
1717 a = a->dw_loc_next;
1718 b = b->dw_loc_next;
1723 /* Add a constant OFFSET to a location expression. */
1725 static void
1726 loc_descr_plus_const (dw_loc_descr_ref *list_head, HOST_WIDE_INT offset)
1728 dw_loc_descr_ref loc;
1729 HOST_WIDE_INT *p;
1731 gcc_assert (*list_head != NULL);
1733 if (!offset)
1734 return;
1736 /* Find the end of the chain. */
1737 for (loc = *list_head; loc->dw_loc_next != NULL; loc = loc->dw_loc_next)
1740 p = NULL;
1741 if (loc->dw_loc_opc == DW_OP_fbreg
1742 || (loc->dw_loc_opc >= DW_OP_breg0 && loc->dw_loc_opc <= DW_OP_breg31))
1743 p = &loc->dw_loc_oprnd1.v.val_int;
1744 else if (loc->dw_loc_opc == DW_OP_bregx)
1745 p = &loc->dw_loc_oprnd2.v.val_int;
1747 /* If the last operation is fbreg, breg{0..31,x}, optimize by adjusting its
1748 offset. Don't optimize if an signed integer overflow would happen. */
1749 if (p != NULL
1750 && ((offset > 0 && *p <= INTTYPE_MAXIMUM (HOST_WIDE_INT) - offset)
1751 || (offset < 0 && *p >= INTTYPE_MINIMUM (HOST_WIDE_INT) - offset)))
1752 *p += offset;
1754 else if (offset > 0)
1755 loc->dw_loc_next = new_loc_descr (DW_OP_plus_uconst, offset, 0);
1757 else
1759 loc->dw_loc_next = int_loc_descriptor (-offset);
1760 add_loc_descr (&loc->dw_loc_next, new_loc_descr (DW_OP_minus, 0, 0));
1764 /* Add a constant OFFSET to a location list. */
1766 static void
1767 loc_list_plus_const (dw_loc_list_ref list_head, HOST_WIDE_INT offset)
1769 dw_loc_list_ref d;
1770 for (d = list_head; d != NULL; d = d->dw_loc_next)
1771 loc_descr_plus_const (&d->expr, offset);
1774 #define DWARF_REF_SIZE \
1775 (dwarf_version == 2 ? DWARF2_ADDR_SIZE : DWARF_OFFSET_SIZE)
1777 static unsigned long int get_base_type_offset (dw_die_ref);
1779 /* Return the size of a location descriptor. */
1781 static unsigned long
1782 size_of_loc_descr (dw_loc_descr_ref loc)
1784 unsigned long size = 1;
1786 switch (loc->dw_loc_opc)
1788 case DW_OP_addr:
1789 size += DWARF2_ADDR_SIZE;
1790 break;
1791 case DW_OP_const1u:
1792 case DW_OP_const1s:
1793 size += 1;
1794 break;
1795 case DW_OP_const2u:
1796 case DW_OP_const2s:
1797 size += 2;
1798 break;
1799 case DW_OP_const4u:
1800 case DW_OP_const4s:
1801 size += 4;
1802 break;
1803 case DW_OP_const8u:
1804 case DW_OP_const8s:
1805 size += 8;
1806 break;
1807 case DW_OP_constu:
1808 size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
1809 break;
1810 case DW_OP_consts:
1811 size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
1812 break;
1813 case DW_OP_pick:
1814 size += 1;
1815 break;
1816 case DW_OP_plus_uconst:
1817 size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
1818 break;
1819 case DW_OP_skip:
1820 case DW_OP_bra:
1821 size += 2;
1822 break;
1823 case DW_OP_breg0:
1824 case DW_OP_breg1:
1825 case DW_OP_breg2:
1826 case DW_OP_breg3:
1827 case DW_OP_breg4:
1828 case DW_OP_breg5:
1829 case DW_OP_breg6:
1830 case DW_OP_breg7:
1831 case DW_OP_breg8:
1832 case DW_OP_breg9:
1833 case DW_OP_breg10:
1834 case DW_OP_breg11:
1835 case DW_OP_breg12:
1836 case DW_OP_breg13:
1837 case DW_OP_breg14:
1838 case DW_OP_breg15:
1839 case DW_OP_breg16:
1840 case DW_OP_breg17:
1841 case DW_OP_breg18:
1842 case DW_OP_breg19:
1843 case DW_OP_breg20:
1844 case DW_OP_breg21:
1845 case DW_OP_breg22:
1846 case DW_OP_breg23:
1847 case DW_OP_breg24:
1848 case DW_OP_breg25:
1849 case DW_OP_breg26:
1850 case DW_OP_breg27:
1851 case DW_OP_breg28:
1852 case DW_OP_breg29:
1853 case DW_OP_breg30:
1854 case DW_OP_breg31:
1855 size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
1856 break;
1857 case DW_OP_regx:
1858 size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
1859 break;
1860 case DW_OP_fbreg:
1861 size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
1862 break;
1863 case DW_OP_bregx:
1864 size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
1865 size += size_of_sleb128 (loc->dw_loc_oprnd2.v.val_int);
1866 break;
1867 case DW_OP_piece:
1868 size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
1869 break;
1870 case DW_OP_bit_piece:
1871 size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
1872 size += size_of_uleb128 (loc->dw_loc_oprnd2.v.val_unsigned);
1873 break;
1874 case DW_OP_deref_size:
1875 case DW_OP_xderef_size:
1876 size += 1;
1877 break;
1878 case DW_OP_call2:
1879 size += 2;
1880 break;
1881 case DW_OP_call4:
1882 size += 4;
1883 break;
1884 case DW_OP_call_ref:
1885 size += DWARF_REF_SIZE;
1886 break;
1887 case DW_OP_implicit_value:
1888 size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned)
1889 + loc->dw_loc_oprnd1.v.val_unsigned;
1890 break;
1891 case DW_OP_GNU_implicit_pointer:
1892 size += DWARF_REF_SIZE + size_of_sleb128 (loc->dw_loc_oprnd2.v.val_int);
1893 break;
1894 case DW_OP_GNU_entry_value:
1896 unsigned long op_size = size_of_locs (loc->dw_loc_oprnd1.v.val_loc);
1897 size += size_of_uleb128 (op_size) + op_size;
1898 break;
1900 case DW_OP_GNU_const_type:
1902 unsigned long o
1903 = get_base_type_offset (loc->dw_loc_oprnd1.v.val_die_ref.die);
1904 size += size_of_uleb128 (o) + 1;
1905 switch (loc->dw_loc_oprnd2.val_class)
1907 case dw_val_class_vec:
1908 size += loc->dw_loc_oprnd2.v.val_vec.length
1909 * loc->dw_loc_oprnd2.v.val_vec.elt_size;
1910 break;
1911 case dw_val_class_const:
1912 size += HOST_BITS_PER_WIDE_INT / BITS_PER_UNIT;
1913 break;
1914 case dw_val_class_const_double:
1915 size += 2 * HOST_BITS_PER_WIDE_INT / BITS_PER_UNIT;
1916 break;
1917 default:
1918 gcc_unreachable ();
1920 break;
1922 case DW_OP_GNU_regval_type:
1924 unsigned long o
1925 = get_base_type_offset (loc->dw_loc_oprnd2.v.val_die_ref.die);
1926 size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned)
1927 + size_of_uleb128 (o);
1929 break;
1930 case DW_OP_GNU_deref_type:
1932 unsigned long o
1933 = get_base_type_offset (loc->dw_loc_oprnd2.v.val_die_ref.die);
1934 size += 1 + size_of_uleb128 (o);
1936 break;
1937 case DW_OP_GNU_convert:
1938 case DW_OP_GNU_reinterpret:
1939 if (loc->dw_loc_oprnd1.val_class == dw_val_class_unsigned_const)
1940 size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
1941 else
1943 unsigned long o
1944 = get_base_type_offset (loc->dw_loc_oprnd1.v.val_die_ref.die);
1945 size += size_of_uleb128 (o);
1947 break;
1948 case DW_OP_GNU_parameter_ref:
1949 size += 4;
1950 break;
1951 default:
1952 break;
1955 return size;
1958 /* Return the size of a series of location descriptors. */
1960 unsigned long
1961 size_of_locs (dw_loc_descr_ref loc)
1963 dw_loc_descr_ref l;
1964 unsigned long size;
1966 /* If there are no skip or bra opcodes, don't fill in the dw_loc_addr
1967 field, to avoid writing to a PCH file. */
1968 for (size = 0, l = loc; l != NULL; l = l->dw_loc_next)
1970 if (l->dw_loc_opc == DW_OP_skip || l->dw_loc_opc == DW_OP_bra)
1971 break;
1972 size += size_of_loc_descr (l);
1974 if (! l)
1975 return size;
1977 for (size = 0, l = loc; l != NULL; l = l->dw_loc_next)
1979 l->dw_loc_addr = size;
1980 size += size_of_loc_descr (l);
1983 return size;
1986 static HOST_WIDE_INT extract_int (const unsigned char *, unsigned);
1987 static void get_ref_die_offset_label (char *, dw_die_ref);
1988 static unsigned long int get_ref_die_offset (dw_die_ref);
1990 /* Output location description stack opcode's operands (if any).
1991 The for_eh_or_skip parameter controls whether register numbers are
1992 converted using DWARF2_FRAME_REG_OUT, which is needed in the case that
1993 hard reg numbers have been processed via DWARF_FRAME_REGNUM (i.e. for unwind
1994 info). This should be suppressed for the cases that have not been converted
1995 (i.e. symbolic debug info), by setting the parameter < 0. See PR47324. */
1997 static void
1998 output_loc_operands (dw_loc_descr_ref loc, int for_eh_or_skip)
2000 dw_val_ref val1 = &loc->dw_loc_oprnd1;
2001 dw_val_ref val2 = &loc->dw_loc_oprnd2;
2003 switch (loc->dw_loc_opc)
2005 #ifdef DWARF2_DEBUGGING_INFO
2006 case DW_OP_const2u:
2007 case DW_OP_const2s:
2008 dw2_asm_output_data (2, val1->v.val_int, NULL);
2009 break;
2010 case DW_OP_const4u:
2011 if (loc->dtprel)
2013 gcc_assert (targetm.asm_out.output_dwarf_dtprel);
2014 targetm.asm_out.output_dwarf_dtprel (asm_out_file, 4,
2015 val1->v.val_addr);
2016 fputc ('\n', asm_out_file);
2017 break;
2019 /* FALLTHRU */
2020 case DW_OP_const4s:
2021 dw2_asm_output_data (4, val1->v.val_int, NULL);
2022 break;
2023 case DW_OP_const8u:
2024 if (loc->dtprel)
2026 gcc_assert (targetm.asm_out.output_dwarf_dtprel);
2027 targetm.asm_out.output_dwarf_dtprel (asm_out_file, 8,
2028 val1->v.val_addr);
2029 fputc ('\n', asm_out_file);
2030 break;
2032 /* FALLTHRU */
2033 case DW_OP_const8s:
2034 gcc_assert (HOST_BITS_PER_WIDE_INT >= 64);
2035 dw2_asm_output_data (8, val1->v.val_int, NULL);
2036 break;
2037 case DW_OP_skip:
2038 case DW_OP_bra:
2040 int offset;
2042 gcc_assert (val1->val_class == dw_val_class_loc);
2043 offset = val1->v.val_loc->dw_loc_addr - (loc->dw_loc_addr + 3);
2045 dw2_asm_output_data (2, offset, NULL);
2047 break;
2048 case DW_OP_implicit_value:
2049 dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
2050 switch (val2->val_class)
2052 case dw_val_class_const:
2053 dw2_asm_output_data (val1->v.val_unsigned, val2->v.val_int, NULL);
2054 break;
2055 case dw_val_class_vec:
2057 unsigned int elt_size = val2->v.val_vec.elt_size;
2058 unsigned int len = val2->v.val_vec.length;
2059 unsigned int i;
2060 unsigned char *p;
2062 if (elt_size > sizeof (HOST_WIDE_INT))
2064 elt_size /= 2;
2065 len *= 2;
2067 for (i = 0, p = val2->v.val_vec.array;
2068 i < len;
2069 i++, p += elt_size)
2070 dw2_asm_output_data (elt_size, extract_int (p, elt_size),
2071 "fp or vector constant word %u", i);
2073 break;
2074 case dw_val_class_const_double:
2076 unsigned HOST_WIDE_INT first, second;
2078 if (WORDS_BIG_ENDIAN)
2080 first = val2->v.val_double.high;
2081 second = val2->v.val_double.low;
2083 else
2085 first = val2->v.val_double.low;
2086 second = val2->v.val_double.high;
2088 dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR,
2089 first, NULL);
2090 dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR,
2091 second, NULL);
2093 break;
2094 case dw_val_class_addr:
2095 gcc_assert (val1->v.val_unsigned == DWARF2_ADDR_SIZE);
2096 dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE, val2->v.val_addr, NULL);
2097 break;
2098 default:
2099 gcc_unreachable ();
2101 break;
2102 #else
2103 case DW_OP_const2u:
2104 case DW_OP_const2s:
2105 case DW_OP_const4u:
2106 case DW_OP_const4s:
2107 case DW_OP_const8u:
2108 case DW_OP_const8s:
2109 case DW_OP_skip:
2110 case DW_OP_bra:
2111 case DW_OP_implicit_value:
2112 /* We currently don't make any attempt to make sure these are
2113 aligned properly like we do for the main unwind info, so
2114 don't support emitting things larger than a byte if we're
2115 only doing unwinding. */
2116 gcc_unreachable ();
2117 #endif
2118 case DW_OP_const1u:
2119 case DW_OP_const1s:
2120 dw2_asm_output_data (1, val1->v.val_int, NULL);
2121 break;
2122 case DW_OP_constu:
2123 dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
2124 break;
2125 case DW_OP_consts:
2126 dw2_asm_output_data_sleb128 (val1->v.val_int, NULL);
2127 break;
2128 case DW_OP_pick:
2129 dw2_asm_output_data (1, val1->v.val_int, NULL);
2130 break;
2131 case DW_OP_plus_uconst:
2132 dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
2133 break;
2134 case DW_OP_breg0:
2135 case DW_OP_breg1:
2136 case DW_OP_breg2:
2137 case DW_OP_breg3:
2138 case DW_OP_breg4:
2139 case DW_OP_breg5:
2140 case DW_OP_breg6:
2141 case DW_OP_breg7:
2142 case DW_OP_breg8:
2143 case DW_OP_breg9:
2144 case DW_OP_breg10:
2145 case DW_OP_breg11:
2146 case DW_OP_breg12:
2147 case DW_OP_breg13:
2148 case DW_OP_breg14:
2149 case DW_OP_breg15:
2150 case DW_OP_breg16:
2151 case DW_OP_breg17:
2152 case DW_OP_breg18:
2153 case DW_OP_breg19:
2154 case DW_OP_breg20:
2155 case DW_OP_breg21:
2156 case DW_OP_breg22:
2157 case DW_OP_breg23:
2158 case DW_OP_breg24:
2159 case DW_OP_breg25:
2160 case DW_OP_breg26:
2161 case DW_OP_breg27:
2162 case DW_OP_breg28:
2163 case DW_OP_breg29:
2164 case DW_OP_breg30:
2165 case DW_OP_breg31:
2166 dw2_asm_output_data_sleb128 (val1->v.val_int, NULL);
2167 break;
2168 case DW_OP_regx:
2170 unsigned r = val1->v.val_unsigned;
2171 if (for_eh_or_skip >= 0)
2172 r = DWARF2_FRAME_REG_OUT (r, for_eh_or_skip);
2173 gcc_assert (size_of_uleb128 (r)
2174 == size_of_uleb128 (val1->v.val_unsigned));
2175 dw2_asm_output_data_uleb128 (r, NULL);
2177 break;
2178 case DW_OP_fbreg:
2179 dw2_asm_output_data_sleb128 (val1->v.val_int, NULL);
2180 break;
2181 case DW_OP_bregx:
2183 unsigned r = val1->v.val_unsigned;
2184 if (for_eh_or_skip >= 0)
2185 r = DWARF2_FRAME_REG_OUT (r, for_eh_or_skip);
2186 gcc_assert (size_of_uleb128 (r)
2187 == size_of_uleb128 (val1->v.val_unsigned));
2188 dw2_asm_output_data_uleb128 (r, NULL);
2189 dw2_asm_output_data_sleb128 (val2->v.val_int, NULL);
2191 break;
2192 case DW_OP_piece:
2193 dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
2194 break;
2195 case DW_OP_bit_piece:
2196 dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
2197 dw2_asm_output_data_uleb128 (val2->v.val_unsigned, NULL);
2198 break;
2199 case DW_OP_deref_size:
2200 case DW_OP_xderef_size:
2201 dw2_asm_output_data (1, val1->v.val_int, NULL);
2202 break;
2204 case DW_OP_addr:
2205 if (loc->dtprel)
2207 if (targetm.asm_out.output_dwarf_dtprel)
2209 targetm.asm_out.output_dwarf_dtprel (asm_out_file,
2210 DWARF2_ADDR_SIZE,
2211 val1->v.val_addr);
2212 fputc ('\n', asm_out_file);
2214 else
2215 gcc_unreachable ();
2217 else
2219 #ifdef DWARF2_DEBUGGING_INFO
2220 dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE, val1->v.val_addr, NULL);
2221 #else
2222 gcc_unreachable ();
2223 #endif
2225 break;
2227 case DW_OP_GNU_implicit_pointer:
2229 char label[MAX_ARTIFICIAL_LABEL_BYTES
2230 + HOST_BITS_PER_WIDE_INT / 2 + 2];
2231 gcc_assert (val1->val_class == dw_val_class_die_ref);
2232 get_ref_die_offset_label (label, val1->v.val_die_ref.die);
2233 dw2_asm_output_offset (DWARF_REF_SIZE, label, debug_info_section, NULL);
2234 dw2_asm_output_data_sleb128 (val2->v.val_int, NULL);
2236 break;
2238 case DW_OP_GNU_entry_value:
2239 dw2_asm_output_data_uleb128 (size_of_locs (val1->v.val_loc), NULL);
2240 output_loc_sequence (val1->v.val_loc, for_eh_or_skip);
2241 break;
2243 case DW_OP_GNU_const_type:
2245 unsigned long o = get_base_type_offset (val1->v.val_die_ref.die), l;
2246 gcc_assert (o);
2247 dw2_asm_output_data_uleb128 (o, NULL);
2248 switch (val2->val_class)
2250 case dw_val_class_const:
2251 l = HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR;
2252 dw2_asm_output_data (1, l, NULL);
2253 dw2_asm_output_data (l, val2->v.val_int, NULL);
2254 break;
2255 case dw_val_class_vec:
2257 unsigned int elt_size = val2->v.val_vec.elt_size;
2258 unsigned int len = val2->v.val_vec.length;
2259 unsigned int i;
2260 unsigned char *p;
2262 l = len * elt_size;
2263 dw2_asm_output_data (1, l, NULL);
2264 if (elt_size > sizeof (HOST_WIDE_INT))
2266 elt_size /= 2;
2267 len *= 2;
2269 for (i = 0, p = val2->v.val_vec.array;
2270 i < len;
2271 i++, p += elt_size)
2272 dw2_asm_output_data (elt_size, extract_int (p, elt_size),
2273 "fp or vector constant word %u", i);
2275 break;
2276 case dw_val_class_const_double:
2278 unsigned HOST_WIDE_INT first, second;
2279 l = HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR;
2281 dw2_asm_output_data (1, 2 * l, NULL);
2282 if (WORDS_BIG_ENDIAN)
2284 first = val2->v.val_double.high;
2285 second = val2->v.val_double.low;
2287 else
2289 first = val2->v.val_double.low;
2290 second = val2->v.val_double.high;
2292 dw2_asm_output_data (l, first, NULL);
2293 dw2_asm_output_data (l, second, NULL);
2295 break;
2296 default:
2297 gcc_unreachable ();
2300 break;
2301 case DW_OP_GNU_regval_type:
2303 unsigned r = val1->v.val_unsigned;
2304 unsigned long o = get_base_type_offset (val2->v.val_die_ref.die);
2305 gcc_assert (o);
2306 if (for_eh_or_skip >= 0)
2308 r = DWARF2_FRAME_REG_OUT (r, for_eh_or_skip);
2309 gcc_assert (size_of_uleb128 (r)
2310 == size_of_uleb128 (val1->v.val_unsigned));
2312 dw2_asm_output_data_uleb128 (r, NULL);
2313 dw2_asm_output_data_uleb128 (o, NULL);
2315 break;
2316 case DW_OP_GNU_deref_type:
2318 unsigned long o = get_base_type_offset (val2->v.val_die_ref.die);
2319 gcc_assert (o);
2320 dw2_asm_output_data (1, val1->v.val_int, NULL);
2321 dw2_asm_output_data_uleb128 (o, NULL);
2323 break;
2324 case DW_OP_GNU_convert:
2325 case DW_OP_GNU_reinterpret:
2326 if (loc->dw_loc_oprnd1.val_class == dw_val_class_unsigned_const)
2327 dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
2328 else
2330 unsigned long o = get_base_type_offset (val1->v.val_die_ref.die);
2331 gcc_assert (o);
2332 dw2_asm_output_data_uleb128 (o, NULL);
2334 break;
2336 case DW_OP_GNU_parameter_ref:
2338 unsigned long o;
2339 gcc_assert (val1->val_class == dw_val_class_die_ref);
2340 o = get_ref_die_offset (val1->v.val_die_ref.die);
2341 dw2_asm_output_data (4, o, NULL);
2343 break;
2345 default:
2346 /* Other codes have no operands. */
2347 break;
2351 /* Output a sequence of location operations.
2352 The for_eh_or_skip parameter controls whether register numbers are
2353 converted using DWARF2_FRAME_REG_OUT, which is needed in the case that
2354 hard reg numbers have been processed via DWARF_FRAME_REGNUM (i.e. for unwind
2355 info). This should be suppressed for the cases that have not been converted
2356 (i.e. symbolic debug info), by setting the parameter < 0. See PR47324. */
2358 void
2359 output_loc_sequence (dw_loc_descr_ref loc, int for_eh_or_skip)
2361 for (; loc != NULL; loc = loc->dw_loc_next)
2363 enum dwarf_location_atom opc = loc->dw_loc_opc;
2364 /* Output the opcode. */
2365 if (for_eh_or_skip >= 0
2366 && opc >= DW_OP_breg0 && opc <= DW_OP_breg31)
2368 unsigned r = (opc - DW_OP_breg0);
2369 r = DWARF2_FRAME_REG_OUT (r, for_eh_or_skip);
2370 gcc_assert (r <= 31);
2371 opc = (enum dwarf_location_atom) (DW_OP_breg0 + r);
2373 else if (for_eh_or_skip >= 0
2374 && opc >= DW_OP_reg0 && opc <= DW_OP_reg31)
2376 unsigned r = (opc - DW_OP_reg0);
2377 r = DWARF2_FRAME_REG_OUT (r, for_eh_or_skip);
2378 gcc_assert (r <= 31);
2379 opc = (enum dwarf_location_atom) (DW_OP_reg0 + r);
2382 dw2_asm_output_data (1, opc,
2383 "%s", dwarf_stack_op_name (opc));
2385 /* Output the operand(s) (if any). */
2386 output_loc_operands (loc, for_eh_or_skip);
2390 /* Output location description stack opcode's operands (if any).
2391 The output is single bytes on a line, suitable for .cfi_escape. */
2393 static void
2394 output_loc_operands_raw (dw_loc_descr_ref loc)
2396 dw_val_ref val1 = &loc->dw_loc_oprnd1;
2397 dw_val_ref val2 = &loc->dw_loc_oprnd2;
2399 switch (loc->dw_loc_opc)
2401 case DW_OP_addr:
2402 case DW_OP_implicit_value:
2403 /* We cannot output addresses in .cfi_escape, only bytes. */
2404 gcc_unreachable ();
2406 case DW_OP_const1u:
2407 case DW_OP_const1s:
2408 case DW_OP_pick:
2409 case DW_OP_deref_size:
2410 case DW_OP_xderef_size:
2411 fputc (',', asm_out_file);
2412 dw2_asm_output_data_raw (1, val1->v.val_int);
2413 break;
2415 case DW_OP_const2u:
2416 case DW_OP_const2s:
2417 fputc (',', asm_out_file);
2418 dw2_asm_output_data_raw (2, val1->v.val_int);
2419 break;
2421 case DW_OP_const4u:
2422 case DW_OP_const4s:
2423 fputc (',', asm_out_file);
2424 dw2_asm_output_data_raw (4, val1->v.val_int);
2425 break;
2427 case DW_OP_const8u:
2428 case DW_OP_const8s:
2429 gcc_assert (HOST_BITS_PER_WIDE_INT >= 64);
2430 fputc (',', asm_out_file);
2431 dw2_asm_output_data_raw (8, val1->v.val_int);
2432 break;
2434 case DW_OP_skip:
2435 case DW_OP_bra:
2437 int offset;
2439 gcc_assert (val1->val_class == dw_val_class_loc);
2440 offset = val1->v.val_loc->dw_loc_addr - (loc->dw_loc_addr + 3);
2442 fputc (',', asm_out_file);
2443 dw2_asm_output_data_raw (2, offset);
2445 break;
2447 case DW_OP_regx:
2449 unsigned r = DWARF2_FRAME_REG_OUT (val1->v.val_unsigned, 1);
2450 gcc_assert (size_of_uleb128 (r)
2451 == size_of_uleb128 (val1->v.val_unsigned));
2452 fputc (',', asm_out_file);
2453 dw2_asm_output_data_uleb128_raw (r);
2455 break;
2457 case DW_OP_constu:
2458 case DW_OP_plus_uconst:
2459 case DW_OP_piece:
2460 fputc (',', asm_out_file);
2461 dw2_asm_output_data_uleb128_raw (val1->v.val_unsigned);
2462 break;
2464 case DW_OP_bit_piece:
2465 fputc (',', asm_out_file);
2466 dw2_asm_output_data_uleb128_raw (val1->v.val_unsigned);
2467 dw2_asm_output_data_uleb128_raw (val2->v.val_unsigned);
2468 break;
2470 case DW_OP_consts:
2471 case DW_OP_breg0:
2472 case DW_OP_breg1:
2473 case DW_OP_breg2:
2474 case DW_OP_breg3:
2475 case DW_OP_breg4:
2476 case DW_OP_breg5:
2477 case DW_OP_breg6:
2478 case DW_OP_breg7:
2479 case DW_OP_breg8:
2480 case DW_OP_breg9:
2481 case DW_OP_breg10:
2482 case DW_OP_breg11:
2483 case DW_OP_breg12:
2484 case DW_OP_breg13:
2485 case DW_OP_breg14:
2486 case DW_OP_breg15:
2487 case DW_OP_breg16:
2488 case DW_OP_breg17:
2489 case DW_OP_breg18:
2490 case DW_OP_breg19:
2491 case DW_OP_breg20:
2492 case DW_OP_breg21:
2493 case DW_OP_breg22:
2494 case DW_OP_breg23:
2495 case DW_OP_breg24:
2496 case DW_OP_breg25:
2497 case DW_OP_breg26:
2498 case DW_OP_breg27:
2499 case DW_OP_breg28:
2500 case DW_OP_breg29:
2501 case DW_OP_breg30:
2502 case DW_OP_breg31:
2503 case DW_OP_fbreg:
2504 fputc (',', asm_out_file);
2505 dw2_asm_output_data_sleb128_raw (val1->v.val_int);
2506 break;
2508 case DW_OP_bregx:
2510 unsigned r = DWARF2_FRAME_REG_OUT (val1->v.val_unsigned, 1);
2511 gcc_assert (size_of_uleb128 (r)
2512 == size_of_uleb128 (val1->v.val_unsigned));
2513 fputc (',', asm_out_file);
2514 dw2_asm_output_data_uleb128_raw (r);
2515 fputc (',', asm_out_file);
2516 dw2_asm_output_data_sleb128_raw (val2->v.val_int);
2518 break;
2520 case DW_OP_GNU_implicit_pointer:
2521 case DW_OP_GNU_entry_value:
2522 case DW_OP_GNU_const_type:
2523 case DW_OP_GNU_regval_type:
2524 case DW_OP_GNU_deref_type:
2525 case DW_OP_GNU_convert:
2526 case DW_OP_GNU_reinterpret:
2527 case DW_OP_GNU_parameter_ref:
2528 gcc_unreachable ();
2529 break;
2531 default:
2532 /* Other codes have no operands. */
2533 break;
2537 void
2538 output_loc_sequence_raw (dw_loc_descr_ref loc)
2540 while (1)
2542 enum dwarf_location_atom opc = loc->dw_loc_opc;
2543 /* Output the opcode. */
2544 if (opc >= DW_OP_breg0 && opc <= DW_OP_breg31)
2546 unsigned r = (opc - DW_OP_breg0);
2547 r = DWARF2_FRAME_REG_OUT (r, 1);
2548 gcc_assert (r <= 31);
2549 opc = (enum dwarf_location_atom) (DW_OP_breg0 + r);
2551 else if (opc >= DW_OP_reg0 && opc <= DW_OP_reg31)
2553 unsigned r = (opc - DW_OP_reg0);
2554 r = DWARF2_FRAME_REG_OUT (r, 1);
2555 gcc_assert (r <= 31);
2556 opc = (enum dwarf_location_atom) (DW_OP_reg0 + r);
2558 /* Output the opcode. */
2559 fprintf (asm_out_file, "%#x", opc);
2560 output_loc_operands_raw (loc);
2562 if (!loc->dw_loc_next)
2563 break;
2564 loc = loc->dw_loc_next;
2566 fputc (',', asm_out_file);
2570 /* This function builds a dwarf location descriptor sequence from a
2571 dw_cfa_location, adding the given OFFSET to the result of the
2572 expression. */
2574 struct dw_loc_descr_struct *
2575 build_cfa_loc (dw_cfa_location *cfa, HOST_WIDE_INT offset)
2577 struct dw_loc_descr_struct *head, *tmp;
2579 offset += cfa->offset;
2581 if (cfa->indirect)
2583 head = new_reg_loc_descr (cfa->reg, cfa->base_offset);
2584 head->dw_loc_oprnd1.val_class = dw_val_class_const;
2585 tmp = new_loc_descr (DW_OP_deref, 0, 0);
2586 add_loc_descr (&head, tmp);
2587 if (offset != 0)
2589 tmp = new_loc_descr (DW_OP_plus_uconst, offset, 0);
2590 add_loc_descr (&head, tmp);
2593 else
2594 head = new_reg_loc_descr (cfa->reg, offset);
2596 return head;
2599 /* This function builds a dwarf location descriptor sequence for
2600 the address at OFFSET from the CFA when stack is aligned to
2601 ALIGNMENT byte. */
2603 struct dw_loc_descr_struct *
2604 build_cfa_aligned_loc (dw_cfa_location *cfa,
2605 HOST_WIDE_INT offset, HOST_WIDE_INT alignment)
2607 struct dw_loc_descr_struct *head;
2608 unsigned int dwarf_fp
2609 = DWARF_FRAME_REGNUM (HARD_FRAME_POINTER_REGNUM);
2611 /* When CFA is defined as FP+OFFSET, emulate stack alignment. */
2612 if (cfa->reg == HARD_FRAME_POINTER_REGNUM && cfa->indirect == 0)
2614 head = new_reg_loc_descr (dwarf_fp, 0);
2615 add_loc_descr (&head, int_loc_descriptor (alignment));
2616 add_loc_descr (&head, new_loc_descr (DW_OP_and, 0, 0));
2617 loc_descr_plus_const (&head, offset);
2619 else
2620 head = new_reg_loc_descr (dwarf_fp, offset);
2621 return head;
2624 /* And now, the support for symbolic debugging information. */
2626 /* .debug_str support. */
2627 static int output_indirect_string (void **, void *);
2629 static void dwarf2out_init (const char *);
2630 static void dwarf2out_finish (const char *);
2631 static void dwarf2out_assembly_start (void);
2632 static void dwarf2out_define (unsigned int, const char *);
2633 static void dwarf2out_undef (unsigned int, const char *);
2634 static void dwarf2out_start_source_file (unsigned, const char *);
2635 static void dwarf2out_end_source_file (unsigned);
2636 static void dwarf2out_function_decl (tree);
2637 static void dwarf2out_begin_block (unsigned, unsigned);
2638 static void dwarf2out_end_block (unsigned, unsigned);
2639 static bool dwarf2out_ignore_block (const_tree);
2640 static void dwarf2out_global_decl (tree);
2641 static void dwarf2out_type_decl (tree, int);
2642 static void dwarf2out_imported_module_or_decl (tree, tree, tree, bool);
2643 static void dwarf2out_imported_module_or_decl_1 (tree, tree, tree,
2644 dw_die_ref);
2645 static void dwarf2out_abstract_function (tree);
2646 static void dwarf2out_var_location (rtx);
2647 static void dwarf2out_begin_function (tree);
2648 static void dwarf2out_set_name (tree, tree);
2650 /* The debug hooks structure. */
2652 const struct gcc_debug_hooks dwarf2_debug_hooks =
2654 dwarf2out_init,
2655 dwarf2out_finish,
2656 dwarf2out_assembly_start,
2657 dwarf2out_define,
2658 dwarf2out_undef,
2659 dwarf2out_start_source_file,
2660 dwarf2out_end_source_file,
2661 dwarf2out_begin_block,
2662 dwarf2out_end_block,
2663 dwarf2out_ignore_block,
2664 dwarf2out_source_line,
2665 dwarf2out_begin_prologue,
2666 #if VMS_DEBUGGING_INFO
2667 dwarf2out_vms_end_prologue,
2668 dwarf2out_vms_begin_epilogue,
2669 #else
2670 debug_nothing_int_charstar,
2671 debug_nothing_int_charstar,
2672 #endif
2673 dwarf2out_end_epilogue,
2674 dwarf2out_begin_function,
2675 debug_nothing_int, /* end_function */
2676 dwarf2out_function_decl, /* function_decl */
2677 dwarf2out_global_decl,
2678 dwarf2out_type_decl, /* type_decl */
2679 dwarf2out_imported_module_or_decl,
2680 debug_nothing_tree, /* deferred_inline_function */
2681 /* The DWARF 2 backend tries to reduce debugging bloat by not
2682 emitting the abstract description of inline functions until
2683 something tries to reference them. */
2684 dwarf2out_abstract_function, /* outlining_inline_function */
2685 debug_nothing_rtx, /* label */
2686 debug_nothing_int, /* handle_pch */
2687 dwarf2out_var_location,
2688 dwarf2out_switch_text_section,
2689 dwarf2out_set_name,
2690 1, /* start_end_main_source_file */
2691 TYPE_SYMTAB_IS_DIE /* tree_type_symtab_field */
2694 /* NOTE: In the comments in this file, many references are made to
2695 "Debugging Information Entries". This term is abbreviated as `DIE'
2696 throughout the remainder of this file. */
2698 /* An internal representation of the DWARF output is built, and then
2699 walked to generate the DWARF debugging info. The walk of the internal
2700 representation is done after the entire program has been compiled.
2701 The types below are used to describe the internal representation. */
2703 /* Whether to put type DIEs into their own section .debug_types instead
2704 of making them part of the .debug_info section. Only supported for
2705 Dwarf V4 or higher and the user didn't disable them through
2706 -fno-debug-types-section. It is more efficient to put them in a
2707 separate comdat sections since the linker will then be able to
2708 remove duplicates. But not all tools support .debug_types sections
2709 yet. */
2711 #define use_debug_types (dwarf_version >= 4 && flag_debug_types_section)
2713 /* Various DIE's use offsets relative to the beginning of the
2714 .debug_info section to refer to each other. */
2716 typedef long int dw_offset;
2718 /* Define typedefs here to avoid circular dependencies. */
2720 typedef struct dw_attr_struct *dw_attr_ref;
2721 typedef struct dw_line_info_struct *dw_line_info_ref;
2722 typedef struct pubname_struct *pubname_ref;
2723 typedef struct dw_ranges_struct *dw_ranges_ref;
2724 typedef struct dw_ranges_by_label_struct *dw_ranges_by_label_ref;
2725 typedef struct comdat_type_struct *comdat_type_node_ref;
2727 /* The entries in the line_info table more-or-less mirror the opcodes
2728 that are used in the real dwarf line table. Arrays of these entries
2729 are collected per section when DWARF2_ASM_LINE_DEBUG_INFO is not
2730 supported. */
2732 enum dw_line_info_opcode {
2733 /* Emit DW_LNE_set_address; the operand is the label index. */
2734 LI_set_address,
2736 /* Emit a row to the matrix with the given line. This may be done
2737 via any combination of DW_LNS_copy, DW_LNS_advance_line, and
2738 special opcodes. */
2739 LI_set_line,
2741 /* Emit a DW_LNS_set_file. */
2742 LI_set_file,
2744 /* Emit a DW_LNS_set_column. */
2745 LI_set_column,
2747 /* Emit a DW_LNS_negate_stmt; the operand is ignored. */
2748 LI_negate_stmt,
2750 /* Emit a DW_LNS_set_prologue_end/epilogue_begin; the operand is ignored. */
2751 LI_set_prologue_end,
2752 LI_set_epilogue_begin,
2754 /* Emit a DW_LNE_set_discriminator. */
2755 LI_set_discriminator
2758 typedef struct GTY(()) dw_line_info_struct {
2759 enum dw_line_info_opcode opcode;
2760 unsigned int val;
2761 } dw_line_info_entry;
2763 DEF_VEC_O(dw_line_info_entry);
2764 DEF_VEC_ALLOC_O(dw_line_info_entry, gc);
2766 typedef struct GTY(()) dw_line_info_table_struct {
2767 /* The label that marks the end of this section. */
2768 const char *end_label;
2770 /* The values for the last row of the matrix, as collected in the table.
2771 These are used to minimize the changes to the next row. */
2772 unsigned int file_num;
2773 unsigned int line_num;
2774 unsigned int column_num;
2775 int discrim_num;
2776 bool is_stmt;
2777 bool in_use;
2779 VEC(dw_line_info_entry, gc) *entries;
2780 } dw_line_info_table;
2782 typedef dw_line_info_table *dw_line_info_table_p;
2784 DEF_VEC_P(dw_line_info_table_p);
2785 DEF_VEC_ALLOC_P(dw_line_info_table_p, gc);
2787 /* Each DIE attribute has a field specifying the attribute kind,
2788 a link to the next attribute in the chain, and an attribute value.
2789 Attributes are typically linked below the DIE they modify. */
2791 typedef struct GTY(()) dw_attr_struct {
2792 enum dwarf_attribute dw_attr;
2793 dw_val_node dw_attr_val;
2795 dw_attr_node;
2797 DEF_VEC_O(dw_attr_node);
2798 DEF_VEC_ALLOC_O(dw_attr_node,gc);
2800 /* The Debugging Information Entry (DIE) structure. DIEs form a tree.
2801 The children of each node form a circular list linked by
2802 die_sib. die_child points to the node *before* the "first" child node. */
2804 typedef struct GTY((chain_circular ("%h.die_sib"))) die_struct {
2805 union die_symbol_or_type_node
2807 char * GTY ((tag ("0"))) die_symbol;
2808 comdat_type_node_ref GTY ((tag ("1"))) die_type_node;
2810 GTY ((desc ("use_debug_types"))) die_id;
2811 VEC(dw_attr_node,gc) * die_attr;
2812 dw_die_ref die_parent;
2813 dw_die_ref die_child;
2814 dw_die_ref die_sib;
2815 dw_die_ref die_definition; /* ref from a specification to its definition */
2816 dw_offset die_offset;
2817 unsigned long die_abbrev;
2818 int die_mark;
2819 /* Die is used and must not be pruned as unused. */
2820 int die_perennial_p;
2821 unsigned int decl_id;
2822 enum dwarf_tag die_tag;
2824 die_node;
2826 /* Evaluate 'expr' while 'c' is set to each child of DIE in order. */
2827 #define FOR_EACH_CHILD(die, c, expr) do { \
2828 c = die->die_child; \
2829 if (c) do { \
2830 c = c->die_sib; \
2831 expr; \
2832 } while (c != die->die_child); \
2833 } while (0)
2835 /* The pubname structure */
2837 typedef struct GTY(()) pubname_struct {
2838 dw_die_ref die;
2839 const char *name;
2841 pubname_entry;
2843 DEF_VEC_O(pubname_entry);
2844 DEF_VEC_ALLOC_O(pubname_entry, gc);
2846 struct GTY(()) dw_ranges_struct {
2847 /* If this is positive, it's a block number, otherwise it's a
2848 bitwise-negated index into dw_ranges_by_label. */
2849 int num;
2852 /* A structure to hold a macinfo entry. */
2854 typedef struct GTY(()) macinfo_struct {
2855 unsigned char code;
2856 unsigned HOST_WIDE_INT lineno;
2857 const char *info;
2859 macinfo_entry;
2861 DEF_VEC_O(macinfo_entry);
2862 DEF_VEC_ALLOC_O(macinfo_entry, gc);
2864 struct GTY(()) dw_ranges_by_label_struct {
2865 const char *begin;
2866 const char *end;
2869 /* The comdat type node structure. */
2870 typedef struct GTY(()) comdat_type_struct
2872 dw_die_ref root_die;
2873 dw_die_ref type_die;
2874 char signature[DWARF_TYPE_SIGNATURE_SIZE];
2875 struct comdat_type_struct *next;
2877 comdat_type_node;
2879 /* The limbo die list structure. */
2880 typedef struct GTY(()) limbo_die_struct {
2881 dw_die_ref die;
2882 tree created_for;
2883 struct limbo_die_struct *next;
2885 limbo_die_node;
2887 typedef struct skeleton_chain_struct
2889 dw_die_ref old_die;
2890 dw_die_ref new_die;
2891 struct skeleton_chain_struct *parent;
2893 skeleton_chain_node;
2895 /* Define a macro which returns nonzero for a TYPE_DECL which was
2896 implicitly generated for a type.
2898 Note that, unlike the C front-end (which generates a NULL named
2899 TYPE_DECL node for each complete tagged type, each array type,
2900 and each function type node created) the C++ front-end generates
2901 a _named_ TYPE_DECL node for each tagged type node created.
2902 These TYPE_DECLs have DECL_ARTIFICIAL set, so we know not to
2903 generate a DW_TAG_typedef DIE for them. Likewise with the Ada
2904 front-end, but for each type, tagged or not. */
2906 #define TYPE_DECL_IS_STUB(decl) \
2907 (DECL_NAME (decl) == NULL_TREE \
2908 || (DECL_ARTIFICIAL (decl) \
2909 && ((decl == TYPE_STUB_DECL (TREE_TYPE (decl))) \
2910 /* This is necessary for stub decls that \
2911 appear in nested inline functions. */ \
2912 || (DECL_ABSTRACT_ORIGIN (decl) != NULL_TREE \
2913 && (decl_ultimate_origin (decl) \
2914 == TYPE_STUB_DECL (TREE_TYPE (decl)))))))
2916 /* Information concerning the compilation unit's programming
2917 language, and compiler version. */
2919 /* Fixed size portion of the DWARF compilation unit header. */
2920 #define DWARF_COMPILE_UNIT_HEADER_SIZE \
2921 (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 3)
2923 /* Fixed size portion of the DWARF comdat type unit header. */
2924 #define DWARF_COMDAT_TYPE_UNIT_HEADER_SIZE \
2925 (DWARF_COMPILE_UNIT_HEADER_SIZE + DWARF_TYPE_SIGNATURE_SIZE \
2926 + DWARF_OFFSET_SIZE)
2928 /* Fixed size portion of public names info. */
2929 #define DWARF_PUBNAMES_HEADER_SIZE (2 * DWARF_OFFSET_SIZE + 2)
2931 /* Fixed size portion of the address range info. */
2932 #define DWARF_ARANGES_HEADER_SIZE \
2933 (DWARF_ROUND (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 4, \
2934 DWARF2_ADDR_SIZE * 2) \
2935 - DWARF_INITIAL_LENGTH_SIZE)
2937 /* Size of padding portion in the address range info. It must be
2938 aligned to twice the pointer size. */
2939 #define DWARF_ARANGES_PAD_SIZE \
2940 (DWARF_ROUND (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 4, \
2941 DWARF2_ADDR_SIZE * 2) \
2942 - (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 4))
2944 /* Use assembler line directives if available. */
2945 #ifndef DWARF2_ASM_LINE_DEBUG_INFO
2946 #ifdef HAVE_AS_DWARF2_DEBUG_LINE
2947 #define DWARF2_ASM_LINE_DEBUG_INFO 1
2948 #else
2949 #define DWARF2_ASM_LINE_DEBUG_INFO 0
2950 #endif
2951 #endif
2953 /* Minimum line offset in a special line info. opcode.
2954 This value was chosen to give a reasonable range of values. */
2955 #define DWARF_LINE_BASE -10
2957 /* First special line opcode - leave room for the standard opcodes. */
2958 #define DWARF_LINE_OPCODE_BASE ((int)DW_LNS_set_isa + 1)
2960 /* Range of line offsets in a special line info. opcode. */
2961 #define DWARF_LINE_RANGE (254-DWARF_LINE_OPCODE_BASE+1)
2963 /* Flag that indicates the initial value of the is_stmt_start flag.
2964 In the present implementation, we do not mark any lines as
2965 the beginning of a source statement, because that information
2966 is not made available by the GCC front-end. */
2967 #define DWARF_LINE_DEFAULT_IS_STMT_START 1
2969 /* Maximum number of operations per instruction bundle. */
2970 #ifndef DWARF_LINE_DEFAULT_MAX_OPS_PER_INSN
2971 #define DWARF_LINE_DEFAULT_MAX_OPS_PER_INSN 1
2972 #endif
2974 /* This location is used by calc_die_sizes() to keep track
2975 the offset of each DIE within the .debug_info section. */
2976 static unsigned long next_die_offset;
2978 /* Record the root of the DIE's built for the current compilation unit. */
2979 static GTY(()) dw_die_ref single_comp_unit_die;
2981 /* A list of type DIEs that have been separated into comdat sections. */
2982 static GTY(()) comdat_type_node *comdat_type_list;
2984 /* A list of DIEs with a NULL parent waiting to be relocated. */
2985 static GTY(()) limbo_die_node *limbo_die_list;
2987 /* A list of DIEs for which we may have to generate
2988 DW_AT_{,MIPS_}linkage_name once their DECL_ASSEMBLER_NAMEs are set. */
2989 static GTY(()) limbo_die_node *deferred_asm_name;
2991 /* Filenames referenced by this compilation unit. */
2992 static GTY((param_is (struct dwarf_file_data))) htab_t file_table;
2994 /* A hash table of references to DIE's that describe declarations.
2995 The key is a DECL_UID() which is a unique number identifying each decl. */
2996 static GTY ((param_is (struct die_struct))) htab_t decl_die_table;
2998 /* A hash table of references to DIE's that describe COMMON blocks.
2999 The key is DECL_UID() ^ die_parent. */
3000 static GTY ((param_is (struct die_struct))) htab_t common_block_die_table;
3002 typedef struct GTY(()) die_arg_entry_struct {
3003 dw_die_ref die;
3004 tree arg;
3005 } die_arg_entry;
3007 DEF_VEC_O(die_arg_entry);
3008 DEF_VEC_ALLOC_O(die_arg_entry,gc);
3010 /* Node of the variable location list. */
3011 struct GTY ((chain_next ("%h.next"))) var_loc_node {
3012 /* Either NOTE_INSN_VAR_LOCATION, or, for SRA optimized variables,
3013 EXPR_LIST chain. For small bitsizes, bitsize is encoded
3014 in mode of the EXPR_LIST node and first EXPR_LIST operand
3015 is either NOTE_INSN_VAR_LOCATION for a piece with a known
3016 location or NULL for padding. For larger bitsizes,
3017 mode is 0 and first operand is a CONCAT with bitsize
3018 as first CONCAT operand and NOTE_INSN_VAR_LOCATION resp.
3019 NULL as second operand. */
3020 rtx GTY (()) loc;
3021 const char * GTY (()) label;
3022 struct var_loc_node * GTY (()) next;
3025 /* Variable location list. */
3026 struct GTY (()) var_loc_list_def {
3027 struct var_loc_node * GTY (()) first;
3029 /* Pointer to the last but one or last element of the
3030 chained list. If the list is empty, both first and
3031 last are NULL, if the list contains just one node
3032 or the last node certainly is not redundant, it points
3033 to the last node, otherwise points to the last but one.
3034 Do not mark it for GC because it is marked through the chain. */
3035 struct var_loc_node * GTY ((skip ("%h"))) last;
3037 /* Pointer to the last element before section switch,
3038 if NULL, either sections weren't switched or first
3039 is after section switch. */
3040 struct var_loc_node * GTY ((skip ("%h"))) last_before_switch;
3042 /* DECL_UID of the variable decl. */
3043 unsigned int decl_id;
3045 typedef struct var_loc_list_def var_loc_list;
3047 /* Call argument location list. */
3048 struct GTY ((chain_next ("%h.next"))) call_arg_loc_node {
3049 rtx GTY (()) call_arg_loc_note;
3050 const char * GTY (()) label;
3051 tree GTY (()) block;
3052 bool tail_call_p;
3053 rtx GTY (()) symbol_ref;
3054 struct call_arg_loc_node * GTY (()) next;
3058 /* Table of decl location linked lists. */
3059 static GTY ((param_is (var_loc_list))) htab_t decl_loc_table;
3061 /* Head and tail of call_arg_loc chain. */
3062 static GTY (()) struct call_arg_loc_node *call_arg_locations;
3063 static struct call_arg_loc_node *call_arg_loc_last;
3065 /* Number of call sites in the current function. */
3066 static int call_site_count = -1;
3067 /* Number of tail call sites in the current function. */
3068 static int tail_call_site_count = -1;
3070 /* Vector mapping block numbers to DW_TAG_{lexical_block,inlined_subroutine}
3071 DIEs. */
3072 static VEC (dw_die_ref, heap) *block_map;
3074 /* A cached location list. */
3075 struct GTY (()) cached_dw_loc_list_def {
3076 /* The DECL_UID of the decl that this entry describes. */
3077 unsigned int decl_id;
3079 /* The cached location list. */
3080 dw_loc_list_ref loc_list;
3082 typedef struct cached_dw_loc_list_def cached_dw_loc_list;
3084 /* Table of cached location lists. */
3085 static GTY ((param_is (cached_dw_loc_list))) htab_t cached_dw_loc_list_table;
3087 /* A pointer to the base of a list of references to DIE's that
3088 are uniquely identified by their tag, presence/absence of
3089 children DIE's, and list of attribute/value pairs. */
3090 static GTY((length ("abbrev_die_table_allocated")))
3091 dw_die_ref *abbrev_die_table;
3093 /* Number of elements currently allocated for abbrev_die_table. */
3094 static GTY(()) unsigned abbrev_die_table_allocated;
3096 /* Number of elements in type_die_table currently in use. */
3097 static GTY(()) unsigned abbrev_die_table_in_use;
3099 /* Size (in elements) of increments by which we may expand the
3100 abbrev_die_table. */
3101 #define ABBREV_DIE_TABLE_INCREMENT 256
3103 /* A global counter for generating labels for line number data. */
3104 static unsigned int line_info_label_num;
3106 /* The current table to which we should emit line number information
3107 for the current function. This will be set up at the beginning of
3108 assembly for the function. */
3109 static dw_line_info_table *cur_line_info_table;
3111 /* The two default tables of line number info. */
3112 static GTY(()) dw_line_info_table *text_section_line_info;
3113 static GTY(()) dw_line_info_table *cold_text_section_line_info;
3115 /* The set of all non-default tables of line number info. */
3116 static GTY(()) VEC (dw_line_info_table_p, gc) *separate_line_info;
3118 /* A flag to tell pubnames/types export if there is an info section to
3119 refer to. */
3120 static bool info_section_emitted;
3122 /* A pointer to the base of a table that contains a list of publicly
3123 accessible names. */
3124 static GTY (()) VEC (pubname_entry, gc) * pubname_table;
3126 /* A pointer to the base of a table that contains a list of publicly
3127 accessible types. */
3128 static GTY (()) VEC (pubname_entry, gc) * pubtype_table;
3130 /* A pointer to the base of a table that contains a list of macro
3131 defines/undefines (and file start/end markers). */
3132 static GTY (()) VEC (macinfo_entry, gc) * macinfo_table;
3134 /* Array of dies for which we should generate .debug_ranges info. */
3135 static GTY ((length ("ranges_table_allocated"))) dw_ranges_ref ranges_table;
3137 /* Number of elements currently allocated for ranges_table. */
3138 static GTY(()) unsigned ranges_table_allocated;
3140 /* Number of elements in ranges_table currently in use. */
3141 static GTY(()) unsigned ranges_table_in_use;
3143 /* Array of pairs of labels referenced in ranges_table. */
3144 static GTY ((length ("ranges_by_label_allocated")))
3145 dw_ranges_by_label_ref ranges_by_label;
3147 /* Number of elements currently allocated for ranges_by_label. */
3148 static GTY(()) unsigned ranges_by_label_allocated;
3150 /* Number of elements in ranges_by_label currently in use. */
3151 static GTY(()) unsigned ranges_by_label_in_use;
3153 /* Size (in elements) of increments by which we may expand the
3154 ranges_table. */
3155 #define RANGES_TABLE_INCREMENT 64
3157 /* Whether we have location lists that need outputting */
3158 static GTY(()) bool have_location_lists;
3160 /* Unique label counter. */
3161 static GTY(()) unsigned int loclabel_num;
3163 /* Unique label counter for point-of-call tables. */
3164 static GTY(()) unsigned int poc_label_num;
3166 /* Record whether the function being analyzed contains inlined functions. */
3167 static int current_function_has_inlines;
3169 /* The last file entry emitted by maybe_emit_file(). */
3170 static GTY(()) struct dwarf_file_data * last_emitted_file;
3172 /* Number of internal labels generated by gen_internal_sym(). */
3173 static GTY(()) int label_num;
3175 /* Cached result of previous call to lookup_filename. */
3176 static GTY(()) struct dwarf_file_data * file_table_last_lookup;
3178 static GTY(()) VEC(die_arg_entry,gc) *tmpl_value_parm_die_table;
3180 /* Instances of generic types for which we need to generate debug
3181 info that describe their generic parameters and arguments. That
3182 generation needs to happen once all types are properly laid out so
3183 we do it at the end of compilation. */
3184 static GTY(()) VEC(tree,gc) *generic_type_instances;
3186 /* Offset from the "steady-state frame pointer" to the frame base,
3187 within the current function. */
3188 static HOST_WIDE_INT frame_pointer_fb_offset;
3189 static bool frame_pointer_fb_offset_valid;
3191 static VEC (dw_die_ref, heap) *base_types;
3193 /* Forward declarations for functions defined in this file. */
3195 static int is_pseudo_reg (const_rtx);
3196 static tree type_main_variant (tree);
3197 static int is_tagged_type (const_tree);
3198 static const char *dwarf_tag_name (unsigned);
3199 static const char *dwarf_attr_name (unsigned);
3200 static const char *dwarf_form_name (unsigned);
3201 static tree decl_ultimate_origin (const_tree);
3202 static tree decl_class_context (tree);
3203 static void add_dwarf_attr (dw_die_ref, dw_attr_ref);
3204 static inline enum dw_val_class AT_class (dw_attr_ref);
3205 static void add_AT_flag (dw_die_ref, enum dwarf_attribute, unsigned);
3206 static inline unsigned AT_flag (dw_attr_ref);
3207 static void add_AT_int (dw_die_ref, enum dwarf_attribute, HOST_WIDE_INT);
3208 static inline HOST_WIDE_INT AT_int (dw_attr_ref);
3209 static void add_AT_unsigned (dw_die_ref, enum dwarf_attribute, unsigned HOST_WIDE_INT);
3210 static inline unsigned HOST_WIDE_INT AT_unsigned (dw_attr_ref);
3211 static void add_AT_double (dw_die_ref, enum dwarf_attribute,
3212 HOST_WIDE_INT, unsigned HOST_WIDE_INT);
3213 static inline void add_AT_vec (dw_die_ref, enum dwarf_attribute, unsigned int,
3214 unsigned int, unsigned char *);
3215 static void add_AT_data8 (dw_die_ref, enum dwarf_attribute, unsigned char *);
3216 static hashval_t debug_str_do_hash (const void *);
3217 static int debug_str_eq (const void *, const void *);
3218 static void add_AT_string (dw_die_ref, enum dwarf_attribute, const char *);
3219 static inline const char *AT_string (dw_attr_ref);
3220 static enum dwarf_form AT_string_form (dw_attr_ref);
3221 static void add_AT_die_ref (dw_die_ref, enum dwarf_attribute, dw_die_ref);
3222 static void add_AT_specification (dw_die_ref, dw_die_ref);
3223 static inline dw_die_ref AT_ref (dw_attr_ref);
3224 static inline int AT_ref_external (dw_attr_ref);
3225 static inline void set_AT_ref_external (dw_attr_ref, int);
3226 static void add_AT_fde_ref (dw_die_ref, enum dwarf_attribute, unsigned);
3227 static void add_AT_loc (dw_die_ref, enum dwarf_attribute, dw_loc_descr_ref);
3228 static inline dw_loc_descr_ref AT_loc (dw_attr_ref);
3229 static void add_AT_loc_list (dw_die_ref, enum dwarf_attribute,
3230 dw_loc_list_ref);
3231 static inline dw_loc_list_ref AT_loc_list (dw_attr_ref);
3232 static void add_AT_addr (dw_die_ref, enum dwarf_attribute, rtx);
3233 static inline rtx AT_addr (dw_attr_ref);
3234 static void add_AT_lbl_id (dw_die_ref, enum dwarf_attribute, const char *);
3235 static void add_AT_lineptr (dw_die_ref, enum dwarf_attribute, const char *);
3236 static void add_AT_macptr (dw_die_ref, enum dwarf_attribute, const char *);
3237 static void add_AT_offset (dw_die_ref, enum dwarf_attribute,
3238 unsigned HOST_WIDE_INT);
3239 static void add_AT_range_list (dw_die_ref, enum dwarf_attribute,
3240 unsigned long);
3241 static inline const char *AT_lbl (dw_attr_ref);
3242 static dw_attr_ref get_AT (dw_die_ref, enum dwarf_attribute);
3243 static const char *get_AT_low_pc (dw_die_ref);
3244 static const char *get_AT_hi_pc (dw_die_ref);
3245 static const char *get_AT_string (dw_die_ref, enum dwarf_attribute);
3246 static int get_AT_flag (dw_die_ref, enum dwarf_attribute);
3247 static unsigned get_AT_unsigned (dw_die_ref, enum dwarf_attribute);
3248 static inline dw_die_ref get_AT_ref (dw_die_ref, enum dwarf_attribute);
3249 static bool is_cxx (void);
3250 static bool is_fortran (void);
3251 static bool is_ada (void);
3252 static void remove_AT (dw_die_ref, enum dwarf_attribute);
3253 static void remove_child_TAG (dw_die_ref, enum dwarf_tag);
3254 static void add_child_die (dw_die_ref, dw_die_ref);
3255 static dw_die_ref new_die (enum dwarf_tag, dw_die_ref, tree);
3256 static dw_die_ref lookup_type_die (tree);
3257 static dw_die_ref strip_naming_typedef (tree, dw_die_ref);
3258 static dw_die_ref lookup_type_die_strip_naming_typedef (tree);
3259 static void equate_type_number_to_die (tree, dw_die_ref);
3260 static hashval_t decl_die_table_hash (const void *);
3261 static int decl_die_table_eq (const void *, const void *);
3262 static dw_die_ref lookup_decl_die (tree);
3263 static hashval_t common_block_die_table_hash (const void *);
3264 static int common_block_die_table_eq (const void *, const void *);
3265 static hashval_t decl_loc_table_hash (const void *);
3266 static int decl_loc_table_eq (const void *, const void *);
3267 static var_loc_list *lookup_decl_loc (const_tree);
3268 static void equate_decl_number_to_die (tree, dw_die_ref);
3269 static struct var_loc_node *add_var_loc_to_decl (tree, rtx, const char *);
3270 static void print_spaces (FILE *);
3271 static void print_die (dw_die_ref, FILE *);
3272 static dw_die_ref push_new_compile_unit (dw_die_ref, dw_die_ref);
3273 static dw_die_ref pop_compile_unit (dw_die_ref);
3274 static void loc_checksum (dw_loc_descr_ref, struct md5_ctx *);
3275 static void attr_checksum (dw_attr_ref, struct md5_ctx *, int *);
3276 static void die_checksum (dw_die_ref, struct md5_ctx *, int *);
3277 static void checksum_sleb128 (HOST_WIDE_INT, struct md5_ctx *);
3278 static void checksum_uleb128 (unsigned HOST_WIDE_INT, struct md5_ctx *);
3279 static void loc_checksum_ordered (dw_loc_descr_ref, struct md5_ctx *);
3280 static void attr_checksum_ordered (enum dwarf_tag, dw_attr_ref,
3281 struct md5_ctx *, int *);
3282 struct checksum_attributes;
3283 static void collect_checksum_attributes (struct checksum_attributes *, dw_die_ref);
3284 static void die_checksum_ordered (dw_die_ref, struct md5_ctx *, int *);
3285 static void checksum_die_context (dw_die_ref, struct md5_ctx *);
3286 static void generate_type_signature (dw_die_ref, comdat_type_node *);
3287 static int same_loc_p (dw_loc_descr_ref, dw_loc_descr_ref, int *);
3288 static int same_dw_val_p (const dw_val_node *, const dw_val_node *, int *);
3289 static int same_attr_p (dw_attr_ref, dw_attr_ref, int *);
3290 static int same_die_p (dw_die_ref, dw_die_ref, int *);
3291 static int same_die_p_wrap (dw_die_ref, dw_die_ref);
3292 static void compute_section_prefix (dw_die_ref);
3293 static int is_type_die (dw_die_ref);
3294 static int is_comdat_die (dw_die_ref);
3295 static int is_symbol_die (dw_die_ref);
3296 static void assign_symbol_names (dw_die_ref);
3297 static void break_out_includes (dw_die_ref);
3298 static int is_declaration_die (dw_die_ref);
3299 static int should_move_die_to_comdat (dw_die_ref);
3300 static dw_die_ref clone_as_declaration (dw_die_ref);
3301 static dw_die_ref clone_die (dw_die_ref);
3302 static dw_die_ref clone_tree (dw_die_ref);
3303 static void copy_declaration_context (dw_die_ref, dw_die_ref);
3304 static void generate_skeleton_ancestor_tree (skeleton_chain_node *);
3305 static void generate_skeleton_bottom_up (skeleton_chain_node *);
3306 static dw_die_ref generate_skeleton (dw_die_ref);
3307 static dw_die_ref remove_child_or_replace_with_skeleton (dw_die_ref,
3308 dw_die_ref);
3309 static void break_out_comdat_types (dw_die_ref);
3310 static dw_die_ref copy_ancestor_tree (dw_die_ref, dw_die_ref, htab_t);
3311 static void copy_decls_walk (dw_die_ref, dw_die_ref, htab_t);
3312 static void copy_decls_for_unworthy_types (dw_die_ref);
3314 static hashval_t htab_cu_hash (const void *);
3315 static int htab_cu_eq (const void *, const void *);
3316 static void htab_cu_del (void *);
3317 static int check_duplicate_cu (dw_die_ref, htab_t, unsigned *);
3318 static void record_comdat_symbol_number (dw_die_ref, htab_t, unsigned);
3319 static void add_sibling_attributes (dw_die_ref);
3320 static void build_abbrev_table (dw_die_ref);
3321 static void output_location_lists (dw_die_ref);
3322 static int constant_size (unsigned HOST_WIDE_INT);
3323 static unsigned long size_of_die (dw_die_ref);
3324 static void calc_die_sizes (dw_die_ref);
3325 static void calc_base_type_die_sizes (void);
3326 static void mark_dies (dw_die_ref);
3327 static void unmark_dies (dw_die_ref);
3328 static void unmark_all_dies (dw_die_ref);
3329 static unsigned long size_of_pubnames (VEC (pubname_entry,gc) *);
3330 static unsigned long size_of_aranges (void);
3331 static enum dwarf_form value_format (dw_attr_ref);
3332 static void output_value_format (dw_attr_ref);
3333 static void output_abbrev_section (void);
3334 static void output_die_symbol (dw_die_ref);
3335 static void output_die (dw_die_ref);
3336 static void output_compilation_unit_header (void);
3337 static void output_comp_unit (dw_die_ref, int);
3338 static void output_comdat_type_unit (comdat_type_node *);
3339 static const char *dwarf2_name (tree, int);
3340 static void add_pubname (tree, dw_die_ref);
3341 static void add_pubname_string (const char *, dw_die_ref);
3342 static void add_pubtype (tree, dw_die_ref);
3343 static void output_pubnames (VEC (pubname_entry,gc) *);
3344 static void output_aranges (unsigned long);
3345 static unsigned int add_ranges_num (int);
3346 static unsigned int add_ranges (const_tree);
3347 static void add_ranges_by_labels (dw_die_ref, const char *, const char *,
3348 bool *);
3349 static void output_ranges (void);
3350 static dw_line_info_table *new_line_info_table (void);
3351 static void output_line_info (void);
3352 static void output_file_names (void);
3353 static dw_die_ref base_type_die (tree);
3354 static int is_base_type (tree);
3355 static dw_die_ref subrange_type_die (tree, tree, tree, dw_die_ref);
3356 static dw_die_ref modified_type_die (tree, int, int, dw_die_ref);
3357 static dw_die_ref generic_parameter_die (tree, tree, bool, dw_die_ref);
3358 static dw_die_ref template_parameter_pack_die (tree, tree, dw_die_ref);
3359 static int type_is_enum (const_tree);
3360 static unsigned int dbx_reg_number (const_rtx);
3361 static void add_loc_descr_op_piece (dw_loc_descr_ref *, int);
3362 static dw_loc_descr_ref reg_loc_descriptor (rtx, enum var_init_status);
3363 static dw_loc_descr_ref one_reg_loc_descriptor (unsigned int,
3364 enum var_init_status);
3365 static dw_loc_descr_ref multiple_reg_loc_descriptor (rtx, rtx,
3366 enum var_init_status);
3367 static dw_loc_descr_ref based_loc_descr (rtx, HOST_WIDE_INT,
3368 enum var_init_status);
3369 static int is_based_loc (const_rtx);
3370 static int resolve_one_addr (rtx *, void *);
3371 static dw_loc_descr_ref concat_loc_descriptor (rtx, rtx,
3372 enum var_init_status);
3373 static dw_loc_descr_ref loc_descriptor (rtx, enum machine_mode mode,
3374 enum var_init_status);
3375 static dw_loc_list_ref loc_list_from_tree (tree, int);
3376 static dw_loc_descr_ref loc_descriptor_from_tree (tree, int);
3377 static HOST_WIDE_INT ceiling (HOST_WIDE_INT, unsigned int);
3378 static tree field_type (const_tree);
3379 static unsigned int simple_type_align_in_bits (const_tree);
3380 static unsigned int simple_decl_align_in_bits (const_tree);
3381 static unsigned HOST_WIDE_INT simple_type_size_in_bits (const_tree);
3382 static HOST_WIDE_INT field_byte_offset (const_tree);
3383 static void add_AT_location_description (dw_die_ref, enum dwarf_attribute,
3384 dw_loc_list_ref);
3385 static void add_data_member_location_attribute (dw_die_ref, tree);
3386 static bool add_const_value_attribute (dw_die_ref, rtx);
3387 static void insert_int (HOST_WIDE_INT, unsigned, unsigned char *);
3388 static void insert_double (double_int, unsigned char *);
3389 static void insert_float (const_rtx, unsigned char *);
3390 static rtx rtl_for_decl_location (tree);
3391 static bool add_location_or_const_value_attribute (dw_die_ref, tree, bool,
3392 enum dwarf_attribute);
3393 static bool tree_add_const_value_attribute (dw_die_ref, tree);
3394 static bool tree_add_const_value_attribute_for_decl (dw_die_ref, tree);
3395 static void add_name_attribute (dw_die_ref, const char *);
3396 static void add_gnat_descriptive_type_attribute (dw_die_ref, tree, dw_die_ref);
3397 static void add_comp_dir_attribute (dw_die_ref);
3398 static void add_bound_info (dw_die_ref, enum dwarf_attribute, tree);
3399 static void add_subscript_info (dw_die_ref, tree, bool);
3400 static void add_byte_size_attribute (dw_die_ref, tree);
3401 static void add_bit_offset_attribute (dw_die_ref, tree);
3402 static void add_bit_size_attribute (dw_die_ref, tree);
3403 static void add_prototyped_attribute (dw_die_ref, tree);
3404 static dw_die_ref add_abstract_origin_attribute (dw_die_ref, tree);
3405 static void add_pure_or_virtual_attribute (dw_die_ref, tree);
3406 static void add_src_coords_attributes (dw_die_ref, tree);
3407 static void add_name_and_src_coords_attributes (dw_die_ref, tree);
3408 static void push_decl_scope (tree);
3409 static void pop_decl_scope (void);
3410 static dw_die_ref scope_die_for (tree, dw_die_ref);
3411 static inline int local_scope_p (dw_die_ref);
3412 static inline int class_scope_p (dw_die_ref);
3413 static inline int class_or_namespace_scope_p (dw_die_ref);
3414 static void add_type_attribute (dw_die_ref, tree, int, int, dw_die_ref);
3415 static void add_calling_convention_attribute (dw_die_ref, tree);
3416 static const char *type_tag (const_tree);
3417 static tree member_declared_type (const_tree);
3418 #if 0
3419 static const char *decl_start_label (tree);
3420 #endif
3421 static void gen_array_type_die (tree, dw_die_ref);
3422 static void gen_descr_array_type_die (tree, struct array_descr_info *, dw_die_ref);
3423 #if 0
3424 static void gen_entry_point_die (tree, dw_die_ref);
3425 #endif
3426 static dw_die_ref gen_enumeration_type_die (tree, dw_die_ref);
3427 static dw_die_ref gen_formal_parameter_die (tree, tree, bool, dw_die_ref);
3428 static dw_die_ref gen_formal_parameter_pack_die (tree, tree, dw_die_ref, tree*);
3429 static void gen_unspecified_parameters_die (tree, dw_die_ref);
3430 static void gen_formal_types_die (tree, dw_die_ref);
3431 static void gen_subprogram_die (tree, dw_die_ref);
3432 static void gen_variable_die (tree, tree, dw_die_ref);
3433 static void gen_const_die (tree, dw_die_ref);
3434 static void gen_label_die (tree, dw_die_ref);
3435 static void gen_lexical_block_die (tree, dw_die_ref, int);
3436 static void gen_inlined_subroutine_die (tree, dw_die_ref, int);
3437 static void gen_field_die (tree, dw_die_ref);
3438 static void gen_ptr_to_mbr_type_die (tree, dw_die_ref);
3439 static dw_die_ref gen_compile_unit_die (const char *);
3440 static void gen_inheritance_die (tree, tree, dw_die_ref);
3441 static void gen_member_die (tree, dw_die_ref);
3442 static void gen_struct_or_union_type_die (tree, dw_die_ref,
3443 enum debug_info_usage);
3444 static void gen_subroutine_type_die (tree, dw_die_ref);
3445 static void gen_typedef_die (tree, dw_die_ref);
3446 static void gen_type_die (tree, dw_die_ref);
3447 static void gen_block_die (tree, dw_die_ref, int);
3448 static void decls_for_scope (tree, dw_die_ref, int);
3449 static inline int is_redundant_typedef (const_tree);
3450 static bool is_naming_typedef_decl (const_tree);
3451 static inline dw_die_ref get_context_die (tree);
3452 static void gen_namespace_die (tree, dw_die_ref);
3453 static dw_die_ref gen_decl_die (tree, tree, dw_die_ref);
3454 static dw_die_ref force_decl_die (tree);
3455 static dw_die_ref force_type_die (tree);
3456 static dw_die_ref setup_namespace_context (tree, dw_die_ref);
3457 static dw_die_ref declare_in_namespace (tree, dw_die_ref);
3458 static struct dwarf_file_data * lookup_filename (const char *);
3459 static void retry_incomplete_types (void);
3460 static void gen_type_die_for_member (tree, tree, dw_die_ref);
3461 static void gen_generic_params_dies (tree);
3462 static void gen_tagged_type_die (tree, dw_die_ref, enum debug_info_usage);
3463 static void gen_type_die_with_usage (tree, dw_die_ref, enum debug_info_usage);
3464 static void splice_child_die (dw_die_ref, dw_die_ref);
3465 static int file_info_cmp (const void *, const void *);
3466 static dw_loc_list_ref new_loc_list (dw_loc_descr_ref, const char *,
3467 const char *, const char *);
3468 static void output_loc_list (dw_loc_list_ref);
3469 static char *gen_internal_sym (const char *);
3471 static void prune_unmark_dies (dw_die_ref);
3472 static void prune_unused_types_mark_generic_parms_dies (dw_die_ref);
3473 static void prune_unused_types_mark (dw_die_ref, int);
3474 static void prune_unused_types_walk (dw_die_ref);
3475 static void prune_unused_types_walk_attribs (dw_die_ref);
3476 static void prune_unused_types_prune (dw_die_ref);
3477 static void prune_unused_types (void);
3478 static int maybe_emit_file (struct dwarf_file_data *fd);
3479 static inline const char *AT_vms_delta1 (dw_attr_ref);
3480 static inline const char *AT_vms_delta2 (dw_attr_ref);
3481 static inline void add_AT_vms_delta (dw_die_ref, enum dwarf_attribute,
3482 const char *, const char *);
3483 static void append_entry_to_tmpl_value_parm_die_table (dw_die_ref, tree);
3484 static void gen_remaining_tmpl_value_param_die_attribute (void);
3485 static bool generic_type_p (tree);
3486 static void schedule_generic_params_dies_gen (tree t);
3487 static void gen_scheduled_generic_parms_dies (void);
3489 /* Section names used to hold DWARF debugging information. */
3490 #ifndef DEBUG_INFO_SECTION
3491 #define DEBUG_INFO_SECTION ".debug_info"
3492 #endif
3493 #ifndef DEBUG_ABBREV_SECTION
3494 #define DEBUG_ABBREV_SECTION ".debug_abbrev"
3495 #endif
3496 #ifndef DEBUG_ARANGES_SECTION
3497 #define DEBUG_ARANGES_SECTION ".debug_aranges"
3498 #endif
3499 #ifndef DEBUG_MACINFO_SECTION
3500 #define DEBUG_MACINFO_SECTION ".debug_macinfo"
3501 #endif
3502 #ifndef DEBUG_MACRO_SECTION
3503 #define DEBUG_MACRO_SECTION ".debug_macro"
3504 #endif
3505 #ifndef DEBUG_LINE_SECTION
3506 #define DEBUG_LINE_SECTION ".debug_line"
3507 #endif
3508 #ifndef DEBUG_LOC_SECTION
3509 #define DEBUG_LOC_SECTION ".debug_loc"
3510 #endif
3511 #ifndef DEBUG_PUBNAMES_SECTION
3512 #define DEBUG_PUBNAMES_SECTION ".debug_pubnames"
3513 #endif
3514 #ifndef DEBUG_PUBTYPES_SECTION
3515 #define DEBUG_PUBTYPES_SECTION ".debug_pubtypes"
3516 #endif
3517 #ifndef DEBUG_STR_SECTION
3518 #define DEBUG_STR_SECTION ".debug_str"
3519 #endif
3520 #ifndef DEBUG_RANGES_SECTION
3521 #define DEBUG_RANGES_SECTION ".debug_ranges"
3522 #endif
3524 /* Standard ELF section names for compiled code and data. */
3525 #ifndef TEXT_SECTION_NAME
3526 #define TEXT_SECTION_NAME ".text"
3527 #endif
3529 /* Section flags for .debug_str section. */
3530 #define DEBUG_STR_SECTION_FLAGS \
3531 (HAVE_GAS_SHF_MERGE && flag_merge_debug_strings \
3532 ? SECTION_DEBUG | SECTION_MERGE | SECTION_STRINGS | 1 \
3533 : SECTION_DEBUG)
3535 /* Labels we insert at beginning sections we can reference instead of
3536 the section names themselves. */
3538 #ifndef TEXT_SECTION_LABEL
3539 #define TEXT_SECTION_LABEL "Ltext"
3540 #endif
3541 #ifndef COLD_TEXT_SECTION_LABEL
3542 #define COLD_TEXT_SECTION_LABEL "Ltext_cold"
3543 #endif
3544 #ifndef DEBUG_LINE_SECTION_LABEL
3545 #define DEBUG_LINE_SECTION_LABEL "Ldebug_line"
3546 #endif
3547 #ifndef DEBUG_INFO_SECTION_LABEL
3548 #define DEBUG_INFO_SECTION_LABEL "Ldebug_info"
3549 #endif
3550 #ifndef DEBUG_ABBREV_SECTION_LABEL
3551 #define DEBUG_ABBREV_SECTION_LABEL "Ldebug_abbrev"
3552 #endif
3553 #ifndef DEBUG_LOC_SECTION_LABEL
3554 #define DEBUG_LOC_SECTION_LABEL "Ldebug_loc"
3555 #endif
3556 #ifndef DEBUG_RANGES_SECTION_LABEL
3557 #define DEBUG_RANGES_SECTION_LABEL "Ldebug_ranges"
3558 #endif
3559 #ifndef DEBUG_MACINFO_SECTION_LABEL
3560 #define DEBUG_MACINFO_SECTION_LABEL "Ldebug_macinfo"
3561 #endif
3562 #ifndef DEBUG_MACRO_SECTION_LABEL
3563 #define DEBUG_MACRO_SECTION_LABEL "Ldebug_macro"
3564 #endif
3567 /* Definitions of defaults for formats and names of various special
3568 (artificial) labels which may be generated within this file (when the -g
3569 options is used and DWARF2_DEBUGGING_INFO is in effect.
3570 If necessary, these may be overridden from within the tm.h file, but
3571 typically, overriding these defaults is unnecessary. */
3573 static char text_end_label[MAX_ARTIFICIAL_LABEL_BYTES];
3574 static char text_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3575 static char cold_text_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3576 static char cold_end_label[MAX_ARTIFICIAL_LABEL_BYTES];
3577 static char abbrev_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3578 static char debug_info_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3579 static char debug_line_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3580 static char macinfo_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3581 static char loc_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3582 static char ranges_section_label[2 * MAX_ARTIFICIAL_LABEL_BYTES];
3584 #ifndef TEXT_END_LABEL
3585 #define TEXT_END_LABEL "Letext"
3586 #endif
3587 #ifndef COLD_END_LABEL
3588 #define COLD_END_LABEL "Letext_cold"
3589 #endif
3590 #ifndef BLOCK_BEGIN_LABEL
3591 #define BLOCK_BEGIN_LABEL "LBB"
3592 #endif
3593 #ifndef BLOCK_END_LABEL
3594 #define BLOCK_END_LABEL "LBE"
3595 #endif
3596 #ifndef LINE_CODE_LABEL
3597 #define LINE_CODE_LABEL "LM"
3598 #endif
3601 /* Return the root of the DIE's built for the current compilation unit. */
3602 static dw_die_ref
3603 comp_unit_die (void)
3605 if (!single_comp_unit_die)
3606 single_comp_unit_die = gen_compile_unit_die (NULL);
3607 return single_comp_unit_die;
3610 /* We allow a language front-end to designate a function that is to be
3611 called to "demangle" any name before it is put into a DIE. */
3613 static const char *(*demangle_name_func) (const char *);
3615 void
3616 dwarf2out_set_demangle_name_func (const char *(*func) (const char *))
3618 demangle_name_func = func;
3621 /* Test if rtl node points to a pseudo register. */
3623 static inline int
3624 is_pseudo_reg (const_rtx rtl)
3626 return ((REG_P (rtl) && REGNO (rtl) >= FIRST_PSEUDO_REGISTER)
3627 || (GET_CODE (rtl) == SUBREG
3628 && REGNO (SUBREG_REG (rtl)) >= FIRST_PSEUDO_REGISTER));
3631 /* Return a reference to a type, with its const and volatile qualifiers
3632 removed. */
3634 static inline tree
3635 type_main_variant (tree type)
3637 type = TYPE_MAIN_VARIANT (type);
3639 /* ??? There really should be only one main variant among any group of
3640 variants of a given type (and all of the MAIN_VARIANT values for all
3641 members of the group should point to that one type) but sometimes the C
3642 front-end messes this up for array types, so we work around that bug
3643 here. */
3644 if (TREE_CODE (type) == ARRAY_TYPE)
3645 while (type != TYPE_MAIN_VARIANT (type))
3646 type = TYPE_MAIN_VARIANT (type);
3648 return type;
3651 /* Return nonzero if the given type node represents a tagged type. */
3653 static inline int
3654 is_tagged_type (const_tree type)
3656 enum tree_code code = TREE_CODE (type);
3658 return (code == RECORD_TYPE || code == UNION_TYPE
3659 || code == QUAL_UNION_TYPE || code == ENUMERAL_TYPE);
3662 /* Set label to debug_info_section_label + die_offset of a DIE reference. */
3664 static void
3665 get_ref_die_offset_label (char *label, dw_die_ref ref)
3667 sprintf (label, "%s+%ld", debug_info_section_label, ref->die_offset);
3670 /* Return die_offset of a DIE reference to a base type. */
3672 static unsigned long int
3673 get_base_type_offset (dw_die_ref ref)
3675 if (ref->die_offset)
3676 return ref->die_offset;
3677 if (comp_unit_die ()->die_abbrev)
3679 calc_base_type_die_sizes ();
3680 gcc_assert (ref->die_offset);
3682 return ref->die_offset;
3685 /* Return die_offset of a DIE reference other than base type. */
3687 static unsigned long int
3688 get_ref_die_offset (dw_die_ref ref)
3690 gcc_assert (ref->die_offset);
3691 return ref->die_offset;
3694 /* Convert a DIE tag into its string name. */
3696 static const char *
3697 dwarf_tag_name (unsigned int tag)
3699 switch (tag)
3701 case DW_TAG_padding:
3702 return "DW_TAG_padding";
3703 case DW_TAG_array_type:
3704 return "DW_TAG_array_type";
3705 case DW_TAG_class_type:
3706 return "DW_TAG_class_type";
3707 case DW_TAG_entry_point:
3708 return "DW_TAG_entry_point";
3709 case DW_TAG_enumeration_type:
3710 return "DW_TAG_enumeration_type";
3711 case DW_TAG_formal_parameter:
3712 return "DW_TAG_formal_parameter";
3713 case DW_TAG_imported_declaration:
3714 return "DW_TAG_imported_declaration";
3715 case DW_TAG_label:
3716 return "DW_TAG_label";
3717 case DW_TAG_lexical_block:
3718 return "DW_TAG_lexical_block";
3719 case DW_TAG_member:
3720 return "DW_TAG_member";
3721 case DW_TAG_pointer_type:
3722 return "DW_TAG_pointer_type";
3723 case DW_TAG_reference_type:
3724 return "DW_TAG_reference_type";
3725 case DW_TAG_compile_unit:
3726 return "DW_TAG_compile_unit";
3727 case DW_TAG_string_type:
3728 return "DW_TAG_string_type";
3729 case DW_TAG_structure_type:
3730 return "DW_TAG_structure_type";
3731 case DW_TAG_subroutine_type:
3732 return "DW_TAG_subroutine_type";
3733 case DW_TAG_typedef:
3734 return "DW_TAG_typedef";
3735 case DW_TAG_union_type:
3736 return "DW_TAG_union_type";
3737 case DW_TAG_unspecified_parameters:
3738 return "DW_TAG_unspecified_parameters";
3739 case DW_TAG_variant:
3740 return "DW_TAG_variant";
3741 case DW_TAG_common_block:
3742 return "DW_TAG_common_block";
3743 case DW_TAG_common_inclusion:
3744 return "DW_TAG_common_inclusion";
3745 case DW_TAG_inheritance:
3746 return "DW_TAG_inheritance";
3747 case DW_TAG_inlined_subroutine:
3748 return "DW_TAG_inlined_subroutine";
3749 case DW_TAG_module:
3750 return "DW_TAG_module";
3751 case DW_TAG_ptr_to_member_type:
3752 return "DW_TAG_ptr_to_member_type";
3753 case DW_TAG_set_type:
3754 return "DW_TAG_set_type";
3755 case DW_TAG_subrange_type:
3756 return "DW_TAG_subrange_type";
3757 case DW_TAG_with_stmt:
3758 return "DW_TAG_with_stmt";
3759 case DW_TAG_access_declaration:
3760 return "DW_TAG_access_declaration";
3761 case DW_TAG_base_type:
3762 return "DW_TAG_base_type";
3763 case DW_TAG_catch_block:
3764 return "DW_TAG_catch_block";
3765 case DW_TAG_const_type:
3766 return "DW_TAG_const_type";
3767 case DW_TAG_constant:
3768 return "DW_TAG_constant";
3769 case DW_TAG_enumerator:
3770 return "DW_TAG_enumerator";
3771 case DW_TAG_file_type:
3772 return "DW_TAG_file_type";
3773 case DW_TAG_friend:
3774 return "DW_TAG_friend";
3775 case DW_TAG_namelist:
3776 return "DW_TAG_namelist";
3777 case DW_TAG_namelist_item:
3778 return "DW_TAG_namelist_item";
3779 case DW_TAG_packed_type:
3780 return "DW_TAG_packed_type";
3781 case DW_TAG_subprogram:
3782 return "DW_TAG_subprogram";
3783 case DW_TAG_template_type_param:
3784 return "DW_TAG_template_type_param";
3785 case DW_TAG_template_value_param:
3786 return "DW_TAG_template_value_param";
3787 case DW_TAG_thrown_type:
3788 return "DW_TAG_thrown_type";
3789 case DW_TAG_try_block:
3790 return "DW_TAG_try_block";
3791 case DW_TAG_variant_part:
3792 return "DW_TAG_variant_part";
3793 case DW_TAG_variable:
3794 return "DW_TAG_variable";
3795 case DW_TAG_volatile_type:
3796 return "DW_TAG_volatile_type";
3797 case DW_TAG_dwarf_procedure:
3798 return "DW_TAG_dwarf_procedure";
3799 case DW_TAG_restrict_type:
3800 return "DW_TAG_restrict_type";
3801 case DW_TAG_interface_type:
3802 return "DW_TAG_interface_type";
3803 case DW_TAG_namespace:
3804 return "DW_TAG_namespace";
3805 case DW_TAG_imported_module:
3806 return "DW_TAG_imported_module";
3807 case DW_TAG_unspecified_type:
3808 return "DW_TAG_unspecified_type";
3809 case DW_TAG_partial_unit:
3810 return "DW_TAG_partial_unit";
3811 case DW_TAG_imported_unit:
3812 return "DW_TAG_imported_unit";
3813 case DW_TAG_condition:
3814 return "DW_TAG_condition";
3815 case DW_TAG_shared_type:
3816 return "DW_TAG_shared_type";
3817 case DW_TAG_type_unit:
3818 return "DW_TAG_type_unit";
3819 case DW_TAG_rvalue_reference_type:
3820 return "DW_TAG_rvalue_reference_type";
3821 case DW_TAG_template_alias:
3822 return "DW_TAG_template_alias";
3823 case DW_TAG_GNU_template_parameter_pack:
3824 return "DW_TAG_GNU_template_parameter_pack";
3825 case DW_TAG_GNU_formal_parameter_pack:
3826 return "DW_TAG_GNU_formal_parameter_pack";
3827 case DW_TAG_MIPS_loop:
3828 return "DW_TAG_MIPS_loop";
3829 case DW_TAG_format_label:
3830 return "DW_TAG_format_label";
3831 case DW_TAG_function_template:
3832 return "DW_TAG_function_template";
3833 case DW_TAG_class_template:
3834 return "DW_TAG_class_template";
3835 case DW_TAG_GNU_BINCL:
3836 return "DW_TAG_GNU_BINCL";
3837 case DW_TAG_GNU_EINCL:
3838 return "DW_TAG_GNU_EINCL";
3839 case DW_TAG_GNU_template_template_param:
3840 return "DW_TAG_GNU_template_template_param";
3841 case DW_TAG_GNU_call_site:
3842 return "DW_TAG_GNU_call_site";
3843 case DW_TAG_GNU_call_site_parameter:
3844 return "DW_TAG_GNU_call_site_parameter";
3845 default:
3846 return "DW_TAG_<unknown>";
3850 /* Convert a DWARF attribute code into its string name. */
3852 static const char *
3853 dwarf_attr_name (unsigned int attr)
3855 switch (attr)
3857 case DW_AT_sibling:
3858 return "DW_AT_sibling";
3859 case DW_AT_location:
3860 return "DW_AT_location";
3861 case DW_AT_name:
3862 return "DW_AT_name";
3863 case DW_AT_ordering:
3864 return "DW_AT_ordering";
3865 case DW_AT_subscr_data:
3866 return "DW_AT_subscr_data";
3867 case DW_AT_byte_size:
3868 return "DW_AT_byte_size";
3869 case DW_AT_bit_offset:
3870 return "DW_AT_bit_offset";
3871 case DW_AT_bit_size:
3872 return "DW_AT_bit_size";
3873 case DW_AT_element_list:
3874 return "DW_AT_element_list";
3875 case DW_AT_stmt_list:
3876 return "DW_AT_stmt_list";
3877 case DW_AT_low_pc:
3878 return "DW_AT_low_pc";
3879 case DW_AT_high_pc:
3880 return "DW_AT_high_pc";
3881 case DW_AT_language:
3882 return "DW_AT_language";
3883 case DW_AT_member:
3884 return "DW_AT_member";
3885 case DW_AT_discr:
3886 return "DW_AT_discr";
3887 case DW_AT_discr_value:
3888 return "DW_AT_discr_value";
3889 case DW_AT_visibility:
3890 return "DW_AT_visibility";
3891 case DW_AT_import:
3892 return "DW_AT_import";
3893 case DW_AT_string_length:
3894 return "DW_AT_string_length";
3895 case DW_AT_common_reference:
3896 return "DW_AT_common_reference";
3897 case DW_AT_comp_dir:
3898 return "DW_AT_comp_dir";
3899 case DW_AT_const_value:
3900 return "DW_AT_const_value";
3901 case DW_AT_containing_type:
3902 return "DW_AT_containing_type";
3903 case DW_AT_default_value:
3904 return "DW_AT_default_value";
3905 case DW_AT_inline:
3906 return "DW_AT_inline";
3907 case DW_AT_is_optional:
3908 return "DW_AT_is_optional";
3909 case DW_AT_lower_bound:
3910 return "DW_AT_lower_bound";
3911 case DW_AT_producer:
3912 return "DW_AT_producer";
3913 case DW_AT_prototyped:
3914 return "DW_AT_prototyped";
3915 case DW_AT_return_addr:
3916 return "DW_AT_return_addr";
3917 case DW_AT_start_scope:
3918 return "DW_AT_start_scope";
3919 case DW_AT_bit_stride:
3920 return "DW_AT_bit_stride";
3921 case DW_AT_upper_bound:
3922 return "DW_AT_upper_bound";
3923 case DW_AT_abstract_origin:
3924 return "DW_AT_abstract_origin";
3925 case DW_AT_accessibility:
3926 return "DW_AT_accessibility";
3927 case DW_AT_address_class:
3928 return "DW_AT_address_class";
3929 case DW_AT_artificial:
3930 return "DW_AT_artificial";
3931 case DW_AT_base_types:
3932 return "DW_AT_base_types";
3933 case DW_AT_calling_convention:
3934 return "DW_AT_calling_convention";
3935 case DW_AT_count:
3936 return "DW_AT_count";
3937 case DW_AT_data_member_location:
3938 return "DW_AT_data_member_location";
3939 case DW_AT_decl_column:
3940 return "DW_AT_decl_column";
3941 case DW_AT_decl_file:
3942 return "DW_AT_decl_file";
3943 case DW_AT_decl_line:
3944 return "DW_AT_decl_line";
3945 case DW_AT_declaration:
3946 return "DW_AT_declaration";
3947 case DW_AT_discr_list:
3948 return "DW_AT_discr_list";
3949 case DW_AT_encoding:
3950 return "DW_AT_encoding";
3951 case DW_AT_external:
3952 return "DW_AT_external";
3953 case DW_AT_explicit:
3954 return "DW_AT_explicit";
3955 case DW_AT_frame_base:
3956 return "DW_AT_frame_base";
3957 case DW_AT_friend:
3958 return "DW_AT_friend";
3959 case DW_AT_identifier_case:
3960 return "DW_AT_identifier_case";
3961 case DW_AT_macro_info:
3962 return "DW_AT_macro_info";
3963 case DW_AT_namelist_items:
3964 return "DW_AT_namelist_items";
3965 case DW_AT_priority:
3966 return "DW_AT_priority";
3967 case DW_AT_segment:
3968 return "DW_AT_segment";
3969 case DW_AT_specification:
3970 return "DW_AT_specification";
3971 case DW_AT_static_link:
3972 return "DW_AT_static_link";
3973 case DW_AT_type:
3974 return "DW_AT_type";
3975 case DW_AT_use_location:
3976 return "DW_AT_use_location";
3977 case DW_AT_variable_parameter:
3978 return "DW_AT_variable_parameter";
3979 case DW_AT_virtuality:
3980 return "DW_AT_virtuality";
3981 case DW_AT_vtable_elem_location:
3982 return "DW_AT_vtable_elem_location";
3984 case DW_AT_allocated:
3985 return "DW_AT_allocated";
3986 case DW_AT_associated:
3987 return "DW_AT_associated";
3988 case DW_AT_data_location:
3989 return "DW_AT_data_location";
3990 case DW_AT_byte_stride:
3991 return "DW_AT_byte_stride";
3992 case DW_AT_entry_pc:
3993 return "DW_AT_entry_pc";
3994 case DW_AT_use_UTF8:
3995 return "DW_AT_use_UTF8";
3996 case DW_AT_extension:
3997 return "DW_AT_extension";
3998 case DW_AT_ranges:
3999 return "DW_AT_ranges";
4000 case DW_AT_trampoline:
4001 return "DW_AT_trampoline";
4002 case DW_AT_call_column:
4003 return "DW_AT_call_column";
4004 case DW_AT_call_file:
4005 return "DW_AT_call_file";
4006 case DW_AT_call_line:
4007 return "DW_AT_call_line";
4008 case DW_AT_object_pointer:
4009 return "DW_AT_object_pointer";
4011 case DW_AT_signature:
4012 return "DW_AT_signature";
4013 case DW_AT_main_subprogram:
4014 return "DW_AT_main_subprogram";
4015 case DW_AT_data_bit_offset:
4016 return "DW_AT_data_bit_offset";
4017 case DW_AT_const_expr:
4018 return "DW_AT_const_expr";
4019 case DW_AT_enum_class:
4020 return "DW_AT_enum_class";
4021 case DW_AT_linkage_name:
4022 return "DW_AT_linkage_name";
4024 case DW_AT_MIPS_fde:
4025 return "DW_AT_MIPS_fde";
4026 case DW_AT_MIPS_loop_begin:
4027 return "DW_AT_MIPS_loop_begin";
4028 case DW_AT_MIPS_tail_loop_begin:
4029 return "DW_AT_MIPS_tail_loop_begin";
4030 case DW_AT_MIPS_epilog_begin:
4031 return "DW_AT_MIPS_epilog_begin";
4032 #if VMS_DEBUGGING_INFO
4033 case DW_AT_HP_prologue:
4034 return "DW_AT_HP_prologue";
4035 #else
4036 case DW_AT_MIPS_loop_unroll_factor:
4037 return "DW_AT_MIPS_loop_unroll_factor";
4038 #endif
4039 case DW_AT_MIPS_software_pipeline_depth:
4040 return "DW_AT_MIPS_software_pipeline_depth";
4041 case DW_AT_MIPS_linkage_name:
4042 return "DW_AT_MIPS_linkage_name";
4043 #if VMS_DEBUGGING_INFO
4044 case DW_AT_HP_epilogue:
4045 return "DW_AT_HP_epilogue";
4046 #else
4047 case DW_AT_MIPS_stride:
4048 return "DW_AT_MIPS_stride";
4049 #endif
4050 case DW_AT_MIPS_abstract_name:
4051 return "DW_AT_MIPS_abstract_name";
4052 case DW_AT_MIPS_clone_origin:
4053 return "DW_AT_MIPS_clone_origin";
4054 case DW_AT_MIPS_has_inlines:
4055 return "DW_AT_MIPS_has_inlines";
4057 case DW_AT_sf_names:
4058 return "DW_AT_sf_names";
4059 case DW_AT_src_info:
4060 return "DW_AT_src_info";
4061 case DW_AT_mac_info:
4062 return "DW_AT_mac_info";
4063 case DW_AT_src_coords:
4064 return "DW_AT_src_coords";
4065 case DW_AT_body_begin:
4066 return "DW_AT_body_begin";
4067 case DW_AT_body_end:
4068 return "DW_AT_body_end";
4070 case DW_AT_GNU_vector:
4071 return "DW_AT_GNU_vector";
4072 case DW_AT_GNU_guarded_by:
4073 return "DW_AT_GNU_guarded_by";
4074 case DW_AT_GNU_pt_guarded_by:
4075 return "DW_AT_GNU_pt_guarded_by";
4076 case DW_AT_GNU_guarded:
4077 return "DW_AT_GNU_guarded";
4078 case DW_AT_GNU_pt_guarded:
4079 return "DW_AT_GNU_pt_guarded";
4080 case DW_AT_GNU_locks_excluded:
4081 return "DW_AT_GNU_locks_excluded";
4082 case DW_AT_GNU_exclusive_locks_required:
4083 return "DW_AT_GNU_exclusive_locks_required";
4084 case DW_AT_GNU_shared_locks_required:
4085 return "DW_AT_GNU_shared_locks_required";
4086 case DW_AT_GNU_odr_signature:
4087 return "DW_AT_GNU_odr_signature";
4088 case DW_AT_GNU_template_name:
4089 return "DW_AT_GNU_template_name";
4090 case DW_AT_GNU_call_site_value:
4091 return "DW_AT_GNU_call_site_value";
4092 case DW_AT_GNU_call_site_data_value:
4093 return "DW_AT_GNU_call_site_data_value";
4094 case DW_AT_GNU_call_site_target:
4095 return "DW_AT_GNU_call_site_target";
4096 case DW_AT_GNU_call_site_target_clobbered:
4097 return "DW_AT_GNU_call_site_target_clobbered";
4098 case DW_AT_GNU_tail_call:
4099 return "DW_AT_GNU_tail_call";
4100 case DW_AT_GNU_all_tail_call_sites:
4101 return "DW_AT_GNU_all_tail_call_sites";
4102 case DW_AT_GNU_all_call_sites:
4103 return "DW_AT_GNU_all_call_sites";
4104 case DW_AT_GNU_all_source_call_sites:
4105 return "DW_AT_GNU_all_source_call_sites";
4106 case DW_AT_GNU_macros:
4107 return "DW_AT_GNU_macros";
4109 case DW_AT_GNAT_descriptive_type:
4110 return "DW_AT_GNAT_descriptive_type";
4112 case DW_AT_VMS_rtnbeg_pd_address:
4113 return "DW_AT_VMS_rtnbeg_pd_address";
4115 default:
4116 return "DW_AT_<unknown>";
4120 /* Convert a DWARF value form code into its string name. */
4122 static const char *
4123 dwarf_form_name (unsigned int form)
4125 switch (form)
4127 case DW_FORM_addr:
4128 return "DW_FORM_addr";
4129 case DW_FORM_block2:
4130 return "DW_FORM_block2";
4131 case DW_FORM_block4:
4132 return "DW_FORM_block4";
4133 case DW_FORM_data2:
4134 return "DW_FORM_data2";
4135 case DW_FORM_data4:
4136 return "DW_FORM_data4";
4137 case DW_FORM_data8:
4138 return "DW_FORM_data8";
4139 case DW_FORM_string:
4140 return "DW_FORM_string";
4141 case DW_FORM_block:
4142 return "DW_FORM_block";
4143 case DW_FORM_block1:
4144 return "DW_FORM_block1";
4145 case DW_FORM_data1:
4146 return "DW_FORM_data1";
4147 case DW_FORM_flag:
4148 return "DW_FORM_flag";
4149 case DW_FORM_sdata:
4150 return "DW_FORM_sdata";
4151 case DW_FORM_strp:
4152 return "DW_FORM_strp";
4153 case DW_FORM_udata:
4154 return "DW_FORM_udata";
4155 case DW_FORM_ref_addr:
4156 return "DW_FORM_ref_addr";
4157 case DW_FORM_ref1:
4158 return "DW_FORM_ref1";
4159 case DW_FORM_ref2:
4160 return "DW_FORM_ref2";
4161 case DW_FORM_ref4:
4162 return "DW_FORM_ref4";
4163 case DW_FORM_ref8:
4164 return "DW_FORM_ref8";
4165 case DW_FORM_ref_udata:
4166 return "DW_FORM_ref_udata";
4167 case DW_FORM_indirect:
4168 return "DW_FORM_indirect";
4169 case DW_FORM_sec_offset:
4170 return "DW_FORM_sec_offset";
4171 case DW_FORM_exprloc:
4172 return "DW_FORM_exprloc";
4173 case DW_FORM_flag_present:
4174 return "DW_FORM_flag_present";
4175 case DW_FORM_ref_sig8:
4176 return "DW_FORM_ref_sig8";
4177 default:
4178 return "DW_FORM_<unknown>";
4182 /* Determine the "ultimate origin" of a decl. The decl may be an inlined
4183 instance of an inlined instance of a decl which is local to an inline
4184 function, so we have to trace all of the way back through the origin chain
4185 to find out what sort of node actually served as the original seed for the
4186 given block. */
4188 static tree
4189 decl_ultimate_origin (const_tree decl)
4191 if (!CODE_CONTAINS_STRUCT (TREE_CODE (decl), TS_DECL_COMMON))
4192 return NULL_TREE;
4194 /* output_inline_function sets DECL_ABSTRACT_ORIGIN for all the
4195 nodes in the function to point to themselves; ignore that if
4196 we're trying to output the abstract instance of this function. */
4197 if (DECL_ABSTRACT (decl) && DECL_ABSTRACT_ORIGIN (decl) == decl)
4198 return NULL_TREE;
4200 /* Since the DECL_ABSTRACT_ORIGIN for a DECL is supposed to be the
4201 most distant ancestor, this should never happen. */
4202 gcc_assert (!DECL_FROM_INLINE (DECL_ORIGIN (decl)));
4204 return DECL_ABSTRACT_ORIGIN (decl);
4207 /* Get the class to which DECL belongs, if any. In g++, the DECL_CONTEXT
4208 of a virtual function may refer to a base class, so we check the 'this'
4209 parameter. */
4211 static tree
4212 decl_class_context (tree decl)
4214 tree context = NULL_TREE;
4216 if (TREE_CODE (decl) != FUNCTION_DECL || ! DECL_VINDEX (decl))
4217 context = DECL_CONTEXT (decl);
4218 else
4219 context = TYPE_MAIN_VARIANT
4220 (TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (decl)))));
4222 if (context && !TYPE_P (context))
4223 context = NULL_TREE;
4225 return context;
4228 /* Add an attribute/value pair to a DIE. */
4230 static inline void
4231 add_dwarf_attr (dw_die_ref die, dw_attr_ref attr)
4233 /* Maybe this should be an assert? */
4234 if (die == NULL)
4235 return;
4237 if (die->die_attr == NULL)
4238 die->die_attr = VEC_alloc (dw_attr_node, gc, 1);
4239 VEC_safe_push (dw_attr_node, gc, die->die_attr, attr);
4242 static inline enum dw_val_class
4243 AT_class (dw_attr_ref a)
4245 return a->dw_attr_val.val_class;
4248 /* Add a flag value attribute to a DIE. */
4250 static inline void
4251 add_AT_flag (dw_die_ref die, enum dwarf_attribute attr_kind, unsigned int flag)
4253 dw_attr_node attr;
4255 attr.dw_attr = attr_kind;
4256 attr.dw_attr_val.val_class = dw_val_class_flag;
4257 attr.dw_attr_val.v.val_flag = flag;
4258 add_dwarf_attr (die, &attr);
4261 static inline unsigned
4262 AT_flag (dw_attr_ref a)
4264 gcc_assert (a && AT_class (a) == dw_val_class_flag);
4265 return a->dw_attr_val.v.val_flag;
4268 /* Add a signed integer attribute value to a DIE. */
4270 static inline void
4271 add_AT_int (dw_die_ref die, enum dwarf_attribute attr_kind, HOST_WIDE_INT int_val)
4273 dw_attr_node attr;
4275 attr.dw_attr = attr_kind;
4276 attr.dw_attr_val.val_class = dw_val_class_const;
4277 attr.dw_attr_val.v.val_int = int_val;
4278 add_dwarf_attr (die, &attr);
4281 static inline HOST_WIDE_INT
4282 AT_int (dw_attr_ref a)
4284 gcc_assert (a && AT_class (a) == dw_val_class_const);
4285 return a->dw_attr_val.v.val_int;
4288 /* Add an unsigned integer attribute value to a DIE. */
4290 static inline void
4291 add_AT_unsigned (dw_die_ref die, enum dwarf_attribute attr_kind,
4292 unsigned HOST_WIDE_INT unsigned_val)
4294 dw_attr_node attr;
4296 attr.dw_attr = attr_kind;
4297 attr.dw_attr_val.val_class = dw_val_class_unsigned_const;
4298 attr.dw_attr_val.v.val_unsigned = unsigned_val;
4299 add_dwarf_attr (die, &attr);
4302 static inline unsigned HOST_WIDE_INT
4303 AT_unsigned (dw_attr_ref a)
4305 gcc_assert (a && AT_class (a) == dw_val_class_unsigned_const);
4306 return a->dw_attr_val.v.val_unsigned;
4309 /* Add an unsigned double integer attribute value to a DIE. */
4311 static inline void
4312 add_AT_double (dw_die_ref die, enum dwarf_attribute attr_kind,
4313 HOST_WIDE_INT high, unsigned HOST_WIDE_INT low)
4315 dw_attr_node attr;
4317 attr.dw_attr = attr_kind;
4318 attr.dw_attr_val.val_class = dw_val_class_const_double;
4319 attr.dw_attr_val.v.val_double.high = high;
4320 attr.dw_attr_val.v.val_double.low = low;
4321 add_dwarf_attr (die, &attr);
4324 /* Add a floating point attribute value to a DIE and return it. */
4326 static inline void
4327 add_AT_vec (dw_die_ref die, enum dwarf_attribute attr_kind,
4328 unsigned int length, unsigned int elt_size, unsigned char *array)
4330 dw_attr_node attr;
4332 attr.dw_attr = attr_kind;
4333 attr.dw_attr_val.val_class = dw_val_class_vec;
4334 attr.dw_attr_val.v.val_vec.length = length;
4335 attr.dw_attr_val.v.val_vec.elt_size = elt_size;
4336 attr.dw_attr_val.v.val_vec.array = array;
4337 add_dwarf_attr (die, &attr);
4340 /* Add an 8-byte data attribute value to a DIE. */
4342 static inline void
4343 add_AT_data8 (dw_die_ref die, enum dwarf_attribute attr_kind,
4344 unsigned char data8[8])
4346 dw_attr_node attr;
4348 attr.dw_attr = attr_kind;
4349 attr.dw_attr_val.val_class = dw_val_class_data8;
4350 memcpy (attr.dw_attr_val.v.val_data8, data8, 8);
4351 add_dwarf_attr (die, &attr);
4354 /* Hash and equality functions for debug_str_hash. */
4356 static hashval_t
4357 debug_str_do_hash (const void *x)
4359 return htab_hash_string (((const struct indirect_string_node *)x)->str);
4362 static int
4363 debug_str_eq (const void *x1, const void *x2)
4365 return strcmp ((((const struct indirect_string_node *)x1)->str),
4366 (const char *)x2) == 0;
4369 /* Add STR to the indirect string hash table. */
4371 static struct indirect_string_node *
4372 find_AT_string (const char *str)
4374 struct indirect_string_node *node;
4375 void **slot;
4377 if (! debug_str_hash)
4378 debug_str_hash = htab_create_ggc (10, debug_str_do_hash,
4379 debug_str_eq, NULL);
4381 slot = htab_find_slot_with_hash (debug_str_hash, str,
4382 htab_hash_string (str), INSERT);
4383 if (*slot == NULL)
4385 node = ggc_alloc_cleared_indirect_string_node ();
4386 node->str = ggc_strdup (str);
4387 *slot = node;
4389 else
4390 node = (struct indirect_string_node *) *slot;
4392 node->refcount++;
4393 return node;
4396 /* Add a string attribute value to a DIE. */
4398 static inline void
4399 add_AT_string (dw_die_ref die, enum dwarf_attribute attr_kind, const char *str)
4401 dw_attr_node attr;
4402 struct indirect_string_node *node;
4404 node = find_AT_string (str);
4406 attr.dw_attr = attr_kind;
4407 attr.dw_attr_val.val_class = dw_val_class_str;
4408 attr.dw_attr_val.v.val_str = node;
4409 add_dwarf_attr (die, &attr);
4412 static inline const char *
4413 AT_string (dw_attr_ref a)
4415 gcc_assert (a && AT_class (a) == dw_val_class_str);
4416 return a->dw_attr_val.v.val_str->str;
4419 /* Find out whether a string should be output inline in DIE
4420 or out-of-line in .debug_str section. */
4422 static enum dwarf_form
4423 AT_string_form (dw_attr_ref a)
4425 struct indirect_string_node *node;
4426 unsigned int len;
4427 char label[32];
4429 gcc_assert (a && AT_class (a) == dw_val_class_str);
4431 node = a->dw_attr_val.v.val_str;
4432 if (node->form)
4433 return node->form;
4435 len = strlen (node->str) + 1;
4437 /* If the string is shorter or equal to the size of the reference, it is
4438 always better to put it inline. */
4439 if (len <= DWARF_OFFSET_SIZE || node->refcount == 0)
4440 return node->form = DW_FORM_string;
4442 /* If we cannot expect the linker to merge strings in .debug_str
4443 section, only put it into .debug_str if it is worth even in this
4444 single module. */
4445 if (DWARF2_INDIRECT_STRING_SUPPORT_MISSING_ON_TARGET
4446 || ((debug_str_section->common.flags & SECTION_MERGE) == 0
4447 && (len - DWARF_OFFSET_SIZE) * node->refcount <= len))
4448 return node->form = DW_FORM_string;
4450 ASM_GENERATE_INTERNAL_LABEL (label, "LASF", dw2_string_counter);
4451 ++dw2_string_counter;
4452 node->label = xstrdup (label);
4454 return node->form = DW_FORM_strp;
4457 /* Add a DIE reference attribute value to a DIE. */
4459 static inline void
4460 add_AT_die_ref (dw_die_ref die, enum dwarf_attribute attr_kind, dw_die_ref targ_die)
4462 dw_attr_node attr;
4464 #ifdef ENABLE_CHECKING
4465 gcc_assert (targ_die != NULL);
4466 #else
4467 /* With LTO we can end up trying to reference something we didn't create
4468 a DIE for. Avoid crashing later on a NULL referenced DIE. */
4469 if (targ_die == NULL)
4470 return;
4471 #endif
4473 attr.dw_attr = attr_kind;
4474 attr.dw_attr_val.val_class = dw_val_class_die_ref;
4475 attr.dw_attr_val.v.val_die_ref.die = targ_die;
4476 attr.dw_attr_val.v.val_die_ref.external = 0;
4477 add_dwarf_attr (die, &attr);
4480 /* Add an AT_specification attribute to a DIE, and also make the back
4481 pointer from the specification to the definition. */
4483 static inline void
4484 add_AT_specification (dw_die_ref die, dw_die_ref targ_die)
4486 add_AT_die_ref (die, DW_AT_specification, targ_die);
4487 gcc_assert (!targ_die->die_definition);
4488 targ_die->die_definition = die;
4491 static inline dw_die_ref
4492 AT_ref (dw_attr_ref a)
4494 gcc_assert (a && AT_class (a) == dw_val_class_die_ref);
4495 return a->dw_attr_val.v.val_die_ref.die;
4498 static inline int
4499 AT_ref_external (dw_attr_ref a)
4501 if (a && AT_class (a) == dw_val_class_die_ref)
4502 return a->dw_attr_val.v.val_die_ref.external;
4504 return 0;
4507 static inline void
4508 set_AT_ref_external (dw_attr_ref a, int i)
4510 gcc_assert (a && AT_class (a) == dw_val_class_die_ref);
4511 a->dw_attr_val.v.val_die_ref.external = i;
4514 /* Add an FDE reference attribute value to a DIE. */
4516 static inline void
4517 add_AT_fde_ref (dw_die_ref die, enum dwarf_attribute attr_kind, unsigned int targ_fde)
4519 dw_attr_node attr;
4521 attr.dw_attr = attr_kind;
4522 attr.dw_attr_val.val_class = dw_val_class_fde_ref;
4523 attr.dw_attr_val.v.val_fde_index = targ_fde;
4524 add_dwarf_attr (die, &attr);
4527 /* Add a location description attribute value to a DIE. */
4529 static inline void
4530 add_AT_loc (dw_die_ref die, enum dwarf_attribute attr_kind, dw_loc_descr_ref loc)
4532 dw_attr_node attr;
4534 attr.dw_attr = attr_kind;
4535 attr.dw_attr_val.val_class = dw_val_class_loc;
4536 attr.dw_attr_val.v.val_loc = loc;
4537 add_dwarf_attr (die, &attr);
4540 static inline dw_loc_descr_ref
4541 AT_loc (dw_attr_ref a)
4543 gcc_assert (a && AT_class (a) == dw_val_class_loc);
4544 return a->dw_attr_val.v.val_loc;
4547 static inline void
4548 add_AT_loc_list (dw_die_ref die, enum dwarf_attribute attr_kind, dw_loc_list_ref loc_list)
4550 dw_attr_node attr;
4552 attr.dw_attr = attr_kind;
4553 attr.dw_attr_val.val_class = dw_val_class_loc_list;
4554 attr.dw_attr_val.v.val_loc_list = loc_list;
4555 add_dwarf_attr (die, &attr);
4556 have_location_lists = true;
4559 static inline dw_loc_list_ref
4560 AT_loc_list (dw_attr_ref a)
4562 gcc_assert (a && AT_class (a) == dw_val_class_loc_list);
4563 return a->dw_attr_val.v.val_loc_list;
4566 static inline dw_loc_list_ref *
4567 AT_loc_list_ptr (dw_attr_ref a)
4569 gcc_assert (a && AT_class (a) == dw_val_class_loc_list);
4570 return &a->dw_attr_val.v.val_loc_list;
4573 /* Add an address constant attribute value to a DIE. */
4575 static inline void
4576 add_AT_addr (dw_die_ref die, enum dwarf_attribute attr_kind, rtx addr)
4578 dw_attr_node attr;
4580 attr.dw_attr = attr_kind;
4581 attr.dw_attr_val.val_class = dw_val_class_addr;
4582 attr.dw_attr_val.v.val_addr = addr;
4583 add_dwarf_attr (die, &attr);
4586 /* Get the RTX from to an address DIE attribute. */
4588 static inline rtx
4589 AT_addr (dw_attr_ref a)
4591 gcc_assert (a && AT_class (a) == dw_val_class_addr);
4592 return a->dw_attr_val.v.val_addr;
4595 /* Add a file attribute value to a DIE. */
4597 static inline void
4598 add_AT_file (dw_die_ref die, enum dwarf_attribute attr_kind,
4599 struct dwarf_file_data *fd)
4601 dw_attr_node attr;
4603 attr.dw_attr = attr_kind;
4604 attr.dw_attr_val.val_class = dw_val_class_file;
4605 attr.dw_attr_val.v.val_file = fd;
4606 add_dwarf_attr (die, &attr);
4609 /* Get the dwarf_file_data from a file DIE attribute. */
4611 static inline struct dwarf_file_data *
4612 AT_file (dw_attr_ref a)
4614 gcc_assert (a && AT_class (a) == dw_val_class_file);
4615 return a->dw_attr_val.v.val_file;
4618 /* Add a vms delta attribute value to a DIE. */
4620 static inline void
4621 add_AT_vms_delta (dw_die_ref die, enum dwarf_attribute attr_kind,
4622 const char *lbl1, const char *lbl2)
4624 dw_attr_node attr;
4626 attr.dw_attr = attr_kind;
4627 attr.dw_attr_val.val_class = dw_val_class_vms_delta;
4628 attr.dw_attr_val.v.val_vms_delta.lbl1 = xstrdup (lbl1);
4629 attr.dw_attr_val.v.val_vms_delta.lbl2 = xstrdup (lbl2);
4630 add_dwarf_attr (die, &attr);
4633 /* Add a label identifier attribute value to a DIE. */
4635 static inline void
4636 add_AT_lbl_id (dw_die_ref die, enum dwarf_attribute attr_kind, const char *lbl_id)
4638 dw_attr_node attr;
4640 attr.dw_attr = attr_kind;
4641 attr.dw_attr_val.val_class = dw_val_class_lbl_id;
4642 attr.dw_attr_val.v.val_lbl_id = xstrdup (lbl_id);
4643 add_dwarf_attr (die, &attr);
4646 /* Add a section offset attribute value to a DIE, an offset into the
4647 debug_line section. */
4649 static inline void
4650 add_AT_lineptr (dw_die_ref die, enum dwarf_attribute attr_kind,
4651 const char *label)
4653 dw_attr_node attr;
4655 attr.dw_attr = attr_kind;
4656 attr.dw_attr_val.val_class = dw_val_class_lineptr;
4657 attr.dw_attr_val.v.val_lbl_id = xstrdup (label);
4658 add_dwarf_attr (die, &attr);
4661 /* Add a section offset attribute value to a DIE, an offset into the
4662 debug_macinfo section. */
4664 static inline void
4665 add_AT_macptr (dw_die_ref die, enum dwarf_attribute attr_kind,
4666 const char *label)
4668 dw_attr_node attr;
4670 attr.dw_attr = attr_kind;
4671 attr.dw_attr_val.val_class = dw_val_class_macptr;
4672 attr.dw_attr_val.v.val_lbl_id = xstrdup (label);
4673 add_dwarf_attr (die, &attr);
4676 /* Add an offset attribute value to a DIE. */
4678 static inline void
4679 add_AT_offset (dw_die_ref die, enum dwarf_attribute attr_kind,
4680 unsigned HOST_WIDE_INT offset)
4682 dw_attr_node attr;
4684 attr.dw_attr = attr_kind;
4685 attr.dw_attr_val.val_class = dw_val_class_offset;
4686 attr.dw_attr_val.v.val_offset = offset;
4687 add_dwarf_attr (die, &attr);
4690 /* Add an range_list attribute value to a DIE. */
4692 static void
4693 add_AT_range_list (dw_die_ref die, enum dwarf_attribute attr_kind,
4694 long unsigned int offset)
4696 dw_attr_node attr;
4698 attr.dw_attr = attr_kind;
4699 attr.dw_attr_val.val_class = dw_val_class_range_list;
4700 attr.dw_attr_val.v.val_offset = offset;
4701 add_dwarf_attr (die, &attr);
4704 /* Return the start label of a delta attribute. */
4706 static inline const char *
4707 AT_vms_delta1 (dw_attr_ref a)
4709 gcc_assert (a && (AT_class (a) == dw_val_class_vms_delta));
4710 return a->dw_attr_val.v.val_vms_delta.lbl1;
4713 /* Return the end label of a delta attribute. */
4715 static inline const char *
4716 AT_vms_delta2 (dw_attr_ref a)
4718 gcc_assert (a && (AT_class (a) == dw_val_class_vms_delta));
4719 return a->dw_attr_val.v.val_vms_delta.lbl2;
4722 static inline const char *
4723 AT_lbl (dw_attr_ref a)
4725 gcc_assert (a && (AT_class (a) == dw_val_class_lbl_id
4726 || AT_class (a) == dw_val_class_lineptr
4727 || AT_class (a) == dw_val_class_macptr));
4728 return a->dw_attr_val.v.val_lbl_id;
4731 /* Get the attribute of type attr_kind. */
4733 static dw_attr_ref
4734 get_AT (dw_die_ref die, enum dwarf_attribute attr_kind)
4736 dw_attr_ref a;
4737 unsigned ix;
4738 dw_die_ref spec = NULL;
4740 if (! die)
4741 return NULL;
4743 FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a)
4744 if (a->dw_attr == attr_kind)
4745 return a;
4746 else if (a->dw_attr == DW_AT_specification
4747 || a->dw_attr == DW_AT_abstract_origin)
4748 spec = AT_ref (a);
4750 if (spec)
4751 return get_AT (spec, attr_kind);
4753 return NULL;
4756 /* Return the "low pc" attribute value, typically associated with a subprogram
4757 DIE. Return null if the "low pc" attribute is either not present, or if it
4758 cannot be represented as an assembler label identifier. */
4760 static inline const char *
4761 get_AT_low_pc (dw_die_ref die)
4763 dw_attr_ref a = get_AT (die, DW_AT_low_pc);
4765 return a ? AT_lbl (a) : NULL;
4768 /* Return the "high pc" attribute value, typically associated with a subprogram
4769 DIE. Return null if the "high pc" attribute is either not present, or if it
4770 cannot be represented as an assembler label identifier. */
4772 static inline const char *
4773 get_AT_hi_pc (dw_die_ref die)
4775 dw_attr_ref a = get_AT (die, DW_AT_high_pc);
4777 return a ? AT_lbl (a) : NULL;
4780 /* Return the value of the string attribute designated by ATTR_KIND, or
4781 NULL if it is not present. */
4783 static inline const char *
4784 get_AT_string (dw_die_ref die, enum dwarf_attribute attr_kind)
4786 dw_attr_ref a = get_AT (die, attr_kind);
4788 return a ? AT_string (a) : NULL;
4791 /* Return the value of the flag attribute designated by ATTR_KIND, or -1
4792 if it is not present. */
4794 static inline int
4795 get_AT_flag (dw_die_ref die, enum dwarf_attribute attr_kind)
4797 dw_attr_ref a = get_AT (die, attr_kind);
4799 return a ? AT_flag (a) : 0;
4802 /* Return the value of the unsigned attribute designated by ATTR_KIND, or 0
4803 if it is not present. */
4805 static inline unsigned
4806 get_AT_unsigned (dw_die_ref die, enum dwarf_attribute attr_kind)
4808 dw_attr_ref a = get_AT (die, attr_kind);
4810 return a ? AT_unsigned (a) : 0;
4813 static inline dw_die_ref
4814 get_AT_ref (dw_die_ref die, enum dwarf_attribute attr_kind)
4816 dw_attr_ref a = get_AT (die, attr_kind);
4818 return a ? AT_ref (a) : NULL;
4821 static inline struct dwarf_file_data *
4822 get_AT_file (dw_die_ref die, enum dwarf_attribute attr_kind)
4824 dw_attr_ref a = get_AT (die, attr_kind);
4826 return a ? AT_file (a) : NULL;
4829 /* Return TRUE if the language is C++. */
4831 static inline bool
4832 is_cxx (void)
4834 unsigned int lang = get_AT_unsigned (comp_unit_die (), DW_AT_language);
4836 return lang == DW_LANG_C_plus_plus || lang == DW_LANG_ObjC_plus_plus;
4839 /* Return TRUE if the language is Fortran. */
4841 static inline bool
4842 is_fortran (void)
4844 unsigned int lang = get_AT_unsigned (comp_unit_die (), DW_AT_language);
4846 return (lang == DW_LANG_Fortran77
4847 || lang == DW_LANG_Fortran90
4848 || lang == DW_LANG_Fortran95);
4851 /* Return TRUE if the language is Ada. */
4853 static inline bool
4854 is_ada (void)
4856 unsigned int lang = get_AT_unsigned (comp_unit_die (), DW_AT_language);
4858 return lang == DW_LANG_Ada95 || lang == DW_LANG_Ada83;
4861 /* Remove the specified attribute if present. */
4863 static void
4864 remove_AT (dw_die_ref die, enum dwarf_attribute attr_kind)
4866 dw_attr_ref a;
4867 unsigned ix;
4869 if (! die)
4870 return;
4872 FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a)
4873 if (a->dw_attr == attr_kind)
4875 if (AT_class (a) == dw_val_class_str)
4876 if (a->dw_attr_val.v.val_str->refcount)
4877 a->dw_attr_val.v.val_str->refcount--;
4879 /* VEC_ordered_remove should help reduce the number of abbrevs
4880 that are needed. */
4881 VEC_ordered_remove (dw_attr_node, die->die_attr, ix);
4882 return;
4886 /* Remove CHILD from its parent. PREV must have the property that
4887 PREV->DIE_SIB == CHILD. Does not alter CHILD. */
4889 static void
4890 remove_child_with_prev (dw_die_ref child, dw_die_ref prev)
4892 gcc_assert (child->die_parent == prev->die_parent);
4893 gcc_assert (prev->die_sib == child);
4894 if (prev == child)
4896 gcc_assert (child->die_parent->die_child == child);
4897 prev = NULL;
4899 else
4900 prev->die_sib = child->die_sib;
4901 if (child->die_parent->die_child == child)
4902 child->die_parent->die_child = prev;
4905 /* Replace OLD_CHILD with NEW_CHILD. PREV must have the property that
4906 PREV->DIE_SIB == OLD_CHILD. Does not alter OLD_CHILD. */
4908 static void
4909 replace_child (dw_die_ref old_child, dw_die_ref new_child, dw_die_ref prev)
4911 dw_die_ref parent = old_child->die_parent;
4913 gcc_assert (parent == prev->die_parent);
4914 gcc_assert (prev->die_sib == old_child);
4916 new_child->die_parent = parent;
4917 if (prev == old_child)
4919 gcc_assert (parent->die_child == old_child);
4920 new_child->die_sib = new_child;
4922 else
4924 prev->die_sib = new_child;
4925 new_child->die_sib = old_child->die_sib;
4927 if (old_child->die_parent->die_child == old_child)
4928 old_child->die_parent->die_child = new_child;
4931 /* Move all children from OLD_PARENT to NEW_PARENT. */
4933 static void
4934 move_all_children (dw_die_ref old_parent, dw_die_ref new_parent)
4936 dw_die_ref c;
4937 new_parent->die_child = old_parent->die_child;
4938 old_parent->die_child = NULL;
4939 FOR_EACH_CHILD (new_parent, c, c->die_parent = new_parent);
4942 /* Remove child DIE whose die_tag is TAG. Do nothing if no child
4943 matches TAG. */
4945 static void
4946 remove_child_TAG (dw_die_ref die, enum dwarf_tag tag)
4948 dw_die_ref c;
4950 c = die->die_child;
4951 if (c) do {
4952 dw_die_ref prev = c;
4953 c = c->die_sib;
4954 while (c->die_tag == tag)
4956 remove_child_with_prev (c, prev);
4957 /* Might have removed every child. */
4958 if (c == c->die_sib)
4959 return;
4960 c = c->die_sib;
4962 } while (c != die->die_child);
4965 /* Add a CHILD_DIE as the last child of DIE. */
4967 static void
4968 add_child_die (dw_die_ref die, dw_die_ref child_die)
4970 /* FIXME this should probably be an assert. */
4971 if (! die || ! child_die)
4972 return;
4973 gcc_assert (die != child_die);
4975 child_die->die_parent = die;
4976 if (die->die_child)
4978 child_die->die_sib = die->die_child->die_sib;
4979 die->die_child->die_sib = child_die;
4981 else
4982 child_die->die_sib = child_die;
4983 die->die_child = child_die;
4986 /* Move CHILD, which must be a child of PARENT or the DIE for which PARENT
4987 is the specification, to the end of PARENT's list of children.
4988 This is done by removing and re-adding it. */
4990 static void
4991 splice_child_die (dw_die_ref parent, dw_die_ref child)
4993 dw_die_ref p;
4995 /* We want the declaration DIE from inside the class, not the
4996 specification DIE at toplevel. */
4997 if (child->die_parent != parent)
4999 dw_die_ref tmp = get_AT_ref (child, DW_AT_specification);
5001 if (tmp)
5002 child = tmp;
5005 gcc_assert (child->die_parent == parent
5006 || (child->die_parent
5007 == get_AT_ref (parent, DW_AT_specification)));
5009 for (p = child->die_parent->die_child; ; p = p->die_sib)
5010 if (p->die_sib == child)
5012 remove_child_with_prev (child, p);
5013 break;
5016 add_child_die (parent, child);
5019 /* Return a pointer to a newly created DIE node. */
5021 static inline dw_die_ref
5022 new_die (enum dwarf_tag tag_value, dw_die_ref parent_die, tree t)
5024 dw_die_ref die = ggc_alloc_cleared_die_node ();
5026 die->die_tag = tag_value;
5028 if (parent_die != NULL)
5029 add_child_die (parent_die, die);
5030 else
5032 limbo_die_node *limbo_node;
5034 limbo_node = ggc_alloc_cleared_limbo_die_node ();
5035 limbo_node->die = die;
5036 limbo_node->created_for = t;
5037 limbo_node->next = limbo_die_list;
5038 limbo_die_list = limbo_node;
5041 return die;
5044 /* Return the DIE associated with the given type specifier. */
5046 static inline dw_die_ref
5047 lookup_type_die (tree type)
5049 return TYPE_SYMTAB_DIE (type);
5052 /* Given a TYPE_DIE representing the type TYPE, if TYPE is an
5053 anonymous type named by the typedef TYPE_DIE, return the DIE of the
5054 anonymous type instead the one of the naming typedef. */
5056 static inline dw_die_ref
5057 strip_naming_typedef (tree type, dw_die_ref type_die)
5059 if (type
5060 && TREE_CODE (type) == RECORD_TYPE
5061 && type_die
5062 && type_die->die_tag == DW_TAG_typedef
5063 && is_naming_typedef_decl (TYPE_NAME (type)))
5064 type_die = get_AT_ref (type_die, DW_AT_type);
5065 return type_die;
5068 /* Like lookup_type_die, but if type is an anonymous type named by a
5069 typedef[1], return the DIE of the anonymous type instead the one of
5070 the naming typedef. This is because in gen_typedef_die, we did
5071 equate the anonymous struct named by the typedef with the DIE of
5072 the naming typedef. So by default, lookup_type_die on an anonymous
5073 struct yields the DIE of the naming typedef.
5075 [1]: Read the comment of is_naming_typedef_decl to learn about what
5076 a naming typedef is. */
5078 static inline dw_die_ref
5079 lookup_type_die_strip_naming_typedef (tree type)
5081 dw_die_ref die = lookup_type_die (type);
5082 return strip_naming_typedef (type, die);
5085 /* Equate a DIE to a given type specifier. */
5087 static inline void
5088 equate_type_number_to_die (tree type, dw_die_ref type_die)
5090 TYPE_SYMTAB_DIE (type) = type_die;
5093 /* Returns a hash value for X (which really is a die_struct). */
5095 static hashval_t
5096 decl_die_table_hash (const void *x)
5098 return (hashval_t) ((const_dw_die_ref) x)->decl_id;
5101 /* Return nonzero if decl_id of die_struct X is the same as UID of decl *Y. */
5103 static int
5104 decl_die_table_eq (const void *x, const void *y)
5106 return (((const_dw_die_ref) x)->decl_id == DECL_UID ((const_tree) y));
5109 /* Return the DIE associated with a given declaration. */
5111 static inline dw_die_ref
5112 lookup_decl_die (tree decl)
5114 return (dw_die_ref) htab_find_with_hash (decl_die_table, decl, DECL_UID (decl));
5117 /* Returns a hash value for X (which really is a var_loc_list). */
5119 static hashval_t
5120 decl_loc_table_hash (const void *x)
5122 return (hashval_t) ((const var_loc_list *) x)->decl_id;
5125 /* Return nonzero if decl_id of var_loc_list X is the same as
5126 UID of decl *Y. */
5128 static int
5129 decl_loc_table_eq (const void *x, const void *y)
5131 return (((const var_loc_list *) x)->decl_id == DECL_UID ((const_tree) y));
5134 /* Return the var_loc list associated with a given declaration. */
5136 static inline var_loc_list *
5137 lookup_decl_loc (const_tree decl)
5139 if (!decl_loc_table)
5140 return NULL;
5141 return (var_loc_list *)
5142 htab_find_with_hash (decl_loc_table, decl, DECL_UID (decl));
5145 /* Returns a hash value for X (which really is a cached_dw_loc_list_list). */
5147 static hashval_t
5148 cached_dw_loc_list_table_hash (const void *x)
5150 return (hashval_t) ((const cached_dw_loc_list *) x)->decl_id;
5153 /* Return nonzero if decl_id of cached_dw_loc_list X is the same as
5154 UID of decl *Y. */
5156 static int
5157 cached_dw_loc_list_table_eq (const void *x, const void *y)
5159 return (((const cached_dw_loc_list *) x)->decl_id
5160 == DECL_UID ((const_tree) y));
5163 /* Equate a DIE to a particular declaration. */
5165 static void
5166 equate_decl_number_to_die (tree decl, dw_die_ref decl_die)
5168 unsigned int decl_id = DECL_UID (decl);
5169 void **slot;
5171 slot = htab_find_slot_with_hash (decl_die_table, decl, decl_id, INSERT);
5172 *slot = decl_die;
5173 decl_die->decl_id = decl_id;
5176 /* Return how many bits covers PIECE EXPR_LIST. */
5178 static int
5179 decl_piece_bitsize (rtx piece)
5181 int ret = (int) GET_MODE (piece);
5182 if (ret)
5183 return ret;
5184 gcc_assert (GET_CODE (XEXP (piece, 0)) == CONCAT
5185 && CONST_INT_P (XEXP (XEXP (piece, 0), 0)));
5186 return INTVAL (XEXP (XEXP (piece, 0), 0));
5189 /* Return pointer to the location of location note in PIECE EXPR_LIST. */
5191 static rtx *
5192 decl_piece_varloc_ptr (rtx piece)
5194 if ((int) GET_MODE (piece))
5195 return &XEXP (piece, 0);
5196 else
5197 return &XEXP (XEXP (piece, 0), 1);
5200 /* Create an EXPR_LIST for location note LOC_NOTE covering BITSIZE bits.
5201 Next is the chain of following piece nodes. */
5203 static rtx
5204 decl_piece_node (rtx loc_note, HOST_WIDE_INT bitsize, rtx next)
5206 if (bitsize <= (int) MAX_MACHINE_MODE)
5207 return alloc_EXPR_LIST (bitsize, loc_note, next);
5208 else
5209 return alloc_EXPR_LIST (0, gen_rtx_CONCAT (VOIDmode,
5210 GEN_INT (bitsize),
5211 loc_note), next);
5214 /* Return rtx that should be stored into loc field for
5215 LOC_NOTE and BITPOS/BITSIZE. */
5217 static rtx
5218 construct_piece_list (rtx loc_note, HOST_WIDE_INT bitpos,
5219 HOST_WIDE_INT bitsize)
5221 if (bitsize != -1)
5223 loc_note = decl_piece_node (loc_note, bitsize, NULL_RTX);
5224 if (bitpos != 0)
5225 loc_note = decl_piece_node (NULL_RTX, bitpos, loc_note);
5227 return loc_note;
5230 /* This function either modifies location piece list *DEST in
5231 place (if SRC and INNER is NULL), or copies location piece list
5232 *SRC to *DEST while modifying it. Location BITPOS is modified
5233 to contain LOC_NOTE, any pieces overlapping it are removed resp.
5234 not copied and if needed some padding around it is added.
5235 When modifying in place, DEST should point to EXPR_LIST where
5236 earlier pieces cover PIECE_BITPOS bits, when copying SRC points
5237 to the start of the whole list and INNER points to the EXPR_LIST
5238 where earlier pieces cover PIECE_BITPOS bits. */
5240 static void
5241 adjust_piece_list (rtx *dest, rtx *src, rtx *inner,
5242 HOST_WIDE_INT bitpos, HOST_WIDE_INT piece_bitpos,
5243 HOST_WIDE_INT bitsize, rtx loc_note)
5245 int diff;
5246 bool copy = inner != NULL;
5248 if (copy)
5250 /* First copy all nodes preceeding the current bitpos. */
5251 while (src != inner)
5253 *dest = decl_piece_node (*decl_piece_varloc_ptr (*src),
5254 decl_piece_bitsize (*src), NULL_RTX);
5255 dest = &XEXP (*dest, 1);
5256 src = &XEXP (*src, 1);
5259 /* Add padding if needed. */
5260 if (bitpos != piece_bitpos)
5262 *dest = decl_piece_node (NULL_RTX, bitpos - piece_bitpos,
5263 copy ? NULL_RTX : *dest);
5264 dest = &XEXP (*dest, 1);
5266 else if (*dest && decl_piece_bitsize (*dest) == bitsize)
5268 gcc_assert (!copy);
5269 /* A piece with correct bitpos and bitsize already exist,
5270 just update the location for it and return. */
5271 *decl_piece_varloc_ptr (*dest) = loc_note;
5272 return;
5274 /* Add the piece that changed. */
5275 *dest = decl_piece_node (loc_note, bitsize, copy ? NULL_RTX : *dest);
5276 dest = &XEXP (*dest, 1);
5277 /* Skip over pieces that overlap it. */
5278 diff = bitpos - piece_bitpos + bitsize;
5279 if (!copy)
5280 src = dest;
5281 while (diff > 0 && *src)
5283 rtx piece = *src;
5284 diff -= decl_piece_bitsize (piece);
5285 if (copy)
5286 src = &XEXP (piece, 1);
5287 else
5289 *src = XEXP (piece, 1);
5290 free_EXPR_LIST_node (piece);
5293 /* Add padding if needed. */
5294 if (diff < 0 && *src)
5296 if (!copy)
5297 dest = src;
5298 *dest = decl_piece_node (NULL_RTX, -diff, copy ? NULL_RTX : *dest);
5299 dest = &XEXP (*dest, 1);
5301 if (!copy)
5302 return;
5303 /* Finally copy all nodes following it. */
5304 while (*src)
5306 *dest = decl_piece_node (*decl_piece_varloc_ptr (*src),
5307 decl_piece_bitsize (*src), NULL_RTX);
5308 dest = &XEXP (*dest, 1);
5309 src = &XEXP (*src, 1);
5313 /* Add a variable location node to the linked list for DECL. */
5315 static struct var_loc_node *
5316 add_var_loc_to_decl (tree decl, rtx loc_note, const char *label)
5318 unsigned int decl_id;
5319 var_loc_list *temp;
5320 void **slot;
5321 struct var_loc_node *loc = NULL;
5322 HOST_WIDE_INT bitsize = -1, bitpos = -1;
5324 if (DECL_DEBUG_EXPR_IS_FROM (decl))
5326 tree realdecl = DECL_DEBUG_EXPR (decl);
5327 if (realdecl && handled_component_p (realdecl))
5329 HOST_WIDE_INT maxsize;
5330 tree innerdecl;
5331 innerdecl
5332 = get_ref_base_and_extent (realdecl, &bitpos, &bitsize, &maxsize);
5333 if (!DECL_P (innerdecl)
5334 || DECL_IGNORED_P (innerdecl)
5335 || TREE_STATIC (innerdecl)
5336 || bitsize <= 0
5337 || bitpos + bitsize > 256
5338 || bitsize != maxsize)
5339 return NULL;
5340 decl = innerdecl;
5344 decl_id = DECL_UID (decl);
5345 slot = htab_find_slot_with_hash (decl_loc_table, decl, decl_id, INSERT);
5346 if (*slot == NULL)
5348 temp = ggc_alloc_cleared_var_loc_list ();
5349 temp->decl_id = decl_id;
5350 *slot = temp;
5352 else
5353 temp = (var_loc_list *) *slot;
5355 /* For PARM_DECLs try to keep around the original incoming value,
5356 even if that means we'll emit a zero-range .debug_loc entry. */
5357 if (temp->last
5358 && temp->first == temp->last
5359 && TREE_CODE (decl) == PARM_DECL
5360 && GET_CODE (temp->first->loc) == NOTE
5361 && NOTE_VAR_LOCATION_DECL (temp->first->loc) == decl
5362 && DECL_INCOMING_RTL (decl)
5363 && NOTE_VAR_LOCATION_LOC (temp->first->loc)
5364 && GET_CODE (NOTE_VAR_LOCATION_LOC (temp->first->loc))
5365 == GET_CODE (DECL_INCOMING_RTL (decl))
5366 && prev_real_insn (temp->first->loc) == NULL_RTX
5367 && (bitsize != -1
5368 || !rtx_equal_p (NOTE_VAR_LOCATION_LOC (temp->first->loc),
5369 NOTE_VAR_LOCATION_LOC (loc_note))
5370 || (NOTE_VAR_LOCATION_STATUS (temp->first->loc)
5371 != NOTE_VAR_LOCATION_STATUS (loc_note))))
5373 loc = ggc_alloc_cleared_var_loc_node ();
5374 temp->first->next = loc;
5375 temp->last = loc;
5376 loc->loc = construct_piece_list (loc_note, bitpos, bitsize);
5378 else if (temp->last)
5380 struct var_loc_node *last = temp->last, *unused = NULL;
5381 rtx *piece_loc = NULL, last_loc_note;
5382 int piece_bitpos = 0;
5383 if (last->next)
5385 last = last->next;
5386 gcc_assert (last->next == NULL);
5388 if (bitsize != -1 && GET_CODE (last->loc) == EXPR_LIST)
5390 piece_loc = &last->loc;
5393 int cur_bitsize = decl_piece_bitsize (*piece_loc);
5394 if (piece_bitpos + cur_bitsize > bitpos)
5395 break;
5396 piece_bitpos += cur_bitsize;
5397 piece_loc = &XEXP (*piece_loc, 1);
5399 while (*piece_loc);
5401 /* TEMP->LAST here is either pointer to the last but one or
5402 last element in the chained list, LAST is pointer to the
5403 last element. */
5404 if (label && strcmp (last->label, label) == 0)
5406 /* For SRA optimized variables if there weren't any real
5407 insns since last note, just modify the last node. */
5408 if (piece_loc != NULL)
5410 adjust_piece_list (piece_loc, NULL, NULL,
5411 bitpos, piece_bitpos, bitsize, loc_note);
5412 return NULL;
5414 /* If the last note doesn't cover any instructions, remove it. */
5415 if (temp->last != last)
5417 temp->last->next = NULL;
5418 unused = last;
5419 last = temp->last;
5420 gcc_assert (strcmp (last->label, label) != 0);
5422 else
5424 gcc_assert (temp->first == temp->last
5425 || (temp->first->next == temp->last
5426 && TREE_CODE (decl) == PARM_DECL));
5427 memset (temp->last, '\0', sizeof (*temp->last));
5428 temp->last->loc = construct_piece_list (loc_note, bitpos, bitsize);
5429 return temp->last;
5432 if (bitsize == -1 && NOTE_P (last->loc))
5433 last_loc_note = last->loc;
5434 else if (piece_loc != NULL
5435 && *piece_loc != NULL_RTX
5436 && piece_bitpos == bitpos
5437 && decl_piece_bitsize (*piece_loc) == bitsize)
5438 last_loc_note = *decl_piece_varloc_ptr (*piece_loc);
5439 else
5440 last_loc_note = NULL_RTX;
5441 /* If the current location is the same as the end of the list,
5442 and either both or neither of the locations is uninitialized,
5443 we have nothing to do. */
5444 if (last_loc_note == NULL_RTX
5445 || (!rtx_equal_p (NOTE_VAR_LOCATION_LOC (last_loc_note),
5446 NOTE_VAR_LOCATION_LOC (loc_note)))
5447 || ((NOTE_VAR_LOCATION_STATUS (last_loc_note)
5448 != NOTE_VAR_LOCATION_STATUS (loc_note))
5449 && ((NOTE_VAR_LOCATION_STATUS (last_loc_note)
5450 == VAR_INIT_STATUS_UNINITIALIZED)
5451 || (NOTE_VAR_LOCATION_STATUS (loc_note)
5452 == VAR_INIT_STATUS_UNINITIALIZED))))
5454 /* Add LOC to the end of list and update LAST. If the last
5455 element of the list has been removed above, reuse its
5456 memory for the new node, otherwise allocate a new one. */
5457 if (unused)
5459 loc = unused;
5460 memset (loc, '\0', sizeof (*loc));
5462 else
5463 loc = ggc_alloc_cleared_var_loc_node ();
5464 if (bitsize == -1 || piece_loc == NULL)
5465 loc->loc = construct_piece_list (loc_note, bitpos, bitsize);
5466 else
5467 adjust_piece_list (&loc->loc, &last->loc, piece_loc,
5468 bitpos, piece_bitpos, bitsize, loc_note);
5469 last->next = loc;
5470 /* Ensure TEMP->LAST will point either to the new last but one
5471 element of the chain, or to the last element in it. */
5472 if (last != temp->last)
5473 temp->last = last;
5475 else if (unused)
5476 ggc_free (unused);
5478 else
5480 loc = ggc_alloc_cleared_var_loc_node ();
5481 temp->first = loc;
5482 temp->last = loc;
5483 loc->loc = construct_piece_list (loc_note, bitpos, bitsize);
5485 return loc;
5488 /* Keep track of the number of spaces used to indent the
5489 output of the debugging routines that print the structure of
5490 the DIE internal representation. */
5491 static int print_indent;
5493 /* Indent the line the number of spaces given by print_indent. */
5495 static inline void
5496 print_spaces (FILE *outfile)
5498 fprintf (outfile, "%*s", print_indent, "");
5501 /* Print a type signature in hex. */
5503 static inline void
5504 print_signature (FILE *outfile, char *sig)
5506 int i;
5508 for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++)
5509 fprintf (outfile, "%02x", sig[i] & 0xff);
5512 /* Print the information associated with a given DIE, and its children.
5513 This routine is a debugging aid only. */
5515 static void
5516 print_die (dw_die_ref die, FILE *outfile)
5518 dw_attr_ref a;
5519 dw_die_ref c;
5520 unsigned ix;
5522 print_spaces (outfile);
5523 fprintf (outfile, "DIE %4ld: %s (%p)\n",
5524 die->die_offset, dwarf_tag_name (die->die_tag),
5525 (void*) die);
5526 print_spaces (outfile);
5527 fprintf (outfile, " abbrev id: %lu", die->die_abbrev);
5528 fprintf (outfile, " offset: %ld", die->die_offset);
5529 fprintf (outfile, " mark: %d\n", die->die_mark);
5531 if (use_debug_types && die->die_id.die_type_node)
5533 print_spaces (outfile);
5534 fprintf (outfile, " signature: ");
5535 print_signature (outfile, die->die_id.die_type_node->signature);
5536 fprintf (outfile, "\n");
5539 FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a)
5541 print_spaces (outfile);
5542 fprintf (outfile, " %s: ", dwarf_attr_name (a->dw_attr));
5544 switch (AT_class (a))
5546 case dw_val_class_addr:
5547 fprintf (outfile, "address");
5548 break;
5549 case dw_val_class_offset:
5550 fprintf (outfile, "offset");
5551 break;
5552 case dw_val_class_loc:
5553 fprintf (outfile, "location descriptor");
5554 break;
5555 case dw_val_class_loc_list:
5556 fprintf (outfile, "location list -> label:%s",
5557 AT_loc_list (a)->ll_symbol);
5558 break;
5559 case dw_val_class_range_list:
5560 fprintf (outfile, "range list");
5561 break;
5562 case dw_val_class_const:
5563 fprintf (outfile, HOST_WIDE_INT_PRINT_DEC, AT_int (a));
5564 break;
5565 case dw_val_class_unsigned_const:
5566 fprintf (outfile, HOST_WIDE_INT_PRINT_UNSIGNED, AT_unsigned (a));
5567 break;
5568 case dw_val_class_const_double:
5569 fprintf (outfile, "constant ("HOST_WIDE_INT_PRINT_DEC","\
5570 HOST_WIDE_INT_PRINT_UNSIGNED")",
5571 a->dw_attr_val.v.val_double.high,
5572 a->dw_attr_val.v.val_double.low);
5573 break;
5574 case dw_val_class_vec:
5575 fprintf (outfile, "floating-point or vector constant");
5576 break;
5577 case dw_val_class_flag:
5578 fprintf (outfile, "%u", AT_flag (a));
5579 break;
5580 case dw_val_class_die_ref:
5581 if (AT_ref (a) != NULL)
5583 if (use_debug_types && AT_ref (a)->die_id.die_type_node)
5585 fprintf (outfile, "die -> signature: ");
5586 print_signature (outfile,
5587 AT_ref (a)->die_id.die_type_node->signature);
5589 else if (! use_debug_types && AT_ref (a)->die_id.die_symbol)
5590 fprintf (outfile, "die -> label: %s",
5591 AT_ref (a)->die_id.die_symbol);
5592 else
5593 fprintf (outfile, "die -> %ld", AT_ref (a)->die_offset);
5594 fprintf (outfile, " (%p)", (void *) AT_ref (a));
5596 else
5597 fprintf (outfile, "die -> <null>");
5598 break;
5599 case dw_val_class_vms_delta:
5600 fprintf (outfile, "delta: @slotcount(%s-%s)",
5601 AT_vms_delta2 (a), AT_vms_delta1 (a));
5602 break;
5603 case dw_val_class_lbl_id:
5604 case dw_val_class_lineptr:
5605 case dw_val_class_macptr:
5606 fprintf (outfile, "label: %s", AT_lbl (a));
5607 break;
5608 case dw_val_class_str:
5609 if (AT_string (a) != NULL)
5610 fprintf (outfile, "\"%s\"", AT_string (a));
5611 else
5612 fprintf (outfile, "<null>");
5613 break;
5614 case dw_val_class_file:
5615 fprintf (outfile, "\"%s\" (%d)", AT_file (a)->filename,
5616 AT_file (a)->emitted_number);
5617 break;
5618 case dw_val_class_data8:
5620 int i;
5622 for (i = 0; i < 8; i++)
5623 fprintf (outfile, "%02x", a->dw_attr_val.v.val_data8[i]);
5624 break;
5626 default:
5627 break;
5630 fprintf (outfile, "\n");
5633 if (die->die_child != NULL)
5635 print_indent += 4;
5636 FOR_EACH_CHILD (die, c, print_die (c, outfile));
5637 print_indent -= 4;
5639 if (print_indent == 0)
5640 fprintf (outfile, "\n");
5643 /* Print the information collected for a given DIE. */
5645 DEBUG_FUNCTION void
5646 debug_dwarf_die (dw_die_ref die)
5648 print_die (die, stderr);
5651 /* Print all DWARF information collected for the compilation unit.
5652 This routine is a debugging aid only. */
5654 DEBUG_FUNCTION void
5655 debug_dwarf (void)
5657 print_indent = 0;
5658 print_die (comp_unit_die (), stderr);
5661 /* Start a new compilation unit DIE for an include file. OLD_UNIT is the CU
5662 for the enclosing include file, if any. BINCL_DIE is the DW_TAG_GNU_BINCL
5663 DIE that marks the start of the DIEs for this include file. */
5665 static dw_die_ref
5666 push_new_compile_unit (dw_die_ref old_unit, dw_die_ref bincl_die)
5668 const char *filename = get_AT_string (bincl_die, DW_AT_name);
5669 dw_die_ref new_unit = gen_compile_unit_die (filename);
5671 new_unit->die_sib = old_unit;
5672 return new_unit;
5675 /* Close an include-file CU and reopen the enclosing one. */
5677 static dw_die_ref
5678 pop_compile_unit (dw_die_ref old_unit)
5680 dw_die_ref new_unit = old_unit->die_sib;
5682 old_unit->die_sib = NULL;
5683 return new_unit;
5686 #define CHECKSUM(FOO) md5_process_bytes (&(FOO), sizeof (FOO), ctx)
5687 #define CHECKSUM_STRING(FOO) md5_process_bytes ((FOO), strlen (FOO), ctx)
5689 /* Calculate the checksum of a location expression. */
5691 static inline void
5692 loc_checksum (dw_loc_descr_ref loc, struct md5_ctx *ctx)
5694 int tem;
5696 tem = (loc->dtprel << 8) | ((unsigned int) loc->dw_loc_opc);
5697 CHECKSUM (tem);
5698 CHECKSUM (loc->dw_loc_oprnd1);
5699 CHECKSUM (loc->dw_loc_oprnd2);
5702 /* Calculate the checksum of an attribute. */
5704 static void
5705 attr_checksum (dw_attr_ref at, struct md5_ctx *ctx, int *mark)
5707 dw_loc_descr_ref loc;
5708 rtx r;
5710 CHECKSUM (at->dw_attr);
5712 /* We don't care that this was compiled with a different compiler
5713 snapshot; if the output is the same, that's what matters. */
5714 if (at->dw_attr == DW_AT_producer)
5715 return;
5717 switch (AT_class (at))
5719 case dw_val_class_const:
5720 CHECKSUM (at->dw_attr_val.v.val_int);
5721 break;
5722 case dw_val_class_unsigned_const:
5723 CHECKSUM (at->dw_attr_val.v.val_unsigned);
5724 break;
5725 case dw_val_class_const_double:
5726 CHECKSUM (at->dw_attr_val.v.val_double);
5727 break;
5728 case dw_val_class_vec:
5729 CHECKSUM (at->dw_attr_val.v.val_vec);
5730 break;
5731 case dw_val_class_flag:
5732 CHECKSUM (at->dw_attr_val.v.val_flag);
5733 break;
5734 case dw_val_class_str:
5735 CHECKSUM_STRING (AT_string (at));
5736 break;
5738 case dw_val_class_addr:
5739 r = AT_addr (at);
5740 gcc_assert (GET_CODE (r) == SYMBOL_REF);
5741 CHECKSUM_STRING (XSTR (r, 0));
5742 break;
5744 case dw_val_class_offset:
5745 CHECKSUM (at->dw_attr_val.v.val_offset);
5746 break;
5748 case dw_val_class_loc:
5749 for (loc = AT_loc (at); loc; loc = loc->dw_loc_next)
5750 loc_checksum (loc, ctx);
5751 break;
5753 case dw_val_class_die_ref:
5754 die_checksum (AT_ref (at), ctx, mark);
5755 break;
5757 case dw_val_class_fde_ref:
5758 case dw_val_class_vms_delta:
5759 case dw_val_class_lbl_id:
5760 case dw_val_class_lineptr:
5761 case dw_val_class_macptr:
5762 break;
5764 case dw_val_class_file:
5765 CHECKSUM_STRING (AT_file (at)->filename);
5766 break;
5768 case dw_val_class_data8:
5769 CHECKSUM (at->dw_attr_val.v.val_data8);
5770 break;
5772 default:
5773 break;
5777 /* Calculate the checksum of a DIE. */
5779 static void
5780 die_checksum (dw_die_ref die, struct md5_ctx *ctx, int *mark)
5782 dw_die_ref c;
5783 dw_attr_ref a;
5784 unsigned ix;
5786 /* To avoid infinite recursion. */
5787 if (die->die_mark)
5789 CHECKSUM (die->die_mark);
5790 return;
5792 die->die_mark = ++(*mark);
5794 CHECKSUM (die->die_tag);
5796 FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a)
5797 attr_checksum (a, ctx, mark);
5799 FOR_EACH_CHILD (die, c, die_checksum (c, ctx, mark));
5802 #undef CHECKSUM
5803 #undef CHECKSUM_STRING
5805 /* For DWARF-4 types, include the trailing NULL when checksumming strings. */
5806 #define CHECKSUM(FOO) md5_process_bytes (&(FOO), sizeof (FOO), ctx)
5807 #define CHECKSUM_STRING(FOO) md5_process_bytes ((FOO), strlen (FOO) + 1, ctx)
5808 #define CHECKSUM_SLEB128(FOO) checksum_sleb128 ((FOO), ctx)
5809 #define CHECKSUM_ULEB128(FOO) checksum_uleb128 ((FOO), ctx)
5810 #define CHECKSUM_ATTR(FOO) \
5811 if (FOO) attr_checksum_ordered (die->die_tag, (FOO), ctx, mark)
5813 /* Calculate the checksum of a number in signed LEB128 format. */
5815 static void
5816 checksum_sleb128 (HOST_WIDE_INT value, struct md5_ctx *ctx)
5818 unsigned char byte;
5819 bool more;
5821 while (1)
5823 byte = (value & 0x7f);
5824 value >>= 7;
5825 more = !((value == 0 && (byte & 0x40) == 0)
5826 || (value == -1 && (byte & 0x40) != 0));
5827 if (more)
5828 byte |= 0x80;
5829 CHECKSUM (byte);
5830 if (!more)
5831 break;
5835 /* Calculate the checksum of a number in unsigned LEB128 format. */
5837 static void
5838 checksum_uleb128 (unsigned HOST_WIDE_INT value, struct md5_ctx *ctx)
5840 while (1)
5842 unsigned char byte = (value & 0x7f);
5843 value >>= 7;
5844 if (value != 0)
5845 /* More bytes to follow. */
5846 byte |= 0x80;
5847 CHECKSUM (byte);
5848 if (value == 0)
5849 break;
5853 /* Checksum the context of the DIE. This adds the names of any
5854 surrounding namespaces or structures to the checksum. */
5856 static void
5857 checksum_die_context (dw_die_ref die, struct md5_ctx *ctx)
5859 const char *name;
5860 dw_die_ref spec;
5861 int tag = die->die_tag;
5863 if (tag != DW_TAG_namespace
5864 && tag != DW_TAG_structure_type
5865 && tag != DW_TAG_class_type)
5866 return;
5868 name = get_AT_string (die, DW_AT_name);
5870 spec = get_AT_ref (die, DW_AT_specification);
5871 if (spec != NULL)
5872 die = spec;
5874 if (die->die_parent != NULL)
5875 checksum_die_context (die->die_parent, ctx);
5877 CHECKSUM_ULEB128 ('C');
5878 CHECKSUM_ULEB128 (tag);
5879 if (name != NULL)
5880 CHECKSUM_STRING (name);
5883 /* Calculate the checksum of a location expression. */
5885 static inline void
5886 loc_checksum_ordered (dw_loc_descr_ref loc, struct md5_ctx *ctx)
5888 /* Special case for lone DW_OP_plus_uconst: checksum as if the location
5889 were emitted as a DW_FORM_sdata instead of a location expression. */
5890 if (loc->dw_loc_opc == DW_OP_plus_uconst && loc->dw_loc_next == NULL)
5892 CHECKSUM_ULEB128 (DW_FORM_sdata);
5893 CHECKSUM_SLEB128 ((HOST_WIDE_INT) loc->dw_loc_oprnd1.v.val_unsigned);
5894 return;
5897 /* Otherwise, just checksum the raw location expression. */
5898 while (loc != NULL)
5900 CHECKSUM_ULEB128 (loc->dw_loc_opc);
5901 CHECKSUM (loc->dw_loc_oprnd1);
5902 CHECKSUM (loc->dw_loc_oprnd2);
5903 loc = loc->dw_loc_next;
5907 /* Calculate the checksum of an attribute. */
5909 static void
5910 attr_checksum_ordered (enum dwarf_tag tag, dw_attr_ref at,
5911 struct md5_ctx *ctx, int *mark)
5913 dw_loc_descr_ref loc;
5914 rtx r;
5916 if (AT_class (at) == dw_val_class_die_ref)
5918 dw_die_ref target_die = AT_ref (at);
5920 /* For pointer and reference types, we checksum only the (qualified)
5921 name of the target type (if there is a name). For friend entries,
5922 we checksum only the (qualified) name of the target type or function.
5923 This allows the checksum to remain the same whether the target type
5924 is complete or not. */
5925 if ((at->dw_attr == DW_AT_type
5926 && (tag == DW_TAG_pointer_type
5927 || tag == DW_TAG_reference_type
5928 || tag == DW_TAG_rvalue_reference_type
5929 || tag == DW_TAG_ptr_to_member_type))
5930 || (at->dw_attr == DW_AT_friend
5931 && tag == DW_TAG_friend))
5933 dw_attr_ref name_attr = get_AT (target_die, DW_AT_name);
5935 if (name_attr != NULL)
5937 dw_die_ref decl = get_AT_ref (target_die, DW_AT_specification);
5939 if (decl == NULL)
5940 decl = target_die;
5941 CHECKSUM_ULEB128 ('N');
5942 CHECKSUM_ULEB128 (at->dw_attr);
5943 if (decl->die_parent != NULL)
5944 checksum_die_context (decl->die_parent, ctx);
5945 CHECKSUM_ULEB128 ('E');
5946 CHECKSUM_STRING (AT_string (name_attr));
5947 return;
5951 /* For all other references to another DIE, we check to see if the
5952 target DIE has already been visited. If it has, we emit a
5953 backward reference; if not, we descend recursively. */
5954 if (target_die->die_mark > 0)
5956 CHECKSUM_ULEB128 ('R');
5957 CHECKSUM_ULEB128 (at->dw_attr);
5958 CHECKSUM_ULEB128 (target_die->die_mark);
5960 else
5962 dw_die_ref decl = get_AT_ref (target_die, DW_AT_specification);
5964 if (decl == NULL)
5965 decl = target_die;
5966 target_die->die_mark = ++(*mark);
5967 CHECKSUM_ULEB128 ('T');
5968 CHECKSUM_ULEB128 (at->dw_attr);
5969 if (decl->die_parent != NULL)
5970 checksum_die_context (decl->die_parent, ctx);
5971 die_checksum_ordered (target_die, ctx, mark);
5973 return;
5976 CHECKSUM_ULEB128 ('A');
5977 CHECKSUM_ULEB128 (at->dw_attr);
5979 switch (AT_class (at))
5981 case dw_val_class_const:
5982 CHECKSUM_ULEB128 (DW_FORM_sdata);
5983 CHECKSUM_SLEB128 (at->dw_attr_val.v.val_int);
5984 break;
5986 case dw_val_class_unsigned_const:
5987 CHECKSUM_ULEB128 (DW_FORM_sdata);
5988 CHECKSUM_SLEB128 ((int) at->dw_attr_val.v.val_unsigned);
5989 break;
5991 case dw_val_class_const_double:
5992 CHECKSUM_ULEB128 (DW_FORM_block);
5993 CHECKSUM_ULEB128 (sizeof (at->dw_attr_val.v.val_double));
5994 CHECKSUM (at->dw_attr_val.v.val_double);
5995 break;
5997 case dw_val_class_vec:
5998 CHECKSUM_ULEB128 (DW_FORM_block);
5999 CHECKSUM_ULEB128 (sizeof (at->dw_attr_val.v.val_vec));
6000 CHECKSUM (at->dw_attr_val.v.val_vec);
6001 break;
6003 case dw_val_class_flag:
6004 CHECKSUM_ULEB128 (DW_FORM_flag);
6005 CHECKSUM_ULEB128 (at->dw_attr_val.v.val_flag ? 1 : 0);
6006 break;
6008 case dw_val_class_str:
6009 CHECKSUM_ULEB128 (DW_FORM_string);
6010 CHECKSUM_STRING (AT_string (at));
6011 break;
6013 case dw_val_class_addr:
6014 r = AT_addr (at);
6015 gcc_assert (GET_CODE (r) == SYMBOL_REF);
6016 CHECKSUM_ULEB128 (DW_FORM_string);
6017 CHECKSUM_STRING (XSTR (r, 0));
6018 break;
6020 case dw_val_class_offset:
6021 CHECKSUM_ULEB128 (DW_FORM_sdata);
6022 CHECKSUM_ULEB128 (at->dw_attr_val.v.val_offset);
6023 break;
6025 case dw_val_class_loc:
6026 for (loc = AT_loc (at); loc; loc = loc->dw_loc_next)
6027 loc_checksum_ordered (loc, ctx);
6028 break;
6030 case dw_val_class_fde_ref:
6031 case dw_val_class_lbl_id:
6032 case dw_val_class_lineptr:
6033 case dw_val_class_macptr:
6034 break;
6036 case dw_val_class_file:
6037 CHECKSUM_ULEB128 (DW_FORM_string);
6038 CHECKSUM_STRING (AT_file (at)->filename);
6039 break;
6041 case dw_val_class_data8:
6042 CHECKSUM (at->dw_attr_val.v.val_data8);
6043 break;
6045 default:
6046 break;
6050 struct checksum_attributes
6052 dw_attr_ref at_name;
6053 dw_attr_ref at_type;
6054 dw_attr_ref at_friend;
6055 dw_attr_ref at_accessibility;
6056 dw_attr_ref at_address_class;
6057 dw_attr_ref at_allocated;
6058 dw_attr_ref at_artificial;
6059 dw_attr_ref at_associated;
6060 dw_attr_ref at_binary_scale;
6061 dw_attr_ref at_bit_offset;
6062 dw_attr_ref at_bit_size;
6063 dw_attr_ref at_bit_stride;
6064 dw_attr_ref at_byte_size;
6065 dw_attr_ref at_byte_stride;
6066 dw_attr_ref at_const_value;
6067 dw_attr_ref at_containing_type;
6068 dw_attr_ref at_count;
6069 dw_attr_ref at_data_location;
6070 dw_attr_ref at_data_member_location;
6071 dw_attr_ref at_decimal_scale;
6072 dw_attr_ref at_decimal_sign;
6073 dw_attr_ref at_default_value;
6074 dw_attr_ref at_digit_count;
6075 dw_attr_ref at_discr;
6076 dw_attr_ref at_discr_list;
6077 dw_attr_ref at_discr_value;
6078 dw_attr_ref at_encoding;
6079 dw_attr_ref at_endianity;
6080 dw_attr_ref at_explicit;
6081 dw_attr_ref at_is_optional;
6082 dw_attr_ref at_location;
6083 dw_attr_ref at_lower_bound;
6084 dw_attr_ref at_mutable;
6085 dw_attr_ref at_ordering;
6086 dw_attr_ref at_picture_string;
6087 dw_attr_ref at_prototyped;
6088 dw_attr_ref at_small;
6089 dw_attr_ref at_segment;
6090 dw_attr_ref at_string_length;
6091 dw_attr_ref at_threads_scaled;
6092 dw_attr_ref at_upper_bound;
6093 dw_attr_ref at_use_location;
6094 dw_attr_ref at_use_UTF8;
6095 dw_attr_ref at_variable_parameter;
6096 dw_attr_ref at_virtuality;
6097 dw_attr_ref at_visibility;
6098 dw_attr_ref at_vtable_elem_location;
6101 /* Collect the attributes that we will want to use for the checksum. */
6103 static void
6104 collect_checksum_attributes (struct checksum_attributes *attrs, dw_die_ref die)
6106 dw_attr_ref a;
6107 unsigned ix;
6109 FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a)
6111 switch (a->dw_attr)
6113 case DW_AT_name:
6114 attrs->at_name = a;
6115 break;
6116 case DW_AT_type:
6117 attrs->at_type = a;
6118 break;
6119 case DW_AT_friend:
6120 attrs->at_friend = a;
6121 break;
6122 case DW_AT_accessibility:
6123 attrs->at_accessibility = a;
6124 break;
6125 case DW_AT_address_class:
6126 attrs->at_address_class = a;
6127 break;
6128 case DW_AT_allocated:
6129 attrs->at_allocated = a;
6130 break;
6131 case DW_AT_artificial:
6132 attrs->at_artificial = a;
6133 break;
6134 case DW_AT_associated:
6135 attrs->at_associated = a;
6136 break;
6137 case DW_AT_binary_scale:
6138 attrs->at_binary_scale = a;
6139 break;
6140 case DW_AT_bit_offset:
6141 attrs->at_bit_offset = a;
6142 break;
6143 case DW_AT_bit_size:
6144 attrs->at_bit_size = a;
6145 break;
6146 case DW_AT_bit_stride:
6147 attrs->at_bit_stride = a;
6148 break;
6149 case DW_AT_byte_size:
6150 attrs->at_byte_size = a;
6151 break;
6152 case DW_AT_byte_stride:
6153 attrs->at_byte_stride = a;
6154 break;
6155 case DW_AT_const_value:
6156 attrs->at_const_value = a;
6157 break;
6158 case DW_AT_containing_type:
6159 attrs->at_containing_type = a;
6160 break;
6161 case DW_AT_count:
6162 attrs->at_count = a;
6163 break;
6164 case DW_AT_data_location:
6165 attrs->at_data_location = a;
6166 break;
6167 case DW_AT_data_member_location:
6168 attrs->at_data_member_location = a;
6169 break;
6170 case DW_AT_decimal_scale:
6171 attrs->at_decimal_scale = a;
6172 break;
6173 case DW_AT_decimal_sign:
6174 attrs->at_decimal_sign = a;
6175 break;
6176 case DW_AT_default_value:
6177 attrs->at_default_value = a;
6178 break;
6179 case DW_AT_digit_count:
6180 attrs->at_digit_count = a;
6181 break;
6182 case DW_AT_discr:
6183 attrs->at_discr = a;
6184 break;
6185 case DW_AT_discr_list:
6186 attrs->at_discr_list = a;
6187 break;
6188 case DW_AT_discr_value:
6189 attrs->at_discr_value = a;
6190 break;
6191 case DW_AT_encoding:
6192 attrs->at_encoding = a;
6193 break;
6194 case DW_AT_endianity:
6195 attrs->at_endianity = a;
6196 break;
6197 case DW_AT_explicit:
6198 attrs->at_explicit = a;
6199 break;
6200 case DW_AT_is_optional:
6201 attrs->at_is_optional = a;
6202 break;
6203 case DW_AT_location:
6204 attrs->at_location = a;
6205 break;
6206 case DW_AT_lower_bound:
6207 attrs->at_lower_bound = a;
6208 break;
6209 case DW_AT_mutable:
6210 attrs->at_mutable = a;
6211 break;
6212 case DW_AT_ordering:
6213 attrs->at_ordering = a;
6214 break;
6215 case DW_AT_picture_string:
6216 attrs->at_picture_string = a;
6217 break;
6218 case DW_AT_prototyped:
6219 attrs->at_prototyped = a;
6220 break;
6221 case DW_AT_small:
6222 attrs->at_small = a;
6223 break;
6224 case DW_AT_segment:
6225 attrs->at_segment = a;
6226 break;
6227 case DW_AT_string_length:
6228 attrs->at_string_length = a;
6229 break;
6230 case DW_AT_threads_scaled:
6231 attrs->at_threads_scaled = a;
6232 break;
6233 case DW_AT_upper_bound:
6234 attrs->at_upper_bound = a;
6235 break;
6236 case DW_AT_use_location:
6237 attrs->at_use_location = a;
6238 break;
6239 case DW_AT_use_UTF8:
6240 attrs->at_use_UTF8 = a;
6241 break;
6242 case DW_AT_variable_parameter:
6243 attrs->at_variable_parameter = a;
6244 break;
6245 case DW_AT_virtuality:
6246 attrs->at_virtuality = a;
6247 break;
6248 case DW_AT_visibility:
6249 attrs->at_visibility = a;
6250 break;
6251 case DW_AT_vtable_elem_location:
6252 attrs->at_vtable_elem_location = a;
6253 break;
6254 default:
6255 break;
6260 /* Calculate the checksum of a DIE, using an ordered subset of attributes. */
6262 static void
6263 die_checksum_ordered (dw_die_ref die, struct md5_ctx *ctx, int *mark)
6265 dw_die_ref c;
6266 dw_die_ref decl;
6267 struct checksum_attributes attrs;
6269 CHECKSUM_ULEB128 ('D');
6270 CHECKSUM_ULEB128 (die->die_tag);
6272 memset (&attrs, 0, sizeof (attrs));
6274 decl = get_AT_ref (die, DW_AT_specification);
6275 if (decl != NULL)
6276 collect_checksum_attributes (&attrs, decl);
6277 collect_checksum_attributes (&attrs, die);
6279 CHECKSUM_ATTR (attrs.at_name);
6280 CHECKSUM_ATTR (attrs.at_accessibility);
6281 CHECKSUM_ATTR (attrs.at_address_class);
6282 CHECKSUM_ATTR (attrs.at_allocated);
6283 CHECKSUM_ATTR (attrs.at_artificial);
6284 CHECKSUM_ATTR (attrs.at_associated);
6285 CHECKSUM_ATTR (attrs.at_binary_scale);
6286 CHECKSUM_ATTR (attrs.at_bit_offset);
6287 CHECKSUM_ATTR (attrs.at_bit_size);
6288 CHECKSUM_ATTR (attrs.at_bit_stride);
6289 CHECKSUM_ATTR (attrs.at_byte_size);
6290 CHECKSUM_ATTR (attrs.at_byte_stride);
6291 CHECKSUM_ATTR (attrs.at_const_value);
6292 CHECKSUM_ATTR (attrs.at_containing_type);
6293 CHECKSUM_ATTR (attrs.at_count);
6294 CHECKSUM_ATTR (attrs.at_data_location);
6295 CHECKSUM_ATTR (attrs.at_data_member_location);
6296 CHECKSUM_ATTR (attrs.at_decimal_scale);
6297 CHECKSUM_ATTR (attrs.at_decimal_sign);
6298 CHECKSUM_ATTR (attrs.at_default_value);
6299 CHECKSUM_ATTR (attrs.at_digit_count);
6300 CHECKSUM_ATTR (attrs.at_discr);
6301 CHECKSUM_ATTR (attrs.at_discr_list);
6302 CHECKSUM_ATTR (attrs.at_discr_value);
6303 CHECKSUM_ATTR (attrs.at_encoding);
6304 CHECKSUM_ATTR (attrs.at_endianity);
6305 CHECKSUM_ATTR (attrs.at_explicit);
6306 CHECKSUM_ATTR (attrs.at_is_optional);
6307 CHECKSUM_ATTR (attrs.at_location);
6308 CHECKSUM_ATTR (attrs.at_lower_bound);
6309 CHECKSUM_ATTR (attrs.at_mutable);
6310 CHECKSUM_ATTR (attrs.at_ordering);
6311 CHECKSUM_ATTR (attrs.at_picture_string);
6312 CHECKSUM_ATTR (attrs.at_prototyped);
6313 CHECKSUM_ATTR (attrs.at_small);
6314 CHECKSUM_ATTR (attrs.at_segment);
6315 CHECKSUM_ATTR (attrs.at_string_length);
6316 CHECKSUM_ATTR (attrs.at_threads_scaled);
6317 CHECKSUM_ATTR (attrs.at_upper_bound);
6318 CHECKSUM_ATTR (attrs.at_use_location);
6319 CHECKSUM_ATTR (attrs.at_use_UTF8);
6320 CHECKSUM_ATTR (attrs.at_variable_parameter);
6321 CHECKSUM_ATTR (attrs.at_virtuality);
6322 CHECKSUM_ATTR (attrs.at_visibility);
6323 CHECKSUM_ATTR (attrs.at_vtable_elem_location);
6324 CHECKSUM_ATTR (attrs.at_type);
6325 CHECKSUM_ATTR (attrs.at_friend);
6327 /* Checksum the child DIEs, except for nested types and member functions. */
6328 c = die->die_child;
6329 if (c) do {
6330 dw_attr_ref name_attr;
6332 c = c->die_sib;
6333 name_attr = get_AT (c, DW_AT_name);
6334 if ((is_type_die (c) || c->die_tag == DW_TAG_subprogram)
6335 && name_attr != NULL)
6337 CHECKSUM_ULEB128 ('S');
6338 CHECKSUM_ULEB128 (c->die_tag);
6339 CHECKSUM_STRING (AT_string (name_attr));
6341 else
6343 /* Mark this DIE so it gets processed when unmarking. */
6344 if (c->die_mark == 0)
6345 c->die_mark = -1;
6346 die_checksum_ordered (c, ctx, mark);
6348 } while (c != die->die_child);
6350 CHECKSUM_ULEB128 (0);
6353 #undef CHECKSUM
6354 #undef CHECKSUM_STRING
6355 #undef CHECKSUM_ATTR
6356 #undef CHECKSUM_LEB128
6357 #undef CHECKSUM_ULEB128
6359 /* Generate the type signature for DIE. This is computed by generating an
6360 MD5 checksum over the DIE's tag, its relevant attributes, and its
6361 children. Attributes that are references to other DIEs are processed
6362 by recursion, using the MARK field to prevent infinite recursion.
6363 If the DIE is nested inside a namespace or another type, we also
6364 need to include that context in the signature. The lower 64 bits
6365 of the resulting MD5 checksum comprise the signature. */
6367 static void
6368 generate_type_signature (dw_die_ref die, comdat_type_node *type_node)
6370 int mark;
6371 const char *name;
6372 unsigned char checksum[16];
6373 struct md5_ctx ctx;
6374 dw_die_ref decl;
6376 name = get_AT_string (die, DW_AT_name);
6377 decl = get_AT_ref (die, DW_AT_specification);
6379 /* First, compute a signature for just the type name (and its surrounding
6380 context, if any. This is stored in the type unit DIE for link-time
6381 ODR (one-definition rule) checking. */
6383 if (is_cxx() && name != NULL)
6385 md5_init_ctx (&ctx);
6387 /* Checksum the names of surrounding namespaces and structures. */
6388 if (decl != NULL && decl->die_parent != NULL)
6389 checksum_die_context (decl->die_parent, &ctx);
6391 md5_process_bytes (&die->die_tag, sizeof (die->die_tag), &ctx);
6392 md5_process_bytes (name, strlen (name) + 1, &ctx);
6393 md5_finish_ctx (&ctx, checksum);
6395 add_AT_data8 (type_node->root_die, DW_AT_GNU_odr_signature, &checksum[8]);
6398 /* Next, compute the complete type signature. */
6400 md5_init_ctx (&ctx);
6401 mark = 1;
6402 die->die_mark = mark;
6404 /* Checksum the names of surrounding namespaces and structures. */
6405 if (decl != NULL && decl->die_parent != NULL)
6406 checksum_die_context (decl->die_parent, &ctx);
6408 /* Checksum the DIE and its children. */
6409 die_checksum_ordered (die, &ctx, &mark);
6410 unmark_all_dies (die);
6411 md5_finish_ctx (&ctx, checksum);
6413 /* Store the signature in the type node and link the type DIE and the
6414 type node together. */
6415 memcpy (type_node->signature, &checksum[16 - DWARF_TYPE_SIGNATURE_SIZE],
6416 DWARF_TYPE_SIGNATURE_SIZE);
6417 die->die_id.die_type_node = type_node;
6418 type_node->type_die = die;
6420 /* If the DIE is a specification, link its declaration to the type node
6421 as well. */
6422 if (decl != NULL)
6423 decl->die_id.die_type_node = type_node;
6426 /* Do the location expressions look same? */
6427 static inline int
6428 same_loc_p (dw_loc_descr_ref loc1, dw_loc_descr_ref loc2, int *mark)
6430 return loc1->dw_loc_opc == loc2->dw_loc_opc
6431 && same_dw_val_p (&loc1->dw_loc_oprnd1, &loc2->dw_loc_oprnd1, mark)
6432 && same_dw_val_p (&loc1->dw_loc_oprnd2, &loc2->dw_loc_oprnd2, mark);
6435 /* Do the values look the same? */
6436 static int
6437 same_dw_val_p (const dw_val_node *v1, const dw_val_node *v2, int *mark)
6439 dw_loc_descr_ref loc1, loc2;
6440 rtx r1, r2;
6442 if (v1->val_class != v2->val_class)
6443 return 0;
6445 switch (v1->val_class)
6447 case dw_val_class_const:
6448 return v1->v.val_int == v2->v.val_int;
6449 case dw_val_class_unsigned_const:
6450 return v1->v.val_unsigned == v2->v.val_unsigned;
6451 case dw_val_class_const_double:
6452 return v1->v.val_double.high == v2->v.val_double.high
6453 && v1->v.val_double.low == v2->v.val_double.low;
6454 case dw_val_class_vec:
6455 if (v1->v.val_vec.length != v2->v.val_vec.length
6456 || v1->v.val_vec.elt_size != v2->v.val_vec.elt_size)
6457 return 0;
6458 if (memcmp (v1->v.val_vec.array, v2->v.val_vec.array,
6459 v1->v.val_vec.length * v1->v.val_vec.elt_size))
6460 return 0;
6461 return 1;
6462 case dw_val_class_flag:
6463 return v1->v.val_flag == v2->v.val_flag;
6464 case dw_val_class_str:
6465 return !strcmp(v1->v.val_str->str, v2->v.val_str->str);
6467 case dw_val_class_addr:
6468 r1 = v1->v.val_addr;
6469 r2 = v2->v.val_addr;
6470 if (GET_CODE (r1) != GET_CODE (r2))
6471 return 0;
6472 return !rtx_equal_p (r1, r2);
6474 case dw_val_class_offset:
6475 return v1->v.val_offset == v2->v.val_offset;
6477 case dw_val_class_loc:
6478 for (loc1 = v1->v.val_loc, loc2 = v2->v.val_loc;
6479 loc1 && loc2;
6480 loc1 = loc1->dw_loc_next, loc2 = loc2->dw_loc_next)
6481 if (!same_loc_p (loc1, loc2, mark))
6482 return 0;
6483 return !loc1 && !loc2;
6485 case dw_val_class_die_ref:
6486 return same_die_p (v1->v.val_die_ref.die, v2->v.val_die_ref.die, mark);
6488 case dw_val_class_fde_ref:
6489 case dw_val_class_vms_delta:
6490 case dw_val_class_lbl_id:
6491 case dw_val_class_lineptr:
6492 case dw_val_class_macptr:
6493 return 1;
6495 case dw_val_class_file:
6496 return v1->v.val_file == v2->v.val_file;
6498 case dw_val_class_data8:
6499 return !memcmp (v1->v.val_data8, v2->v.val_data8, 8);
6501 default:
6502 return 1;
6506 /* Do the attributes look the same? */
6508 static int
6509 same_attr_p (dw_attr_ref at1, dw_attr_ref at2, int *mark)
6511 if (at1->dw_attr != at2->dw_attr)
6512 return 0;
6514 /* We don't care that this was compiled with a different compiler
6515 snapshot; if the output is the same, that's what matters. */
6516 if (at1->dw_attr == DW_AT_producer)
6517 return 1;
6519 return same_dw_val_p (&at1->dw_attr_val, &at2->dw_attr_val, mark);
6522 /* Do the dies look the same? */
6524 static int
6525 same_die_p (dw_die_ref die1, dw_die_ref die2, int *mark)
6527 dw_die_ref c1, c2;
6528 dw_attr_ref a1;
6529 unsigned ix;
6531 /* To avoid infinite recursion. */
6532 if (die1->die_mark)
6533 return die1->die_mark == die2->die_mark;
6534 die1->die_mark = die2->die_mark = ++(*mark);
6536 if (die1->die_tag != die2->die_tag)
6537 return 0;
6539 if (VEC_length (dw_attr_node, die1->die_attr)
6540 != VEC_length (dw_attr_node, die2->die_attr))
6541 return 0;
6543 FOR_EACH_VEC_ELT (dw_attr_node, die1->die_attr, ix, a1)
6544 if (!same_attr_p (a1, VEC_index (dw_attr_node, die2->die_attr, ix), mark))
6545 return 0;
6547 c1 = die1->die_child;
6548 c2 = die2->die_child;
6549 if (! c1)
6551 if (c2)
6552 return 0;
6554 else
6555 for (;;)
6557 if (!same_die_p (c1, c2, mark))
6558 return 0;
6559 c1 = c1->die_sib;
6560 c2 = c2->die_sib;
6561 if (c1 == die1->die_child)
6563 if (c2 == die2->die_child)
6564 break;
6565 else
6566 return 0;
6570 return 1;
6573 /* Do the dies look the same? Wrapper around same_die_p. */
6575 static int
6576 same_die_p_wrap (dw_die_ref die1, dw_die_ref die2)
6578 int mark = 0;
6579 int ret = same_die_p (die1, die2, &mark);
6581 unmark_all_dies (die1);
6582 unmark_all_dies (die2);
6584 return ret;
6587 /* The prefix to attach to symbols on DIEs in the current comdat debug
6588 info section. */
6589 static char *comdat_symbol_id;
6591 /* The index of the current symbol within the current comdat CU. */
6592 static unsigned int comdat_symbol_number;
6594 /* Calculate the MD5 checksum of the compilation unit DIE UNIT_DIE and its
6595 children, and set comdat_symbol_id accordingly. */
6597 static void
6598 compute_section_prefix (dw_die_ref unit_die)
6600 const char *die_name = get_AT_string (unit_die, DW_AT_name);
6601 const char *base = die_name ? lbasename (die_name) : "anonymous";
6602 char *name = XALLOCAVEC (char, strlen (base) + 64);
6603 char *p;
6604 int i, mark;
6605 unsigned char checksum[16];
6606 struct md5_ctx ctx;
6608 /* Compute the checksum of the DIE, then append part of it as hex digits to
6609 the name filename of the unit. */
6611 md5_init_ctx (&ctx);
6612 mark = 0;
6613 die_checksum (unit_die, &ctx, &mark);
6614 unmark_all_dies (unit_die);
6615 md5_finish_ctx (&ctx, checksum);
6617 sprintf (name, "%s.", base);
6618 clean_symbol_name (name);
6620 p = name + strlen (name);
6621 for (i = 0; i < 4; i++)
6623 sprintf (p, "%.2x", checksum[i]);
6624 p += 2;
6627 comdat_symbol_id = unit_die->die_id.die_symbol = xstrdup (name);
6628 comdat_symbol_number = 0;
6631 /* Returns nonzero if DIE represents a type, in the sense of TYPE_P. */
6633 static int
6634 is_type_die (dw_die_ref die)
6636 switch (die->die_tag)
6638 case DW_TAG_array_type:
6639 case DW_TAG_class_type:
6640 case DW_TAG_interface_type:
6641 case DW_TAG_enumeration_type:
6642 case DW_TAG_pointer_type:
6643 case DW_TAG_reference_type:
6644 case DW_TAG_rvalue_reference_type:
6645 case DW_TAG_string_type:
6646 case DW_TAG_structure_type:
6647 case DW_TAG_subroutine_type:
6648 case DW_TAG_union_type:
6649 case DW_TAG_ptr_to_member_type:
6650 case DW_TAG_set_type:
6651 case DW_TAG_subrange_type:
6652 case DW_TAG_base_type:
6653 case DW_TAG_const_type:
6654 case DW_TAG_file_type:
6655 case DW_TAG_packed_type:
6656 case DW_TAG_volatile_type:
6657 case DW_TAG_typedef:
6658 return 1;
6659 default:
6660 return 0;
6664 /* Returns 1 iff C is the sort of DIE that should go into a COMDAT CU.
6665 Basically, we want to choose the bits that are likely to be shared between
6666 compilations (types) and leave out the bits that are specific to individual
6667 compilations (functions). */
6669 static int
6670 is_comdat_die (dw_die_ref c)
6672 /* I think we want to leave base types and __vtbl_ptr_type in the main CU, as
6673 we do for stabs. The advantage is a greater likelihood of sharing between
6674 objects that don't include headers in the same order (and therefore would
6675 put the base types in a different comdat). jason 8/28/00 */
6677 if (c->die_tag == DW_TAG_base_type)
6678 return 0;
6680 if (c->die_tag == DW_TAG_pointer_type
6681 || c->die_tag == DW_TAG_reference_type
6682 || c->die_tag == DW_TAG_rvalue_reference_type
6683 || c->die_tag == DW_TAG_const_type
6684 || c->die_tag == DW_TAG_volatile_type)
6686 dw_die_ref t = get_AT_ref (c, DW_AT_type);
6688 return t ? is_comdat_die (t) : 0;
6691 return is_type_die (c);
6694 /* Returns 1 iff C is the sort of DIE that might be referred to from another
6695 compilation unit. */
6697 static int
6698 is_symbol_die (dw_die_ref c)
6700 return (is_type_die (c)
6701 || is_declaration_die (c)
6702 || c->die_tag == DW_TAG_namespace
6703 || c->die_tag == DW_TAG_module);
6706 /* Returns true iff C is a compile-unit DIE. */
6708 static inline bool
6709 is_cu_die (dw_die_ref c)
6711 return c && c->die_tag == DW_TAG_compile_unit;
6714 static char *
6715 gen_internal_sym (const char *prefix)
6717 char buf[256];
6719 ASM_GENERATE_INTERNAL_LABEL (buf, prefix, label_num++);
6720 return xstrdup (buf);
6723 /* Assign symbols to all worthy DIEs under DIE. */
6725 static void
6726 assign_symbol_names (dw_die_ref die)
6728 dw_die_ref c;
6730 if (is_symbol_die (die))
6732 if (comdat_symbol_id)
6734 char *p = XALLOCAVEC (char, strlen (comdat_symbol_id) + 64);
6736 sprintf (p, "%s.%s.%x", DIE_LABEL_PREFIX,
6737 comdat_symbol_id, comdat_symbol_number++);
6738 die->die_id.die_symbol = xstrdup (p);
6740 else
6741 die->die_id.die_symbol = gen_internal_sym ("LDIE");
6744 FOR_EACH_CHILD (die, c, assign_symbol_names (c));
6747 struct cu_hash_table_entry
6749 dw_die_ref cu;
6750 unsigned min_comdat_num, max_comdat_num;
6751 struct cu_hash_table_entry *next;
6754 /* Routines to manipulate hash table of CUs. */
6755 static hashval_t
6756 htab_cu_hash (const void *of)
6758 const struct cu_hash_table_entry *const entry =
6759 (const struct cu_hash_table_entry *) of;
6761 return htab_hash_string (entry->cu->die_id.die_symbol);
6764 static int
6765 htab_cu_eq (const void *of1, const void *of2)
6767 const struct cu_hash_table_entry *const entry1 =
6768 (const struct cu_hash_table_entry *) of1;
6769 const struct die_struct *const entry2 = (const struct die_struct *) of2;
6771 return !strcmp (entry1->cu->die_id.die_symbol, entry2->die_id.die_symbol);
6774 static void
6775 htab_cu_del (void *what)
6777 struct cu_hash_table_entry *next,
6778 *entry = (struct cu_hash_table_entry *) what;
6780 while (entry)
6782 next = entry->next;
6783 free (entry);
6784 entry = next;
6788 /* Check whether we have already seen this CU and set up SYM_NUM
6789 accordingly. */
6790 static int
6791 check_duplicate_cu (dw_die_ref cu, htab_t htable, unsigned int *sym_num)
6793 struct cu_hash_table_entry dummy;
6794 struct cu_hash_table_entry **slot, *entry, *last = &dummy;
6796 dummy.max_comdat_num = 0;
6798 slot = (struct cu_hash_table_entry **)
6799 htab_find_slot_with_hash (htable, cu, htab_hash_string (cu->die_id.die_symbol),
6800 INSERT);
6801 entry = *slot;
6803 for (; entry; last = entry, entry = entry->next)
6805 if (same_die_p_wrap (cu, entry->cu))
6806 break;
6809 if (entry)
6811 *sym_num = entry->min_comdat_num;
6812 return 1;
6815 entry = XCNEW (struct cu_hash_table_entry);
6816 entry->cu = cu;
6817 entry->min_comdat_num = *sym_num = last->max_comdat_num;
6818 entry->next = *slot;
6819 *slot = entry;
6821 return 0;
6824 /* Record SYM_NUM to record of CU in HTABLE. */
6825 static void
6826 record_comdat_symbol_number (dw_die_ref cu, htab_t htable, unsigned int sym_num)
6828 struct cu_hash_table_entry **slot, *entry;
6830 slot = (struct cu_hash_table_entry **)
6831 htab_find_slot_with_hash (htable, cu, htab_hash_string (cu->die_id.die_symbol),
6832 NO_INSERT);
6833 entry = *slot;
6835 entry->max_comdat_num = sym_num;
6838 /* Traverse the DIE (which is always comp_unit_die), and set up
6839 additional compilation units for each of the include files we see
6840 bracketed by BINCL/EINCL. */
6842 static void
6843 break_out_includes (dw_die_ref die)
6845 dw_die_ref c;
6846 dw_die_ref unit = NULL;
6847 limbo_die_node *node, **pnode;
6848 htab_t cu_hash_table;
6850 c = die->die_child;
6851 if (c) do {
6852 dw_die_ref prev = c;
6853 c = c->die_sib;
6854 while (c->die_tag == DW_TAG_GNU_BINCL || c->die_tag == DW_TAG_GNU_EINCL
6855 || (unit && is_comdat_die (c)))
6857 dw_die_ref next = c->die_sib;
6859 /* This DIE is for a secondary CU; remove it from the main one. */
6860 remove_child_with_prev (c, prev);
6862 if (c->die_tag == DW_TAG_GNU_BINCL)
6863 unit = push_new_compile_unit (unit, c);
6864 else if (c->die_tag == DW_TAG_GNU_EINCL)
6865 unit = pop_compile_unit (unit);
6866 else
6867 add_child_die (unit, c);
6868 c = next;
6869 if (c == die->die_child)
6870 break;
6872 } while (c != die->die_child);
6874 #if 0
6875 /* We can only use this in debugging, since the frontend doesn't check
6876 to make sure that we leave every include file we enter. */
6877 gcc_assert (!unit);
6878 #endif
6880 assign_symbol_names (die);
6881 cu_hash_table = htab_create (10, htab_cu_hash, htab_cu_eq, htab_cu_del);
6882 for (node = limbo_die_list, pnode = &limbo_die_list;
6883 node;
6884 node = node->next)
6886 int is_dupl;
6888 compute_section_prefix (node->die);
6889 is_dupl = check_duplicate_cu (node->die, cu_hash_table,
6890 &comdat_symbol_number);
6891 assign_symbol_names (node->die);
6892 if (is_dupl)
6893 *pnode = node->next;
6894 else
6896 pnode = &node->next;
6897 record_comdat_symbol_number (node->die, cu_hash_table,
6898 comdat_symbol_number);
6901 htab_delete (cu_hash_table);
6904 /* Return non-zero if this DIE is a declaration. */
6906 static int
6907 is_declaration_die (dw_die_ref die)
6909 dw_attr_ref a;
6910 unsigned ix;
6912 FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a)
6913 if (a->dw_attr == DW_AT_declaration)
6914 return 1;
6916 return 0;
6919 /* Return non-zero if this DIE is nested inside a subprogram. */
6921 static int
6922 is_nested_in_subprogram (dw_die_ref die)
6924 dw_die_ref decl = get_AT_ref (die, DW_AT_specification);
6926 if (decl == NULL)
6927 decl = die;
6928 return local_scope_p (decl);
6931 /* Return non-zero if this DIE contains a defining declaration of a
6932 subprogram. */
6934 static int
6935 contains_subprogram_definition (dw_die_ref die)
6937 dw_die_ref c;
6939 if (die->die_tag == DW_TAG_subprogram && ! is_declaration_die (die))
6940 return 1;
6941 FOR_EACH_CHILD (die, c, if (contains_subprogram_definition(c)) return 1);
6942 return 0;
6945 /* Return non-zero if this is a type DIE that should be moved to a
6946 COMDAT .debug_types section. */
6948 static int
6949 should_move_die_to_comdat (dw_die_ref die)
6951 switch (die->die_tag)
6953 case DW_TAG_class_type:
6954 case DW_TAG_structure_type:
6955 case DW_TAG_enumeration_type:
6956 case DW_TAG_union_type:
6957 /* Don't move declarations, inlined instances, or types nested in a
6958 subprogram. */
6959 if (is_declaration_die (die)
6960 || get_AT (die, DW_AT_abstract_origin)
6961 || is_nested_in_subprogram (die))
6962 return 0;
6963 /* A type definition should never contain a subprogram definition. */
6964 gcc_assert (!contains_subprogram_definition (die));
6965 return 1;
6966 case DW_TAG_array_type:
6967 case DW_TAG_interface_type:
6968 case DW_TAG_pointer_type:
6969 case DW_TAG_reference_type:
6970 case DW_TAG_rvalue_reference_type:
6971 case DW_TAG_string_type:
6972 case DW_TAG_subroutine_type:
6973 case DW_TAG_ptr_to_member_type:
6974 case DW_TAG_set_type:
6975 case DW_TAG_subrange_type:
6976 case DW_TAG_base_type:
6977 case DW_TAG_const_type:
6978 case DW_TAG_file_type:
6979 case DW_TAG_packed_type:
6980 case DW_TAG_volatile_type:
6981 case DW_TAG_typedef:
6982 default:
6983 return 0;
6987 /* Make a clone of DIE. */
6989 static dw_die_ref
6990 clone_die (dw_die_ref die)
6992 dw_die_ref clone;
6993 dw_attr_ref a;
6994 unsigned ix;
6996 clone = ggc_alloc_cleared_die_node ();
6997 clone->die_tag = die->die_tag;
6999 FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a)
7000 add_dwarf_attr (clone, a);
7002 return clone;
7005 /* Make a clone of the tree rooted at DIE. */
7007 static dw_die_ref
7008 clone_tree (dw_die_ref die)
7010 dw_die_ref c;
7011 dw_die_ref clone = clone_die (die);
7013 FOR_EACH_CHILD (die, c, add_child_die (clone, clone_tree(c)));
7015 return clone;
7018 /* Make a clone of DIE as a declaration. */
7020 static dw_die_ref
7021 clone_as_declaration (dw_die_ref die)
7023 dw_die_ref clone;
7024 dw_die_ref decl;
7025 dw_attr_ref a;
7026 unsigned ix;
7028 /* If the DIE is already a declaration, just clone it. */
7029 if (is_declaration_die (die))
7030 return clone_die (die);
7032 /* If the DIE is a specification, just clone its declaration DIE. */
7033 decl = get_AT_ref (die, DW_AT_specification);
7034 if (decl != NULL)
7035 return clone_die (decl);
7037 clone = ggc_alloc_cleared_die_node ();
7038 clone->die_tag = die->die_tag;
7040 FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a)
7042 /* We don't want to copy over all attributes.
7043 For example we don't want DW_AT_byte_size because otherwise we will no
7044 longer have a declaration and GDB will treat it as a definition. */
7046 switch (a->dw_attr)
7048 case DW_AT_artificial:
7049 case DW_AT_containing_type:
7050 case DW_AT_external:
7051 case DW_AT_name:
7052 case DW_AT_type:
7053 case DW_AT_virtuality:
7054 case DW_AT_linkage_name:
7055 case DW_AT_MIPS_linkage_name:
7056 add_dwarf_attr (clone, a);
7057 break;
7058 case DW_AT_byte_size:
7059 default:
7060 break;
7064 if (die->die_id.die_type_node)
7065 add_AT_die_ref (clone, DW_AT_signature, die);
7067 add_AT_flag (clone, DW_AT_declaration, 1);
7068 return clone;
7071 /* Copy the declaration context to the new compile unit DIE. This includes
7072 any surrounding namespace or type declarations. If the DIE has an
7073 AT_specification attribute, it also includes attributes and children
7074 attached to the specification. */
7076 static void
7077 copy_declaration_context (dw_die_ref unit, dw_die_ref die)
7079 dw_die_ref decl;
7080 dw_die_ref new_decl;
7082 decl = get_AT_ref (die, DW_AT_specification);
7083 if (decl == NULL)
7084 decl = die;
7085 else
7087 unsigned ix;
7088 dw_die_ref c;
7089 dw_attr_ref a;
7091 /* Copy the type node pointer from the new DIE to the original
7092 declaration DIE so we can forward references later. */
7093 decl->die_id.die_type_node = die->die_id.die_type_node;
7095 remove_AT (die, DW_AT_specification);
7097 FOR_EACH_VEC_ELT (dw_attr_node, decl->die_attr, ix, a)
7099 if (a->dw_attr != DW_AT_name
7100 && a->dw_attr != DW_AT_declaration
7101 && a->dw_attr != DW_AT_external)
7102 add_dwarf_attr (die, a);
7105 FOR_EACH_CHILD (decl, c, add_child_die (die, clone_tree(c)));
7108 if (decl->die_parent != NULL
7109 && decl->die_parent->die_tag != DW_TAG_compile_unit
7110 && decl->die_parent->die_tag != DW_TAG_type_unit)
7112 new_decl = copy_ancestor_tree (unit, decl, NULL);
7113 if (new_decl != NULL)
7115 remove_AT (new_decl, DW_AT_signature);
7116 add_AT_specification (die, new_decl);
7121 /* Generate the skeleton ancestor tree for the given NODE, then clone
7122 the DIE and add the clone into the tree. */
7124 static void
7125 generate_skeleton_ancestor_tree (skeleton_chain_node *node)
7127 if (node->new_die != NULL)
7128 return;
7130 node->new_die = clone_as_declaration (node->old_die);
7132 if (node->parent != NULL)
7134 generate_skeleton_ancestor_tree (node->parent);
7135 add_child_die (node->parent->new_die, node->new_die);
7139 /* Generate a skeleton tree of DIEs containing any declarations that are
7140 found in the original tree. We traverse the tree looking for declaration
7141 DIEs, and construct the skeleton from the bottom up whenever we find one. */
7143 static void
7144 generate_skeleton_bottom_up (skeleton_chain_node *parent)
7146 skeleton_chain_node node;
7147 dw_die_ref c;
7148 dw_die_ref first;
7149 dw_die_ref prev = NULL;
7150 dw_die_ref next = NULL;
7152 node.parent = parent;
7154 first = c = parent->old_die->die_child;
7155 if (c)
7156 next = c->die_sib;
7157 if (c) do {
7158 if (prev == NULL || prev->die_sib == c)
7159 prev = c;
7160 c = next;
7161 next = (c == first ? NULL : c->die_sib);
7162 node.old_die = c;
7163 node.new_die = NULL;
7164 if (is_declaration_die (c))
7166 /* Clone the existing DIE, move the original to the skeleton
7167 tree (which is in the main CU), and put the clone, with
7168 all the original's children, where the original came from. */
7169 dw_die_ref clone = clone_die (c);
7170 move_all_children (c, clone);
7172 replace_child (c, clone, prev);
7173 generate_skeleton_ancestor_tree (parent);
7174 add_child_die (parent->new_die, c);
7175 node.new_die = c;
7176 c = clone;
7178 generate_skeleton_bottom_up (&node);
7179 } while (next != NULL);
7182 /* Wrapper function for generate_skeleton_bottom_up. */
7184 static dw_die_ref
7185 generate_skeleton (dw_die_ref die)
7187 skeleton_chain_node node;
7189 node.old_die = die;
7190 node.new_die = NULL;
7191 node.parent = NULL;
7193 /* If this type definition is nested inside another type,
7194 always leave at least a declaration in its place. */
7195 if (die->die_parent != NULL && is_type_die (die->die_parent))
7196 node.new_die = clone_as_declaration (die);
7198 generate_skeleton_bottom_up (&node);
7199 return node.new_die;
7202 /* Remove the DIE from its parent, possibly replacing it with a cloned
7203 declaration. The original DIE will be moved to a new compile unit
7204 so that existing references to it follow it to the new location. If
7205 any of the original DIE's descendants is a declaration, we need to
7206 replace the original DIE with a skeleton tree and move the
7207 declarations back into the skeleton tree. */
7209 static dw_die_ref
7210 remove_child_or_replace_with_skeleton (dw_die_ref child, dw_die_ref prev)
7212 dw_die_ref skeleton;
7214 skeleton = generate_skeleton (child);
7215 if (skeleton == NULL)
7216 remove_child_with_prev (child, prev);
7217 else
7219 skeleton->die_id.die_type_node = child->die_id.die_type_node;
7220 replace_child (child, skeleton, prev);
7223 return skeleton;
7226 /* Traverse the DIE and set up additional .debug_types sections for each
7227 type worthy of being placed in a COMDAT section. */
7229 static void
7230 break_out_comdat_types (dw_die_ref die)
7232 dw_die_ref c;
7233 dw_die_ref first;
7234 dw_die_ref prev = NULL;
7235 dw_die_ref next = NULL;
7236 dw_die_ref unit = NULL;
7238 first = c = die->die_child;
7239 if (c)
7240 next = c->die_sib;
7241 if (c) do {
7242 if (prev == NULL || prev->die_sib == c)
7243 prev = c;
7244 c = next;
7245 next = (c == first ? NULL : c->die_sib);
7246 if (should_move_die_to_comdat (c))
7248 dw_die_ref replacement;
7249 comdat_type_node_ref type_node;
7251 /* Create a new type unit DIE as the root for the new tree, and
7252 add it to the list of comdat types. */
7253 unit = new_die (DW_TAG_type_unit, NULL, NULL);
7254 add_AT_unsigned (unit, DW_AT_language,
7255 get_AT_unsigned (comp_unit_die (), DW_AT_language));
7256 type_node = ggc_alloc_cleared_comdat_type_node ();
7257 type_node->root_die = unit;
7258 type_node->next = comdat_type_list;
7259 comdat_type_list = type_node;
7261 /* Generate the type signature. */
7262 generate_type_signature (c, type_node);
7264 /* Copy the declaration context, attributes, and children of the
7265 declaration into the new compile unit DIE. */
7266 copy_declaration_context (unit, c);
7268 /* Remove this DIE from the main CU. */
7269 replacement = remove_child_or_replace_with_skeleton (c, prev);
7271 /* Break out nested types into their own type units. */
7272 break_out_comdat_types (c);
7274 /* Add the DIE to the new compunit. */
7275 add_child_die (unit, c);
7277 if (replacement != NULL)
7278 c = replacement;
7280 else if (c->die_tag == DW_TAG_namespace
7281 || c->die_tag == DW_TAG_class_type
7282 || c->die_tag == DW_TAG_structure_type
7283 || c->die_tag == DW_TAG_union_type)
7285 /* Look for nested types that can be broken out. */
7286 break_out_comdat_types (c);
7288 } while (next != NULL);
7291 /* Structure to map a DIE in one CU to its copy in a comdat type unit. */
7293 struct decl_table_entry
7295 dw_die_ref orig;
7296 dw_die_ref copy;
7299 /* Routines to manipulate hash table of copied declarations. */
7301 static hashval_t
7302 htab_decl_hash (const void *of)
7304 const struct decl_table_entry *const entry =
7305 (const struct decl_table_entry *) of;
7307 return htab_hash_pointer (entry->orig);
7310 static int
7311 htab_decl_eq (const void *of1, const void *of2)
7313 const struct decl_table_entry *const entry1 =
7314 (const struct decl_table_entry *) of1;
7315 const struct die_struct *const entry2 = (const struct die_struct *) of2;
7317 return entry1->orig == entry2;
7320 static void
7321 htab_decl_del (void *what)
7323 struct decl_table_entry *entry = (struct decl_table_entry *) what;
7325 free (entry);
7328 /* Copy DIE and its ancestors, up to, but not including, the compile unit
7329 or type unit entry, to a new tree. Adds the new tree to UNIT and returns
7330 a pointer to the copy of DIE. If DECL_TABLE is provided, it is used
7331 to check if the ancestor has already been copied into UNIT. */
7333 static dw_die_ref
7334 copy_ancestor_tree (dw_die_ref unit, dw_die_ref die, htab_t decl_table)
7336 dw_die_ref parent = die->die_parent;
7337 dw_die_ref new_parent = unit;
7338 dw_die_ref copy;
7339 void **slot = NULL;
7340 struct decl_table_entry *entry = NULL;
7342 if (decl_table)
7344 /* Check if the entry has already been copied to UNIT. */
7345 slot = htab_find_slot_with_hash (decl_table, die,
7346 htab_hash_pointer (die), INSERT);
7347 if (*slot != HTAB_EMPTY_ENTRY)
7349 entry = (struct decl_table_entry *) *slot;
7350 return entry->copy;
7353 /* Record in DECL_TABLE that DIE has been copied to UNIT. */
7354 entry = XCNEW (struct decl_table_entry);
7355 entry->orig = die;
7356 entry->copy = NULL;
7357 *slot = entry;
7360 if (parent != NULL)
7362 dw_die_ref spec = get_AT_ref (parent, DW_AT_specification);
7363 if (spec != NULL)
7364 parent = spec;
7365 if (parent->die_tag != DW_TAG_compile_unit
7366 && parent->die_tag != DW_TAG_type_unit)
7367 new_parent = copy_ancestor_tree (unit, parent, decl_table);
7370 copy = clone_as_declaration (die);
7371 add_child_die (new_parent, copy);
7373 if (decl_table != NULL)
7375 /* Record the pointer to the copy. */
7376 entry->copy = copy;
7379 return copy;
7382 /* Walk the DIE and its children, looking for references to incomplete
7383 or trivial types that are unmarked (i.e., that are not in the current
7384 type_unit). */
7386 static void
7387 copy_decls_walk (dw_die_ref unit, dw_die_ref die, htab_t decl_table)
7389 dw_die_ref c;
7390 dw_attr_ref a;
7391 unsigned ix;
7393 FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a)
7395 if (AT_class (a) == dw_val_class_die_ref)
7397 dw_die_ref targ = AT_ref (a);
7398 comdat_type_node_ref type_node = targ->die_id.die_type_node;
7399 void **slot;
7400 struct decl_table_entry *entry;
7402 if (targ->die_mark != 0 || type_node != NULL)
7403 continue;
7405 slot = htab_find_slot_with_hash (decl_table, targ,
7406 htab_hash_pointer (targ), INSERT);
7408 if (*slot != HTAB_EMPTY_ENTRY)
7410 /* TARG has already been copied, so we just need to
7411 modify the reference to point to the copy. */
7412 entry = (struct decl_table_entry *) *slot;
7413 a->dw_attr_val.v.val_die_ref.die = entry->copy;
7415 else
7417 dw_die_ref parent = unit;
7418 dw_die_ref copy = clone_tree (targ);
7420 /* Make sure the cloned tree is marked as part of the
7421 type unit. */
7422 mark_dies (copy);
7424 /* Record in DECL_TABLE that TARG has been copied.
7425 Need to do this now, before the recursive call,
7426 because DECL_TABLE may be expanded and SLOT
7427 would no longer be a valid pointer. */
7428 entry = XCNEW (struct decl_table_entry);
7429 entry->orig = targ;
7430 entry->copy = copy;
7431 *slot = entry;
7433 /* If TARG has surrounding context, copy its ancestor tree
7434 into the new type unit. */
7435 if (targ->die_parent != NULL
7436 && targ->die_parent->die_tag != DW_TAG_compile_unit
7437 && targ->die_parent->die_tag != DW_TAG_type_unit)
7438 parent = copy_ancestor_tree (unit, targ->die_parent,
7439 decl_table);
7441 add_child_die (parent, copy);
7442 a->dw_attr_val.v.val_die_ref.die = copy;
7444 /* Make sure the newly-copied DIE is walked. If it was
7445 installed in a previously-added context, it won't
7446 get visited otherwise. */
7447 if (parent != unit)
7449 /* Find the highest point of the newly-added tree,
7450 mark each node along the way, and walk from there. */
7451 parent->die_mark = 1;
7452 while (parent->die_parent
7453 && parent->die_parent->die_mark == 0)
7455 parent = parent->die_parent;
7456 parent->die_mark = 1;
7458 copy_decls_walk (unit, parent, decl_table);
7464 FOR_EACH_CHILD (die, c, copy_decls_walk (unit, c, decl_table));
7467 /* Copy declarations for "unworthy" types into the new comdat section.
7468 Incomplete types, modified types, and certain other types aren't broken
7469 out into comdat sections of their own, so they don't have a signature,
7470 and we need to copy the declaration into the same section so that we
7471 don't have an external reference. */
7473 static void
7474 copy_decls_for_unworthy_types (dw_die_ref unit)
7476 htab_t decl_table;
7478 mark_dies (unit);
7479 decl_table = htab_create (10, htab_decl_hash, htab_decl_eq, htab_decl_del);
7480 copy_decls_walk (unit, unit, decl_table);
7481 htab_delete (decl_table);
7482 unmark_dies (unit);
7485 /* Traverse the DIE and add a sibling attribute if it may have the
7486 effect of speeding up access to siblings. To save some space,
7487 avoid generating sibling attributes for DIE's without children. */
7489 static void
7490 add_sibling_attributes (dw_die_ref die)
7492 dw_die_ref c;
7494 if (! die->die_child)
7495 return;
7497 if (die->die_parent && die != die->die_parent->die_child)
7498 add_AT_die_ref (die, DW_AT_sibling, die->die_sib);
7500 FOR_EACH_CHILD (die, c, add_sibling_attributes (c));
7503 /* Output all location lists for the DIE and its children. */
7505 static void
7506 output_location_lists (dw_die_ref die)
7508 dw_die_ref c;
7509 dw_attr_ref a;
7510 unsigned ix;
7512 FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a)
7513 if (AT_class (a) == dw_val_class_loc_list)
7514 output_loc_list (AT_loc_list (a));
7516 FOR_EACH_CHILD (die, c, output_location_lists (c));
7519 /* The format of each DIE (and its attribute value pairs) is encoded in an
7520 abbreviation table. This routine builds the abbreviation table and assigns
7521 a unique abbreviation id for each abbreviation entry. The children of each
7522 die are visited recursively. */
7524 static void
7525 build_abbrev_table (dw_die_ref die)
7527 unsigned long abbrev_id;
7528 unsigned int n_alloc;
7529 dw_die_ref c;
7530 dw_attr_ref a;
7531 unsigned ix;
7533 /* Scan the DIE references, and mark as external any that refer to
7534 DIEs from other CUs (i.e. those which are not marked). */
7535 FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a)
7536 if (AT_class (a) == dw_val_class_die_ref
7537 && AT_ref (a)->die_mark == 0)
7539 gcc_assert (use_debug_types || AT_ref (a)->die_id.die_symbol);
7540 set_AT_ref_external (a, 1);
7543 for (abbrev_id = 1; abbrev_id < abbrev_die_table_in_use; ++abbrev_id)
7545 dw_die_ref abbrev = abbrev_die_table[abbrev_id];
7546 dw_attr_ref die_a, abbrev_a;
7547 unsigned ix;
7548 bool ok = true;
7550 if (abbrev->die_tag != die->die_tag)
7551 continue;
7552 if ((abbrev->die_child != NULL) != (die->die_child != NULL))
7553 continue;
7555 if (VEC_length (dw_attr_node, abbrev->die_attr)
7556 != VEC_length (dw_attr_node, die->die_attr))
7557 continue;
7559 FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, die_a)
7561 abbrev_a = VEC_index (dw_attr_node, abbrev->die_attr, ix);
7562 if ((abbrev_a->dw_attr != die_a->dw_attr)
7563 || (value_format (abbrev_a) != value_format (die_a)))
7565 ok = false;
7566 break;
7569 if (ok)
7570 break;
7573 if (abbrev_id >= abbrev_die_table_in_use)
7575 if (abbrev_die_table_in_use >= abbrev_die_table_allocated)
7577 n_alloc = abbrev_die_table_allocated + ABBREV_DIE_TABLE_INCREMENT;
7578 abbrev_die_table = GGC_RESIZEVEC (dw_die_ref, abbrev_die_table,
7579 n_alloc);
7581 memset (&abbrev_die_table[abbrev_die_table_allocated], 0,
7582 (n_alloc - abbrev_die_table_allocated) * sizeof (dw_die_ref));
7583 abbrev_die_table_allocated = n_alloc;
7586 ++abbrev_die_table_in_use;
7587 abbrev_die_table[abbrev_id] = die;
7590 die->die_abbrev = abbrev_id;
7591 FOR_EACH_CHILD (die, c, build_abbrev_table (c));
7594 /* Return the power-of-two number of bytes necessary to represent VALUE. */
7596 static int
7597 constant_size (unsigned HOST_WIDE_INT value)
7599 int log;
7601 if (value == 0)
7602 log = 0;
7603 else
7604 log = floor_log2 (value);
7606 log = log / 8;
7607 log = 1 << (floor_log2 (log) + 1);
7609 return log;
7612 /* Return the size of a DIE as it is represented in the
7613 .debug_info section. */
7615 static unsigned long
7616 size_of_die (dw_die_ref die)
7618 unsigned long size = 0;
7619 dw_attr_ref a;
7620 unsigned ix;
7622 size += size_of_uleb128 (die->die_abbrev);
7623 FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a)
7625 switch (AT_class (a))
7627 case dw_val_class_addr:
7628 size += DWARF2_ADDR_SIZE;
7629 break;
7630 case dw_val_class_offset:
7631 size += DWARF_OFFSET_SIZE;
7632 break;
7633 case dw_val_class_loc:
7635 unsigned long lsize = size_of_locs (AT_loc (a));
7637 /* Block length. */
7638 if (dwarf_version >= 4)
7639 size += size_of_uleb128 (lsize);
7640 else
7641 size += constant_size (lsize);
7642 size += lsize;
7644 break;
7645 case dw_val_class_loc_list:
7646 size += DWARF_OFFSET_SIZE;
7647 break;
7648 case dw_val_class_range_list:
7649 size += DWARF_OFFSET_SIZE;
7650 break;
7651 case dw_val_class_const:
7652 size += size_of_sleb128 (AT_int (a));
7653 break;
7654 case dw_val_class_unsigned_const:
7656 int csize = constant_size (AT_unsigned (a));
7657 if (dwarf_version == 3
7658 && a->dw_attr == DW_AT_data_member_location
7659 && csize >= 4)
7660 size += size_of_uleb128 (AT_unsigned (a));
7661 else
7662 size += csize;
7664 break;
7665 case dw_val_class_const_double:
7666 size += 2 * HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR;
7667 if (HOST_BITS_PER_WIDE_INT >= 64)
7668 size++; /* block */
7669 break;
7670 case dw_val_class_vec:
7671 size += constant_size (a->dw_attr_val.v.val_vec.length
7672 * a->dw_attr_val.v.val_vec.elt_size)
7673 + a->dw_attr_val.v.val_vec.length
7674 * a->dw_attr_val.v.val_vec.elt_size; /* block */
7675 break;
7676 case dw_val_class_flag:
7677 if (dwarf_version >= 4)
7678 /* Currently all add_AT_flag calls pass in 1 as last argument,
7679 so DW_FORM_flag_present can be used. If that ever changes,
7680 we'll need to use DW_FORM_flag and have some optimization
7681 in build_abbrev_table that will change those to
7682 DW_FORM_flag_present if it is set to 1 in all DIEs using
7683 the same abbrev entry. */
7684 gcc_assert (a->dw_attr_val.v.val_flag == 1);
7685 else
7686 size += 1;
7687 break;
7688 case dw_val_class_die_ref:
7689 if (AT_ref_external (a))
7691 /* In DWARF4, we use DW_FORM_ref_sig8; for earlier versions
7692 we use DW_FORM_ref_addr. In DWARF2, DW_FORM_ref_addr
7693 is sized by target address length, whereas in DWARF3
7694 it's always sized as an offset. */
7695 if (use_debug_types)
7696 size += DWARF_TYPE_SIGNATURE_SIZE;
7697 else if (dwarf_version == 2)
7698 size += DWARF2_ADDR_SIZE;
7699 else
7700 size += DWARF_OFFSET_SIZE;
7702 else
7703 size += DWARF_OFFSET_SIZE;
7704 break;
7705 case dw_val_class_fde_ref:
7706 size += DWARF_OFFSET_SIZE;
7707 break;
7708 case dw_val_class_lbl_id:
7709 size += DWARF2_ADDR_SIZE;
7710 break;
7711 case dw_val_class_lineptr:
7712 case dw_val_class_macptr:
7713 size += DWARF_OFFSET_SIZE;
7714 break;
7715 case dw_val_class_str:
7716 if (AT_string_form (a) == DW_FORM_strp)
7717 size += DWARF_OFFSET_SIZE;
7718 else
7719 size += strlen (a->dw_attr_val.v.val_str->str) + 1;
7720 break;
7721 case dw_val_class_file:
7722 size += constant_size (maybe_emit_file (a->dw_attr_val.v.val_file));
7723 break;
7724 case dw_val_class_data8:
7725 size += 8;
7726 break;
7727 case dw_val_class_vms_delta:
7728 size += DWARF_OFFSET_SIZE;
7729 break;
7730 default:
7731 gcc_unreachable ();
7735 return size;
7738 /* Size the debugging information associated with a given DIE. Visits the
7739 DIE's children recursively. Updates the global variable next_die_offset, on
7740 each time through. Uses the current value of next_die_offset to update the
7741 die_offset field in each DIE. */
7743 static void
7744 calc_die_sizes (dw_die_ref die)
7746 dw_die_ref c;
7748 gcc_assert (die->die_offset == 0
7749 || (unsigned long int) die->die_offset == next_die_offset);
7750 die->die_offset = next_die_offset;
7751 next_die_offset += size_of_die (die);
7753 FOR_EACH_CHILD (die, c, calc_die_sizes (c));
7755 if (die->die_child != NULL)
7756 /* Count the null byte used to terminate sibling lists. */
7757 next_die_offset += 1;
7760 /* Size just the base type children at the start of the CU.
7761 This is needed because build_abbrev needs to size locs
7762 and sizing of type based stack ops needs to know die_offset
7763 values for the base types. */
7765 static void
7766 calc_base_type_die_sizes (void)
7768 unsigned long die_offset = DWARF_COMPILE_UNIT_HEADER_SIZE;
7769 unsigned int i;
7770 dw_die_ref base_type;
7771 #if ENABLE_ASSERT_CHECKING
7772 dw_die_ref prev = comp_unit_die ()->die_child;
7773 #endif
7775 die_offset += size_of_die (comp_unit_die ());
7776 for (i = 0; VEC_iterate (dw_die_ref, base_types, i, base_type); i++)
7778 #if ENABLE_ASSERT_CHECKING
7779 gcc_assert (base_type->die_offset == 0
7780 && prev->die_sib == base_type
7781 && base_type->die_child == NULL
7782 && base_type->die_abbrev);
7783 prev = base_type;
7784 #endif
7785 base_type->die_offset = die_offset;
7786 die_offset += size_of_die (base_type);
7790 /* Set the marks for a die and its children. We do this so
7791 that we know whether or not a reference needs to use FORM_ref_addr; only
7792 DIEs in the same CU will be marked. We used to clear out the offset
7793 and use that as the flag, but ran into ordering problems. */
7795 static void
7796 mark_dies (dw_die_ref die)
7798 dw_die_ref c;
7800 gcc_assert (!die->die_mark);
7802 die->die_mark = 1;
7803 FOR_EACH_CHILD (die, c, mark_dies (c));
7806 /* Clear the marks for a die and its children. */
7808 static void
7809 unmark_dies (dw_die_ref die)
7811 dw_die_ref c;
7813 if (! use_debug_types)
7814 gcc_assert (die->die_mark);
7816 die->die_mark = 0;
7817 FOR_EACH_CHILD (die, c, unmark_dies (c));
7820 /* Clear the marks for a die, its children and referred dies. */
7822 static void
7823 unmark_all_dies (dw_die_ref die)
7825 dw_die_ref c;
7826 dw_attr_ref a;
7827 unsigned ix;
7829 if (!die->die_mark)
7830 return;
7831 die->die_mark = 0;
7833 FOR_EACH_CHILD (die, c, unmark_all_dies (c));
7835 FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a)
7836 if (AT_class (a) == dw_val_class_die_ref)
7837 unmark_all_dies (AT_ref (a));
7840 /* Return the size of the .debug_pubnames or .debug_pubtypes table
7841 generated for the compilation unit. */
7843 static unsigned long
7844 size_of_pubnames (VEC (pubname_entry, gc) * names)
7846 unsigned long size;
7847 unsigned i;
7848 pubname_ref p;
7850 size = DWARF_PUBNAMES_HEADER_SIZE;
7851 FOR_EACH_VEC_ELT (pubname_entry, names, i, p)
7852 if (names != pubtype_table
7853 || p->die->die_offset != 0
7854 || !flag_eliminate_unused_debug_types)
7855 size += strlen (p->name) + DWARF_OFFSET_SIZE + 1;
7857 size += DWARF_OFFSET_SIZE;
7858 return size;
7861 /* Return the size of the information in the .debug_aranges section. */
7863 static unsigned long
7864 size_of_aranges (void)
7866 unsigned long size;
7868 size = DWARF_ARANGES_HEADER_SIZE;
7870 /* Count the address/length pair for this compilation unit. */
7871 if (text_section_used)
7872 size += 2 * DWARF2_ADDR_SIZE;
7873 if (cold_text_section_used)
7874 size += 2 * DWARF2_ADDR_SIZE;
7875 if (have_multiple_function_sections)
7877 unsigned fde_idx;
7878 dw_fde_ref fde;
7880 FOR_EACH_VEC_ELT (dw_fde_ref, fde_vec, fde_idx, fde)
7882 if (!fde->in_std_section)
7883 size += 2 * DWARF2_ADDR_SIZE;
7884 if (fde->dw_fde_second_begin && !fde->second_in_std_section)
7885 size += 2 * DWARF2_ADDR_SIZE;
7889 /* Count the two zero words used to terminated the address range table. */
7890 size += 2 * DWARF2_ADDR_SIZE;
7891 return size;
7894 /* Select the encoding of an attribute value. */
7896 static enum dwarf_form
7897 value_format (dw_attr_ref a)
7899 switch (a->dw_attr_val.val_class)
7901 case dw_val_class_addr:
7902 /* Only very few attributes allow DW_FORM_addr. */
7903 switch (a->dw_attr)
7905 case DW_AT_low_pc:
7906 case DW_AT_high_pc:
7907 case DW_AT_entry_pc:
7908 case DW_AT_trampoline:
7909 return DW_FORM_addr;
7910 default:
7911 break;
7913 switch (DWARF2_ADDR_SIZE)
7915 case 1:
7916 return DW_FORM_data1;
7917 case 2:
7918 return DW_FORM_data2;
7919 case 4:
7920 return DW_FORM_data4;
7921 case 8:
7922 return DW_FORM_data8;
7923 default:
7924 gcc_unreachable ();
7926 case dw_val_class_range_list:
7927 case dw_val_class_loc_list:
7928 if (dwarf_version >= 4)
7929 return DW_FORM_sec_offset;
7930 /* FALLTHRU */
7931 case dw_val_class_vms_delta:
7932 case dw_val_class_offset:
7933 switch (DWARF_OFFSET_SIZE)
7935 case 4:
7936 return DW_FORM_data4;
7937 case 8:
7938 return DW_FORM_data8;
7939 default:
7940 gcc_unreachable ();
7942 case dw_val_class_loc:
7943 if (dwarf_version >= 4)
7944 return DW_FORM_exprloc;
7945 switch (constant_size (size_of_locs (AT_loc (a))))
7947 case 1:
7948 return DW_FORM_block1;
7949 case 2:
7950 return DW_FORM_block2;
7951 default:
7952 gcc_unreachable ();
7954 case dw_val_class_const:
7955 return DW_FORM_sdata;
7956 case dw_val_class_unsigned_const:
7957 switch (constant_size (AT_unsigned (a)))
7959 case 1:
7960 return DW_FORM_data1;
7961 case 2:
7962 return DW_FORM_data2;
7963 case 4:
7964 /* In DWARF3 DW_AT_data_member_location with
7965 DW_FORM_data4 or DW_FORM_data8 is a loclistptr, not
7966 constant, so we need to use DW_FORM_udata if we need
7967 a large constant. */
7968 if (dwarf_version == 3 && a->dw_attr == DW_AT_data_member_location)
7969 return DW_FORM_udata;
7970 return DW_FORM_data4;
7971 case 8:
7972 if (dwarf_version == 3 && a->dw_attr == DW_AT_data_member_location)
7973 return DW_FORM_udata;
7974 return DW_FORM_data8;
7975 default:
7976 gcc_unreachable ();
7978 case dw_val_class_const_double:
7979 switch (HOST_BITS_PER_WIDE_INT)
7981 case 8:
7982 return DW_FORM_data2;
7983 case 16:
7984 return DW_FORM_data4;
7985 case 32:
7986 return DW_FORM_data8;
7987 case 64:
7988 default:
7989 return DW_FORM_block1;
7991 case dw_val_class_vec:
7992 switch (constant_size (a->dw_attr_val.v.val_vec.length
7993 * a->dw_attr_val.v.val_vec.elt_size))
7995 case 1:
7996 return DW_FORM_block1;
7997 case 2:
7998 return DW_FORM_block2;
7999 case 4:
8000 return DW_FORM_block4;
8001 default:
8002 gcc_unreachable ();
8004 case dw_val_class_flag:
8005 if (dwarf_version >= 4)
8007 /* Currently all add_AT_flag calls pass in 1 as last argument,
8008 so DW_FORM_flag_present can be used. If that ever changes,
8009 we'll need to use DW_FORM_flag and have some optimization
8010 in build_abbrev_table that will change those to
8011 DW_FORM_flag_present if it is set to 1 in all DIEs using
8012 the same abbrev entry. */
8013 gcc_assert (a->dw_attr_val.v.val_flag == 1);
8014 return DW_FORM_flag_present;
8016 return DW_FORM_flag;
8017 case dw_val_class_die_ref:
8018 if (AT_ref_external (a))
8019 return use_debug_types ? DW_FORM_ref_sig8 : DW_FORM_ref_addr;
8020 else
8021 return DW_FORM_ref;
8022 case dw_val_class_fde_ref:
8023 return DW_FORM_data;
8024 case dw_val_class_lbl_id:
8025 return DW_FORM_addr;
8026 case dw_val_class_lineptr:
8027 case dw_val_class_macptr:
8028 return dwarf_version >= 4 ? DW_FORM_sec_offset : DW_FORM_data;
8029 case dw_val_class_str:
8030 return AT_string_form (a);
8031 case dw_val_class_file:
8032 switch (constant_size (maybe_emit_file (a->dw_attr_val.v.val_file)))
8034 case 1:
8035 return DW_FORM_data1;
8036 case 2:
8037 return DW_FORM_data2;
8038 case 4:
8039 return DW_FORM_data4;
8040 default:
8041 gcc_unreachable ();
8044 case dw_val_class_data8:
8045 return DW_FORM_data8;
8047 default:
8048 gcc_unreachable ();
8052 /* Output the encoding of an attribute value. */
8054 static void
8055 output_value_format (dw_attr_ref a)
8057 enum dwarf_form form = value_format (a);
8059 dw2_asm_output_data_uleb128 (form, "(%s)", dwarf_form_name (form));
8062 /* Output the .debug_abbrev section which defines the DIE abbreviation
8063 table. */
8065 static void
8066 output_abbrev_section (void)
8068 unsigned long abbrev_id;
8070 for (abbrev_id = 1; abbrev_id < abbrev_die_table_in_use; ++abbrev_id)
8072 dw_die_ref abbrev = abbrev_die_table[abbrev_id];
8073 unsigned ix;
8074 dw_attr_ref a_attr;
8076 dw2_asm_output_data_uleb128 (abbrev_id, "(abbrev code)");
8077 dw2_asm_output_data_uleb128 (abbrev->die_tag, "(TAG: %s)",
8078 dwarf_tag_name (abbrev->die_tag));
8080 if (abbrev->die_child != NULL)
8081 dw2_asm_output_data (1, DW_children_yes, "DW_children_yes");
8082 else
8083 dw2_asm_output_data (1, DW_children_no, "DW_children_no");
8085 for (ix = 0; VEC_iterate (dw_attr_node, abbrev->die_attr, ix, a_attr);
8086 ix++)
8088 dw2_asm_output_data_uleb128 (a_attr->dw_attr, "(%s)",
8089 dwarf_attr_name (a_attr->dw_attr));
8090 output_value_format (a_attr);
8093 dw2_asm_output_data (1, 0, NULL);
8094 dw2_asm_output_data (1, 0, NULL);
8097 /* Terminate the table. */
8098 dw2_asm_output_data (1, 0, NULL);
8101 /* Output a symbol we can use to refer to this DIE from another CU. */
8103 static inline void
8104 output_die_symbol (dw_die_ref die)
8106 char *sym = die->die_id.die_symbol;
8108 if (sym == 0)
8109 return;
8111 if (strncmp (sym, DIE_LABEL_PREFIX, sizeof (DIE_LABEL_PREFIX) - 1) == 0)
8112 /* We make these global, not weak; if the target doesn't support
8113 .linkonce, it doesn't support combining the sections, so debugging
8114 will break. */
8115 targetm.asm_out.globalize_label (asm_out_file, sym);
8117 ASM_OUTPUT_LABEL (asm_out_file, sym);
8120 /* Return a new location list, given the begin and end range, and the
8121 expression. */
8123 static inline dw_loc_list_ref
8124 new_loc_list (dw_loc_descr_ref expr, const char *begin, const char *end,
8125 const char *section)
8127 dw_loc_list_ref retlist = ggc_alloc_cleared_dw_loc_list_node ();
8129 retlist->begin = begin;
8130 retlist->end = end;
8131 retlist->expr = expr;
8132 retlist->section = section;
8134 return retlist;
8137 /* Generate a new internal symbol for this location list node, if it
8138 hasn't got one yet. */
8140 static inline void
8141 gen_llsym (dw_loc_list_ref list)
8143 gcc_assert (!list->ll_symbol);
8144 list->ll_symbol = gen_internal_sym ("LLST");
8147 /* Output the location list given to us. */
8149 static void
8150 output_loc_list (dw_loc_list_ref list_head)
8152 dw_loc_list_ref curr = list_head;
8154 if (list_head->emitted)
8155 return;
8156 list_head->emitted = true;
8158 ASM_OUTPUT_LABEL (asm_out_file, list_head->ll_symbol);
8160 /* Walk the location list, and output each range + expression. */
8161 for (curr = list_head; curr != NULL; curr = curr->dw_loc_next)
8163 unsigned long size;
8164 /* Don't output an entry that starts and ends at the same address. */
8165 if (strcmp (curr->begin, curr->end) == 0 && !curr->force)
8166 continue;
8167 if (!have_multiple_function_sections)
8169 dw2_asm_output_delta (DWARF2_ADDR_SIZE, curr->begin, curr->section,
8170 "Location list begin address (%s)",
8171 list_head->ll_symbol);
8172 dw2_asm_output_delta (DWARF2_ADDR_SIZE, curr->end, curr->section,
8173 "Location list end address (%s)",
8174 list_head->ll_symbol);
8176 else
8178 dw2_asm_output_addr (DWARF2_ADDR_SIZE, curr->begin,
8179 "Location list begin address (%s)",
8180 list_head->ll_symbol);
8181 dw2_asm_output_addr (DWARF2_ADDR_SIZE, curr->end,
8182 "Location list end address (%s)",
8183 list_head->ll_symbol);
8185 size = size_of_locs (curr->expr);
8187 /* Output the block length for this list of location operations. */
8188 gcc_assert (size <= 0xffff);
8189 dw2_asm_output_data (2, size, "%s", "Location expression size");
8191 output_loc_sequence (curr->expr, -1);
8194 dw2_asm_output_data (DWARF2_ADDR_SIZE, 0,
8195 "Location list terminator begin (%s)",
8196 list_head->ll_symbol);
8197 dw2_asm_output_data (DWARF2_ADDR_SIZE, 0,
8198 "Location list terminator end (%s)",
8199 list_head->ll_symbol);
8202 /* Output a type signature. */
8204 static inline void
8205 output_signature (const char *sig, const char *name)
8207 int i;
8209 for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++)
8210 dw2_asm_output_data (1, sig[i], i == 0 ? "%s" : NULL, name);
8213 /* Output the DIE and its attributes. Called recursively to generate
8214 the definitions of each child DIE. */
8216 static void
8217 output_die (dw_die_ref die)
8219 dw_attr_ref a;
8220 dw_die_ref c;
8221 unsigned long size;
8222 unsigned ix;
8224 /* If someone in another CU might refer to us, set up a symbol for
8225 them to point to. */
8226 if (! use_debug_types && die->die_id.die_symbol)
8227 output_die_symbol (die);
8229 dw2_asm_output_data_uleb128 (die->die_abbrev, "(DIE (%#lx) %s)",
8230 (unsigned long)die->die_offset,
8231 dwarf_tag_name (die->die_tag));
8233 FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a)
8235 const char *name = dwarf_attr_name (a->dw_attr);
8237 switch (AT_class (a))
8239 case dw_val_class_addr:
8240 dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE, AT_addr (a), "%s", name);
8241 break;
8243 case dw_val_class_offset:
8244 dw2_asm_output_data (DWARF_OFFSET_SIZE, a->dw_attr_val.v.val_offset,
8245 "%s", name);
8246 break;
8248 case dw_val_class_range_list:
8250 char *p = strchr (ranges_section_label, '\0');
8252 sprintf (p, "+" HOST_WIDE_INT_PRINT_HEX,
8253 a->dw_attr_val.v.val_offset);
8254 dw2_asm_output_offset (DWARF_OFFSET_SIZE, ranges_section_label,
8255 debug_ranges_section, "%s", name);
8256 *p = '\0';
8258 break;
8260 case dw_val_class_loc:
8261 size = size_of_locs (AT_loc (a));
8263 /* Output the block length for this list of location operations. */
8264 if (dwarf_version >= 4)
8265 dw2_asm_output_data_uleb128 (size, "%s", name);
8266 else
8267 dw2_asm_output_data (constant_size (size), size, "%s", name);
8269 output_loc_sequence (AT_loc (a), -1);
8270 break;
8272 case dw_val_class_const:
8273 /* ??? It would be slightly more efficient to use a scheme like is
8274 used for unsigned constants below, but gdb 4.x does not sign
8275 extend. Gdb 5.x does sign extend. */
8276 dw2_asm_output_data_sleb128 (AT_int (a), "%s", name);
8277 break;
8279 case dw_val_class_unsigned_const:
8281 int csize = constant_size (AT_unsigned (a));
8282 if (dwarf_version == 3
8283 && a->dw_attr == DW_AT_data_member_location
8284 && csize >= 4)
8285 dw2_asm_output_data_uleb128 (AT_unsigned (a), "%s", name);
8286 else
8287 dw2_asm_output_data (csize, AT_unsigned (a), "%s", name);
8289 break;
8291 case dw_val_class_const_double:
8293 unsigned HOST_WIDE_INT first, second;
8295 if (HOST_BITS_PER_WIDE_INT >= 64)
8296 dw2_asm_output_data (1,
8297 2 * HOST_BITS_PER_WIDE_INT
8298 / HOST_BITS_PER_CHAR,
8299 NULL);
8301 if (WORDS_BIG_ENDIAN)
8303 first = a->dw_attr_val.v.val_double.high;
8304 second = a->dw_attr_val.v.val_double.low;
8306 else
8308 first = a->dw_attr_val.v.val_double.low;
8309 second = a->dw_attr_val.v.val_double.high;
8312 dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR,
8313 first, name);
8314 dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR,
8315 second, NULL);
8317 break;
8319 case dw_val_class_vec:
8321 unsigned int elt_size = a->dw_attr_val.v.val_vec.elt_size;
8322 unsigned int len = a->dw_attr_val.v.val_vec.length;
8323 unsigned int i;
8324 unsigned char *p;
8326 dw2_asm_output_data (constant_size (len * elt_size),
8327 len * elt_size, "%s", name);
8328 if (elt_size > sizeof (HOST_WIDE_INT))
8330 elt_size /= 2;
8331 len *= 2;
8333 for (i = 0, p = a->dw_attr_val.v.val_vec.array;
8334 i < len;
8335 i++, p += elt_size)
8336 dw2_asm_output_data (elt_size, extract_int (p, elt_size),
8337 "fp or vector constant word %u", i);
8338 break;
8341 case dw_val_class_flag:
8342 if (dwarf_version >= 4)
8344 /* Currently all add_AT_flag calls pass in 1 as last argument,
8345 so DW_FORM_flag_present can be used. If that ever changes,
8346 we'll need to use DW_FORM_flag and have some optimization
8347 in build_abbrev_table that will change those to
8348 DW_FORM_flag_present if it is set to 1 in all DIEs using
8349 the same abbrev entry. */
8350 gcc_assert (AT_flag (a) == 1);
8351 if (flag_debug_asm)
8352 fprintf (asm_out_file, "\t\t\t%s %s\n",
8353 ASM_COMMENT_START, name);
8354 break;
8356 dw2_asm_output_data (1, AT_flag (a), "%s", name);
8357 break;
8359 case dw_val_class_loc_list:
8361 char *sym = AT_loc_list (a)->ll_symbol;
8363 gcc_assert (sym);
8364 dw2_asm_output_offset (DWARF_OFFSET_SIZE, sym, debug_loc_section,
8365 "%s", name);
8367 break;
8369 case dw_val_class_die_ref:
8370 if (AT_ref_external (a))
8372 if (use_debug_types)
8374 comdat_type_node_ref type_node =
8375 AT_ref (a)->die_id.die_type_node;
8377 gcc_assert (type_node);
8378 output_signature (type_node->signature, name);
8380 else
8382 char *sym = AT_ref (a)->die_id.die_symbol;
8383 int size;
8385 gcc_assert (sym);
8386 /* In DWARF2, DW_FORM_ref_addr is sized by target address
8387 length, whereas in DWARF3 it's always sized as an
8388 offset. */
8389 if (dwarf_version == 2)
8390 size = DWARF2_ADDR_SIZE;
8391 else
8392 size = DWARF_OFFSET_SIZE;
8393 dw2_asm_output_offset (size, sym, debug_info_section, "%s",
8394 name);
8397 else
8399 gcc_assert (AT_ref (a)->die_offset);
8400 dw2_asm_output_data (DWARF_OFFSET_SIZE, AT_ref (a)->die_offset,
8401 "%s", name);
8403 break;
8405 case dw_val_class_fde_ref:
8407 char l1[20];
8409 ASM_GENERATE_INTERNAL_LABEL (l1, FDE_LABEL,
8410 a->dw_attr_val.v.val_fde_index * 2);
8411 dw2_asm_output_offset (DWARF_OFFSET_SIZE, l1, debug_frame_section,
8412 "%s", name);
8414 break;
8416 case dw_val_class_vms_delta:
8417 dw2_asm_output_vms_delta (DWARF_OFFSET_SIZE,
8418 AT_vms_delta2 (a), AT_vms_delta1 (a),
8419 "%s", name);
8420 break;
8422 case dw_val_class_lbl_id:
8423 dw2_asm_output_addr (DWARF2_ADDR_SIZE, AT_lbl (a), "%s", name);
8424 break;
8426 case dw_val_class_lineptr:
8427 dw2_asm_output_offset (DWARF_OFFSET_SIZE, AT_lbl (a),
8428 debug_line_section, "%s", name);
8429 break;
8431 case dw_val_class_macptr:
8432 dw2_asm_output_offset (DWARF_OFFSET_SIZE, AT_lbl (a),
8433 debug_macinfo_section, "%s", name);
8434 break;
8436 case dw_val_class_str:
8437 if (AT_string_form (a) == DW_FORM_strp)
8438 dw2_asm_output_offset (DWARF_OFFSET_SIZE,
8439 a->dw_attr_val.v.val_str->label,
8440 debug_str_section,
8441 "%s: \"%s\"", name, AT_string (a));
8442 else
8443 dw2_asm_output_nstring (AT_string (a), -1, "%s", name);
8444 break;
8446 case dw_val_class_file:
8448 int f = maybe_emit_file (a->dw_attr_val.v.val_file);
8450 dw2_asm_output_data (constant_size (f), f, "%s (%s)", name,
8451 a->dw_attr_val.v.val_file->filename);
8452 break;
8455 case dw_val_class_data8:
8457 int i;
8459 for (i = 0; i < 8; i++)
8460 dw2_asm_output_data (1, a->dw_attr_val.v.val_data8[i],
8461 i == 0 ? "%s" : NULL, name);
8462 break;
8465 default:
8466 gcc_unreachable ();
8470 FOR_EACH_CHILD (die, c, output_die (c));
8472 /* Add null byte to terminate sibling list. */
8473 if (die->die_child != NULL)
8474 dw2_asm_output_data (1, 0, "end of children of DIE %#lx",
8475 (unsigned long) die->die_offset);
8478 /* Output the compilation unit that appears at the beginning of the
8479 .debug_info section, and precedes the DIE descriptions. */
8481 static void
8482 output_compilation_unit_header (void)
8484 int ver = dwarf_version;
8486 if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
8487 dw2_asm_output_data (4, 0xffffffff,
8488 "Initial length escape value indicating 64-bit DWARF extension");
8489 dw2_asm_output_data (DWARF_OFFSET_SIZE,
8490 next_die_offset - DWARF_INITIAL_LENGTH_SIZE,
8491 "Length of Compilation Unit Info");
8492 dw2_asm_output_data (2, ver, "DWARF version number");
8493 dw2_asm_output_offset (DWARF_OFFSET_SIZE, abbrev_section_label,
8494 debug_abbrev_section,
8495 "Offset Into Abbrev. Section");
8496 dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Pointer Size (in bytes)");
8499 /* Output the compilation unit DIE and its children. */
8501 static void
8502 output_comp_unit (dw_die_ref die, int output_if_empty)
8504 const char *secname;
8505 char *oldsym, *tmp;
8507 /* Unless we are outputting main CU, we may throw away empty ones. */
8508 if (!output_if_empty && die->die_child == NULL)
8509 return;
8511 /* Even if there are no children of this DIE, we must output the information
8512 about the compilation unit. Otherwise, on an empty translation unit, we
8513 will generate a present, but empty, .debug_info section. IRIX 6.5 `nm'
8514 will then complain when examining the file. First mark all the DIEs in
8515 this CU so we know which get local refs. */
8516 mark_dies (die);
8518 build_abbrev_table (die);
8520 /* Initialize the beginning DIE offset - and calculate sizes/offsets. */
8521 next_die_offset = DWARF_COMPILE_UNIT_HEADER_SIZE;
8522 calc_die_sizes (die);
8524 oldsym = die->die_id.die_symbol;
8525 if (oldsym)
8527 tmp = XALLOCAVEC (char, strlen (oldsym) + 24);
8529 sprintf (tmp, ".gnu.linkonce.wi.%s", oldsym);
8530 secname = tmp;
8531 die->die_id.die_symbol = NULL;
8532 switch_to_section (get_section (secname, SECTION_DEBUG, NULL));
8534 else
8536 switch_to_section (debug_info_section);
8537 ASM_OUTPUT_LABEL (asm_out_file, debug_info_section_label);
8538 info_section_emitted = true;
8541 /* Output debugging information. */
8542 output_compilation_unit_header ();
8543 output_die (die);
8545 /* Leave the marks on the main CU, so we can check them in
8546 output_pubnames. */
8547 if (oldsym)
8549 unmark_dies (die);
8550 die->die_id.die_symbol = oldsym;
8554 /* Output a comdat type unit DIE and its children. */
8556 static void
8557 output_comdat_type_unit (comdat_type_node *node)
8559 const char *secname;
8560 char *tmp;
8561 int i;
8562 #if defined (OBJECT_FORMAT_ELF)
8563 tree comdat_key;
8564 #endif
8566 /* First mark all the DIEs in this CU so we know which get local refs. */
8567 mark_dies (node->root_die);
8569 build_abbrev_table (node->root_die);
8571 /* Initialize the beginning DIE offset - and calculate sizes/offsets. */
8572 next_die_offset = DWARF_COMDAT_TYPE_UNIT_HEADER_SIZE;
8573 calc_die_sizes (node->root_die);
8575 #if defined (OBJECT_FORMAT_ELF)
8576 secname = ".debug_types";
8577 tmp = XALLOCAVEC (char, 4 + DWARF_TYPE_SIGNATURE_SIZE * 2);
8578 sprintf (tmp, "wt.");
8579 for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++)
8580 sprintf (tmp + 3 + i * 2, "%02x", node->signature[i] & 0xff);
8581 comdat_key = get_identifier (tmp);
8582 targetm.asm_out.named_section (secname,
8583 SECTION_DEBUG | SECTION_LINKONCE,
8584 comdat_key);
8585 #else
8586 tmp = XALLOCAVEC (char, 18 + DWARF_TYPE_SIGNATURE_SIZE * 2);
8587 sprintf (tmp, ".gnu.linkonce.wt.");
8588 for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++)
8589 sprintf (tmp + 17 + i * 2, "%02x", node->signature[i] & 0xff);
8590 secname = tmp;
8591 switch_to_section (get_section (secname, SECTION_DEBUG, NULL));
8592 #endif
8594 /* Output debugging information. */
8595 output_compilation_unit_header ();
8596 output_signature (node->signature, "Type Signature");
8597 dw2_asm_output_data (DWARF_OFFSET_SIZE, node->type_die->die_offset,
8598 "Offset to Type DIE");
8599 output_die (node->root_die);
8601 unmark_dies (node->root_die);
8604 /* Return the DWARF2/3 pubname associated with a decl. */
8606 static const char *
8607 dwarf2_name (tree decl, int scope)
8609 if (DECL_NAMELESS (decl))
8610 return NULL;
8611 return lang_hooks.dwarf_name (decl, scope ? 1 : 0);
8614 /* Add a new entry to .debug_pubnames if appropriate. */
8616 static void
8617 add_pubname_string (const char *str, dw_die_ref die)
8619 if (targetm.want_debug_pub_sections)
8621 pubname_entry e;
8623 e.die = die;
8624 e.name = xstrdup (str);
8625 VEC_safe_push (pubname_entry, gc, pubname_table, &e);
8629 static void
8630 add_pubname (tree decl, dw_die_ref die)
8632 if (targetm.want_debug_pub_sections && TREE_PUBLIC (decl))
8634 const char *name = dwarf2_name (decl, 1);
8635 if (name)
8636 add_pubname_string (name, die);
8640 /* Add a new entry to .debug_pubtypes if appropriate. */
8642 static void
8643 add_pubtype (tree decl, dw_die_ref die)
8645 pubname_entry e;
8647 if (!targetm.want_debug_pub_sections)
8648 return;
8650 e.name = NULL;
8651 if ((TREE_PUBLIC (decl)
8652 || is_cu_die (die->die_parent))
8653 && (die->die_tag == DW_TAG_typedef || COMPLETE_TYPE_P (decl)))
8655 e.die = die;
8656 if (TYPE_P (decl))
8658 if (TYPE_NAME (decl))
8660 if (TREE_CODE (TYPE_NAME (decl)) == IDENTIFIER_NODE)
8661 e.name = IDENTIFIER_POINTER (TYPE_NAME (decl));
8662 else if (TREE_CODE (TYPE_NAME (decl)) == TYPE_DECL
8663 && DECL_NAME (TYPE_NAME (decl)))
8664 e.name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (decl)));
8665 else
8666 e.name = xstrdup ((const char *) get_AT_string (die, DW_AT_name));
8669 else
8671 e.name = dwarf2_name (decl, 1);
8672 if (e.name)
8673 e.name = xstrdup (e.name);
8676 /* If we don't have a name for the type, there's no point in adding
8677 it to the table. */
8678 if (e.name && e.name[0] != '\0')
8679 VEC_safe_push (pubname_entry, gc, pubtype_table, &e);
8683 /* Output the public names table used to speed up access to externally
8684 visible names; or the public types table used to find type definitions. */
8686 static void
8687 output_pubnames (VEC (pubname_entry, gc) * names)
8689 unsigned i;
8690 unsigned long pubnames_length = size_of_pubnames (names);
8691 pubname_ref pub;
8693 if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
8694 dw2_asm_output_data (4, 0xffffffff,
8695 "Initial length escape value indicating 64-bit DWARF extension");
8696 if (names == pubname_table)
8697 dw2_asm_output_data (DWARF_OFFSET_SIZE, pubnames_length,
8698 "Length of Public Names Info");
8699 else
8700 dw2_asm_output_data (DWARF_OFFSET_SIZE, pubnames_length,
8701 "Length of Public Type Names Info");
8702 /* Version number for pubnames/pubtypes is still 2, even in DWARF3. */
8703 dw2_asm_output_data (2, 2, "DWARF Version");
8704 dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_info_section_label,
8705 debug_info_section,
8706 "Offset of Compilation Unit Info");
8707 dw2_asm_output_data (DWARF_OFFSET_SIZE, next_die_offset,
8708 "Compilation Unit Length");
8710 FOR_EACH_VEC_ELT (pubname_entry, names, i, pub)
8712 /* We shouldn't see pubnames for DIEs outside of the main CU. */
8713 if (names == pubname_table)
8714 gcc_assert (pub->die->die_mark);
8716 if (names != pubtype_table
8717 || pub->die->die_offset != 0
8718 || !flag_eliminate_unused_debug_types)
8720 dw2_asm_output_data (DWARF_OFFSET_SIZE, pub->die->die_offset,
8721 "DIE offset");
8723 dw2_asm_output_nstring (pub->name, -1, "external name");
8727 dw2_asm_output_data (DWARF_OFFSET_SIZE, 0, NULL);
8730 /* Output the information that goes into the .debug_aranges table.
8731 Namely, define the beginning and ending address range of the
8732 text section generated for this compilation unit. */
8734 static void
8735 output_aranges (unsigned long aranges_length)
8737 unsigned i;
8739 if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
8740 dw2_asm_output_data (4, 0xffffffff,
8741 "Initial length escape value indicating 64-bit DWARF extension");
8742 dw2_asm_output_data (DWARF_OFFSET_SIZE, aranges_length,
8743 "Length of Address Ranges Info");
8744 /* Version number for aranges is still 2, even in DWARF3. */
8745 dw2_asm_output_data (2, 2, "DWARF Version");
8746 dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_info_section_label,
8747 debug_info_section,
8748 "Offset of Compilation Unit Info");
8749 dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Size of Address");
8750 dw2_asm_output_data (1, 0, "Size of Segment Descriptor");
8752 /* We need to align to twice the pointer size here. */
8753 if (DWARF_ARANGES_PAD_SIZE)
8755 /* Pad using a 2 byte words so that padding is correct for any
8756 pointer size. */
8757 dw2_asm_output_data (2, 0, "Pad to %d byte boundary",
8758 2 * DWARF2_ADDR_SIZE);
8759 for (i = 2; i < (unsigned) DWARF_ARANGES_PAD_SIZE; i += 2)
8760 dw2_asm_output_data (2, 0, NULL);
8763 /* It is necessary not to output these entries if the sections were
8764 not used; if the sections were not used, the length will be 0 and
8765 the address may end up as 0 if the section is discarded by ld
8766 --gc-sections, leaving an invalid (0, 0) entry that can be
8767 confused with the terminator. */
8768 if (text_section_used)
8770 dw2_asm_output_addr (DWARF2_ADDR_SIZE, text_section_label, "Address");
8771 dw2_asm_output_delta (DWARF2_ADDR_SIZE, text_end_label,
8772 text_section_label, "Length");
8774 if (cold_text_section_used)
8776 dw2_asm_output_addr (DWARF2_ADDR_SIZE, cold_text_section_label,
8777 "Address");
8778 dw2_asm_output_delta (DWARF2_ADDR_SIZE, cold_end_label,
8779 cold_text_section_label, "Length");
8782 if (have_multiple_function_sections)
8784 unsigned fde_idx;
8785 dw_fde_ref fde;
8787 FOR_EACH_VEC_ELT (dw_fde_ref, fde_vec, fde_idx, fde)
8789 if (!fde->in_std_section)
8791 dw2_asm_output_addr (DWARF2_ADDR_SIZE, fde->dw_fde_begin,
8792 "Address");
8793 dw2_asm_output_delta (DWARF2_ADDR_SIZE, fde->dw_fde_end,
8794 fde->dw_fde_begin, "Length");
8796 if (fde->dw_fde_second_begin && !fde->second_in_std_section)
8798 dw2_asm_output_addr (DWARF2_ADDR_SIZE, fde->dw_fde_second_begin,
8799 "Address");
8800 dw2_asm_output_delta (DWARF2_ADDR_SIZE, fde->dw_fde_second_end,
8801 fde->dw_fde_second_begin, "Length");
8806 /* Output the terminator words. */
8807 dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
8808 dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
8811 /* Add a new entry to .debug_ranges. Return the offset at which it
8812 was placed. */
8814 static unsigned int
8815 add_ranges_num (int num)
8817 unsigned int in_use = ranges_table_in_use;
8819 if (in_use == ranges_table_allocated)
8821 ranges_table_allocated += RANGES_TABLE_INCREMENT;
8822 ranges_table = GGC_RESIZEVEC (struct dw_ranges_struct, ranges_table,
8823 ranges_table_allocated);
8824 memset (ranges_table + ranges_table_in_use, 0,
8825 RANGES_TABLE_INCREMENT * sizeof (struct dw_ranges_struct));
8828 ranges_table[in_use].num = num;
8829 ranges_table_in_use = in_use + 1;
8831 return in_use * 2 * DWARF2_ADDR_SIZE;
8834 /* Add a new entry to .debug_ranges corresponding to a block, or a
8835 range terminator if BLOCK is NULL. */
8837 static unsigned int
8838 add_ranges (const_tree block)
8840 return add_ranges_num (block ? BLOCK_NUMBER (block) : 0);
8843 /* Add a new entry to .debug_ranges corresponding to a pair of
8844 labels. */
8846 static void
8847 add_ranges_by_labels (dw_die_ref die, const char *begin, const char *end,
8848 bool *added)
8850 unsigned int in_use = ranges_by_label_in_use;
8851 unsigned int offset;
8853 if (in_use == ranges_by_label_allocated)
8855 ranges_by_label_allocated += RANGES_TABLE_INCREMENT;
8856 ranges_by_label = GGC_RESIZEVEC (struct dw_ranges_by_label_struct,
8857 ranges_by_label,
8858 ranges_by_label_allocated);
8859 memset (ranges_by_label + ranges_by_label_in_use, 0,
8860 RANGES_TABLE_INCREMENT
8861 * sizeof (struct dw_ranges_by_label_struct));
8864 ranges_by_label[in_use].begin = begin;
8865 ranges_by_label[in_use].end = end;
8866 ranges_by_label_in_use = in_use + 1;
8868 offset = add_ranges_num (-(int)in_use - 1);
8869 if (!*added)
8871 add_AT_range_list (die, DW_AT_ranges, offset);
8872 *added = true;
8876 static void
8877 output_ranges (void)
8879 unsigned i;
8880 static const char *const start_fmt = "Offset %#x";
8881 const char *fmt = start_fmt;
8883 for (i = 0; i < ranges_table_in_use; i++)
8885 int block_num = ranges_table[i].num;
8887 if (block_num > 0)
8889 char blabel[MAX_ARTIFICIAL_LABEL_BYTES];
8890 char elabel[MAX_ARTIFICIAL_LABEL_BYTES];
8892 ASM_GENERATE_INTERNAL_LABEL (blabel, BLOCK_BEGIN_LABEL, block_num);
8893 ASM_GENERATE_INTERNAL_LABEL (elabel, BLOCK_END_LABEL, block_num);
8895 /* If all code is in the text section, then the compilation
8896 unit base address defaults to DW_AT_low_pc, which is the
8897 base of the text section. */
8898 if (!have_multiple_function_sections)
8900 dw2_asm_output_delta (DWARF2_ADDR_SIZE, blabel,
8901 text_section_label,
8902 fmt, i * 2 * DWARF2_ADDR_SIZE);
8903 dw2_asm_output_delta (DWARF2_ADDR_SIZE, elabel,
8904 text_section_label, NULL);
8907 /* Otherwise, the compilation unit base address is zero,
8908 which allows us to use absolute addresses, and not worry
8909 about whether the target supports cross-section
8910 arithmetic. */
8911 else
8913 dw2_asm_output_addr (DWARF2_ADDR_SIZE, blabel,
8914 fmt, i * 2 * DWARF2_ADDR_SIZE);
8915 dw2_asm_output_addr (DWARF2_ADDR_SIZE, elabel, NULL);
8918 fmt = NULL;
8921 /* Negative block_num stands for an index into ranges_by_label. */
8922 else if (block_num < 0)
8924 int lab_idx = - block_num - 1;
8926 if (!have_multiple_function_sections)
8928 gcc_unreachable ();
8929 #if 0
8930 /* If we ever use add_ranges_by_labels () for a single
8931 function section, all we have to do is to take out
8932 the #if 0 above. */
8933 dw2_asm_output_delta (DWARF2_ADDR_SIZE,
8934 ranges_by_label[lab_idx].begin,
8935 text_section_label,
8936 fmt, i * 2 * DWARF2_ADDR_SIZE);
8937 dw2_asm_output_delta (DWARF2_ADDR_SIZE,
8938 ranges_by_label[lab_idx].end,
8939 text_section_label, NULL);
8940 #endif
8942 else
8944 dw2_asm_output_addr (DWARF2_ADDR_SIZE,
8945 ranges_by_label[lab_idx].begin,
8946 fmt, i * 2 * DWARF2_ADDR_SIZE);
8947 dw2_asm_output_addr (DWARF2_ADDR_SIZE,
8948 ranges_by_label[lab_idx].end,
8949 NULL);
8952 else
8954 dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
8955 dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
8956 fmt = start_fmt;
8961 /* Data structure containing information about input files. */
8962 struct file_info
8964 const char *path; /* Complete file name. */
8965 const char *fname; /* File name part. */
8966 int length; /* Length of entire string. */
8967 struct dwarf_file_data * file_idx; /* Index in input file table. */
8968 int dir_idx; /* Index in directory table. */
8971 /* Data structure containing information about directories with source
8972 files. */
8973 struct dir_info
8975 const char *path; /* Path including directory name. */
8976 int length; /* Path length. */
8977 int prefix; /* Index of directory entry which is a prefix. */
8978 int count; /* Number of files in this directory. */
8979 int dir_idx; /* Index of directory used as base. */
8982 /* Callback function for file_info comparison. We sort by looking at
8983 the directories in the path. */
8985 static int
8986 file_info_cmp (const void *p1, const void *p2)
8988 const struct file_info *const s1 = (const struct file_info *) p1;
8989 const struct file_info *const s2 = (const struct file_info *) p2;
8990 const unsigned char *cp1;
8991 const unsigned char *cp2;
8993 /* Take care of file names without directories. We need to make sure that
8994 we return consistent values to qsort since some will get confused if
8995 we return the same value when identical operands are passed in opposite
8996 orders. So if neither has a directory, return 0 and otherwise return
8997 1 or -1 depending on which one has the directory. */
8998 if ((s1->path == s1->fname || s2->path == s2->fname))
8999 return (s2->path == s2->fname) - (s1->path == s1->fname);
9001 cp1 = (const unsigned char *) s1->path;
9002 cp2 = (const unsigned char *) s2->path;
9004 while (1)
9006 ++cp1;
9007 ++cp2;
9008 /* Reached the end of the first path? If so, handle like above. */
9009 if ((cp1 == (const unsigned char *) s1->fname)
9010 || (cp2 == (const unsigned char *) s2->fname))
9011 return ((cp2 == (const unsigned char *) s2->fname)
9012 - (cp1 == (const unsigned char *) s1->fname));
9014 /* Character of current path component the same? */
9015 else if (*cp1 != *cp2)
9016 return *cp1 - *cp2;
9020 struct file_name_acquire_data
9022 struct file_info *files;
9023 int used_files;
9024 int max_files;
9027 /* Traversal function for the hash table. */
9029 static int
9030 file_name_acquire (void ** slot, void *data)
9032 struct file_name_acquire_data *fnad = (struct file_name_acquire_data *) data;
9033 struct dwarf_file_data *d = (struct dwarf_file_data *) *slot;
9034 struct file_info *fi;
9035 const char *f;
9037 gcc_assert (fnad->max_files >= d->emitted_number);
9039 if (! d->emitted_number)
9040 return 1;
9042 gcc_assert (fnad->max_files != fnad->used_files);
9044 fi = fnad->files + fnad->used_files++;
9046 /* Skip all leading "./". */
9047 f = d->filename;
9048 while (f[0] == '.' && IS_DIR_SEPARATOR (f[1]))
9049 f += 2;
9051 /* Create a new array entry. */
9052 fi->path = f;
9053 fi->length = strlen (f);
9054 fi->file_idx = d;
9056 /* Search for the file name part. */
9057 f = strrchr (f, DIR_SEPARATOR);
9058 #if defined (DIR_SEPARATOR_2)
9060 char *g = strrchr (fi->path, DIR_SEPARATOR_2);
9062 if (g != NULL)
9064 if (f == NULL || f < g)
9065 f = g;
9068 #endif
9070 fi->fname = f == NULL ? fi->path : f + 1;
9071 return 1;
9074 /* Output the directory table and the file name table. We try to minimize
9075 the total amount of memory needed. A heuristic is used to avoid large
9076 slowdowns with many input files. */
9078 static void
9079 output_file_names (void)
9081 struct file_name_acquire_data fnad;
9082 int numfiles;
9083 struct file_info *files;
9084 struct dir_info *dirs;
9085 int *saved;
9086 int *savehere;
9087 int *backmap;
9088 int ndirs;
9089 int idx_offset;
9090 int i;
9092 if (!last_emitted_file)
9094 dw2_asm_output_data (1, 0, "End directory table");
9095 dw2_asm_output_data (1, 0, "End file name table");
9096 return;
9099 numfiles = last_emitted_file->emitted_number;
9101 /* Allocate the various arrays we need. */
9102 files = XALLOCAVEC (struct file_info, numfiles);
9103 dirs = XALLOCAVEC (struct dir_info, numfiles);
9105 fnad.files = files;
9106 fnad.used_files = 0;
9107 fnad.max_files = numfiles;
9108 htab_traverse (file_table, file_name_acquire, &fnad);
9109 gcc_assert (fnad.used_files == fnad.max_files);
9111 qsort (files, numfiles, sizeof (files[0]), file_info_cmp);
9113 /* Find all the different directories used. */
9114 dirs[0].path = files[0].path;
9115 dirs[0].length = files[0].fname - files[0].path;
9116 dirs[0].prefix = -1;
9117 dirs[0].count = 1;
9118 dirs[0].dir_idx = 0;
9119 files[0].dir_idx = 0;
9120 ndirs = 1;
9122 for (i = 1; i < numfiles; i++)
9123 if (files[i].fname - files[i].path == dirs[ndirs - 1].length
9124 && memcmp (dirs[ndirs - 1].path, files[i].path,
9125 dirs[ndirs - 1].length) == 0)
9127 /* Same directory as last entry. */
9128 files[i].dir_idx = ndirs - 1;
9129 ++dirs[ndirs - 1].count;
9131 else
9133 int j;
9135 /* This is a new directory. */
9136 dirs[ndirs].path = files[i].path;
9137 dirs[ndirs].length = files[i].fname - files[i].path;
9138 dirs[ndirs].count = 1;
9139 dirs[ndirs].dir_idx = ndirs;
9140 files[i].dir_idx = ndirs;
9142 /* Search for a prefix. */
9143 dirs[ndirs].prefix = -1;
9144 for (j = 0; j < ndirs; j++)
9145 if (dirs[j].length < dirs[ndirs].length
9146 && dirs[j].length > 1
9147 && (dirs[ndirs].prefix == -1
9148 || dirs[j].length > dirs[dirs[ndirs].prefix].length)
9149 && memcmp (dirs[j].path, dirs[ndirs].path, dirs[j].length) == 0)
9150 dirs[ndirs].prefix = j;
9152 ++ndirs;
9155 /* Now to the actual work. We have to find a subset of the directories which
9156 allow expressing the file name using references to the directory table
9157 with the least amount of characters. We do not do an exhaustive search
9158 where we would have to check out every combination of every single
9159 possible prefix. Instead we use a heuristic which provides nearly optimal
9160 results in most cases and never is much off. */
9161 saved = XALLOCAVEC (int, ndirs);
9162 savehere = XALLOCAVEC (int, ndirs);
9164 memset (saved, '\0', ndirs * sizeof (saved[0]));
9165 for (i = 0; i < ndirs; i++)
9167 int j;
9168 int total;
9170 /* We can always save some space for the current directory. But this
9171 does not mean it will be enough to justify adding the directory. */
9172 savehere[i] = dirs[i].length;
9173 total = (savehere[i] - saved[i]) * dirs[i].count;
9175 for (j = i + 1; j < ndirs; j++)
9177 savehere[j] = 0;
9178 if (saved[j] < dirs[i].length)
9180 /* Determine whether the dirs[i] path is a prefix of the
9181 dirs[j] path. */
9182 int k;
9184 k = dirs[j].prefix;
9185 while (k != -1 && k != (int) i)
9186 k = dirs[k].prefix;
9188 if (k == (int) i)
9190 /* Yes it is. We can possibly save some memory by
9191 writing the filenames in dirs[j] relative to
9192 dirs[i]. */
9193 savehere[j] = dirs[i].length;
9194 total += (savehere[j] - saved[j]) * dirs[j].count;
9199 /* Check whether we can save enough to justify adding the dirs[i]
9200 directory. */
9201 if (total > dirs[i].length + 1)
9203 /* It's worthwhile adding. */
9204 for (j = i; j < ndirs; j++)
9205 if (savehere[j] > 0)
9207 /* Remember how much we saved for this directory so far. */
9208 saved[j] = savehere[j];
9210 /* Remember the prefix directory. */
9211 dirs[j].dir_idx = i;
9216 /* Emit the directory name table. */
9217 idx_offset = dirs[0].length > 0 ? 1 : 0;
9218 for (i = 1 - idx_offset; i < ndirs; i++)
9219 dw2_asm_output_nstring (dirs[i].path,
9220 dirs[i].length
9221 - !DWARF2_DIR_SHOULD_END_WITH_SEPARATOR,
9222 "Directory Entry: %#x", i + idx_offset);
9224 dw2_asm_output_data (1, 0, "End directory table");
9226 /* We have to emit them in the order of emitted_number since that's
9227 used in the debug info generation. To do this efficiently we
9228 generate a back-mapping of the indices first. */
9229 backmap = XALLOCAVEC (int, numfiles);
9230 for (i = 0; i < numfiles; i++)
9231 backmap[files[i].file_idx->emitted_number - 1] = i;
9233 /* Now write all the file names. */
9234 for (i = 0; i < numfiles; i++)
9236 int file_idx = backmap[i];
9237 int dir_idx = dirs[files[file_idx].dir_idx].dir_idx;
9239 #ifdef VMS_DEBUGGING_INFO
9240 #define MAX_VMS_VERSION_LEN 6 /* ";32768" */
9242 /* Setting these fields can lead to debugger miscomparisons,
9243 but VMS Debug requires them to be set correctly. */
9245 int ver;
9246 long long cdt;
9247 long siz;
9248 int maxfilelen = strlen (files[file_idx].path)
9249 + dirs[dir_idx].length
9250 + MAX_VMS_VERSION_LEN + 1;
9251 char *filebuf = XALLOCAVEC (char, maxfilelen);
9253 vms_file_stats_name (files[file_idx].path, 0, 0, 0, &ver);
9254 snprintf (filebuf, maxfilelen, "%s;%d",
9255 files[file_idx].path + dirs[dir_idx].length, ver);
9257 dw2_asm_output_nstring
9258 (filebuf, -1, "File Entry: %#x", (unsigned) i + 1);
9260 /* Include directory index. */
9261 dw2_asm_output_data_uleb128 (dir_idx + idx_offset, NULL);
9263 /* Modification time. */
9264 dw2_asm_output_data_uleb128
9265 ((vms_file_stats_name (files[file_idx].path, &cdt, 0, 0, 0) == 0)
9266 ? cdt : 0,
9267 NULL);
9269 /* File length in bytes. */
9270 dw2_asm_output_data_uleb128
9271 ((vms_file_stats_name (files[file_idx].path, 0, &siz, 0, 0) == 0)
9272 ? siz : 0,
9273 NULL);
9274 #else
9275 dw2_asm_output_nstring (files[file_idx].path + dirs[dir_idx].length, -1,
9276 "File Entry: %#x", (unsigned) i + 1);
9278 /* Include directory index. */
9279 dw2_asm_output_data_uleb128 (dir_idx + idx_offset, NULL);
9281 /* Modification time. */
9282 dw2_asm_output_data_uleb128 (0, NULL);
9284 /* File length in bytes. */
9285 dw2_asm_output_data_uleb128 (0, NULL);
9286 #endif /* VMS_DEBUGGING_INFO */
9289 dw2_asm_output_data (1, 0, "End file name table");
9293 /* Output one line number table into the .debug_line section. */
9295 static void
9296 output_one_line_info_table (dw_line_info_table *table)
9298 char line_label[MAX_ARTIFICIAL_LABEL_BYTES];
9299 unsigned int current_line = 1;
9300 bool current_is_stmt = DWARF_LINE_DEFAULT_IS_STMT_START;
9301 dw_line_info_entry *ent;
9302 size_t i;
9304 FOR_EACH_VEC_ELT (dw_line_info_entry, table->entries, i, ent)
9306 switch (ent->opcode)
9308 case LI_set_address:
9309 /* ??? Unfortunately, we have little choice here currently, and
9310 must always use the most general form. GCC does not know the
9311 address delta itself, so we can't use DW_LNS_advance_pc. Many
9312 ports do have length attributes which will give an upper bound
9313 on the address range. We could perhaps use length attributes
9314 to determine when it is safe to use DW_LNS_fixed_advance_pc. */
9315 ASM_GENERATE_INTERNAL_LABEL (line_label, LINE_CODE_LABEL, ent->val);
9317 /* This can handle any delta. This takes
9318 4+DWARF2_ADDR_SIZE bytes. */
9319 dw2_asm_output_data (1, 0, "set address %s", line_label);
9320 dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
9321 dw2_asm_output_data (1, DW_LNE_set_address, NULL);
9322 dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
9323 break;
9325 case LI_set_line:
9326 if (ent->val == current_line)
9328 /* We still need to start a new row, so output a copy insn. */
9329 dw2_asm_output_data (1, DW_LNS_copy,
9330 "copy line %u", current_line);
9332 else
9334 int line_offset = ent->val - current_line;
9335 int line_delta = line_offset - DWARF_LINE_BASE;
9337 current_line = ent->val;
9338 if (line_delta >= 0 && line_delta < (DWARF_LINE_RANGE - 1))
9340 /* This can handle deltas from -10 to 234, using the current
9341 definitions of DWARF_LINE_BASE and DWARF_LINE_RANGE.
9342 This takes 1 byte. */
9343 dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE + line_delta,
9344 "line %u", current_line);
9346 else
9348 /* This can handle any delta. This takes at least 4 bytes,
9349 depending on the value being encoded. */
9350 dw2_asm_output_data (1, DW_LNS_advance_line,
9351 "advance to line %u", current_line);
9352 dw2_asm_output_data_sleb128 (line_offset, NULL);
9353 dw2_asm_output_data (1, DW_LNS_copy, NULL);
9356 break;
9358 case LI_set_file:
9359 dw2_asm_output_data (1, DW_LNS_set_file, "set file %u", ent->val);
9360 dw2_asm_output_data_uleb128 (ent->val, "%u", ent->val);
9361 break;
9363 case LI_set_column:
9364 dw2_asm_output_data (1, DW_LNS_set_column, "column %u", ent->val);
9365 dw2_asm_output_data_uleb128 (ent->val, "%u", ent->val);
9366 break;
9368 case LI_negate_stmt:
9369 current_is_stmt = !current_is_stmt;
9370 dw2_asm_output_data (1, DW_LNS_negate_stmt,
9371 "is_stmt %d", current_is_stmt);
9372 break;
9374 case LI_set_prologue_end:
9375 dw2_asm_output_data (1, DW_LNS_set_prologue_end,
9376 "set prologue end");
9377 break;
9379 case LI_set_epilogue_begin:
9380 dw2_asm_output_data (1, DW_LNS_set_epilogue_begin,
9381 "set epilogue begin");
9382 break;
9384 case LI_set_discriminator:
9385 dw2_asm_output_data (1, 0, "discriminator %u", ent->val);
9386 dw2_asm_output_data_uleb128 (1 + size_of_uleb128 (ent->val), NULL);
9387 dw2_asm_output_data (1, DW_LNE_set_discriminator, NULL);
9388 dw2_asm_output_data_uleb128 (ent->val, NULL);
9389 break;
9393 /* Emit debug info for the address of the end of the table. */
9394 dw2_asm_output_data (1, 0, "set address %s", table->end_label);
9395 dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
9396 dw2_asm_output_data (1, DW_LNE_set_address, NULL);
9397 dw2_asm_output_addr (DWARF2_ADDR_SIZE, table->end_label, NULL);
9399 dw2_asm_output_data (1, 0, "end sequence");
9400 dw2_asm_output_data_uleb128 (1, NULL);
9401 dw2_asm_output_data (1, DW_LNE_end_sequence, NULL);
9404 /* Output the source line number correspondence information. This
9405 information goes into the .debug_line section. */
9407 static void
9408 output_line_info (void)
9410 char l1[20], l2[20], p1[20], p2[20];
9411 int ver = dwarf_version;
9412 bool saw_one = false;
9413 int opc;
9415 ASM_GENERATE_INTERNAL_LABEL (l1, LINE_NUMBER_BEGIN_LABEL, 0);
9416 ASM_GENERATE_INTERNAL_LABEL (l2, LINE_NUMBER_END_LABEL, 0);
9417 ASM_GENERATE_INTERNAL_LABEL (p1, LN_PROLOG_AS_LABEL, 0);
9418 ASM_GENERATE_INTERNAL_LABEL (p2, LN_PROLOG_END_LABEL, 0);
9420 if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
9421 dw2_asm_output_data (4, 0xffffffff,
9422 "Initial length escape value indicating 64-bit DWARF extension");
9423 dw2_asm_output_delta (DWARF_OFFSET_SIZE, l2, l1,
9424 "Length of Source Line Info");
9425 ASM_OUTPUT_LABEL (asm_out_file, l1);
9427 dw2_asm_output_data (2, ver, "DWARF Version");
9428 dw2_asm_output_delta (DWARF_OFFSET_SIZE, p2, p1, "Prolog Length");
9429 ASM_OUTPUT_LABEL (asm_out_file, p1);
9431 /* Define the architecture-dependent minimum instruction length (in bytes).
9432 In this implementation of DWARF, this field is used for information
9433 purposes only. Since GCC generates assembly language, we have no
9434 a priori knowledge of how many instruction bytes are generated for each
9435 source line, and therefore can use only the DW_LNE_set_address and
9436 DW_LNS_fixed_advance_pc line information commands. Accordingly, we fix
9437 this as '1', which is "correct enough" for all architectures,
9438 and don't let the target override. */
9439 dw2_asm_output_data (1, 1, "Minimum Instruction Length");
9441 if (ver >= 4)
9442 dw2_asm_output_data (1, DWARF_LINE_DEFAULT_MAX_OPS_PER_INSN,
9443 "Maximum Operations Per Instruction");
9444 dw2_asm_output_data (1, DWARF_LINE_DEFAULT_IS_STMT_START,
9445 "Default is_stmt_start flag");
9446 dw2_asm_output_data (1, DWARF_LINE_BASE,
9447 "Line Base Value (Special Opcodes)");
9448 dw2_asm_output_data (1, DWARF_LINE_RANGE,
9449 "Line Range Value (Special Opcodes)");
9450 dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE,
9451 "Special Opcode Base");
9453 for (opc = 1; opc < DWARF_LINE_OPCODE_BASE; opc++)
9455 int n_op_args;
9456 switch (opc)
9458 case DW_LNS_advance_pc:
9459 case DW_LNS_advance_line:
9460 case DW_LNS_set_file:
9461 case DW_LNS_set_column:
9462 case DW_LNS_fixed_advance_pc:
9463 case DW_LNS_set_isa:
9464 n_op_args = 1;
9465 break;
9466 default:
9467 n_op_args = 0;
9468 break;
9471 dw2_asm_output_data (1, n_op_args, "opcode: %#x has %d args",
9472 opc, n_op_args);
9475 /* Write out the information about the files we use. */
9476 output_file_names ();
9477 ASM_OUTPUT_LABEL (asm_out_file, p2);
9479 if (separate_line_info)
9481 dw_line_info_table *table;
9482 size_t i;
9484 FOR_EACH_VEC_ELT (dw_line_info_table_p, separate_line_info, i, table)
9485 if (table->in_use)
9487 output_one_line_info_table (table);
9488 saw_one = true;
9491 if (cold_text_section_line_info && cold_text_section_line_info->in_use)
9493 output_one_line_info_table (cold_text_section_line_info);
9494 saw_one = true;
9497 /* ??? Some Darwin linkers crash on a .debug_line section with no
9498 sequences. Further, merely a DW_LNE_end_sequence entry is not
9499 sufficient -- the address column must also be initialized.
9500 Make sure to output at least one set_address/end_sequence pair,
9501 choosing .text since that section is always present. */
9502 if (text_section_line_info->in_use || !saw_one)
9503 output_one_line_info_table (text_section_line_info);
9505 /* Output the marker for the end of the line number info. */
9506 ASM_OUTPUT_LABEL (asm_out_file, l2);
9509 /* Given a pointer to a tree node for some base type, return a pointer to
9510 a DIE that describes the given type.
9512 This routine must only be called for GCC type nodes that correspond to
9513 Dwarf base (fundamental) types. */
9515 static dw_die_ref
9516 base_type_die (tree type)
9518 dw_die_ref base_type_result;
9519 enum dwarf_type encoding;
9521 if (TREE_CODE (type) == ERROR_MARK || TREE_CODE (type) == VOID_TYPE)
9522 return 0;
9524 /* If this is a subtype that should not be emitted as a subrange type,
9525 use the base type. See subrange_type_for_debug_p. */
9526 if (TREE_CODE (type) == INTEGER_TYPE && TREE_TYPE (type) != NULL_TREE)
9527 type = TREE_TYPE (type);
9529 switch (TREE_CODE (type))
9531 case INTEGER_TYPE:
9532 if ((dwarf_version >= 4 || !dwarf_strict)
9533 && TYPE_NAME (type)
9534 && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
9535 && DECL_IS_BUILTIN (TYPE_NAME (type))
9536 && DECL_NAME (TYPE_NAME (type)))
9538 const char *name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type)));
9539 if (strcmp (name, "char16_t") == 0
9540 || strcmp (name, "char32_t") == 0)
9542 encoding = DW_ATE_UTF;
9543 break;
9546 if (TYPE_STRING_FLAG (type))
9548 if (TYPE_UNSIGNED (type))
9549 encoding = DW_ATE_unsigned_char;
9550 else
9551 encoding = DW_ATE_signed_char;
9553 else if (TYPE_UNSIGNED (type))
9554 encoding = DW_ATE_unsigned;
9555 else
9556 encoding = DW_ATE_signed;
9557 break;
9559 case REAL_TYPE:
9560 if (DECIMAL_FLOAT_MODE_P (TYPE_MODE (type)))
9562 if (dwarf_version >= 3 || !dwarf_strict)
9563 encoding = DW_ATE_decimal_float;
9564 else
9565 encoding = DW_ATE_lo_user;
9567 else
9568 encoding = DW_ATE_float;
9569 break;
9571 case FIXED_POINT_TYPE:
9572 if (!(dwarf_version >= 3 || !dwarf_strict))
9573 encoding = DW_ATE_lo_user;
9574 else if (TYPE_UNSIGNED (type))
9575 encoding = DW_ATE_unsigned_fixed;
9576 else
9577 encoding = DW_ATE_signed_fixed;
9578 break;
9580 /* Dwarf2 doesn't know anything about complex ints, so use
9581 a user defined type for it. */
9582 case COMPLEX_TYPE:
9583 if (TREE_CODE (TREE_TYPE (type)) == REAL_TYPE)
9584 encoding = DW_ATE_complex_float;
9585 else
9586 encoding = DW_ATE_lo_user;
9587 break;
9589 case BOOLEAN_TYPE:
9590 /* GNU FORTRAN/Ada/C++ BOOLEAN type. */
9591 encoding = DW_ATE_boolean;
9592 break;
9594 default:
9595 /* No other TREE_CODEs are Dwarf fundamental types. */
9596 gcc_unreachable ();
9599 base_type_result = new_die (DW_TAG_base_type, comp_unit_die (), type);
9601 add_AT_unsigned (base_type_result, DW_AT_byte_size,
9602 int_size_in_bytes (type));
9603 add_AT_unsigned (base_type_result, DW_AT_encoding, encoding);
9605 return base_type_result;
9608 /* Given a pointer to an arbitrary ..._TYPE tree node, return nonzero if the
9609 given input type is a Dwarf "fundamental" type. Otherwise return null. */
9611 static inline int
9612 is_base_type (tree type)
9614 switch (TREE_CODE (type))
9616 case ERROR_MARK:
9617 case VOID_TYPE:
9618 case INTEGER_TYPE:
9619 case REAL_TYPE:
9620 case FIXED_POINT_TYPE:
9621 case COMPLEX_TYPE:
9622 case BOOLEAN_TYPE:
9623 return 1;
9625 case ARRAY_TYPE:
9626 case RECORD_TYPE:
9627 case UNION_TYPE:
9628 case QUAL_UNION_TYPE:
9629 case ENUMERAL_TYPE:
9630 case FUNCTION_TYPE:
9631 case METHOD_TYPE:
9632 case POINTER_TYPE:
9633 case REFERENCE_TYPE:
9634 case NULLPTR_TYPE:
9635 case OFFSET_TYPE:
9636 case LANG_TYPE:
9637 case VECTOR_TYPE:
9638 return 0;
9640 default:
9641 gcc_unreachable ();
9644 return 0;
9647 /* Given a pointer to a tree node, assumed to be some kind of a ..._TYPE
9648 node, return the size in bits for the type if it is a constant, or else
9649 return the alignment for the type if the type's size is not constant, or
9650 else return BITS_PER_WORD if the type actually turns out to be an
9651 ERROR_MARK node. */
9653 static inline unsigned HOST_WIDE_INT
9654 simple_type_size_in_bits (const_tree type)
9656 if (TREE_CODE (type) == ERROR_MARK)
9657 return BITS_PER_WORD;
9658 else if (TYPE_SIZE (type) == NULL_TREE)
9659 return 0;
9660 else if (host_integerp (TYPE_SIZE (type), 1))
9661 return tree_low_cst (TYPE_SIZE (type), 1);
9662 else
9663 return TYPE_ALIGN (type);
9666 /* Similarly, but return a double_int instead of UHWI. */
9668 static inline double_int
9669 double_int_type_size_in_bits (const_tree type)
9671 if (TREE_CODE (type) == ERROR_MARK)
9672 return uhwi_to_double_int (BITS_PER_WORD);
9673 else if (TYPE_SIZE (type) == NULL_TREE)
9674 return double_int_zero;
9675 else if (TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST)
9676 return tree_to_double_int (TYPE_SIZE (type));
9677 else
9678 return uhwi_to_double_int (TYPE_ALIGN (type));
9681 /* Given a pointer to a tree node for a subrange type, return a pointer
9682 to a DIE that describes the given type. */
9684 static dw_die_ref
9685 subrange_type_die (tree type, tree low, tree high, dw_die_ref context_die)
9687 dw_die_ref subrange_die;
9688 const HOST_WIDE_INT size_in_bytes = int_size_in_bytes (type);
9690 if (context_die == NULL)
9691 context_die = comp_unit_die ();
9693 subrange_die = new_die (DW_TAG_subrange_type, context_die, type);
9695 if (int_size_in_bytes (TREE_TYPE (type)) != size_in_bytes)
9697 /* The size of the subrange type and its base type do not match,
9698 so we need to generate a size attribute for the subrange type. */
9699 add_AT_unsigned (subrange_die, DW_AT_byte_size, size_in_bytes);
9702 if (low)
9703 add_bound_info (subrange_die, DW_AT_lower_bound, low);
9704 if (high)
9705 add_bound_info (subrange_die, DW_AT_upper_bound, high);
9707 return subrange_die;
9710 /* Given a pointer to an arbitrary ..._TYPE tree node, return a debugging
9711 entry that chains various modifiers in front of the given type. */
9713 static dw_die_ref
9714 modified_type_die (tree type, int is_const_type, int is_volatile_type,
9715 dw_die_ref context_die)
9717 enum tree_code code = TREE_CODE (type);
9718 dw_die_ref mod_type_die;
9719 dw_die_ref sub_die = NULL;
9720 tree item_type = NULL;
9721 tree qualified_type;
9722 tree name, low, high;
9724 if (code == ERROR_MARK)
9725 return NULL;
9727 /* See if we already have the appropriately qualified variant of
9728 this type. */
9729 qualified_type
9730 = get_qualified_type (type,
9731 ((is_const_type ? TYPE_QUAL_CONST : 0)
9732 | (is_volatile_type ? TYPE_QUAL_VOLATILE : 0)));
9734 if (qualified_type == sizetype
9735 && TYPE_NAME (qualified_type)
9736 && TREE_CODE (TYPE_NAME (qualified_type)) == TYPE_DECL)
9738 tree t = TREE_TYPE (TYPE_NAME (qualified_type));
9740 gcc_checking_assert (TREE_CODE (t) == INTEGER_TYPE
9741 && TYPE_PRECISION (t)
9742 == TYPE_PRECISION (qualified_type)
9743 && TYPE_UNSIGNED (t)
9744 == TYPE_UNSIGNED (qualified_type));
9745 qualified_type = t;
9748 /* If we do, then we can just use its DIE, if it exists. */
9749 if (qualified_type)
9751 mod_type_die = lookup_type_die (qualified_type);
9752 if (mod_type_die)
9753 return mod_type_die;
9756 name = qualified_type ? TYPE_NAME (qualified_type) : NULL;
9758 /* Handle C typedef types. */
9759 if (name && TREE_CODE (name) == TYPE_DECL && DECL_ORIGINAL_TYPE (name)
9760 && !DECL_ARTIFICIAL (name))
9762 tree dtype = TREE_TYPE (name);
9764 if (qualified_type == dtype)
9766 /* For a named type, use the typedef. */
9767 gen_type_die (qualified_type, context_die);
9768 return lookup_type_die (qualified_type);
9770 else if (is_const_type < TYPE_READONLY (dtype)
9771 || is_volatile_type < TYPE_VOLATILE (dtype)
9772 || (is_const_type <= TYPE_READONLY (dtype)
9773 && is_volatile_type <= TYPE_VOLATILE (dtype)
9774 && DECL_ORIGINAL_TYPE (name) != type))
9775 /* cv-unqualified version of named type. Just use the unnamed
9776 type to which it refers. */
9777 return modified_type_die (DECL_ORIGINAL_TYPE (name),
9778 is_const_type, is_volatile_type,
9779 context_die);
9780 /* Else cv-qualified version of named type; fall through. */
9783 if (is_const_type
9784 /* If both is_const_type and is_volatile_type, prefer the path
9785 which leads to a qualified type. */
9786 && (!is_volatile_type
9787 || get_qualified_type (type, TYPE_QUAL_CONST) == NULL_TREE
9788 || get_qualified_type (type, TYPE_QUAL_VOLATILE) != NULL_TREE))
9790 mod_type_die = new_die (DW_TAG_const_type, comp_unit_die (), type);
9791 sub_die = modified_type_die (type, 0, is_volatile_type, context_die);
9793 else if (is_volatile_type)
9795 mod_type_die = new_die (DW_TAG_volatile_type, comp_unit_die (), type);
9796 sub_die = modified_type_die (type, is_const_type, 0, context_die);
9798 else if (code == POINTER_TYPE)
9800 mod_type_die = new_die (DW_TAG_pointer_type, comp_unit_die (), type);
9801 add_AT_unsigned (mod_type_die, DW_AT_byte_size,
9802 simple_type_size_in_bits (type) / BITS_PER_UNIT);
9803 item_type = TREE_TYPE (type);
9804 if (!ADDR_SPACE_GENERIC_P (TYPE_ADDR_SPACE (item_type)))
9805 add_AT_unsigned (mod_type_die, DW_AT_address_class,
9806 TYPE_ADDR_SPACE (item_type));
9808 else if (code == REFERENCE_TYPE)
9810 if (TYPE_REF_IS_RVALUE (type) && dwarf_version >= 4)
9811 mod_type_die = new_die (DW_TAG_rvalue_reference_type, comp_unit_die (),
9812 type);
9813 else
9814 mod_type_die = new_die (DW_TAG_reference_type, comp_unit_die (), type);
9815 add_AT_unsigned (mod_type_die, DW_AT_byte_size,
9816 simple_type_size_in_bits (type) / BITS_PER_UNIT);
9817 item_type = TREE_TYPE (type);
9818 if (!ADDR_SPACE_GENERIC_P (TYPE_ADDR_SPACE (item_type)))
9819 add_AT_unsigned (mod_type_die, DW_AT_address_class,
9820 TYPE_ADDR_SPACE (item_type));
9822 else if (code == INTEGER_TYPE
9823 && TREE_TYPE (type) != NULL_TREE
9824 && subrange_type_for_debug_p (type, &low, &high))
9826 mod_type_die = subrange_type_die (type, low, high, context_die);
9827 item_type = TREE_TYPE (type);
9829 else if (is_base_type (type))
9830 mod_type_die = base_type_die (type);
9831 else
9833 gen_type_die (type, context_die);
9835 /* We have to get the type_main_variant here (and pass that to the
9836 `lookup_type_die' routine) because the ..._TYPE node we have
9837 might simply be a *copy* of some original type node (where the
9838 copy was created to help us keep track of typedef names) and
9839 that copy might have a different TYPE_UID from the original
9840 ..._TYPE node. */
9841 if (TREE_CODE (type) != VECTOR_TYPE)
9842 return lookup_type_die (type_main_variant (type));
9843 else
9844 /* Vectors have the debugging information in the type,
9845 not the main variant. */
9846 return lookup_type_die (type);
9849 /* Builtin types don't have a DECL_ORIGINAL_TYPE. For those,
9850 don't output a DW_TAG_typedef, since there isn't one in the
9851 user's program; just attach a DW_AT_name to the type.
9852 Don't attach a DW_AT_name to DW_TAG_const_type or DW_TAG_volatile_type
9853 if the base type already has the same name. */
9854 if (name
9855 && ((TREE_CODE (name) != TYPE_DECL
9856 && (qualified_type == TYPE_MAIN_VARIANT (type)
9857 || (!is_const_type && !is_volatile_type)))
9858 || (TREE_CODE (name) == TYPE_DECL
9859 && TREE_TYPE (name) == qualified_type
9860 && DECL_NAME (name))))
9862 if (TREE_CODE (name) == TYPE_DECL)
9863 /* Could just call add_name_and_src_coords_attributes here,
9864 but since this is a builtin type it doesn't have any
9865 useful source coordinates anyway. */
9866 name = DECL_NAME (name);
9867 add_name_attribute (mod_type_die, IDENTIFIER_POINTER (name));
9868 add_gnat_descriptive_type_attribute (mod_type_die, type, context_die);
9869 if (TYPE_ARTIFICIAL (type))
9870 add_AT_flag (mod_type_die, DW_AT_artificial, 1);
9872 /* This probably indicates a bug. */
9873 else if (mod_type_die && mod_type_die->die_tag == DW_TAG_base_type)
9874 add_name_attribute (mod_type_die, "__unknown__");
9876 if (qualified_type)
9877 equate_type_number_to_die (qualified_type, mod_type_die);
9879 if (item_type)
9880 /* We must do this after the equate_type_number_to_die call, in case
9881 this is a recursive type. This ensures that the modified_type_die
9882 recursion will terminate even if the type is recursive. Recursive
9883 types are possible in Ada. */
9884 sub_die = modified_type_die (item_type,
9885 TYPE_READONLY (item_type),
9886 TYPE_VOLATILE (item_type),
9887 context_die);
9889 if (sub_die != NULL)
9890 add_AT_die_ref (mod_type_die, DW_AT_type, sub_die);
9892 return mod_type_die;
9895 /* Generate DIEs for the generic parameters of T.
9896 T must be either a generic type or a generic function.
9897 See http://gcc.gnu.org/wiki/TemplateParmsDwarf for more. */
9899 static void
9900 gen_generic_params_dies (tree t)
9902 tree parms, args;
9903 int parms_num, i;
9904 dw_die_ref die = NULL;
9906 if (!t || (TYPE_P (t) && !COMPLETE_TYPE_P (t)))
9907 return;
9909 if (TYPE_P (t))
9910 die = lookup_type_die (t);
9911 else if (DECL_P (t))
9912 die = lookup_decl_die (t);
9914 gcc_assert (die);
9916 parms = lang_hooks.get_innermost_generic_parms (t);
9917 if (!parms)
9918 /* T has no generic parameter. It means T is neither a generic type
9919 or function. End of story. */
9920 return;
9922 parms_num = TREE_VEC_LENGTH (parms);
9923 args = lang_hooks.get_innermost_generic_args (t);
9924 for (i = 0; i < parms_num; i++)
9926 tree parm, arg, arg_pack_elems;
9928 parm = TREE_VEC_ELT (parms, i);
9929 arg = TREE_VEC_ELT (args, i);
9930 arg_pack_elems = lang_hooks.types.get_argument_pack_elems (arg);
9931 gcc_assert (parm && TREE_VALUE (parm) && arg);
9933 if (parm && TREE_VALUE (parm) && arg)
9935 /* If PARM represents a template parameter pack,
9936 emit a DW_TAG_GNU_template_parameter_pack DIE, followed
9937 by DW_TAG_template_*_parameter DIEs for the argument
9938 pack elements of ARG. Note that ARG would then be
9939 an argument pack. */
9940 if (arg_pack_elems)
9941 template_parameter_pack_die (TREE_VALUE (parm),
9942 arg_pack_elems,
9943 die);
9944 else
9945 generic_parameter_die (TREE_VALUE (parm), arg,
9946 true /* Emit DW_AT_name */, die);
9951 /* Create and return a DIE for PARM which should be
9952 the representation of a generic type parameter.
9953 For instance, in the C++ front end, PARM would be a template parameter.
9954 ARG is the argument to PARM.
9955 EMIT_NAME_P if tree, the DIE will have DW_AT_name attribute set to the
9956 name of the PARM.
9957 PARENT_DIE is the parent DIE which the new created DIE should be added to,
9958 as a child node. */
9960 static dw_die_ref
9961 generic_parameter_die (tree parm, tree arg,
9962 bool emit_name_p,
9963 dw_die_ref parent_die)
9965 dw_die_ref tmpl_die = NULL;
9966 const char *name = NULL;
9968 if (!parm || !DECL_NAME (parm) || !arg)
9969 return NULL;
9971 /* We support non-type generic parameters and arguments,
9972 type generic parameters and arguments, as well as
9973 generic generic parameters (a.k.a. template template parameters in C++)
9974 and arguments. */
9975 if (TREE_CODE (parm) == PARM_DECL)
9976 /* PARM is a nontype generic parameter */
9977 tmpl_die = new_die (DW_TAG_template_value_param, parent_die, parm);
9978 else if (TREE_CODE (parm) == TYPE_DECL)
9979 /* PARM is a type generic parameter. */
9980 tmpl_die = new_die (DW_TAG_template_type_param, parent_die, parm);
9981 else if (lang_hooks.decls.generic_generic_parameter_decl_p (parm))
9982 /* PARM is a generic generic parameter.
9983 Its DIE is a GNU extension. It shall have a
9984 DW_AT_name attribute to represent the name of the template template
9985 parameter, and a DW_AT_GNU_template_name attribute to represent the
9986 name of the template template argument. */
9987 tmpl_die = new_die (DW_TAG_GNU_template_template_param,
9988 parent_die, parm);
9989 else
9990 gcc_unreachable ();
9992 if (tmpl_die)
9994 tree tmpl_type;
9996 /* If PARM is a generic parameter pack, it means we are
9997 emitting debug info for a template argument pack element.
9998 In other terms, ARG is a template argument pack element.
9999 In that case, we don't emit any DW_AT_name attribute for
10000 the die. */
10001 if (emit_name_p)
10003 name = IDENTIFIER_POINTER (DECL_NAME (parm));
10004 gcc_assert (name);
10005 add_AT_string (tmpl_die, DW_AT_name, name);
10008 if (!lang_hooks.decls.generic_generic_parameter_decl_p (parm))
10010 /* DWARF3, 5.6.8 says if PARM is a non-type generic parameter
10011 TMPL_DIE should have a child DW_AT_type attribute that is set
10012 to the type of the argument to PARM, which is ARG.
10013 If PARM is a type generic parameter, TMPL_DIE should have a
10014 child DW_AT_type that is set to ARG. */
10015 tmpl_type = TYPE_P (arg) ? arg : TREE_TYPE (arg);
10016 add_type_attribute (tmpl_die, tmpl_type, 0,
10017 TREE_THIS_VOLATILE (tmpl_type),
10018 parent_die);
10020 else
10022 /* So TMPL_DIE is a DIE representing a
10023 a generic generic template parameter, a.k.a template template
10024 parameter in C++ and arg is a template. */
10026 /* The DW_AT_GNU_template_name attribute of the DIE must be set
10027 to the name of the argument. */
10028 name = dwarf2_name (TYPE_P (arg) ? TYPE_NAME (arg) : arg, 1);
10029 if (name)
10030 add_AT_string (tmpl_die, DW_AT_GNU_template_name, name);
10033 if (TREE_CODE (parm) == PARM_DECL)
10034 /* So PARM is a non-type generic parameter.
10035 DWARF3 5.6.8 says we must set a DW_AT_const_value child
10036 attribute of TMPL_DIE which value represents the value
10037 of ARG.
10038 We must be careful here:
10039 The value of ARG might reference some function decls.
10040 We might currently be emitting debug info for a generic
10041 type and types are emitted before function decls, we don't
10042 know if the function decls referenced by ARG will actually be
10043 emitted after cgraph computations.
10044 So must defer the generation of the DW_AT_const_value to
10045 after cgraph is ready. */
10046 append_entry_to_tmpl_value_parm_die_table (tmpl_die, arg);
10049 return tmpl_die;
10052 /* Generate and return a DW_TAG_GNU_template_parameter_pack DIE representing.
10053 PARM_PACK must be a template parameter pack. The returned DIE
10054 will be child DIE of PARENT_DIE. */
10056 static dw_die_ref
10057 template_parameter_pack_die (tree parm_pack,
10058 tree parm_pack_args,
10059 dw_die_ref parent_die)
10061 dw_die_ref die;
10062 int j;
10064 gcc_assert (parent_die && parm_pack);
10066 die = new_die (DW_TAG_GNU_template_parameter_pack, parent_die, parm_pack);
10067 add_name_and_src_coords_attributes (die, parm_pack);
10068 for (j = 0; j < TREE_VEC_LENGTH (parm_pack_args); j++)
10069 generic_parameter_die (parm_pack,
10070 TREE_VEC_ELT (parm_pack_args, j),
10071 false /* Don't emit DW_AT_name */,
10072 die);
10073 return die;
10076 /* Given a pointer to an arbitrary ..._TYPE tree node, return true if it is
10077 an enumerated type. */
10079 static inline int
10080 type_is_enum (const_tree type)
10082 return TREE_CODE (type) == ENUMERAL_TYPE;
10085 /* Return the DBX register number described by a given RTL node. */
10087 static unsigned int
10088 dbx_reg_number (const_rtx rtl)
10090 unsigned regno = REGNO (rtl);
10092 gcc_assert (regno < FIRST_PSEUDO_REGISTER);
10094 #ifdef LEAF_REG_REMAP
10095 if (current_function_uses_only_leaf_regs)
10097 int leaf_reg = LEAF_REG_REMAP (regno);
10098 if (leaf_reg != -1)
10099 regno = (unsigned) leaf_reg;
10101 #endif
10103 return DBX_REGISTER_NUMBER (regno);
10106 /* Optionally add a DW_OP_piece term to a location description expression.
10107 DW_OP_piece is only added if the location description expression already
10108 doesn't end with DW_OP_piece. */
10110 static void
10111 add_loc_descr_op_piece (dw_loc_descr_ref *list_head, int size)
10113 dw_loc_descr_ref loc;
10115 if (*list_head != NULL)
10117 /* Find the end of the chain. */
10118 for (loc = *list_head; loc->dw_loc_next != NULL; loc = loc->dw_loc_next)
10121 if (loc->dw_loc_opc != DW_OP_piece)
10122 loc->dw_loc_next = new_loc_descr (DW_OP_piece, size, 0);
10126 /* Return a location descriptor that designates a machine register or
10127 zero if there is none. */
10129 static dw_loc_descr_ref
10130 reg_loc_descriptor (rtx rtl, enum var_init_status initialized)
10132 rtx regs;
10134 if (REGNO (rtl) >= FIRST_PSEUDO_REGISTER)
10135 return 0;
10137 /* We only use "frame base" when we're sure we're talking about the
10138 post-prologue local stack frame. We do this by *not* running
10139 register elimination until this point, and recognizing the special
10140 argument pointer and soft frame pointer rtx's.
10141 Use DW_OP_fbreg offset DW_OP_stack_value in this case. */
10142 if ((rtl == arg_pointer_rtx || rtl == frame_pointer_rtx)
10143 && eliminate_regs (rtl, VOIDmode, NULL_RTX) != rtl)
10145 dw_loc_descr_ref result = NULL;
10147 if (dwarf_version >= 4 || !dwarf_strict)
10149 result = mem_loc_descriptor (rtl, GET_MODE (rtl), VOIDmode,
10150 initialized);
10151 if (result)
10152 add_loc_descr (&result,
10153 new_loc_descr (DW_OP_stack_value, 0, 0));
10155 return result;
10158 regs = targetm.dwarf_register_span (rtl);
10160 if (hard_regno_nregs[REGNO (rtl)][GET_MODE (rtl)] > 1 || regs)
10161 return multiple_reg_loc_descriptor (rtl, regs, initialized);
10162 else
10163 return one_reg_loc_descriptor (dbx_reg_number (rtl), initialized);
10166 /* Return a location descriptor that designates a machine register for
10167 a given hard register number. */
10169 static dw_loc_descr_ref
10170 one_reg_loc_descriptor (unsigned int regno, enum var_init_status initialized)
10172 dw_loc_descr_ref reg_loc_descr;
10174 if (regno <= 31)
10175 reg_loc_descr
10176 = new_loc_descr ((enum dwarf_location_atom) (DW_OP_reg0 + regno), 0, 0);
10177 else
10178 reg_loc_descr = new_loc_descr (DW_OP_regx, regno, 0);
10180 if (initialized == VAR_INIT_STATUS_UNINITIALIZED)
10181 add_loc_descr (&reg_loc_descr, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
10183 return reg_loc_descr;
10186 /* Given an RTL of a register, return a location descriptor that
10187 designates a value that spans more than one register. */
10189 static dw_loc_descr_ref
10190 multiple_reg_loc_descriptor (rtx rtl, rtx regs,
10191 enum var_init_status initialized)
10193 int nregs, size, i;
10194 unsigned reg;
10195 dw_loc_descr_ref loc_result = NULL;
10197 reg = REGNO (rtl);
10198 #ifdef LEAF_REG_REMAP
10199 if (current_function_uses_only_leaf_regs)
10201 int leaf_reg = LEAF_REG_REMAP (reg);
10202 if (leaf_reg != -1)
10203 reg = (unsigned) leaf_reg;
10205 #endif
10206 gcc_assert ((unsigned) DBX_REGISTER_NUMBER (reg) == dbx_reg_number (rtl));
10207 nregs = hard_regno_nregs[REGNO (rtl)][GET_MODE (rtl)];
10209 /* Simple, contiguous registers. */
10210 if (regs == NULL_RTX)
10212 size = GET_MODE_SIZE (GET_MODE (rtl)) / nregs;
10214 loc_result = NULL;
10215 while (nregs--)
10217 dw_loc_descr_ref t;
10219 t = one_reg_loc_descriptor (DBX_REGISTER_NUMBER (reg),
10220 VAR_INIT_STATUS_INITIALIZED);
10221 add_loc_descr (&loc_result, t);
10222 add_loc_descr_op_piece (&loc_result, size);
10223 ++reg;
10225 return loc_result;
10228 /* Now onto stupid register sets in non contiguous locations. */
10230 gcc_assert (GET_CODE (regs) == PARALLEL);
10232 size = GET_MODE_SIZE (GET_MODE (XVECEXP (regs, 0, 0)));
10233 loc_result = NULL;
10235 for (i = 0; i < XVECLEN (regs, 0); ++i)
10237 dw_loc_descr_ref t;
10239 t = one_reg_loc_descriptor (REGNO (XVECEXP (regs, 0, i)),
10240 VAR_INIT_STATUS_INITIALIZED);
10241 add_loc_descr (&loc_result, t);
10242 size = GET_MODE_SIZE (GET_MODE (XVECEXP (regs, 0, 0)));
10243 add_loc_descr_op_piece (&loc_result, size);
10246 if (loc_result && initialized == VAR_INIT_STATUS_UNINITIALIZED)
10247 add_loc_descr (&loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
10248 return loc_result;
10251 static unsigned long size_of_int_loc_descriptor (HOST_WIDE_INT);
10253 /* Return a location descriptor that designates a constant i,
10254 as a compound operation from constant (i >> shift), constant shift
10255 and DW_OP_shl. */
10257 static dw_loc_descr_ref
10258 int_shift_loc_descriptor (HOST_WIDE_INT i, int shift)
10260 dw_loc_descr_ref ret = int_loc_descriptor (i >> shift);
10261 add_loc_descr (&ret, int_loc_descriptor (shift));
10262 add_loc_descr (&ret, new_loc_descr (DW_OP_shl, 0, 0));
10263 return ret;
10266 /* Return a location descriptor that designates a constant. */
10268 static dw_loc_descr_ref
10269 int_loc_descriptor (HOST_WIDE_INT i)
10271 enum dwarf_location_atom op;
10273 /* Pick the smallest representation of a constant, rather than just
10274 defaulting to the LEB encoding. */
10275 if (i >= 0)
10277 int clz = clz_hwi (i);
10278 int ctz = ctz_hwi (i);
10279 if (i <= 31)
10280 op = (enum dwarf_location_atom) (DW_OP_lit0 + i);
10281 else if (i <= 0xff)
10282 op = DW_OP_const1u;
10283 else if (i <= 0xffff)
10284 op = DW_OP_const2u;
10285 else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 5
10286 && clz + 5 + 255 >= HOST_BITS_PER_WIDE_INT)
10287 /* DW_OP_litX DW_OP_litY DW_OP_shl takes just 3 bytes and
10288 DW_OP_litX DW_OP_const1u Y DW_OP_shl takes just 4 bytes,
10289 while DW_OP_const4u is 5 bytes. */
10290 return int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT - clz - 5);
10291 else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 8
10292 && clz + 8 + 31 >= HOST_BITS_PER_WIDE_INT)
10293 /* DW_OP_const1u X DW_OP_litY DW_OP_shl takes just 4 bytes,
10294 while DW_OP_const4u is 5 bytes. */
10295 return int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT - clz - 8);
10296 else if (HOST_BITS_PER_WIDE_INT == 32 || i <= 0xffffffff)
10297 op = DW_OP_const4u;
10298 else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 8
10299 && clz + 8 + 255 >= HOST_BITS_PER_WIDE_INT)
10300 /* DW_OP_const1u X DW_OP_const1u Y DW_OP_shl takes just 5 bytes,
10301 while DW_OP_constu of constant >= 0x100000000 takes at least
10302 6 bytes. */
10303 return int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT - clz - 8);
10304 else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 16
10305 && clz + 16 + (size_of_uleb128 (i) > 5 ? 255 : 31)
10306 >= HOST_BITS_PER_WIDE_INT)
10307 /* DW_OP_const2u X DW_OP_litY DW_OP_shl takes just 5 bytes,
10308 DW_OP_const2u X DW_OP_const1u Y DW_OP_shl takes 6 bytes,
10309 while DW_OP_constu takes in this case at least 6 bytes. */
10310 return int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT - clz - 16);
10311 else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 32
10312 && clz + 32 + 31 >= HOST_BITS_PER_WIDE_INT
10313 && size_of_uleb128 (i) > 6)
10314 /* DW_OP_const4u X DW_OP_litY DW_OP_shl takes just 7 bytes. */
10315 return int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT - clz - 32);
10316 else
10317 op = DW_OP_constu;
10319 else
10321 if (i >= -0x80)
10322 op = DW_OP_const1s;
10323 else if (i >= -0x8000)
10324 op = DW_OP_const2s;
10325 else if (HOST_BITS_PER_WIDE_INT == 32 || i >= -0x80000000)
10327 if (size_of_int_loc_descriptor (i) < 5)
10329 dw_loc_descr_ref ret = int_loc_descriptor (-i);
10330 add_loc_descr (&ret, new_loc_descr (DW_OP_neg, 0, 0));
10331 return ret;
10333 op = DW_OP_const4s;
10335 else
10337 if (size_of_int_loc_descriptor (i)
10338 < (unsigned long) 1 + size_of_sleb128 (i))
10340 dw_loc_descr_ref ret = int_loc_descriptor (-i);
10341 add_loc_descr (&ret, new_loc_descr (DW_OP_neg, 0, 0));
10342 return ret;
10344 op = DW_OP_consts;
10348 return new_loc_descr (op, i, 0);
10351 /* Return size_of_locs (int_shift_loc_descriptor (i, shift))
10352 without actually allocating it. */
10354 static unsigned long
10355 size_of_int_shift_loc_descriptor (HOST_WIDE_INT i, int shift)
10357 return size_of_int_loc_descriptor (i >> shift)
10358 + size_of_int_loc_descriptor (shift)
10359 + 1;
10362 /* Return size_of_locs (int_loc_descriptor (i)) without
10363 actually allocating it. */
10365 static unsigned long
10366 size_of_int_loc_descriptor (HOST_WIDE_INT i)
10368 unsigned long s;
10370 if (i >= 0)
10372 int clz, ctz;
10373 if (i <= 31)
10374 return 1;
10375 else if (i <= 0xff)
10376 return 2;
10377 else if (i <= 0xffff)
10378 return 3;
10379 clz = clz_hwi (i);
10380 ctz = ctz_hwi (i);
10381 if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 5
10382 && clz + 5 + 255 >= HOST_BITS_PER_WIDE_INT)
10383 return size_of_int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT
10384 - clz - 5);
10385 else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 8
10386 && clz + 8 + 31 >= HOST_BITS_PER_WIDE_INT)
10387 return size_of_int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT
10388 - clz - 8);
10389 else if (HOST_BITS_PER_WIDE_INT == 32 || i <= 0xffffffff)
10390 return 5;
10391 s = size_of_uleb128 ((unsigned HOST_WIDE_INT) i);
10392 if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 8
10393 && clz + 8 + 255 >= HOST_BITS_PER_WIDE_INT)
10394 return size_of_int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT
10395 - clz - 8);
10396 else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 16
10397 && clz + 16 + (s > 5 ? 255 : 31) >= HOST_BITS_PER_WIDE_INT)
10398 return size_of_int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT
10399 - clz - 16);
10400 else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 32
10401 && clz + 32 + 31 >= HOST_BITS_PER_WIDE_INT
10402 && s > 6)
10403 return size_of_int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT
10404 - clz - 32);
10405 else
10406 return 1 + s;
10408 else
10410 if (i >= -0x80)
10411 return 2;
10412 else if (i >= -0x8000)
10413 return 3;
10414 else if (HOST_BITS_PER_WIDE_INT == 32 || i >= -0x80000000)
10416 if (-(unsigned HOST_WIDE_INT) i != (unsigned HOST_WIDE_INT) i)
10418 s = size_of_int_loc_descriptor (-i) + 1;
10419 if (s < 5)
10420 return s;
10422 return 5;
10424 else
10426 unsigned long r = 1 + size_of_sleb128 (i);
10427 if (-(unsigned HOST_WIDE_INT) i != (unsigned HOST_WIDE_INT) i)
10429 s = size_of_int_loc_descriptor (-i) + 1;
10430 if (s < r)
10431 return s;
10433 return r;
10438 /* Return loc description representing "address" of integer value.
10439 This can appear only as toplevel expression. */
10441 static dw_loc_descr_ref
10442 address_of_int_loc_descriptor (int size, HOST_WIDE_INT i)
10444 int litsize;
10445 dw_loc_descr_ref loc_result = NULL;
10447 if (!(dwarf_version >= 4 || !dwarf_strict))
10448 return NULL;
10450 litsize = size_of_int_loc_descriptor (i);
10451 /* Determine if DW_OP_stack_value or DW_OP_implicit_value
10452 is more compact. For DW_OP_stack_value we need:
10453 litsize + 1 (DW_OP_stack_value)
10454 and for DW_OP_implicit_value:
10455 1 (DW_OP_implicit_value) + 1 (length) + size. */
10456 if ((int) DWARF2_ADDR_SIZE >= size && litsize + 1 <= 1 + 1 + size)
10458 loc_result = int_loc_descriptor (i);
10459 add_loc_descr (&loc_result,
10460 new_loc_descr (DW_OP_stack_value, 0, 0));
10461 return loc_result;
10464 loc_result = new_loc_descr (DW_OP_implicit_value,
10465 size, 0);
10466 loc_result->dw_loc_oprnd2.val_class = dw_val_class_const;
10467 loc_result->dw_loc_oprnd2.v.val_int = i;
10468 return loc_result;
10471 /* Return a location descriptor that designates a base+offset location. */
10473 static dw_loc_descr_ref
10474 based_loc_descr (rtx reg, HOST_WIDE_INT offset,
10475 enum var_init_status initialized)
10477 unsigned int regno;
10478 dw_loc_descr_ref result;
10479 dw_fde_ref fde = cfun->fde;
10481 /* We only use "frame base" when we're sure we're talking about the
10482 post-prologue local stack frame. We do this by *not* running
10483 register elimination until this point, and recognizing the special
10484 argument pointer and soft frame pointer rtx's. */
10485 if (reg == arg_pointer_rtx || reg == frame_pointer_rtx)
10487 rtx elim = eliminate_regs (reg, VOIDmode, NULL_RTX);
10489 if (elim != reg)
10491 if (GET_CODE (elim) == PLUS)
10493 offset += INTVAL (XEXP (elim, 1));
10494 elim = XEXP (elim, 0);
10496 gcc_assert ((SUPPORTS_STACK_ALIGNMENT
10497 && (elim == hard_frame_pointer_rtx
10498 || elim == stack_pointer_rtx))
10499 || elim == (frame_pointer_needed
10500 ? hard_frame_pointer_rtx
10501 : stack_pointer_rtx));
10503 /* If drap register is used to align stack, use frame
10504 pointer + offset to access stack variables. If stack
10505 is aligned without drap, use stack pointer + offset to
10506 access stack variables. */
10507 if (crtl->stack_realign_tried
10508 && reg == frame_pointer_rtx)
10510 int base_reg
10511 = DWARF_FRAME_REGNUM ((fde && fde->drap_reg != INVALID_REGNUM)
10512 ? HARD_FRAME_POINTER_REGNUM
10513 : REGNO (elim));
10514 return new_reg_loc_descr (base_reg, offset);
10517 gcc_assert (frame_pointer_fb_offset_valid);
10518 offset += frame_pointer_fb_offset;
10519 return new_loc_descr (DW_OP_fbreg, offset, 0);
10523 regno = DWARF_FRAME_REGNUM (REGNO (reg));
10525 if (!optimize && fde
10526 && (fde->drap_reg == regno || fde->vdrap_reg == regno))
10528 /* Use cfa+offset to represent the location of arguments passed
10529 on the stack when drap is used to align stack.
10530 Only do this when not optimizing, for optimized code var-tracking
10531 is supposed to track where the arguments live and the register
10532 used as vdrap or drap in some spot might be used for something
10533 else in other part of the routine. */
10534 return new_loc_descr (DW_OP_fbreg, offset, 0);
10537 if (regno <= 31)
10538 result = new_loc_descr ((enum dwarf_location_atom) (DW_OP_breg0 + regno),
10539 offset, 0);
10540 else
10541 result = new_loc_descr (DW_OP_bregx, regno, offset);
10543 if (initialized == VAR_INIT_STATUS_UNINITIALIZED)
10544 add_loc_descr (&result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
10546 return result;
10549 /* Return true if this RTL expression describes a base+offset calculation. */
10551 static inline int
10552 is_based_loc (const_rtx rtl)
10554 return (GET_CODE (rtl) == PLUS
10555 && ((REG_P (XEXP (rtl, 0))
10556 && REGNO (XEXP (rtl, 0)) < FIRST_PSEUDO_REGISTER
10557 && CONST_INT_P (XEXP (rtl, 1)))));
10560 /* Try to handle TLS MEMs, for which mem_loc_descriptor on XEXP (mem, 0)
10561 failed. */
10563 static dw_loc_descr_ref
10564 tls_mem_loc_descriptor (rtx mem)
10566 tree base;
10567 dw_loc_descr_ref loc_result;
10569 if (MEM_EXPR (mem) == NULL_TREE || !MEM_OFFSET_KNOWN_P (mem))
10570 return NULL;
10572 base = get_base_address (MEM_EXPR (mem));
10573 if (base == NULL
10574 || TREE_CODE (base) != VAR_DECL
10575 || !DECL_THREAD_LOCAL_P (base))
10576 return NULL;
10578 loc_result = loc_descriptor_from_tree (MEM_EXPR (mem), 1);
10579 if (loc_result == NULL)
10580 return NULL;
10582 if (MEM_OFFSET (mem))
10583 loc_descr_plus_const (&loc_result, MEM_OFFSET (mem));
10585 return loc_result;
10588 /* Output debug info about reason why we failed to expand expression as dwarf
10589 expression. */
10591 static void
10592 expansion_failed (tree expr, rtx rtl, char const *reason)
10594 if (dump_file && (dump_flags & TDF_DETAILS))
10596 fprintf (dump_file, "Failed to expand as dwarf: ");
10597 if (expr)
10598 print_generic_expr (dump_file, expr, dump_flags);
10599 if (rtl)
10601 fprintf (dump_file, "\n");
10602 print_rtl (dump_file, rtl);
10604 fprintf (dump_file, "\nReason: %s\n", reason);
10608 /* Helper function for const_ok_for_output, called either directly
10609 or via for_each_rtx. */
10611 static int
10612 const_ok_for_output_1 (rtx *rtlp, void *data ATTRIBUTE_UNUSED)
10614 rtx rtl = *rtlp;
10616 if (GET_CODE (rtl) == UNSPEC)
10618 /* If delegitimize_address couldn't do anything with the UNSPEC, assume
10619 we can't express it in the debug info. */
10620 #ifdef ENABLE_CHECKING
10621 /* Don't complain about TLS UNSPECs, those are just too hard to
10622 delegitimize. */
10623 if (XVECLEN (rtl, 0) != 1
10624 || GET_CODE (XVECEXP (rtl, 0, 0)) != SYMBOL_REF
10625 || SYMBOL_REF_DECL (XVECEXP (rtl, 0, 0)) == NULL
10626 || TREE_CODE (SYMBOL_REF_DECL (XVECEXP (rtl, 0, 0))) != VAR_DECL
10627 || !DECL_THREAD_LOCAL_P (SYMBOL_REF_DECL (XVECEXP (rtl, 0, 0))))
10628 inform (current_function_decl
10629 ? DECL_SOURCE_LOCATION (current_function_decl)
10630 : UNKNOWN_LOCATION,
10631 #if NUM_UNSPEC_VALUES > 0
10632 "non-delegitimized UNSPEC %s (%d) found in variable location",
10633 ((XINT (rtl, 1) >= 0 && XINT (rtl, 1) < NUM_UNSPEC_VALUES)
10634 ? unspec_strings[XINT (rtl, 1)] : "unknown"),
10635 XINT (rtl, 1));
10636 #else
10637 "non-delegitimized UNSPEC %d found in variable location",
10638 XINT (rtl, 1));
10639 #endif
10640 #endif
10641 expansion_failed (NULL_TREE, rtl,
10642 "UNSPEC hasn't been delegitimized.\n");
10643 return 1;
10646 if (GET_CODE (rtl) != SYMBOL_REF)
10647 return 0;
10649 if (CONSTANT_POOL_ADDRESS_P (rtl))
10651 bool marked;
10652 get_pool_constant_mark (rtl, &marked);
10653 /* If all references to this pool constant were optimized away,
10654 it was not output and thus we can't represent it. */
10655 if (!marked)
10657 expansion_failed (NULL_TREE, rtl,
10658 "Constant was removed from constant pool.\n");
10659 return 1;
10663 if (SYMBOL_REF_TLS_MODEL (rtl) != TLS_MODEL_NONE)
10664 return 1;
10666 /* Avoid references to external symbols in debug info, on several targets
10667 the linker might even refuse to link when linking a shared library,
10668 and in many other cases the relocations for .debug_info/.debug_loc are
10669 dropped, so the address becomes zero anyway. Hidden symbols, guaranteed
10670 to be defined within the same shared library or executable are fine. */
10671 if (SYMBOL_REF_EXTERNAL_P (rtl))
10673 tree decl = SYMBOL_REF_DECL (rtl);
10675 if (decl == NULL || !targetm.binds_local_p (decl))
10677 expansion_failed (NULL_TREE, rtl,
10678 "Symbol not defined in current TU.\n");
10679 return 1;
10683 return 0;
10686 /* Return true if constant RTL can be emitted in DW_OP_addr or
10687 DW_AT_const_value. TLS SYMBOL_REFs, external SYMBOL_REFs or
10688 non-marked constant pool SYMBOL_REFs can't be referenced in it. */
10690 static bool
10691 const_ok_for_output (rtx rtl)
10693 if (GET_CODE (rtl) == SYMBOL_REF)
10694 return const_ok_for_output_1 (&rtl, NULL) == 0;
10696 if (GET_CODE (rtl) == CONST)
10697 return for_each_rtx (&XEXP (rtl, 0), const_ok_for_output_1, NULL) == 0;
10699 return true;
10702 /* Return a reference to DW_TAG_base_type corresponding to MODE and UNSIGNEDP
10703 if possible, NULL otherwise. */
10705 static dw_die_ref
10706 base_type_for_mode (enum machine_mode mode, bool unsignedp)
10708 dw_die_ref type_die;
10709 tree type = lang_hooks.types.type_for_mode (mode, unsignedp);
10711 if (type == NULL)
10712 return NULL;
10713 switch (TREE_CODE (type))
10715 case INTEGER_TYPE:
10716 case REAL_TYPE:
10717 break;
10718 default:
10719 return NULL;
10721 type_die = lookup_type_die (type);
10722 if (!type_die)
10723 type_die = modified_type_die (type, false, false, comp_unit_die ());
10724 if (type_die == NULL || type_die->die_tag != DW_TAG_base_type)
10725 return NULL;
10726 return type_die;
10729 /* For OP descriptor assumed to be in unsigned MODE, convert it to a unsigned
10730 type matching MODE, or, if MODE is narrower than or as wide as
10731 DWARF2_ADDR_SIZE, untyped. Return NULL if the conversion is not
10732 possible. */
10734 static dw_loc_descr_ref
10735 convert_descriptor_to_mode (enum machine_mode mode, dw_loc_descr_ref op)
10737 enum machine_mode outer_mode = mode;
10738 dw_die_ref type_die;
10739 dw_loc_descr_ref cvt;
10741 if (GET_MODE_SIZE (mode) <= DWARF2_ADDR_SIZE)
10743 add_loc_descr (&op, new_loc_descr (DW_OP_GNU_convert, 0, 0));
10744 return op;
10746 type_die = base_type_for_mode (outer_mode, 1);
10747 if (type_die == NULL)
10748 return NULL;
10749 cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
10750 cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
10751 cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
10752 cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
10753 add_loc_descr (&op, cvt);
10754 return op;
10757 /* Return location descriptor for comparison OP with operands OP0 and OP1. */
10759 static dw_loc_descr_ref
10760 compare_loc_descriptor (enum dwarf_location_atom op, dw_loc_descr_ref op0,
10761 dw_loc_descr_ref op1)
10763 dw_loc_descr_ref ret = op0;
10764 add_loc_descr (&ret, op1);
10765 add_loc_descr (&ret, new_loc_descr (op, 0, 0));
10766 if (STORE_FLAG_VALUE != 1)
10768 add_loc_descr (&ret, int_loc_descriptor (STORE_FLAG_VALUE));
10769 add_loc_descr (&ret, new_loc_descr (DW_OP_mul, 0, 0));
10771 return ret;
10774 /* Return location descriptor for signed comparison OP RTL. */
10776 static dw_loc_descr_ref
10777 scompare_loc_descriptor (enum dwarf_location_atom op, rtx rtl,
10778 enum machine_mode mem_mode)
10780 enum machine_mode op_mode = GET_MODE (XEXP (rtl, 0));
10781 dw_loc_descr_ref op0, op1;
10782 int shift;
10784 if (op_mode == VOIDmode)
10785 op_mode = GET_MODE (XEXP (rtl, 1));
10786 if (op_mode == VOIDmode)
10787 return NULL;
10789 if (dwarf_strict
10790 && (GET_MODE_CLASS (op_mode) != MODE_INT
10791 || GET_MODE_SIZE (op_mode) > DWARF2_ADDR_SIZE))
10792 return NULL;
10794 op0 = mem_loc_descriptor (XEXP (rtl, 0), op_mode, mem_mode,
10795 VAR_INIT_STATUS_INITIALIZED);
10796 op1 = mem_loc_descriptor (XEXP (rtl, 1), op_mode, mem_mode,
10797 VAR_INIT_STATUS_INITIALIZED);
10799 if (op0 == NULL || op1 == NULL)
10800 return NULL;
10802 if (GET_MODE_CLASS (op_mode) != MODE_INT
10803 || GET_MODE_SIZE (op_mode) == DWARF2_ADDR_SIZE)
10804 return compare_loc_descriptor (op, op0, op1);
10806 if (GET_MODE_SIZE (op_mode) > DWARF2_ADDR_SIZE)
10808 dw_die_ref type_die = base_type_for_mode (op_mode, 0);
10809 dw_loc_descr_ref cvt;
10811 if (type_die == NULL)
10812 return NULL;
10813 cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
10814 cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
10815 cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
10816 cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
10817 add_loc_descr (&op0, cvt);
10818 cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
10819 cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
10820 cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
10821 cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
10822 add_loc_descr (&op1, cvt);
10823 return compare_loc_descriptor (op, op0, op1);
10826 shift = (DWARF2_ADDR_SIZE - GET_MODE_SIZE (op_mode)) * BITS_PER_UNIT;
10827 /* For eq/ne, if the operands are known to be zero-extended,
10828 there is no need to do the fancy shifting up. */
10829 if (op == DW_OP_eq || op == DW_OP_ne)
10831 dw_loc_descr_ref last0, last1;
10832 for (last0 = op0; last0->dw_loc_next != NULL; last0 = last0->dw_loc_next)
10834 for (last1 = op1; last1->dw_loc_next != NULL; last1 = last1->dw_loc_next)
10836 /* deref_size zero extends, and for constants we can check
10837 whether they are zero extended or not. */
10838 if (((last0->dw_loc_opc == DW_OP_deref_size
10839 && last0->dw_loc_oprnd1.v.val_int <= GET_MODE_SIZE (op_mode))
10840 || (CONST_INT_P (XEXP (rtl, 0))
10841 && (unsigned HOST_WIDE_INT) INTVAL (XEXP (rtl, 0))
10842 == (INTVAL (XEXP (rtl, 0)) & GET_MODE_MASK (op_mode))))
10843 && ((last1->dw_loc_opc == DW_OP_deref_size
10844 && last1->dw_loc_oprnd1.v.val_int <= GET_MODE_SIZE (op_mode))
10845 || (CONST_INT_P (XEXP (rtl, 1))
10846 && (unsigned HOST_WIDE_INT) INTVAL (XEXP (rtl, 1))
10847 == (INTVAL (XEXP (rtl, 1)) & GET_MODE_MASK (op_mode)))))
10848 return compare_loc_descriptor (op, op0, op1);
10850 /* EQ/NE comparison against constant in narrower type than
10851 DWARF2_ADDR_SIZE can be performed either as
10852 DW_OP_const1u <shift> DW_OP_shl DW_OP_const* <cst << shift>
10853 DW_OP_{eq,ne}
10855 DW_OP_const*u <mode_mask> DW_OP_and DW_OP_const* <cst & mode_mask>
10856 DW_OP_{eq,ne}. Pick whatever is shorter. */
10857 if (CONST_INT_P (XEXP (rtl, 1))
10858 && GET_MODE_BITSIZE (op_mode) < HOST_BITS_PER_WIDE_INT
10859 && (size_of_int_loc_descriptor (shift) + 1
10860 + size_of_int_loc_descriptor (INTVAL (XEXP (rtl, 1)) << shift)
10861 >= size_of_int_loc_descriptor (GET_MODE_MASK (op_mode)) + 1
10862 + size_of_int_loc_descriptor (INTVAL (XEXP (rtl, 1))
10863 & GET_MODE_MASK (op_mode))))
10865 add_loc_descr (&op0, int_loc_descriptor (GET_MODE_MASK (op_mode)));
10866 add_loc_descr (&op0, new_loc_descr (DW_OP_and, 0, 0));
10867 op1 = int_loc_descriptor (INTVAL (XEXP (rtl, 1))
10868 & GET_MODE_MASK (op_mode));
10869 return compare_loc_descriptor (op, op0, op1);
10872 add_loc_descr (&op0, int_loc_descriptor (shift));
10873 add_loc_descr (&op0, new_loc_descr (DW_OP_shl, 0, 0));
10874 if (CONST_INT_P (XEXP (rtl, 1)))
10875 op1 = int_loc_descriptor (INTVAL (XEXP (rtl, 1)) << shift);
10876 else
10878 add_loc_descr (&op1, int_loc_descriptor (shift));
10879 add_loc_descr (&op1, new_loc_descr (DW_OP_shl, 0, 0));
10881 return compare_loc_descriptor (op, op0, op1);
10884 /* Return location descriptor for unsigned comparison OP RTL. */
10886 static dw_loc_descr_ref
10887 ucompare_loc_descriptor (enum dwarf_location_atom op, rtx rtl,
10888 enum machine_mode mem_mode)
10890 enum machine_mode op_mode = GET_MODE (XEXP (rtl, 0));
10891 dw_loc_descr_ref op0, op1;
10893 if (op_mode == VOIDmode)
10894 op_mode = GET_MODE (XEXP (rtl, 1));
10895 if (op_mode == VOIDmode)
10896 return NULL;
10897 if (GET_MODE_CLASS (op_mode) != MODE_INT)
10898 return NULL;
10900 if (dwarf_strict && GET_MODE_SIZE (op_mode) > DWARF2_ADDR_SIZE)
10901 return NULL;
10903 op0 = mem_loc_descriptor (XEXP (rtl, 0), op_mode, mem_mode,
10904 VAR_INIT_STATUS_INITIALIZED);
10905 op1 = mem_loc_descriptor (XEXP (rtl, 1), op_mode, mem_mode,
10906 VAR_INIT_STATUS_INITIALIZED);
10908 if (op0 == NULL || op1 == NULL)
10909 return NULL;
10911 if (GET_MODE_SIZE (op_mode) < DWARF2_ADDR_SIZE)
10913 HOST_WIDE_INT mask = GET_MODE_MASK (op_mode);
10914 dw_loc_descr_ref last0, last1;
10915 for (last0 = op0; last0->dw_loc_next != NULL; last0 = last0->dw_loc_next)
10917 for (last1 = op1; last1->dw_loc_next != NULL; last1 = last1->dw_loc_next)
10919 if (CONST_INT_P (XEXP (rtl, 0)))
10920 op0 = int_loc_descriptor (INTVAL (XEXP (rtl, 0)) & mask);
10921 /* deref_size zero extends, so no need to mask it again. */
10922 else if (last0->dw_loc_opc != DW_OP_deref_size
10923 || last0->dw_loc_oprnd1.v.val_int > GET_MODE_SIZE (op_mode))
10925 add_loc_descr (&op0, int_loc_descriptor (mask));
10926 add_loc_descr (&op0, new_loc_descr (DW_OP_and, 0, 0));
10928 if (CONST_INT_P (XEXP (rtl, 1)))
10929 op1 = int_loc_descriptor (INTVAL (XEXP (rtl, 1)) & mask);
10930 /* deref_size zero extends, so no need to mask it again. */
10931 else if (last1->dw_loc_opc != DW_OP_deref_size
10932 || last1->dw_loc_oprnd1.v.val_int > GET_MODE_SIZE (op_mode))
10934 add_loc_descr (&op1, int_loc_descriptor (mask));
10935 add_loc_descr (&op1, new_loc_descr (DW_OP_and, 0, 0));
10938 else if (GET_MODE_SIZE (op_mode) == DWARF2_ADDR_SIZE)
10940 HOST_WIDE_INT bias = 1;
10941 bias <<= (DWARF2_ADDR_SIZE * BITS_PER_UNIT - 1);
10942 add_loc_descr (&op0, new_loc_descr (DW_OP_plus_uconst, bias, 0));
10943 if (CONST_INT_P (XEXP (rtl, 1)))
10944 op1 = int_loc_descriptor ((unsigned HOST_WIDE_INT) bias
10945 + INTVAL (XEXP (rtl, 1)));
10946 else
10947 add_loc_descr (&op1, new_loc_descr (DW_OP_plus_uconst,
10948 bias, 0));
10950 return compare_loc_descriptor (op, op0, op1);
10953 /* Return location descriptor for {U,S}{MIN,MAX}. */
10955 static dw_loc_descr_ref
10956 minmax_loc_descriptor (rtx rtl, enum machine_mode mode,
10957 enum machine_mode mem_mode)
10959 enum dwarf_location_atom op;
10960 dw_loc_descr_ref op0, op1, ret;
10961 dw_loc_descr_ref bra_node, drop_node;
10963 if (dwarf_strict
10964 && (GET_MODE_CLASS (mode) != MODE_INT
10965 || GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE))
10966 return NULL;
10968 op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
10969 VAR_INIT_STATUS_INITIALIZED);
10970 op1 = mem_loc_descriptor (XEXP (rtl, 1), mode, mem_mode,
10971 VAR_INIT_STATUS_INITIALIZED);
10973 if (op0 == NULL || op1 == NULL)
10974 return NULL;
10976 add_loc_descr (&op0, new_loc_descr (DW_OP_dup, 0, 0));
10977 add_loc_descr (&op1, new_loc_descr (DW_OP_swap, 0, 0));
10978 add_loc_descr (&op1, new_loc_descr (DW_OP_over, 0, 0));
10979 if (GET_CODE (rtl) == UMIN || GET_CODE (rtl) == UMAX)
10981 if (GET_MODE_SIZE (mode) < DWARF2_ADDR_SIZE)
10983 HOST_WIDE_INT mask = GET_MODE_MASK (mode);
10984 add_loc_descr (&op0, int_loc_descriptor (mask));
10985 add_loc_descr (&op0, new_loc_descr (DW_OP_and, 0, 0));
10986 add_loc_descr (&op1, int_loc_descriptor (mask));
10987 add_loc_descr (&op1, new_loc_descr (DW_OP_and, 0, 0));
10989 else if (GET_MODE_SIZE (mode) == DWARF2_ADDR_SIZE)
10991 HOST_WIDE_INT bias = 1;
10992 bias <<= (DWARF2_ADDR_SIZE * BITS_PER_UNIT - 1);
10993 add_loc_descr (&op0, new_loc_descr (DW_OP_plus_uconst, bias, 0));
10994 add_loc_descr (&op1, new_loc_descr (DW_OP_plus_uconst, bias, 0));
10997 else if (GET_MODE_CLASS (mode) == MODE_INT
10998 && GET_MODE_SIZE (mode) < DWARF2_ADDR_SIZE)
11000 int shift = (DWARF2_ADDR_SIZE - GET_MODE_SIZE (mode)) * BITS_PER_UNIT;
11001 add_loc_descr (&op0, int_loc_descriptor (shift));
11002 add_loc_descr (&op0, new_loc_descr (DW_OP_shl, 0, 0));
11003 add_loc_descr (&op1, int_loc_descriptor (shift));
11004 add_loc_descr (&op1, new_loc_descr (DW_OP_shl, 0, 0));
11006 else if (GET_MODE_CLASS (mode) == MODE_INT
11007 && GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE)
11009 dw_die_ref type_die = base_type_for_mode (mode, 0);
11010 dw_loc_descr_ref cvt;
11011 if (type_die == NULL)
11012 return NULL;
11013 cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
11014 cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
11015 cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
11016 cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
11017 add_loc_descr (&op0, cvt);
11018 cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
11019 cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
11020 cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
11021 cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
11022 add_loc_descr (&op1, cvt);
11025 if (GET_CODE (rtl) == SMIN || GET_CODE (rtl) == UMIN)
11026 op = DW_OP_lt;
11027 else
11028 op = DW_OP_gt;
11029 ret = op0;
11030 add_loc_descr (&ret, op1);
11031 add_loc_descr (&ret, new_loc_descr (op, 0, 0));
11032 bra_node = new_loc_descr (DW_OP_bra, 0, 0);
11033 add_loc_descr (&ret, bra_node);
11034 add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
11035 drop_node = new_loc_descr (DW_OP_drop, 0, 0);
11036 add_loc_descr (&ret, drop_node);
11037 bra_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
11038 bra_node->dw_loc_oprnd1.v.val_loc = drop_node;
11039 if ((GET_CODE (rtl) == SMIN || GET_CODE (rtl) == SMAX)
11040 && GET_MODE_CLASS (mode) == MODE_INT
11041 && GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE)
11042 ret = convert_descriptor_to_mode (mode, ret);
11043 return ret;
11046 /* Helper function for mem_loc_descriptor. Perform OP binary op,
11047 but after converting arguments to type_die, afterwards
11048 convert back to unsigned. */
11050 static dw_loc_descr_ref
11051 typed_binop (enum dwarf_location_atom op, rtx rtl, dw_die_ref type_die,
11052 enum machine_mode mode, enum machine_mode mem_mode)
11054 dw_loc_descr_ref cvt, op0, op1;
11056 if (type_die == NULL)
11057 return NULL;
11058 op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
11059 VAR_INIT_STATUS_INITIALIZED);
11060 op1 = mem_loc_descriptor (XEXP (rtl, 1), mode, mem_mode,
11061 VAR_INIT_STATUS_INITIALIZED);
11062 if (op0 == NULL || op1 == NULL)
11063 return NULL;
11064 cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
11065 cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
11066 cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
11067 cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
11068 add_loc_descr (&op0, cvt);
11069 cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
11070 cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
11071 cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
11072 cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
11073 add_loc_descr (&op1, cvt);
11074 add_loc_descr (&op0, op1);
11075 add_loc_descr (&op0, new_loc_descr (op, 0, 0));
11076 return convert_descriptor_to_mode (mode, op0);
11079 /* CLZ (where constV is CLZ_DEFINED_VALUE_AT_ZERO computed value,
11080 const0 is DW_OP_lit0 or corresponding typed constant,
11081 const1 is DW_OP_lit1 or corresponding typed constant
11082 and constMSB is constant with just the MSB bit set
11083 for the mode):
11084 DW_OP_dup DW_OP_bra <L1> DW_OP_drop constV DW_OP_skip <L4>
11085 L1: const0 DW_OP_swap
11086 L2: DW_OP_dup constMSB DW_OP_and DW_OP_bra <L3> const1 DW_OP_shl
11087 DW_OP_swap DW_OP_plus_uconst <1> DW_OP_swap DW_OP_skip <L2>
11088 L3: DW_OP_drop
11089 L4: DW_OP_nop
11091 CTZ is similar:
11092 DW_OP_dup DW_OP_bra <L1> DW_OP_drop constV DW_OP_skip <L4>
11093 L1: const0 DW_OP_swap
11094 L2: DW_OP_dup const1 DW_OP_and DW_OP_bra <L3> const1 DW_OP_shr
11095 DW_OP_swap DW_OP_plus_uconst <1> DW_OP_swap DW_OP_skip <L2>
11096 L3: DW_OP_drop
11097 L4: DW_OP_nop
11099 FFS is similar:
11100 DW_OP_dup DW_OP_bra <L1> DW_OP_drop const0 DW_OP_skip <L4>
11101 L1: const1 DW_OP_swap
11102 L2: DW_OP_dup const1 DW_OP_and DW_OP_bra <L3> const1 DW_OP_shr
11103 DW_OP_swap DW_OP_plus_uconst <1> DW_OP_swap DW_OP_skip <L2>
11104 L3: DW_OP_drop
11105 L4: DW_OP_nop */
11107 static dw_loc_descr_ref
11108 clz_loc_descriptor (rtx rtl, enum machine_mode mode,
11109 enum machine_mode mem_mode)
11111 dw_loc_descr_ref op0, ret, tmp;
11112 HOST_WIDE_INT valv;
11113 dw_loc_descr_ref l1jump, l1label;
11114 dw_loc_descr_ref l2jump, l2label;
11115 dw_loc_descr_ref l3jump, l3label;
11116 dw_loc_descr_ref l4jump, l4label;
11117 rtx msb;
11119 if (GET_MODE_CLASS (mode) != MODE_INT
11120 || GET_MODE (XEXP (rtl, 0)) != mode
11121 || (GET_CODE (rtl) == CLZ
11122 && GET_MODE_BITSIZE (mode) > 2 * HOST_BITS_PER_WIDE_INT))
11123 return NULL;
11125 op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
11126 VAR_INIT_STATUS_INITIALIZED);
11127 if (op0 == NULL)
11128 return NULL;
11129 ret = op0;
11130 if (GET_CODE (rtl) == CLZ)
11132 if (!CLZ_DEFINED_VALUE_AT_ZERO (mode, valv))
11133 valv = GET_MODE_BITSIZE (mode);
11135 else if (GET_CODE (rtl) == FFS)
11136 valv = 0;
11137 else if (!CTZ_DEFINED_VALUE_AT_ZERO (mode, valv))
11138 valv = GET_MODE_BITSIZE (mode);
11139 add_loc_descr (&ret, new_loc_descr (DW_OP_dup, 0, 0));
11140 l1jump = new_loc_descr (DW_OP_bra, 0, 0);
11141 add_loc_descr (&ret, l1jump);
11142 add_loc_descr (&ret, new_loc_descr (DW_OP_drop, 0, 0));
11143 tmp = mem_loc_descriptor (GEN_INT (valv), mode, mem_mode,
11144 VAR_INIT_STATUS_INITIALIZED);
11145 if (tmp == NULL)
11146 return NULL;
11147 add_loc_descr (&ret, tmp);
11148 l4jump = new_loc_descr (DW_OP_skip, 0, 0);
11149 add_loc_descr (&ret, l4jump);
11150 l1label = mem_loc_descriptor (GET_CODE (rtl) == FFS
11151 ? const1_rtx : const0_rtx,
11152 mode, mem_mode,
11153 VAR_INIT_STATUS_INITIALIZED);
11154 if (l1label == NULL)
11155 return NULL;
11156 add_loc_descr (&ret, l1label);
11157 add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
11158 l2label = new_loc_descr (DW_OP_dup, 0, 0);
11159 add_loc_descr (&ret, l2label);
11160 if (GET_CODE (rtl) != CLZ)
11161 msb = const1_rtx;
11162 else if (GET_MODE_BITSIZE (mode) <= HOST_BITS_PER_WIDE_INT)
11163 msb = GEN_INT ((unsigned HOST_WIDE_INT) 1
11164 << (GET_MODE_BITSIZE (mode) - 1));
11165 else
11166 msb = immed_double_const (0, (unsigned HOST_WIDE_INT) 1
11167 << (GET_MODE_BITSIZE (mode)
11168 - HOST_BITS_PER_WIDE_INT - 1), mode);
11169 if (GET_CODE (msb) == CONST_INT && INTVAL (msb) < 0)
11170 tmp = new_loc_descr (HOST_BITS_PER_WIDE_INT == 32
11171 ? DW_OP_const4u : HOST_BITS_PER_WIDE_INT == 64
11172 ? DW_OP_const8u : DW_OP_constu, INTVAL (msb), 0);
11173 else
11174 tmp = mem_loc_descriptor (msb, mode, mem_mode,
11175 VAR_INIT_STATUS_INITIALIZED);
11176 if (tmp == NULL)
11177 return NULL;
11178 add_loc_descr (&ret, tmp);
11179 add_loc_descr (&ret, new_loc_descr (DW_OP_and, 0, 0));
11180 l3jump = new_loc_descr (DW_OP_bra, 0, 0);
11181 add_loc_descr (&ret, l3jump);
11182 tmp = mem_loc_descriptor (const1_rtx, mode, mem_mode,
11183 VAR_INIT_STATUS_INITIALIZED);
11184 if (tmp == NULL)
11185 return NULL;
11186 add_loc_descr (&ret, tmp);
11187 add_loc_descr (&ret, new_loc_descr (GET_CODE (rtl) == CLZ
11188 ? DW_OP_shl : DW_OP_shr, 0, 0));
11189 add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
11190 add_loc_descr (&ret, new_loc_descr (DW_OP_plus_uconst, 1, 0));
11191 add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
11192 l2jump = new_loc_descr (DW_OP_skip, 0, 0);
11193 add_loc_descr (&ret, l2jump);
11194 l3label = new_loc_descr (DW_OP_drop, 0, 0);
11195 add_loc_descr (&ret, l3label);
11196 l4label = new_loc_descr (DW_OP_nop, 0, 0);
11197 add_loc_descr (&ret, l4label);
11198 l1jump->dw_loc_oprnd1.val_class = dw_val_class_loc;
11199 l1jump->dw_loc_oprnd1.v.val_loc = l1label;
11200 l2jump->dw_loc_oprnd1.val_class = dw_val_class_loc;
11201 l2jump->dw_loc_oprnd1.v.val_loc = l2label;
11202 l3jump->dw_loc_oprnd1.val_class = dw_val_class_loc;
11203 l3jump->dw_loc_oprnd1.v.val_loc = l3label;
11204 l4jump->dw_loc_oprnd1.val_class = dw_val_class_loc;
11205 l4jump->dw_loc_oprnd1.v.val_loc = l4label;
11206 return ret;
11209 /* POPCOUNT (const0 is DW_OP_lit0 or corresponding typed constant,
11210 const1 is DW_OP_lit1 or corresponding typed constant):
11211 const0 DW_OP_swap
11212 L1: DW_OP_dup DW_OP_bra <L2> DW_OP_dup DW_OP_rot const1 DW_OP_and
11213 DW_OP_plus DW_OP_swap const1 DW_OP_shr DW_OP_skip <L1>
11214 L2: DW_OP_drop
11216 PARITY is similar:
11217 L1: DW_OP_dup DW_OP_bra <L2> DW_OP_dup DW_OP_rot const1 DW_OP_and
11218 DW_OP_xor DW_OP_swap const1 DW_OP_shr DW_OP_skip <L1>
11219 L2: DW_OP_drop */
11221 static dw_loc_descr_ref
11222 popcount_loc_descriptor (rtx rtl, enum machine_mode mode,
11223 enum machine_mode mem_mode)
11225 dw_loc_descr_ref op0, ret, tmp;
11226 dw_loc_descr_ref l1jump, l1label;
11227 dw_loc_descr_ref l2jump, l2label;
11229 if (GET_MODE_CLASS (mode) != MODE_INT
11230 || GET_MODE (XEXP (rtl, 0)) != mode)
11231 return NULL;
11233 op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
11234 VAR_INIT_STATUS_INITIALIZED);
11235 if (op0 == NULL)
11236 return NULL;
11237 ret = op0;
11238 tmp = mem_loc_descriptor (const0_rtx, mode, mem_mode,
11239 VAR_INIT_STATUS_INITIALIZED);
11240 if (tmp == NULL)
11241 return NULL;
11242 add_loc_descr (&ret, tmp);
11243 add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
11244 l1label = new_loc_descr (DW_OP_dup, 0, 0);
11245 add_loc_descr (&ret, l1label);
11246 l2jump = new_loc_descr (DW_OP_bra, 0, 0);
11247 add_loc_descr (&ret, l2jump);
11248 add_loc_descr (&ret, new_loc_descr (DW_OP_dup, 0, 0));
11249 add_loc_descr (&ret, new_loc_descr (DW_OP_rot, 0, 0));
11250 tmp = mem_loc_descriptor (const1_rtx, mode, mem_mode,
11251 VAR_INIT_STATUS_INITIALIZED);
11252 if (tmp == NULL)
11253 return NULL;
11254 add_loc_descr (&ret, tmp);
11255 add_loc_descr (&ret, new_loc_descr (DW_OP_and, 0, 0));
11256 add_loc_descr (&ret, new_loc_descr (GET_CODE (rtl) == POPCOUNT
11257 ? DW_OP_plus : DW_OP_xor, 0, 0));
11258 add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
11259 tmp = mem_loc_descriptor (const1_rtx, mode, mem_mode,
11260 VAR_INIT_STATUS_INITIALIZED);
11261 add_loc_descr (&ret, tmp);
11262 add_loc_descr (&ret, new_loc_descr (DW_OP_shr, 0, 0));
11263 l1jump = new_loc_descr (DW_OP_skip, 0, 0);
11264 add_loc_descr (&ret, l1jump);
11265 l2label = new_loc_descr (DW_OP_drop, 0, 0);
11266 add_loc_descr (&ret, l2label);
11267 l1jump->dw_loc_oprnd1.val_class = dw_val_class_loc;
11268 l1jump->dw_loc_oprnd1.v.val_loc = l1label;
11269 l2jump->dw_loc_oprnd1.val_class = dw_val_class_loc;
11270 l2jump->dw_loc_oprnd1.v.val_loc = l2label;
11271 return ret;
11274 /* BSWAP (constS is initial shift count, either 56 or 24):
11275 constS const0
11276 L1: DW_OP_pick <2> constS DW_OP_pick <3> DW_OP_minus DW_OP_shr
11277 const255 DW_OP_and DW_OP_pick <2> DW_OP_shl DW_OP_or
11278 DW_OP_swap DW_OP_dup const0 DW_OP_eq DW_OP_bra <L2> const8
11279 DW_OP_minus DW_OP_swap DW_OP_skip <L1>
11280 L2: DW_OP_drop DW_OP_swap DW_OP_drop */
11282 static dw_loc_descr_ref
11283 bswap_loc_descriptor (rtx rtl, enum machine_mode mode,
11284 enum machine_mode mem_mode)
11286 dw_loc_descr_ref op0, ret, tmp;
11287 dw_loc_descr_ref l1jump, l1label;
11288 dw_loc_descr_ref l2jump, l2label;
11290 if (GET_MODE_CLASS (mode) != MODE_INT
11291 || BITS_PER_UNIT != 8
11292 || (GET_MODE_BITSIZE (mode) != 32
11293 && GET_MODE_BITSIZE (mode) != 64))
11294 return NULL;
11296 op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
11297 VAR_INIT_STATUS_INITIALIZED);
11298 if (op0 == NULL)
11299 return NULL;
11301 ret = op0;
11302 tmp = mem_loc_descriptor (GEN_INT (GET_MODE_BITSIZE (mode) - 8),
11303 mode, mem_mode,
11304 VAR_INIT_STATUS_INITIALIZED);
11305 if (tmp == NULL)
11306 return NULL;
11307 add_loc_descr (&ret, tmp);
11308 tmp = mem_loc_descriptor (const0_rtx, mode, mem_mode,
11309 VAR_INIT_STATUS_INITIALIZED);
11310 if (tmp == NULL)
11311 return NULL;
11312 add_loc_descr (&ret, tmp);
11313 l1label = new_loc_descr (DW_OP_pick, 2, 0);
11314 add_loc_descr (&ret, l1label);
11315 tmp = mem_loc_descriptor (GEN_INT (GET_MODE_BITSIZE (mode) - 8),
11316 mode, mem_mode,
11317 VAR_INIT_STATUS_INITIALIZED);
11318 add_loc_descr (&ret, tmp);
11319 add_loc_descr (&ret, new_loc_descr (DW_OP_pick, 3, 0));
11320 add_loc_descr (&ret, new_loc_descr (DW_OP_minus, 0, 0));
11321 add_loc_descr (&ret, new_loc_descr (DW_OP_shr, 0, 0));
11322 tmp = mem_loc_descriptor (GEN_INT (255), mode, mem_mode,
11323 VAR_INIT_STATUS_INITIALIZED);
11324 if (tmp == NULL)
11325 return NULL;
11326 add_loc_descr (&ret, tmp);
11327 add_loc_descr (&ret, new_loc_descr (DW_OP_and, 0, 0));
11328 add_loc_descr (&ret, new_loc_descr (DW_OP_pick, 2, 0));
11329 add_loc_descr (&ret, new_loc_descr (DW_OP_shl, 0, 0));
11330 add_loc_descr (&ret, new_loc_descr (DW_OP_or, 0, 0));
11331 add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
11332 add_loc_descr (&ret, new_loc_descr (DW_OP_dup, 0, 0));
11333 tmp = mem_loc_descriptor (const0_rtx, mode, mem_mode,
11334 VAR_INIT_STATUS_INITIALIZED);
11335 add_loc_descr (&ret, tmp);
11336 add_loc_descr (&ret, new_loc_descr (DW_OP_eq, 0, 0));
11337 l2jump = new_loc_descr (DW_OP_bra, 0, 0);
11338 add_loc_descr (&ret, l2jump);
11339 tmp = mem_loc_descriptor (GEN_INT (8), mode, mem_mode,
11340 VAR_INIT_STATUS_INITIALIZED);
11341 add_loc_descr (&ret, tmp);
11342 add_loc_descr (&ret, new_loc_descr (DW_OP_minus, 0, 0));
11343 add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
11344 l1jump = new_loc_descr (DW_OP_skip, 0, 0);
11345 add_loc_descr (&ret, l1jump);
11346 l2label = new_loc_descr (DW_OP_drop, 0, 0);
11347 add_loc_descr (&ret, l2label);
11348 add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
11349 add_loc_descr (&ret, new_loc_descr (DW_OP_drop, 0, 0));
11350 l1jump->dw_loc_oprnd1.val_class = dw_val_class_loc;
11351 l1jump->dw_loc_oprnd1.v.val_loc = l1label;
11352 l2jump->dw_loc_oprnd1.val_class = dw_val_class_loc;
11353 l2jump->dw_loc_oprnd1.v.val_loc = l2label;
11354 return ret;
11357 /* ROTATE (constMASK is mode mask, BITSIZE is bitsize of mode):
11358 DW_OP_over DW_OP_over DW_OP_shl [ constMASK DW_OP_and ] DW_OP_rot
11359 [ DW_OP_swap constMASK DW_OP_and DW_OP_swap ] DW_OP_neg
11360 DW_OP_plus_uconst <BITSIZE> DW_OP_shr DW_OP_or
11362 ROTATERT is similar:
11363 DW_OP_over DW_OP_over DW_OP_neg DW_OP_plus_uconst <BITSIZE>
11364 DW_OP_shl [ constMASK DW_OP_and ] DW_OP_rot
11365 [ DW_OP_swap constMASK DW_OP_and DW_OP_swap ] DW_OP_shr DW_OP_or */
11367 static dw_loc_descr_ref
11368 rotate_loc_descriptor (rtx rtl, enum machine_mode mode,
11369 enum machine_mode mem_mode)
11371 rtx rtlop1 = XEXP (rtl, 1);
11372 dw_loc_descr_ref op0, op1, ret, mask[2] = { NULL, NULL };
11373 int i;
11375 if (GET_MODE_CLASS (mode) != MODE_INT)
11376 return NULL;
11378 if (GET_MODE (rtlop1) != VOIDmode
11379 && GET_MODE_BITSIZE (GET_MODE (rtlop1)) < GET_MODE_BITSIZE (mode))
11380 rtlop1 = gen_rtx_ZERO_EXTEND (mode, rtlop1);
11381 op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
11382 VAR_INIT_STATUS_INITIALIZED);
11383 op1 = mem_loc_descriptor (rtlop1, mode, mem_mode,
11384 VAR_INIT_STATUS_INITIALIZED);
11385 if (op0 == NULL || op1 == NULL)
11386 return NULL;
11387 if (GET_MODE_SIZE (mode) < DWARF2_ADDR_SIZE)
11388 for (i = 0; i < 2; i++)
11390 if (GET_MODE_BITSIZE (mode) < HOST_BITS_PER_WIDE_INT)
11391 mask[i] = mem_loc_descriptor (GEN_INT (GET_MODE_MASK (mode)),
11392 mode, mem_mode,
11393 VAR_INIT_STATUS_INITIALIZED);
11394 else if (GET_MODE_BITSIZE (mode) == HOST_BITS_PER_WIDE_INT)
11395 mask[i] = new_loc_descr (HOST_BITS_PER_WIDE_INT == 32
11396 ? DW_OP_const4u
11397 : HOST_BITS_PER_WIDE_INT == 64
11398 ? DW_OP_const8u : DW_OP_constu,
11399 GET_MODE_MASK (mode), 0);
11400 else
11401 mask[i] = NULL;
11402 if (mask[i] == NULL)
11403 return NULL;
11404 add_loc_descr (&mask[i], new_loc_descr (DW_OP_and, 0, 0));
11406 ret = op0;
11407 add_loc_descr (&ret, op1);
11408 add_loc_descr (&ret, new_loc_descr (DW_OP_over, 0, 0));
11409 add_loc_descr (&ret, new_loc_descr (DW_OP_over, 0, 0));
11410 if (GET_CODE (rtl) == ROTATERT)
11412 add_loc_descr (&ret, new_loc_descr (DW_OP_neg, 0, 0));
11413 add_loc_descr (&ret, new_loc_descr (DW_OP_plus_uconst,
11414 GET_MODE_BITSIZE (mode), 0));
11416 add_loc_descr (&ret, new_loc_descr (DW_OP_shl, 0, 0));
11417 if (mask[0] != NULL)
11418 add_loc_descr (&ret, mask[0]);
11419 add_loc_descr (&ret, new_loc_descr (DW_OP_rot, 0, 0));
11420 if (mask[1] != NULL)
11422 add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
11423 add_loc_descr (&ret, mask[1]);
11424 add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0));
11426 if (GET_CODE (rtl) == ROTATE)
11428 add_loc_descr (&ret, new_loc_descr (DW_OP_neg, 0, 0));
11429 add_loc_descr (&ret, new_loc_descr (DW_OP_plus_uconst,
11430 GET_MODE_BITSIZE (mode), 0));
11432 add_loc_descr (&ret, new_loc_descr (DW_OP_shr, 0, 0));
11433 add_loc_descr (&ret, new_loc_descr (DW_OP_or, 0, 0));
11434 return ret;
11437 /* Helper function for mem_loc_descriptor. Return DW_OP_GNU_parameter_ref
11438 for DEBUG_PARAMETER_REF RTL. */
11440 static dw_loc_descr_ref
11441 parameter_ref_descriptor (rtx rtl)
11443 dw_loc_descr_ref ret;
11444 dw_die_ref ref;
11446 if (dwarf_strict)
11447 return NULL;
11448 gcc_assert (TREE_CODE (DEBUG_PARAMETER_REF_DECL (rtl)) == PARM_DECL);
11449 ref = lookup_decl_die (DEBUG_PARAMETER_REF_DECL (rtl));
11450 ret = new_loc_descr (DW_OP_GNU_parameter_ref, 0, 0);
11451 if (ref)
11453 ret->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
11454 ret->dw_loc_oprnd1.v.val_die_ref.die = ref;
11455 ret->dw_loc_oprnd1.v.val_die_ref.external = 0;
11457 else
11459 ret->dw_loc_oprnd1.val_class = dw_val_class_decl_ref;
11460 ret->dw_loc_oprnd1.v.val_decl_ref = DEBUG_PARAMETER_REF_DECL (rtl);
11462 return ret;
11465 /* Helper function to get mode of MEM's address. */
11467 enum machine_mode
11468 get_address_mode (rtx mem)
11470 enum machine_mode mode = GET_MODE (XEXP (mem, 0));
11471 if (mode != VOIDmode)
11472 return mode;
11473 return targetm.addr_space.address_mode (MEM_ADDR_SPACE (mem));
11476 /* The following routine converts the RTL for a variable or parameter
11477 (resident in memory) into an equivalent Dwarf representation of a
11478 mechanism for getting the address of that same variable onto the top of a
11479 hypothetical "address evaluation" stack.
11481 When creating memory location descriptors, we are effectively transforming
11482 the RTL for a memory-resident object into its Dwarf postfix expression
11483 equivalent. This routine recursively descends an RTL tree, turning
11484 it into Dwarf postfix code as it goes.
11486 MODE is the mode that should be assumed for the rtl if it is VOIDmode.
11488 MEM_MODE is the mode of the memory reference, needed to handle some
11489 autoincrement addressing modes.
11491 Return 0 if we can't represent the location. */
11493 dw_loc_descr_ref
11494 mem_loc_descriptor (rtx rtl, enum machine_mode mode,
11495 enum machine_mode mem_mode,
11496 enum var_init_status initialized)
11498 dw_loc_descr_ref mem_loc_result = NULL;
11499 enum dwarf_location_atom op;
11500 dw_loc_descr_ref op0, op1;
11502 if (mode == VOIDmode)
11503 mode = GET_MODE (rtl);
11505 /* Note that for a dynamically sized array, the location we will generate a
11506 description of here will be the lowest numbered location which is
11507 actually within the array. That's *not* necessarily the same as the
11508 zeroth element of the array. */
11510 rtl = targetm.delegitimize_address (rtl);
11512 if (mode != GET_MODE (rtl) && GET_MODE (rtl) != VOIDmode)
11513 return NULL;
11515 switch (GET_CODE (rtl))
11517 case POST_INC:
11518 case POST_DEC:
11519 case POST_MODIFY:
11520 return mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode, initialized);
11522 case SUBREG:
11523 /* The case of a subreg may arise when we have a local (register)
11524 variable or a formal (register) parameter which doesn't quite fill
11525 up an entire register. For now, just assume that it is
11526 legitimate to make the Dwarf info refer to the whole register which
11527 contains the given subreg. */
11528 if (!subreg_lowpart_p (rtl))
11529 break;
11530 if (GET_MODE_CLASS (mode) == MODE_INT
11531 && GET_MODE_CLASS (GET_MODE (SUBREG_REG (rtl))) == MODE_INT
11532 && (GET_MODE_SIZE (mode) <= DWARF2_ADDR_SIZE
11533 #ifdef POINTERS_EXTEND_UNSIGNED
11534 || (mode == Pmode && mem_mode != VOIDmode)
11535 #endif
11537 && GET_MODE_SIZE (GET_MODE (SUBREG_REG (rtl))) <= DWARF2_ADDR_SIZE)
11539 mem_loc_result = mem_loc_descriptor (SUBREG_REG (rtl),
11540 GET_MODE (SUBREG_REG (rtl)),
11541 mem_mode, initialized);
11542 break;
11544 if (dwarf_strict)
11545 break;
11546 if (GET_MODE_SIZE (mode) > GET_MODE_SIZE (GET_MODE (SUBREG_REG (rtl))))
11547 break;
11548 if (GET_MODE_SIZE (mode) != GET_MODE_SIZE (GET_MODE (SUBREG_REG (rtl)))
11549 && (GET_MODE_CLASS (mode) != MODE_INT
11550 || GET_MODE_CLASS (GET_MODE (SUBREG_REG (rtl))) != MODE_INT))
11551 break;
11552 else
11554 dw_die_ref type_die;
11555 dw_loc_descr_ref cvt;
11557 mem_loc_result = mem_loc_descriptor (SUBREG_REG (rtl),
11558 GET_MODE (SUBREG_REG (rtl)),
11559 mem_mode, initialized);
11560 if (mem_loc_result == NULL)
11561 break;
11562 type_die = base_type_for_mode (mode,
11563 GET_MODE_CLASS (mode) == MODE_INT);
11564 if (type_die == NULL)
11566 mem_loc_result = NULL;
11567 break;
11569 if (GET_MODE_SIZE (mode)
11570 != GET_MODE_SIZE (GET_MODE (SUBREG_REG (rtl))))
11571 cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
11572 else
11573 cvt = new_loc_descr (DW_OP_GNU_reinterpret, 0, 0);
11574 cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
11575 cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
11576 cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
11577 add_loc_descr (&mem_loc_result, cvt);
11579 break;
11581 case REG:
11582 if (GET_MODE_CLASS (mode) != MODE_INT
11583 || (GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE
11584 #ifdef POINTERS_EXTEND_UNSIGNED
11585 && (mode != Pmode || mem_mode == VOIDmode)
11586 #endif
11589 dw_die_ref type_die;
11591 if (dwarf_strict)
11592 break;
11593 if (REGNO (rtl) > FIRST_PSEUDO_REGISTER)
11594 break;
11595 type_die = base_type_for_mode (mode,
11596 GET_MODE_CLASS (mode) == MODE_INT);
11597 if (type_die == NULL)
11598 break;
11599 mem_loc_result = new_loc_descr (DW_OP_GNU_regval_type,
11600 dbx_reg_number (rtl), 0);
11601 mem_loc_result->dw_loc_oprnd2.val_class = dw_val_class_die_ref;
11602 mem_loc_result->dw_loc_oprnd2.v.val_die_ref.die = type_die;
11603 mem_loc_result->dw_loc_oprnd2.v.val_die_ref.external = 0;
11604 break;
11606 /* Whenever a register number forms a part of the description of the
11607 method for calculating the (dynamic) address of a memory resident
11608 object, DWARF rules require the register number be referred to as
11609 a "base register". This distinction is not based in any way upon
11610 what category of register the hardware believes the given register
11611 belongs to. This is strictly DWARF terminology we're dealing with
11612 here. Note that in cases where the location of a memory-resident
11613 data object could be expressed as: OP_ADD (OP_BASEREG (basereg),
11614 OP_CONST (0)) the actual DWARF location descriptor that we generate
11615 may just be OP_BASEREG (basereg). This may look deceptively like
11616 the object in question was allocated to a register (rather than in
11617 memory) so DWARF consumers need to be aware of the subtle
11618 distinction between OP_REG and OP_BASEREG. */
11619 if (REGNO (rtl) < FIRST_PSEUDO_REGISTER)
11620 mem_loc_result = based_loc_descr (rtl, 0, VAR_INIT_STATUS_INITIALIZED);
11621 else if (stack_realign_drap
11622 && crtl->drap_reg
11623 && crtl->args.internal_arg_pointer == rtl
11624 && REGNO (crtl->drap_reg) < FIRST_PSEUDO_REGISTER)
11626 /* If RTL is internal_arg_pointer, which has been optimized
11627 out, use DRAP instead. */
11628 mem_loc_result = based_loc_descr (crtl->drap_reg, 0,
11629 VAR_INIT_STATUS_INITIALIZED);
11631 break;
11633 case SIGN_EXTEND:
11634 case ZERO_EXTEND:
11635 if (GET_MODE_CLASS (mode) != MODE_INT)
11636 break;
11637 op0 = mem_loc_descriptor (XEXP (rtl, 0), GET_MODE (XEXP (rtl, 0)),
11638 mem_mode, VAR_INIT_STATUS_INITIALIZED);
11639 if (op0 == 0)
11640 break;
11641 else if (GET_CODE (rtl) == ZERO_EXTEND
11642 && GET_MODE_SIZE (mode) <= DWARF2_ADDR_SIZE
11643 && GET_MODE_BITSIZE (GET_MODE (XEXP (rtl, 0)))
11644 < HOST_BITS_PER_WIDE_INT
11645 /* If DW_OP_const{1,2,4}u won't be used, it is shorter
11646 to expand zero extend as two shifts instead of
11647 masking. */
11648 && GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0))) <= 4)
11650 enum machine_mode imode = GET_MODE (XEXP (rtl, 0));
11651 mem_loc_result = op0;
11652 add_loc_descr (&mem_loc_result,
11653 int_loc_descriptor (GET_MODE_MASK (imode)));
11654 add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_and, 0, 0));
11656 else if (GET_MODE_SIZE (mode) <= DWARF2_ADDR_SIZE)
11658 int shift = DWARF2_ADDR_SIZE
11659 - GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0)));
11660 shift *= BITS_PER_UNIT;
11661 if (GET_CODE (rtl) == SIGN_EXTEND)
11662 op = DW_OP_shra;
11663 else
11664 op = DW_OP_shr;
11665 mem_loc_result = op0;
11666 add_loc_descr (&mem_loc_result, int_loc_descriptor (shift));
11667 add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_shl, 0, 0));
11668 add_loc_descr (&mem_loc_result, int_loc_descriptor (shift));
11669 add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
11671 else if (!dwarf_strict)
11673 dw_die_ref type_die1, type_die2;
11674 dw_loc_descr_ref cvt;
11676 type_die1 = base_type_for_mode (GET_MODE (XEXP (rtl, 0)),
11677 GET_CODE (rtl) == ZERO_EXTEND);
11678 if (type_die1 == NULL)
11679 break;
11680 type_die2 = base_type_for_mode (mode, 1);
11681 if (type_die2 == NULL)
11682 break;
11683 mem_loc_result = op0;
11684 cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
11685 cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
11686 cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die1;
11687 cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
11688 add_loc_descr (&mem_loc_result, cvt);
11689 cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
11690 cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
11691 cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die2;
11692 cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
11693 add_loc_descr (&mem_loc_result, cvt);
11695 break;
11697 case MEM:
11699 rtx new_rtl = avoid_constant_pool_reference (rtl);
11700 if (new_rtl != rtl)
11702 mem_loc_result = mem_loc_descriptor (new_rtl, mode, mem_mode,
11703 initialized);
11704 if (mem_loc_result != NULL)
11705 return mem_loc_result;
11708 mem_loc_result = mem_loc_descriptor (XEXP (rtl, 0),
11709 get_address_mode (rtl), mode,
11710 VAR_INIT_STATUS_INITIALIZED);
11711 if (mem_loc_result == NULL)
11712 mem_loc_result = tls_mem_loc_descriptor (rtl);
11713 if (mem_loc_result != NULL)
11715 if (GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE
11716 || GET_MODE_CLASS (mode) != MODE_INT)
11718 dw_die_ref type_die;
11719 dw_loc_descr_ref deref;
11721 if (dwarf_strict)
11722 return NULL;
11723 type_die
11724 = base_type_for_mode (mode, GET_MODE_CLASS (mode) == MODE_INT);
11725 if (type_die == NULL)
11726 return NULL;
11727 deref = new_loc_descr (DW_OP_GNU_deref_type,
11728 GET_MODE_SIZE (mode), 0);
11729 deref->dw_loc_oprnd2.val_class = dw_val_class_die_ref;
11730 deref->dw_loc_oprnd2.v.val_die_ref.die = type_die;
11731 deref->dw_loc_oprnd2.v.val_die_ref.external = 0;
11732 add_loc_descr (&mem_loc_result, deref);
11734 else if (GET_MODE_SIZE (mode) == DWARF2_ADDR_SIZE)
11735 add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_deref, 0, 0));
11736 else
11737 add_loc_descr (&mem_loc_result,
11738 new_loc_descr (DW_OP_deref_size,
11739 GET_MODE_SIZE (mode), 0));
11741 break;
11743 case LO_SUM:
11744 return mem_loc_descriptor (XEXP (rtl, 1), mode, mem_mode, initialized);
11746 case LABEL_REF:
11747 /* Some ports can transform a symbol ref into a label ref, because
11748 the symbol ref is too far away and has to be dumped into a constant
11749 pool. */
11750 case CONST:
11751 case SYMBOL_REF:
11752 if (GET_MODE_CLASS (mode) != MODE_INT
11753 || (GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE
11754 #ifdef POINTERS_EXTEND_UNSIGNED
11755 && (mode != Pmode || mem_mode == VOIDmode)
11756 #endif
11758 break;
11759 if (GET_CODE (rtl) == SYMBOL_REF
11760 && SYMBOL_REF_TLS_MODEL (rtl) != TLS_MODEL_NONE)
11762 dw_loc_descr_ref temp;
11764 /* If this is not defined, we have no way to emit the data. */
11765 if (!targetm.have_tls || !targetm.asm_out.output_dwarf_dtprel)
11766 break;
11768 /* We used to emit DW_OP_addr here, but that's wrong, since
11769 DW_OP_addr should be relocated by the debug info consumer,
11770 while DW_OP_GNU_push_tls_address operand should not. */
11771 temp = new_loc_descr (DWARF2_ADDR_SIZE == 4
11772 ? DW_OP_const4u : DW_OP_const8u, 0, 0);
11773 temp->dw_loc_oprnd1.val_class = dw_val_class_addr;
11774 temp->dw_loc_oprnd1.v.val_addr = rtl;
11775 temp->dtprel = true;
11777 mem_loc_result = new_loc_descr (DW_OP_GNU_push_tls_address, 0, 0);
11778 add_loc_descr (&mem_loc_result, temp);
11780 break;
11783 if (!const_ok_for_output (rtl))
11784 break;
11786 symref:
11787 mem_loc_result = new_loc_descr (DW_OP_addr, 0, 0);
11788 mem_loc_result->dw_loc_oprnd1.val_class = dw_val_class_addr;
11789 mem_loc_result->dw_loc_oprnd1.v.val_addr = rtl;
11790 VEC_safe_push (rtx, gc, used_rtx_array, rtl);
11791 break;
11793 case CONCAT:
11794 case CONCATN:
11795 case VAR_LOCATION:
11796 case DEBUG_IMPLICIT_PTR:
11797 expansion_failed (NULL_TREE, rtl,
11798 "CONCAT/CONCATN/VAR_LOCATION is handled only by loc_descriptor");
11799 return 0;
11801 case ENTRY_VALUE:
11802 if (dwarf_strict)
11803 return NULL;
11804 if (REG_P (ENTRY_VALUE_EXP (rtl)))
11806 if (GET_MODE_CLASS (mode) != MODE_INT
11807 || GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE)
11808 op0 = mem_loc_descriptor (ENTRY_VALUE_EXP (rtl), mode,
11809 VOIDmode, VAR_INIT_STATUS_INITIALIZED);
11810 else
11812 = one_reg_loc_descriptor (dbx_reg_number (ENTRY_VALUE_EXP (rtl)),
11813 VAR_INIT_STATUS_INITIALIZED);
11815 else if (MEM_P (ENTRY_VALUE_EXP (rtl))
11816 && REG_P (XEXP (ENTRY_VALUE_EXP (rtl), 0)))
11818 op0 = mem_loc_descriptor (ENTRY_VALUE_EXP (rtl), mode,
11819 VOIDmode, VAR_INIT_STATUS_INITIALIZED);
11820 if (op0 && op0->dw_loc_opc == DW_OP_fbreg)
11821 return NULL;
11823 else
11824 gcc_unreachable ();
11825 if (op0 == NULL)
11826 return NULL;
11827 mem_loc_result = new_loc_descr (DW_OP_GNU_entry_value, 0, 0);
11828 mem_loc_result->dw_loc_oprnd1.val_class = dw_val_class_loc;
11829 mem_loc_result->dw_loc_oprnd1.v.val_loc = op0;
11830 break;
11832 case DEBUG_PARAMETER_REF:
11833 mem_loc_result = parameter_ref_descriptor (rtl);
11834 break;
11836 case PRE_MODIFY:
11837 /* Extract the PLUS expression nested inside and fall into
11838 PLUS code below. */
11839 rtl = XEXP (rtl, 1);
11840 goto plus;
11842 case PRE_INC:
11843 case PRE_DEC:
11844 /* Turn these into a PLUS expression and fall into the PLUS code
11845 below. */
11846 rtl = gen_rtx_PLUS (mode, XEXP (rtl, 0),
11847 GEN_INT (GET_CODE (rtl) == PRE_INC
11848 ? GET_MODE_UNIT_SIZE (mem_mode)
11849 : -GET_MODE_UNIT_SIZE (mem_mode)));
11851 /* ... fall through ... */
11853 case PLUS:
11854 plus:
11855 if (is_based_loc (rtl)
11856 && GET_MODE_SIZE (mode) <= DWARF2_ADDR_SIZE
11857 && GET_MODE_CLASS (mode) == MODE_INT)
11858 mem_loc_result = based_loc_descr (XEXP (rtl, 0),
11859 INTVAL (XEXP (rtl, 1)),
11860 VAR_INIT_STATUS_INITIALIZED);
11861 else
11863 mem_loc_result = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
11864 VAR_INIT_STATUS_INITIALIZED);
11865 if (mem_loc_result == 0)
11866 break;
11868 if (CONST_INT_P (XEXP (rtl, 1))
11869 && GET_MODE_SIZE (mode) <= DWARF2_ADDR_SIZE)
11870 loc_descr_plus_const (&mem_loc_result, INTVAL (XEXP (rtl, 1)));
11871 else
11873 op1 = mem_loc_descriptor (XEXP (rtl, 1), mode, mem_mode,
11874 VAR_INIT_STATUS_INITIALIZED);
11875 if (op1 == 0)
11876 break;
11877 add_loc_descr (&mem_loc_result, op1);
11878 add_loc_descr (&mem_loc_result,
11879 new_loc_descr (DW_OP_plus, 0, 0));
11882 break;
11884 /* If a pseudo-reg is optimized away, it is possible for it to
11885 be replaced with a MEM containing a multiply or shift. */
11886 case MINUS:
11887 op = DW_OP_minus;
11888 goto do_binop;
11890 case MULT:
11891 op = DW_OP_mul;
11892 goto do_binop;
11894 case DIV:
11895 if (!dwarf_strict
11896 && GET_MODE_CLASS (mode) == MODE_INT
11897 && GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE)
11899 mem_loc_result = typed_binop (DW_OP_div, rtl,
11900 base_type_for_mode (mode, 0),
11901 mode, mem_mode);
11902 break;
11904 op = DW_OP_div;
11905 goto do_binop;
11907 case UMOD:
11908 op = DW_OP_mod;
11909 goto do_binop;
11911 case ASHIFT:
11912 op = DW_OP_shl;
11913 goto do_shift;
11915 case ASHIFTRT:
11916 op = DW_OP_shra;
11917 goto do_shift;
11919 case LSHIFTRT:
11920 op = DW_OP_shr;
11921 goto do_shift;
11923 do_shift:
11924 if (GET_MODE_CLASS (mode) != MODE_INT)
11925 break;
11926 op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
11927 VAR_INIT_STATUS_INITIALIZED);
11929 rtx rtlop1 = XEXP (rtl, 1);
11930 if (GET_MODE (rtlop1) != VOIDmode
11931 && GET_MODE_BITSIZE (GET_MODE (rtlop1))
11932 < GET_MODE_BITSIZE (mode))
11933 rtlop1 = gen_rtx_ZERO_EXTEND (mode, rtlop1);
11934 op1 = mem_loc_descriptor (rtlop1, mode, mem_mode,
11935 VAR_INIT_STATUS_INITIALIZED);
11938 if (op0 == 0 || op1 == 0)
11939 break;
11941 mem_loc_result = op0;
11942 add_loc_descr (&mem_loc_result, op1);
11943 add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
11944 break;
11946 case AND:
11947 op = DW_OP_and;
11948 goto do_binop;
11950 case IOR:
11951 op = DW_OP_or;
11952 goto do_binop;
11954 case XOR:
11955 op = DW_OP_xor;
11956 goto do_binop;
11958 do_binop:
11959 op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
11960 VAR_INIT_STATUS_INITIALIZED);
11961 op1 = mem_loc_descriptor (XEXP (rtl, 1), mode, mem_mode,
11962 VAR_INIT_STATUS_INITIALIZED);
11964 if (op0 == 0 || op1 == 0)
11965 break;
11967 mem_loc_result = op0;
11968 add_loc_descr (&mem_loc_result, op1);
11969 add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
11970 break;
11972 case MOD:
11973 if (GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE && !dwarf_strict)
11975 mem_loc_result = typed_binop (DW_OP_mod, rtl,
11976 base_type_for_mode (mode, 0),
11977 mode, mem_mode);
11978 break;
11981 op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
11982 VAR_INIT_STATUS_INITIALIZED);
11983 op1 = mem_loc_descriptor (XEXP (rtl, 1), mode, mem_mode,
11984 VAR_INIT_STATUS_INITIALIZED);
11986 if (op0 == 0 || op1 == 0)
11987 break;
11989 mem_loc_result = op0;
11990 add_loc_descr (&mem_loc_result, op1);
11991 add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_over, 0, 0));
11992 add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_over, 0, 0));
11993 add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_div, 0, 0));
11994 add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_mul, 0, 0));
11995 add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_minus, 0, 0));
11996 break;
11998 case UDIV:
11999 if (!dwarf_strict && GET_MODE_CLASS (mode) == MODE_INT)
12001 if (GET_MODE_CLASS (mode) > DWARF2_ADDR_SIZE)
12003 op = DW_OP_div;
12004 goto do_binop;
12006 mem_loc_result = typed_binop (DW_OP_div, rtl,
12007 base_type_for_mode (mode, 1),
12008 mode, mem_mode);
12010 break;
12012 case NOT:
12013 op = DW_OP_not;
12014 goto do_unop;
12016 case ABS:
12017 op = DW_OP_abs;
12018 goto do_unop;
12020 case NEG:
12021 op = DW_OP_neg;
12022 goto do_unop;
12024 do_unop:
12025 op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode,
12026 VAR_INIT_STATUS_INITIALIZED);
12028 if (op0 == 0)
12029 break;
12031 mem_loc_result = op0;
12032 add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
12033 break;
12035 case CONST_INT:
12036 if (GET_MODE_SIZE (mode) <= DWARF2_ADDR_SIZE
12037 #ifdef POINTERS_EXTEND_UNSIGNED
12038 || (mode == Pmode
12039 && mem_mode != VOIDmode
12040 && trunc_int_for_mode (INTVAL (rtl), ptr_mode) == INTVAL (rtl))
12041 #endif
12044 mem_loc_result = int_loc_descriptor (INTVAL (rtl));
12045 break;
12047 if (!dwarf_strict
12048 && (GET_MODE_BITSIZE (mode) == HOST_BITS_PER_WIDE_INT
12049 || GET_MODE_BITSIZE (mode) == 2 * HOST_BITS_PER_WIDE_INT))
12051 dw_die_ref type_die = base_type_for_mode (mode, 1);
12052 enum machine_mode amode;
12053 if (type_die == NULL)
12054 return NULL;
12055 amode = mode_for_size (DWARF2_ADDR_SIZE * BITS_PER_UNIT,
12056 MODE_INT, 0);
12057 if (INTVAL (rtl) >= 0
12058 && amode != BLKmode
12059 && trunc_int_for_mode (INTVAL (rtl), amode) == INTVAL (rtl)
12060 /* const DW_OP_GNU_convert <XXX> vs.
12061 DW_OP_GNU_const_type <XXX, 1, const>. */
12062 && size_of_int_loc_descriptor (INTVAL (rtl)) + 1 + 1
12063 < (unsigned long) 1 + 1 + 1 + GET_MODE_SIZE (mode))
12065 mem_loc_result = int_loc_descriptor (INTVAL (rtl));
12066 op0 = new_loc_descr (DW_OP_GNU_convert, 0, 0);
12067 op0->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
12068 op0->dw_loc_oprnd1.v.val_die_ref.die = type_die;
12069 op0->dw_loc_oprnd1.v.val_die_ref.external = 0;
12070 add_loc_descr (&mem_loc_result, op0);
12071 return mem_loc_result;
12073 mem_loc_result = new_loc_descr (DW_OP_GNU_const_type, 0,
12074 INTVAL (rtl));
12075 mem_loc_result->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
12076 mem_loc_result->dw_loc_oprnd1.v.val_die_ref.die = type_die;
12077 mem_loc_result->dw_loc_oprnd1.v.val_die_ref.external = 0;
12078 if (GET_MODE_BITSIZE (mode) == HOST_BITS_PER_WIDE_INT)
12079 mem_loc_result->dw_loc_oprnd2.val_class = dw_val_class_const;
12080 else
12082 mem_loc_result->dw_loc_oprnd2.val_class
12083 = dw_val_class_const_double;
12084 mem_loc_result->dw_loc_oprnd2.v.val_double
12085 = shwi_to_double_int (INTVAL (rtl));
12088 break;
12090 case CONST_DOUBLE:
12091 if (!dwarf_strict)
12093 dw_die_ref type_die;
12095 /* Note that a CONST_DOUBLE rtx could represent either an integer
12096 or a floating-point constant. A CONST_DOUBLE is used whenever
12097 the constant requires more than one word in order to be
12098 adequately represented. We output CONST_DOUBLEs as blocks. */
12099 if (mode == VOIDmode
12100 || (GET_MODE (rtl) == VOIDmode
12101 && GET_MODE_BITSIZE (mode) != 2 * HOST_BITS_PER_WIDE_INT))
12102 break;
12103 type_die = base_type_for_mode (mode,
12104 GET_MODE_CLASS (mode) == MODE_INT);
12105 if (type_die == NULL)
12106 return NULL;
12107 mem_loc_result = new_loc_descr (DW_OP_GNU_const_type, 0, 0);
12108 mem_loc_result->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
12109 mem_loc_result->dw_loc_oprnd1.v.val_die_ref.die = type_die;
12110 mem_loc_result->dw_loc_oprnd1.v.val_die_ref.external = 0;
12111 if (SCALAR_FLOAT_MODE_P (mode))
12113 unsigned int length = GET_MODE_SIZE (mode);
12114 unsigned char *array
12115 = (unsigned char*) ggc_alloc_atomic (length);
12117 insert_float (rtl, array);
12118 mem_loc_result->dw_loc_oprnd2.val_class = dw_val_class_vec;
12119 mem_loc_result->dw_loc_oprnd2.v.val_vec.length = length / 4;
12120 mem_loc_result->dw_loc_oprnd2.v.val_vec.elt_size = 4;
12121 mem_loc_result->dw_loc_oprnd2.v.val_vec.array = array;
12123 else
12125 mem_loc_result->dw_loc_oprnd2.val_class
12126 = dw_val_class_const_double;
12127 mem_loc_result->dw_loc_oprnd2.v.val_double
12128 = rtx_to_double_int (rtl);
12131 break;
12133 case EQ:
12134 mem_loc_result = scompare_loc_descriptor (DW_OP_eq, rtl, mem_mode);
12135 break;
12137 case GE:
12138 mem_loc_result = scompare_loc_descriptor (DW_OP_ge, rtl, mem_mode);
12139 break;
12141 case GT:
12142 mem_loc_result = scompare_loc_descriptor (DW_OP_gt, rtl, mem_mode);
12143 break;
12145 case LE:
12146 mem_loc_result = scompare_loc_descriptor (DW_OP_le, rtl, mem_mode);
12147 break;
12149 case LT:
12150 mem_loc_result = scompare_loc_descriptor (DW_OP_lt, rtl, mem_mode);
12151 break;
12153 case NE:
12154 mem_loc_result = scompare_loc_descriptor (DW_OP_ne, rtl, mem_mode);
12155 break;
12157 case GEU:
12158 mem_loc_result = ucompare_loc_descriptor (DW_OP_ge, rtl, mem_mode);
12159 break;
12161 case GTU:
12162 mem_loc_result = ucompare_loc_descriptor (DW_OP_gt, rtl, mem_mode);
12163 break;
12165 case LEU:
12166 mem_loc_result = ucompare_loc_descriptor (DW_OP_le, rtl, mem_mode);
12167 break;
12169 case LTU:
12170 mem_loc_result = ucompare_loc_descriptor (DW_OP_lt, rtl, mem_mode);
12171 break;
12173 case UMIN:
12174 case UMAX:
12175 if (GET_MODE_CLASS (mode) != MODE_INT)
12176 break;
12177 /* FALLTHRU */
12178 case SMIN:
12179 case SMAX:
12180 mem_loc_result = minmax_loc_descriptor (rtl, mode, mem_mode);
12181 break;
12183 case ZERO_EXTRACT:
12184 case SIGN_EXTRACT:
12185 if (CONST_INT_P (XEXP (rtl, 1))
12186 && CONST_INT_P (XEXP (rtl, 2))
12187 && ((unsigned) INTVAL (XEXP (rtl, 1))
12188 + (unsigned) INTVAL (XEXP (rtl, 2))
12189 <= GET_MODE_BITSIZE (mode))
12190 && GET_MODE_CLASS (mode) == MODE_INT
12191 && GET_MODE_SIZE (mode) <= DWARF2_ADDR_SIZE
12192 && GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0))) <= DWARF2_ADDR_SIZE)
12194 int shift, size;
12195 op0 = mem_loc_descriptor (XEXP (rtl, 0), GET_MODE (XEXP (rtl, 0)),
12196 mem_mode, VAR_INIT_STATUS_INITIALIZED);
12197 if (op0 == 0)
12198 break;
12199 if (GET_CODE (rtl) == SIGN_EXTRACT)
12200 op = DW_OP_shra;
12201 else
12202 op = DW_OP_shr;
12203 mem_loc_result = op0;
12204 size = INTVAL (XEXP (rtl, 1));
12205 shift = INTVAL (XEXP (rtl, 2));
12206 if (BITS_BIG_ENDIAN)
12207 shift = GET_MODE_BITSIZE (GET_MODE (XEXP (rtl, 0)))
12208 - shift - size;
12209 if (shift + size != (int) DWARF2_ADDR_SIZE)
12211 add_loc_descr (&mem_loc_result,
12212 int_loc_descriptor (DWARF2_ADDR_SIZE
12213 - shift - size));
12214 add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_shl, 0, 0));
12216 if (size != (int) DWARF2_ADDR_SIZE)
12218 add_loc_descr (&mem_loc_result,
12219 int_loc_descriptor (DWARF2_ADDR_SIZE - size));
12220 add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
12223 break;
12225 case IF_THEN_ELSE:
12227 dw_loc_descr_ref op2, bra_node, drop_node;
12228 op0 = mem_loc_descriptor (XEXP (rtl, 0),
12229 GET_MODE (XEXP (rtl, 0)) == VOIDmode
12230 ? word_mode : GET_MODE (XEXP (rtl, 0)),
12231 mem_mode, VAR_INIT_STATUS_INITIALIZED);
12232 op1 = mem_loc_descriptor (XEXP (rtl, 1), mode, mem_mode,
12233 VAR_INIT_STATUS_INITIALIZED);
12234 op2 = mem_loc_descriptor (XEXP (rtl, 2), mode, mem_mode,
12235 VAR_INIT_STATUS_INITIALIZED);
12236 if (op0 == NULL || op1 == NULL || op2 == NULL)
12237 break;
12239 mem_loc_result = op1;
12240 add_loc_descr (&mem_loc_result, op2);
12241 add_loc_descr (&mem_loc_result, op0);
12242 bra_node = new_loc_descr (DW_OP_bra, 0, 0);
12243 add_loc_descr (&mem_loc_result, bra_node);
12244 add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_swap, 0, 0));
12245 drop_node = new_loc_descr (DW_OP_drop, 0, 0);
12246 add_loc_descr (&mem_loc_result, drop_node);
12247 bra_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
12248 bra_node->dw_loc_oprnd1.v.val_loc = drop_node;
12250 break;
12252 case FLOAT_EXTEND:
12253 case FLOAT_TRUNCATE:
12254 case FLOAT:
12255 case UNSIGNED_FLOAT:
12256 case FIX:
12257 case UNSIGNED_FIX:
12258 if (!dwarf_strict)
12260 dw_die_ref type_die;
12261 dw_loc_descr_ref cvt;
12263 op0 = mem_loc_descriptor (XEXP (rtl, 0), GET_MODE (XEXP (rtl, 0)),
12264 mem_mode, VAR_INIT_STATUS_INITIALIZED);
12265 if (op0 == NULL)
12266 break;
12267 if (GET_MODE_CLASS (GET_MODE (XEXP (rtl, 0))) == MODE_INT
12268 && (GET_CODE (rtl) == FLOAT
12269 || GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0)))
12270 <= DWARF2_ADDR_SIZE))
12272 type_die = base_type_for_mode (GET_MODE (XEXP (rtl, 0)),
12273 GET_CODE (rtl) == UNSIGNED_FLOAT);
12274 if (type_die == NULL)
12275 break;
12276 cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
12277 cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
12278 cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
12279 cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
12280 add_loc_descr (&op0, cvt);
12282 type_die = base_type_for_mode (mode, GET_CODE (rtl) == UNSIGNED_FIX);
12283 if (type_die == NULL)
12284 break;
12285 cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0);
12286 cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
12287 cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die;
12288 cvt->dw_loc_oprnd1.v.val_die_ref.external = 0;
12289 add_loc_descr (&op0, cvt);
12290 if (GET_MODE_CLASS (mode) == MODE_INT
12291 && (GET_CODE (rtl) == FIX
12292 || GET_MODE_SIZE (mode) < DWARF2_ADDR_SIZE))
12294 op0 = convert_descriptor_to_mode (mode, op0);
12295 if (op0 == NULL)
12296 break;
12298 mem_loc_result = op0;
12300 break;
12302 case CLZ:
12303 case CTZ:
12304 case FFS:
12305 mem_loc_result = clz_loc_descriptor (rtl, mode, mem_mode);
12306 break;
12308 case POPCOUNT:
12309 case PARITY:
12310 mem_loc_result = popcount_loc_descriptor (rtl, mode, mem_mode);
12311 break;
12313 case BSWAP:
12314 mem_loc_result = bswap_loc_descriptor (rtl, mode, mem_mode);
12315 break;
12317 case ROTATE:
12318 case ROTATERT:
12319 mem_loc_result = rotate_loc_descriptor (rtl, mode, mem_mode);
12320 break;
12322 case COMPARE:
12323 case TRUNCATE:
12324 /* In theory, we could implement the above. */
12325 /* DWARF cannot represent the unsigned compare operations
12326 natively. */
12327 case SS_MULT:
12328 case US_MULT:
12329 case SS_DIV:
12330 case US_DIV:
12331 case SS_PLUS:
12332 case US_PLUS:
12333 case SS_MINUS:
12334 case US_MINUS:
12335 case SS_NEG:
12336 case US_NEG:
12337 case SS_ABS:
12338 case SS_ASHIFT:
12339 case US_ASHIFT:
12340 case SS_TRUNCATE:
12341 case US_TRUNCATE:
12342 case UNORDERED:
12343 case ORDERED:
12344 case UNEQ:
12345 case UNGE:
12346 case UNGT:
12347 case UNLE:
12348 case UNLT:
12349 case LTGT:
12350 case FRACT_CONVERT:
12351 case UNSIGNED_FRACT_CONVERT:
12352 case SAT_FRACT:
12353 case UNSIGNED_SAT_FRACT:
12354 case SQRT:
12355 case ASM_OPERANDS:
12356 case VEC_MERGE:
12357 case VEC_SELECT:
12358 case VEC_CONCAT:
12359 case VEC_DUPLICATE:
12360 case UNSPEC:
12361 case HIGH:
12362 case FMA:
12363 case STRICT_LOW_PART:
12364 case CONST_VECTOR:
12365 case CONST_FIXED:
12366 case CLRSB:
12367 /* If delegitimize_address couldn't do anything with the UNSPEC, we
12368 can't express it in the debug info. This can happen e.g. with some
12369 TLS UNSPECs. */
12370 break;
12372 case CONST_STRING:
12373 resolve_one_addr (&rtl, NULL);
12374 goto symref;
12376 default:
12377 #ifdef ENABLE_CHECKING
12378 print_rtl (stderr, rtl);
12379 gcc_unreachable ();
12380 #else
12381 break;
12382 #endif
12385 if (mem_loc_result && initialized == VAR_INIT_STATUS_UNINITIALIZED)
12386 add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
12388 return mem_loc_result;
12391 /* Return a descriptor that describes the concatenation of two locations.
12392 This is typically a complex variable. */
12394 static dw_loc_descr_ref
12395 concat_loc_descriptor (rtx x0, rtx x1, enum var_init_status initialized)
12397 dw_loc_descr_ref cc_loc_result = NULL;
12398 dw_loc_descr_ref x0_ref
12399 = loc_descriptor (x0, VOIDmode, VAR_INIT_STATUS_INITIALIZED);
12400 dw_loc_descr_ref x1_ref
12401 = loc_descriptor (x1, VOIDmode, VAR_INIT_STATUS_INITIALIZED);
12403 if (x0_ref == 0 || x1_ref == 0)
12404 return 0;
12406 cc_loc_result = x0_ref;
12407 add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x0)));
12409 add_loc_descr (&cc_loc_result, x1_ref);
12410 add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x1)));
12412 if (initialized == VAR_INIT_STATUS_UNINITIALIZED)
12413 add_loc_descr (&cc_loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
12415 return cc_loc_result;
12418 /* Return a descriptor that describes the concatenation of N
12419 locations. */
12421 static dw_loc_descr_ref
12422 concatn_loc_descriptor (rtx concatn, enum var_init_status initialized)
12424 unsigned int i;
12425 dw_loc_descr_ref cc_loc_result = NULL;
12426 unsigned int n = XVECLEN (concatn, 0);
12428 for (i = 0; i < n; ++i)
12430 dw_loc_descr_ref ref;
12431 rtx x = XVECEXP (concatn, 0, i);
12433 ref = loc_descriptor (x, VOIDmode, VAR_INIT_STATUS_INITIALIZED);
12434 if (ref == NULL)
12435 return NULL;
12437 add_loc_descr (&cc_loc_result, ref);
12438 add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x)));
12441 if (cc_loc_result && initialized == VAR_INIT_STATUS_UNINITIALIZED)
12442 add_loc_descr (&cc_loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
12444 return cc_loc_result;
12447 /* Helper function for loc_descriptor. Return DW_OP_GNU_implicit_pointer
12448 for DEBUG_IMPLICIT_PTR RTL. */
12450 static dw_loc_descr_ref
12451 implicit_ptr_descriptor (rtx rtl, HOST_WIDE_INT offset)
12453 dw_loc_descr_ref ret;
12454 dw_die_ref ref;
12456 if (dwarf_strict)
12457 return NULL;
12458 gcc_assert (TREE_CODE (DEBUG_IMPLICIT_PTR_DECL (rtl)) == VAR_DECL
12459 || TREE_CODE (DEBUG_IMPLICIT_PTR_DECL (rtl)) == PARM_DECL
12460 || TREE_CODE (DEBUG_IMPLICIT_PTR_DECL (rtl)) == RESULT_DECL);
12461 ref = lookup_decl_die (DEBUG_IMPLICIT_PTR_DECL (rtl));
12462 ret = new_loc_descr (DW_OP_GNU_implicit_pointer, 0, offset);
12463 ret->dw_loc_oprnd2.val_class = dw_val_class_const;
12464 if (ref)
12466 ret->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
12467 ret->dw_loc_oprnd1.v.val_die_ref.die = ref;
12468 ret->dw_loc_oprnd1.v.val_die_ref.external = 0;
12470 else
12472 ret->dw_loc_oprnd1.val_class = dw_val_class_decl_ref;
12473 ret->dw_loc_oprnd1.v.val_decl_ref = DEBUG_IMPLICIT_PTR_DECL (rtl);
12475 return ret;
12478 /* Output a proper Dwarf location descriptor for a variable or parameter
12479 which is either allocated in a register or in a memory location. For a
12480 register, we just generate an OP_REG and the register number. For a
12481 memory location we provide a Dwarf postfix expression describing how to
12482 generate the (dynamic) address of the object onto the address stack.
12484 MODE is mode of the decl if this loc_descriptor is going to be used in
12485 .debug_loc section where DW_OP_stack_value and DW_OP_implicit_value are
12486 allowed, VOIDmode otherwise.
12488 If we don't know how to describe it, return 0. */
12490 static dw_loc_descr_ref
12491 loc_descriptor (rtx rtl, enum machine_mode mode,
12492 enum var_init_status initialized)
12494 dw_loc_descr_ref loc_result = NULL;
12496 switch (GET_CODE (rtl))
12498 case SUBREG:
12499 /* The case of a subreg may arise when we have a local (register)
12500 variable or a formal (register) parameter which doesn't quite fill
12501 up an entire register. For now, just assume that it is
12502 legitimate to make the Dwarf info refer to the whole register which
12503 contains the given subreg. */
12504 if (REG_P (SUBREG_REG (rtl)) && subreg_lowpart_p (rtl))
12505 loc_result = loc_descriptor (SUBREG_REG (rtl),
12506 GET_MODE (SUBREG_REG (rtl)), initialized);
12507 else
12508 goto do_default;
12509 break;
12511 case REG:
12512 loc_result = reg_loc_descriptor (rtl, initialized);
12513 break;
12515 case MEM:
12516 loc_result = mem_loc_descriptor (XEXP (rtl, 0), get_address_mode (rtl),
12517 GET_MODE (rtl), initialized);
12518 if (loc_result == NULL)
12519 loc_result = tls_mem_loc_descriptor (rtl);
12520 if (loc_result == NULL)
12522 rtx new_rtl = avoid_constant_pool_reference (rtl);
12523 if (new_rtl != rtl)
12524 loc_result = loc_descriptor (new_rtl, mode, initialized);
12526 break;
12528 case CONCAT:
12529 loc_result = concat_loc_descriptor (XEXP (rtl, 0), XEXP (rtl, 1),
12530 initialized);
12531 break;
12533 case CONCATN:
12534 loc_result = concatn_loc_descriptor (rtl, initialized);
12535 break;
12537 case VAR_LOCATION:
12538 /* Single part. */
12539 if (GET_CODE (PAT_VAR_LOCATION_LOC (rtl)) != PARALLEL)
12541 rtx loc = PAT_VAR_LOCATION_LOC (rtl);
12542 if (GET_CODE (loc) == EXPR_LIST)
12543 loc = XEXP (loc, 0);
12544 loc_result = loc_descriptor (loc, mode, initialized);
12545 break;
12548 rtl = XEXP (rtl, 1);
12549 /* FALLTHRU */
12551 case PARALLEL:
12553 rtvec par_elems = XVEC (rtl, 0);
12554 int num_elem = GET_NUM_ELEM (par_elems);
12555 enum machine_mode mode;
12556 int i;
12558 /* Create the first one, so we have something to add to. */
12559 loc_result = loc_descriptor (XEXP (RTVEC_ELT (par_elems, 0), 0),
12560 VOIDmode, initialized);
12561 if (loc_result == NULL)
12562 return NULL;
12563 mode = GET_MODE (XEXP (RTVEC_ELT (par_elems, 0), 0));
12564 add_loc_descr_op_piece (&loc_result, GET_MODE_SIZE (mode));
12565 for (i = 1; i < num_elem; i++)
12567 dw_loc_descr_ref temp;
12569 temp = loc_descriptor (XEXP (RTVEC_ELT (par_elems, i), 0),
12570 VOIDmode, initialized);
12571 if (temp == NULL)
12572 return NULL;
12573 add_loc_descr (&loc_result, temp);
12574 mode = GET_MODE (XEXP (RTVEC_ELT (par_elems, i), 0));
12575 add_loc_descr_op_piece (&loc_result, GET_MODE_SIZE (mode));
12578 break;
12580 case CONST_INT:
12581 if (mode != VOIDmode && mode != BLKmode)
12582 loc_result = address_of_int_loc_descriptor (GET_MODE_SIZE (mode),
12583 INTVAL (rtl));
12584 break;
12586 case CONST_DOUBLE:
12587 if (mode == VOIDmode)
12588 mode = GET_MODE (rtl);
12590 if (mode != VOIDmode && (dwarf_version >= 4 || !dwarf_strict))
12592 gcc_assert (mode == GET_MODE (rtl) || VOIDmode == GET_MODE (rtl));
12594 /* Note that a CONST_DOUBLE rtx could represent either an integer
12595 or a floating-point constant. A CONST_DOUBLE is used whenever
12596 the constant requires more than one word in order to be
12597 adequately represented. We output CONST_DOUBLEs as blocks. */
12598 loc_result = new_loc_descr (DW_OP_implicit_value,
12599 GET_MODE_SIZE (mode), 0);
12600 if (SCALAR_FLOAT_MODE_P (mode))
12602 unsigned int length = GET_MODE_SIZE (mode);
12603 unsigned char *array
12604 = (unsigned char*) ggc_alloc_atomic (length);
12606 insert_float (rtl, array);
12607 loc_result->dw_loc_oprnd2.val_class = dw_val_class_vec;
12608 loc_result->dw_loc_oprnd2.v.val_vec.length = length / 4;
12609 loc_result->dw_loc_oprnd2.v.val_vec.elt_size = 4;
12610 loc_result->dw_loc_oprnd2.v.val_vec.array = array;
12612 else
12614 loc_result->dw_loc_oprnd2.val_class = dw_val_class_const_double;
12615 loc_result->dw_loc_oprnd2.v.val_double
12616 = rtx_to_double_int (rtl);
12619 break;
12621 case CONST_VECTOR:
12622 if (mode == VOIDmode)
12623 mode = GET_MODE (rtl);
12625 if (mode != VOIDmode && (dwarf_version >= 4 || !dwarf_strict))
12627 unsigned int elt_size = GET_MODE_UNIT_SIZE (GET_MODE (rtl));
12628 unsigned int length = CONST_VECTOR_NUNITS (rtl);
12629 unsigned char *array = (unsigned char *)
12630 ggc_alloc_atomic (length * elt_size);
12631 unsigned int i;
12632 unsigned char *p;
12634 gcc_assert (mode == GET_MODE (rtl) || VOIDmode == GET_MODE (rtl));
12635 switch (GET_MODE_CLASS (mode))
12637 case MODE_VECTOR_INT:
12638 for (i = 0, p = array; i < length; i++, p += elt_size)
12640 rtx elt = CONST_VECTOR_ELT (rtl, i);
12641 double_int val = rtx_to_double_int (elt);
12643 if (elt_size <= sizeof (HOST_WIDE_INT))
12644 insert_int (double_int_to_shwi (val), elt_size, p);
12645 else
12647 gcc_assert (elt_size == 2 * sizeof (HOST_WIDE_INT));
12648 insert_double (val, p);
12651 break;
12653 case MODE_VECTOR_FLOAT:
12654 for (i = 0, p = array; i < length; i++, p += elt_size)
12656 rtx elt = CONST_VECTOR_ELT (rtl, i);
12657 insert_float (elt, p);
12659 break;
12661 default:
12662 gcc_unreachable ();
12665 loc_result = new_loc_descr (DW_OP_implicit_value,
12666 length * elt_size, 0);
12667 loc_result->dw_loc_oprnd2.val_class = dw_val_class_vec;
12668 loc_result->dw_loc_oprnd2.v.val_vec.length = length;
12669 loc_result->dw_loc_oprnd2.v.val_vec.elt_size = elt_size;
12670 loc_result->dw_loc_oprnd2.v.val_vec.array = array;
12672 break;
12674 case CONST:
12675 if (mode == VOIDmode
12676 || GET_CODE (XEXP (rtl, 0)) == CONST_INT
12677 || GET_CODE (XEXP (rtl, 0)) == CONST_DOUBLE
12678 || GET_CODE (XEXP (rtl, 0)) == CONST_VECTOR)
12680 loc_result = loc_descriptor (XEXP (rtl, 0), mode, initialized);
12681 break;
12683 /* FALLTHROUGH */
12684 case SYMBOL_REF:
12685 if (!const_ok_for_output (rtl))
12686 break;
12687 case LABEL_REF:
12688 if (mode != VOIDmode && GET_MODE_SIZE (mode) == DWARF2_ADDR_SIZE
12689 && (dwarf_version >= 4 || !dwarf_strict))
12691 loc_result = new_loc_descr (DW_OP_addr, 0, 0);
12692 loc_result->dw_loc_oprnd1.val_class = dw_val_class_addr;
12693 loc_result->dw_loc_oprnd1.v.val_addr = rtl;
12694 add_loc_descr (&loc_result, new_loc_descr (DW_OP_stack_value, 0, 0));
12695 VEC_safe_push (rtx, gc, used_rtx_array, rtl);
12697 break;
12699 case DEBUG_IMPLICIT_PTR:
12700 loc_result = implicit_ptr_descriptor (rtl, 0);
12701 break;
12703 case PLUS:
12704 if (GET_CODE (XEXP (rtl, 0)) == DEBUG_IMPLICIT_PTR
12705 && CONST_INT_P (XEXP (rtl, 1)))
12707 loc_result
12708 = implicit_ptr_descriptor (XEXP (rtl, 0), INTVAL (XEXP (rtl, 1)));
12709 break;
12711 /* FALLTHRU */
12712 do_default:
12713 default:
12714 if ((GET_MODE_CLASS (mode) == MODE_INT && GET_MODE (rtl) == mode
12715 && GET_MODE_SIZE (GET_MODE (rtl)) <= DWARF2_ADDR_SIZE
12716 && dwarf_version >= 4)
12717 || (!dwarf_strict && mode != VOIDmode && mode != BLKmode))
12719 /* Value expression. */
12720 loc_result = mem_loc_descriptor (rtl, mode, VOIDmode, initialized);
12721 if (loc_result)
12722 add_loc_descr (&loc_result,
12723 new_loc_descr (DW_OP_stack_value, 0, 0));
12725 break;
12728 return loc_result;
12731 /* We need to figure out what section we should use as the base for the
12732 address ranges where a given location is valid.
12733 1. If this particular DECL has a section associated with it, use that.
12734 2. If this function has a section associated with it, use that.
12735 3. Otherwise, use the text section.
12736 XXX: If you split a variable across multiple sections, we won't notice. */
12738 static const char *
12739 secname_for_decl (const_tree decl)
12741 const char *secname;
12743 if (VAR_OR_FUNCTION_DECL_P (decl) && DECL_SECTION_NAME (decl))
12745 tree sectree = DECL_SECTION_NAME (decl);
12746 secname = TREE_STRING_POINTER (sectree);
12748 else if (current_function_decl && DECL_SECTION_NAME (current_function_decl))
12750 tree sectree = DECL_SECTION_NAME (current_function_decl);
12751 secname = TREE_STRING_POINTER (sectree);
12753 else if (cfun && in_cold_section_p)
12754 secname = crtl->subsections.cold_section_label;
12755 else
12756 secname = text_section_label;
12758 return secname;
12761 /* Return true when DECL_BY_REFERENCE is defined and set for DECL. */
12763 static bool
12764 decl_by_reference_p (tree decl)
12766 return ((TREE_CODE (decl) == PARM_DECL || TREE_CODE (decl) == RESULT_DECL
12767 || TREE_CODE (decl) == VAR_DECL)
12768 && DECL_BY_REFERENCE (decl));
12771 /* Helper function for dw_loc_list. Compute proper Dwarf location descriptor
12772 for VARLOC. */
12774 static dw_loc_descr_ref
12775 dw_loc_list_1 (tree loc, rtx varloc, int want_address,
12776 enum var_init_status initialized)
12778 int have_address = 0;
12779 dw_loc_descr_ref descr;
12780 enum machine_mode mode;
12782 if (want_address != 2)
12784 gcc_assert (GET_CODE (varloc) == VAR_LOCATION);
12785 /* Single part. */
12786 if (GET_CODE (PAT_VAR_LOCATION_LOC (varloc)) != PARALLEL)
12788 varloc = PAT_VAR_LOCATION_LOC (varloc);
12789 if (GET_CODE (varloc) == EXPR_LIST)
12790 varloc = XEXP (varloc, 0);
12791 mode = GET_MODE (varloc);
12792 if (MEM_P (varloc))
12794 rtx addr = XEXP (varloc, 0);
12795 descr = mem_loc_descriptor (addr, get_address_mode (varloc),
12796 mode, initialized);
12797 if (descr)
12798 have_address = 1;
12799 else
12801 rtx x = avoid_constant_pool_reference (varloc);
12802 if (x != varloc)
12803 descr = mem_loc_descriptor (x, mode, VOIDmode,
12804 initialized);
12807 else
12808 descr = mem_loc_descriptor (varloc, mode, VOIDmode, initialized);
12810 else
12811 return 0;
12813 else
12815 if (GET_CODE (varloc) == VAR_LOCATION)
12816 mode = DECL_MODE (PAT_VAR_LOCATION_DECL (varloc));
12817 else
12818 mode = DECL_MODE (loc);
12819 descr = loc_descriptor (varloc, mode, initialized);
12820 have_address = 1;
12823 if (!descr)
12824 return 0;
12826 if (want_address == 2 && !have_address
12827 && (dwarf_version >= 4 || !dwarf_strict))
12829 if (int_size_in_bytes (TREE_TYPE (loc)) > DWARF2_ADDR_SIZE)
12831 expansion_failed (loc, NULL_RTX,
12832 "DWARF address size mismatch");
12833 return 0;
12835 add_loc_descr (&descr, new_loc_descr (DW_OP_stack_value, 0, 0));
12836 have_address = 1;
12838 /* Show if we can't fill the request for an address. */
12839 if (want_address && !have_address)
12841 expansion_failed (loc, NULL_RTX,
12842 "Want address and only have value");
12843 return 0;
12846 /* If we've got an address and don't want one, dereference. */
12847 if (!want_address && have_address)
12849 HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (loc));
12850 enum dwarf_location_atom op;
12852 if (size > DWARF2_ADDR_SIZE || size == -1)
12854 expansion_failed (loc, NULL_RTX,
12855 "DWARF address size mismatch");
12856 return 0;
12858 else if (size == DWARF2_ADDR_SIZE)
12859 op = DW_OP_deref;
12860 else
12861 op = DW_OP_deref_size;
12863 add_loc_descr (&descr, new_loc_descr (op, size, 0));
12866 return descr;
12869 /* Create a DW_OP_piece or DW_OP_bit_piece for bitsize, or return NULL
12870 if it is not possible. */
12872 static dw_loc_descr_ref
12873 new_loc_descr_op_bit_piece (HOST_WIDE_INT bitsize, HOST_WIDE_INT offset)
12875 if ((bitsize % BITS_PER_UNIT) == 0 && offset == 0)
12876 return new_loc_descr (DW_OP_piece, bitsize / BITS_PER_UNIT, 0);
12877 else if (dwarf_version >= 3 || !dwarf_strict)
12878 return new_loc_descr (DW_OP_bit_piece, bitsize, offset);
12879 else
12880 return NULL;
12883 /* Helper function for dw_loc_list. Compute proper Dwarf location descriptor
12884 for VAR_LOC_NOTE for variable DECL that has been optimized by SRA. */
12886 static dw_loc_descr_ref
12887 dw_sra_loc_expr (tree decl, rtx loc)
12889 rtx p;
12890 unsigned int padsize = 0;
12891 dw_loc_descr_ref descr, *descr_tail;
12892 unsigned HOST_WIDE_INT decl_size;
12893 rtx varloc;
12894 enum var_init_status initialized;
12896 if (DECL_SIZE (decl) == NULL
12897 || !host_integerp (DECL_SIZE (decl), 1))
12898 return NULL;
12900 decl_size = tree_low_cst (DECL_SIZE (decl), 1);
12901 descr = NULL;
12902 descr_tail = &descr;
12904 for (p = loc; p; p = XEXP (p, 1))
12906 unsigned int bitsize = decl_piece_bitsize (p);
12907 rtx loc_note = *decl_piece_varloc_ptr (p);
12908 dw_loc_descr_ref cur_descr;
12909 dw_loc_descr_ref *tail, last = NULL;
12910 unsigned int opsize = 0;
12912 if (loc_note == NULL_RTX
12913 || NOTE_VAR_LOCATION_LOC (loc_note) == NULL_RTX)
12915 padsize += bitsize;
12916 continue;
12918 initialized = NOTE_VAR_LOCATION_STATUS (loc_note);
12919 varloc = NOTE_VAR_LOCATION (loc_note);
12920 cur_descr = dw_loc_list_1 (decl, varloc, 2, initialized);
12921 if (cur_descr == NULL)
12923 padsize += bitsize;
12924 continue;
12927 /* Check that cur_descr either doesn't use
12928 DW_OP_*piece operations, or their sum is equal
12929 to bitsize. Otherwise we can't embed it. */
12930 for (tail = &cur_descr; *tail != NULL;
12931 tail = &(*tail)->dw_loc_next)
12932 if ((*tail)->dw_loc_opc == DW_OP_piece)
12934 opsize += (*tail)->dw_loc_oprnd1.v.val_unsigned
12935 * BITS_PER_UNIT;
12936 last = *tail;
12938 else if ((*tail)->dw_loc_opc == DW_OP_bit_piece)
12940 opsize += (*tail)->dw_loc_oprnd1.v.val_unsigned;
12941 last = *tail;
12944 if (last != NULL && opsize != bitsize)
12946 padsize += bitsize;
12947 continue;
12950 /* If there is a hole, add DW_OP_*piece after empty DWARF
12951 expression, which means that those bits are optimized out. */
12952 if (padsize)
12954 if (padsize > decl_size)
12955 return NULL;
12956 decl_size -= padsize;
12957 *descr_tail = new_loc_descr_op_bit_piece (padsize, 0);
12958 if (*descr_tail == NULL)
12959 return NULL;
12960 descr_tail = &(*descr_tail)->dw_loc_next;
12961 padsize = 0;
12963 *descr_tail = cur_descr;
12964 descr_tail = tail;
12965 if (bitsize > decl_size)
12966 return NULL;
12967 decl_size -= bitsize;
12968 if (last == NULL)
12970 HOST_WIDE_INT offset = 0;
12971 if (GET_CODE (varloc) == VAR_LOCATION
12972 && GET_CODE (PAT_VAR_LOCATION_LOC (varloc)) != PARALLEL)
12974 varloc = PAT_VAR_LOCATION_LOC (varloc);
12975 if (GET_CODE (varloc) == EXPR_LIST)
12976 varloc = XEXP (varloc, 0);
12980 if (GET_CODE (varloc) == CONST
12981 || GET_CODE (varloc) == SIGN_EXTEND
12982 || GET_CODE (varloc) == ZERO_EXTEND)
12983 varloc = XEXP (varloc, 0);
12984 else if (GET_CODE (varloc) == SUBREG)
12985 varloc = SUBREG_REG (varloc);
12986 else
12987 break;
12989 while (1);
12990 /* DW_OP_bit_size offset should be zero for register
12991 or implicit location descriptions and empty location
12992 descriptions, but for memory addresses needs big endian
12993 adjustment. */
12994 if (MEM_P (varloc))
12996 unsigned HOST_WIDE_INT memsize
12997 = MEM_SIZE (varloc) * BITS_PER_UNIT;
12998 if (memsize != bitsize)
13000 if (BYTES_BIG_ENDIAN != WORDS_BIG_ENDIAN
13001 && (memsize > BITS_PER_WORD || bitsize > BITS_PER_WORD))
13002 return NULL;
13003 if (memsize < bitsize)
13004 return NULL;
13005 if (BITS_BIG_ENDIAN)
13006 offset = memsize - bitsize;
13010 *descr_tail = new_loc_descr_op_bit_piece (bitsize, offset);
13011 if (*descr_tail == NULL)
13012 return NULL;
13013 descr_tail = &(*descr_tail)->dw_loc_next;
13017 /* If there were any non-empty expressions, add padding till the end of
13018 the decl. */
13019 if (descr != NULL && decl_size != 0)
13021 *descr_tail = new_loc_descr_op_bit_piece (decl_size, 0);
13022 if (*descr_tail == NULL)
13023 return NULL;
13025 return descr;
13028 /* Return the dwarf representation of the location list LOC_LIST of
13029 DECL. WANT_ADDRESS has the same meaning as in loc_list_from_tree
13030 function. */
13032 static dw_loc_list_ref
13033 dw_loc_list (var_loc_list *loc_list, tree decl, int want_address)
13035 const char *endname, *secname;
13036 rtx varloc;
13037 enum var_init_status initialized;
13038 struct var_loc_node *node;
13039 dw_loc_descr_ref descr;
13040 char label_id[MAX_ARTIFICIAL_LABEL_BYTES];
13041 dw_loc_list_ref list = NULL;
13042 dw_loc_list_ref *listp = &list;
13044 /* Now that we know what section we are using for a base,
13045 actually construct the list of locations.
13046 The first location information is what is passed to the
13047 function that creates the location list, and the remaining
13048 locations just get added on to that list.
13049 Note that we only know the start address for a location
13050 (IE location changes), so to build the range, we use
13051 the range [current location start, next location start].
13052 This means we have to special case the last node, and generate
13053 a range of [last location start, end of function label]. */
13055 secname = secname_for_decl (decl);
13057 for (node = loc_list->first; node; node = node->next)
13058 if (GET_CODE (node->loc) == EXPR_LIST
13059 || NOTE_VAR_LOCATION_LOC (node->loc) != NULL_RTX)
13061 if (GET_CODE (node->loc) == EXPR_LIST)
13063 /* This requires DW_OP_{,bit_}piece, which is not usable
13064 inside DWARF expressions. */
13065 if (want_address != 2)
13066 continue;
13067 descr = dw_sra_loc_expr (decl, node->loc);
13068 if (descr == NULL)
13069 continue;
13071 else
13073 initialized = NOTE_VAR_LOCATION_STATUS (node->loc);
13074 varloc = NOTE_VAR_LOCATION (node->loc);
13075 descr = dw_loc_list_1 (decl, varloc, want_address, initialized);
13077 if (descr)
13079 bool range_across_switch = false;
13080 /* If section switch happens in between node->label
13081 and node->next->label (or end of function) and
13082 we can't emit it as a single entry list,
13083 emit two ranges, first one ending at the end
13084 of first partition and second one starting at the
13085 beginning of second partition. */
13086 if (node == loc_list->last_before_switch
13087 && (node != loc_list->first || loc_list->first->next)
13088 && current_function_decl)
13090 endname = cfun->fde->dw_fde_end;
13091 range_across_switch = true;
13093 /* The variable has a location between NODE->LABEL and
13094 NODE->NEXT->LABEL. */
13095 else if (node->next)
13096 endname = node->next->label;
13097 /* If the variable has a location at the last label
13098 it keeps its location until the end of function. */
13099 else if (!current_function_decl)
13100 endname = text_end_label;
13101 else
13103 ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_END_LABEL,
13104 current_function_funcdef_no);
13105 endname = ggc_strdup (label_id);
13108 *listp = new_loc_list (descr, node->label, endname, secname);
13109 if (TREE_CODE (decl) == PARM_DECL
13110 && node == loc_list->first
13111 && GET_CODE (node->loc) == NOTE
13112 && strcmp (node->label, endname) == 0)
13113 (*listp)->force = true;
13114 listp = &(*listp)->dw_loc_next;
13116 if (range_across_switch)
13118 if (GET_CODE (node->loc) == EXPR_LIST)
13119 descr = dw_sra_loc_expr (decl, node->loc);
13120 else
13122 initialized = NOTE_VAR_LOCATION_STATUS (node->loc);
13123 varloc = NOTE_VAR_LOCATION (node->loc);
13124 descr = dw_loc_list_1 (decl, varloc, want_address,
13125 initialized);
13127 gcc_assert (descr);
13128 /* The variable has a location between NODE->LABEL and
13129 NODE->NEXT->LABEL. */
13130 if (node->next)
13131 endname = node->next->label;
13132 else
13133 endname = cfun->fde->dw_fde_second_end;
13134 *listp = new_loc_list (descr,
13135 cfun->fde->dw_fde_second_begin,
13136 endname, secname);
13137 listp = &(*listp)->dw_loc_next;
13142 /* Try to avoid the overhead of a location list emitting a location
13143 expression instead, but only if we didn't have more than one
13144 location entry in the first place. If some entries were not
13145 representable, we don't want to pretend a single entry that was
13146 applies to the entire scope in which the variable is
13147 available. */
13148 if (list && loc_list->first->next)
13149 gen_llsym (list);
13151 return list;
13154 /* Return if the loc_list has only single element and thus can be represented
13155 as location description. */
13157 static bool
13158 single_element_loc_list_p (dw_loc_list_ref list)
13160 gcc_assert (!list->dw_loc_next || list->ll_symbol);
13161 return !list->ll_symbol;
13164 /* To each location in list LIST add loc descr REF. */
13166 static void
13167 add_loc_descr_to_each (dw_loc_list_ref list, dw_loc_descr_ref ref)
13169 dw_loc_descr_ref copy;
13170 add_loc_descr (&list->expr, ref);
13171 list = list->dw_loc_next;
13172 while (list)
13174 copy = ggc_alloc_dw_loc_descr_node ();
13175 memcpy (copy, ref, sizeof (dw_loc_descr_node));
13176 add_loc_descr (&list->expr, copy);
13177 while (copy->dw_loc_next)
13179 dw_loc_descr_ref new_copy = ggc_alloc_dw_loc_descr_node ();
13180 memcpy (new_copy, copy->dw_loc_next, sizeof (dw_loc_descr_node));
13181 copy->dw_loc_next = new_copy;
13182 copy = new_copy;
13184 list = list->dw_loc_next;
13188 /* Given two lists RET and LIST
13189 produce location list that is result of adding expression in LIST
13190 to expression in RET on each possition in program.
13191 Might be destructive on both RET and LIST.
13193 TODO: We handle only simple cases of RET or LIST having at most one
13194 element. General case would inolve sorting the lists in program order
13195 and merging them that will need some additional work.
13196 Adding that will improve quality of debug info especially for SRA-ed
13197 structures. */
13199 static void
13200 add_loc_list (dw_loc_list_ref *ret, dw_loc_list_ref list)
13202 if (!list)
13203 return;
13204 if (!*ret)
13206 *ret = list;
13207 return;
13209 if (!list->dw_loc_next)
13211 add_loc_descr_to_each (*ret, list->expr);
13212 return;
13214 if (!(*ret)->dw_loc_next)
13216 add_loc_descr_to_each (list, (*ret)->expr);
13217 *ret = list;
13218 return;
13220 expansion_failed (NULL_TREE, NULL_RTX,
13221 "Don't know how to merge two non-trivial"
13222 " location lists.\n");
13223 *ret = NULL;
13224 return;
13227 /* LOC is constant expression. Try a luck, look it up in constant
13228 pool and return its loc_descr of its address. */
13230 static dw_loc_descr_ref
13231 cst_pool_loc_descr (tree loc)
13233 /* Get an RTL for this, if something has been emitted. */
13234 rtx rtl = lookup_constant_def (loc);
13236 if (!rtl || !MEM_P (rtl))
13238 gcc_assert (!rtl);
13239 return 0;
13241 gcc_assert (GET_CODE (XEXP (rtl, 0)) == SYMBOL_REF);
13243 /* TODO: We might get more coverage if we was actually delaying expansion
13244 of all expressions till end of compilation when constant pools are fully
13245 populated. */
13246 if (!TREE_ASM_WRITTEN (SYMBOL_REF_DECL (XEXP (rtl, 0))))
13248 expansion_failed (loc, NULL_RTX,
13249 "CST value in contant pool but not marked.");
13250 return 0;
13252 return mem_loc_descriptor (XEXP (rtl, 0), get_address_mode (rtl),
13253 GET_MODE (rtl), VAR_INIT_STATUS_INITIALIZED);
13256 /* Return dw_loc_list representing address of addr_expr LOC
13257 by looking for innder INDIRECT_REF expression and turing it
13258 into simple arithmetics. */
13260 static dw_loc_list_ref
13261 loc_list_for_address_of_addr_expr_of_indirect_ref (tree loc, bool toplev)
13263 tree obj, offset;
13264 HOST_WIDE_INT bitsize, bitpos, bytepos;
13265 enum machine_mode mode;
13266 int volatilep;
13267 int unsignedp = TYPE_UNSIGNED (TREE_TYPE (loc));
13268 dw_loc_list_ref list_ret = NULL, list_ret1 = NULL;
13270 obj = get_inner_reference (TREE_OPERAND (loc, 0),
13271 &bitsize, &bitpos, &offset, &mode,
13272 &unsignedp, &volatilep, false);
13273 STRIP_NOPS (obj);
13274 if (bitpos % BITS_PER_UNIT)
13276 expansion_failed (loc, NULL_RTX, "bitfield access");
13277 return 0;
13279 if (!INDIRECT_REF_P (obj))
13281 expansion_failed (obj,
13282 NULL_RTX, "no indirect ref in inner refrence");
13283 return 0;
13285 if (!offset && !bitpos)
13286 list_ret = loc_list_from_tree (TREE_OPERAND (obj, 0), toplev ? 2 : 1);
13287 else if (toplev
13288 && int_size_in_bytes (TREE_TYPE (loc)) <= DWARF2_ADDR_SIZE
13289 && (dwarf_version >= 4 || !dwarf_strict))
13291 list_ret = loc_list_from_tree (TREE_OPERAND (obj, 0), 0);
13292 if (!list_ret)
13293 return 0;
13294 if (offset)
13296 /* Variable offset. */
13297 list_ret1 = loc_list_from_tree (offset, 0);
13298 if (list_ret1 == 0)
13299 return 0;
13300 add_loc_list (&list_ret, list_ret1);
13301 if (!list_ret)
13302 return 0;
13303 add_loc_descr_to_each (list_ret,
13304 new_loc_descr (DW_OP_plus, 0, 0));
13306 bytepos = bitpos / BITS_PER_UNIT;
13307 if (bytepos > 0)
13308 add_loc_descr_to_each (list_ret,
13309 new_loc_descr (DW_OP_plus_uconst,
13310 bytepos, 0));
13311 else if (bytepos < 0)
13312 loc_list_plus_const (list_ret, bytepos);
13313 add_loc_descr_to_each (list_ret,
13314 new_loc_descr (DW_OP_stack_value, 0, 0));
13316 return list_ret;
13320 /* Generate Dwarf location list representing LOC.
13321 If WANT_ADDRESS is false, expression computing LOC will be computed
13322 If WANT_ADDRESS is 1, expression computing address of LOC will be returned
13323 if WANT_ADDRESS is 2, expression computing address useable in location
13324 will be returned (i.e. DW_OP_reg can be used
13325 to refer to register values). */
13327 static dw_loc_list_ref
13328 loc_list_from_tree (tree loc, int want_address)
13330 dw_loc_descr_ref ret = NULL, ret1 = NULL;
13331 dw_loc_list_ref list_ret = NULL, list_ret1 = NULL;
13332 int have_address = 0;
13333 enum dwarf_location_atom op;
13335 /* ??? Most of the time we do not take proper care for sign/zero
13336 extending the values properly. Hopefully this won't be a real
13337 problem... */
13339 switch (TREE_CODE (loc))
13341 case ERROR_MARK:
13342 expansion_failed (loc, NULL_RTX, "ERROR_MARK");
13343 return 0;
13345 case PLACEHOLDER_EXPR:
13346 /* This case involves extracting fields from an object to determine the
13347 position of other fields. We don't try to encode this here. The
13348 only user of this is Ada, which encodes the needed information using
13349 the names of types. */
13350 expansion_failed (loc, NULL_RTX, "PLACEHOLDER_EXPR");
13351 return 0;
13353 case CALL_EXPR:
13354 expansion_failed (loc, NULL_RTX, "CALL_EXPR");
13355 /* There are no opcodes for these operations. */
13356 return 0;
13358 case PREINCREMENT_EXPR:
13359 case PREDECREMENT_EXPR:
13360 case POSTINCREMENT_EXPR:
13361 case POSTDECREMENT_EXPR:
13362 expansion_failed (loc, NULL_RTX, "PRE/POST INDCREMENT/DECREMENT");
13363 /* There are no opcodes for these operations. */
13364 return 0;
13366 case ADDR_EXPR:
13367 /* If we already want an address, see if there is INDIRECT_REF inside
13368 e.g. for &this->field. */
13369 if (want_address)
13371 list_ret = loc_list_for_address_of_addr_expr_of_indirect_ref
13372 (loc, want_address == 2);
13373 if (list_ret)
13374 have_address = 1;
13375 else if (decl_address_ip_invariant_p (TREE_OPERAND (loc, 0))
13376 && (ret = cst_pool_loc_descr (loc)))
13377 have_address = 1;
13379 /* Otherwise, process the argument and look for the address. */
13380 if (!list_ret && !ret)
13381 list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 1);
13382 else
13384 if (want_address)
13385 expansion_failed (loc, NULL_RTX, "need address of ADDR_EXPR");
13386 return NULL;
13388 break;
13390 case VAR_DECL:
13391 if (DECL_THREAD_LOCAL_P (loc))
13393 rtx rtl;
13394 enum dwarf_location_atom first_op;
13395 enum dwarf_location_atom second_op;
13396 bool dtprel = false;
13398 if (targetm.have_tls)
13400 /* If this is not defined, we have no way to emit the
13401 data. */
13402 if (!targetm.asm_out.output_dwarf_dtprel)
13403 return 0;
13405 /* The way DW_OP_GNU_push_tls_address is specified, we
13406 can only look up addresses of objects in the current
13407 module. We used DW_OP_addr as first op, but that's
13408 wrong, because DW_OP_addr is relocated by the debug
13409 info consumer, while DW_OP_GNU_push_tls_address
13410 operand shouldn't be. */
13411 if (DECL_EXTERNAL (loc) && !targetm.binds_local_p (loc))
13412 return 0;
13413 first_op = DWARF2_ADDR_SIZE == 4 ? DW_OP_const4u : DW_OP_const8u;
13414 dtprel = true;
13415 second_op = DW_OP_GNU_push_tls_address;
13417 else
13419 if (!targetm.emutls.debug_form_tls_address
13420 || !(dwarf_version >= 3 || !dwarf_strict))
13421 return 0;
13422 /* We stuffed the control variable into the DECL_VALUE_EXPR
13423 to signal (via DECL_HAS_VALUE_EXPR_P) that the decl should
13424 no longer appear in gimple code. We used the control
13425 variable in specific so that we could pick it up here. */
13426 loc = DECL_VALUE_EXPR (loc);
13427 first_op = DW_OP_addr;
13428 second_op = DW_OP_form_tls_address;
13431 rtl = rtl_for_decl_location (loc);
13432 if (rtl == NULL_RTX)
13433 return 0;
13435 if (!MEM_P (rtl))
13436 return 0;
13437 rtl = XEXP (rtl, 0);
13438 if (! CONSTANT_P (rtl))
13439 return 0;
13441 ret = new_loc_descr (first_op, 0, 0);
13442 ret->dw_loc_oprnd1.val_class = dw_val_class_addr;
13443 ret->dw_loc_oprnd1.v.val_addr = rtl;
13444 ret->dtprel = dtprel;
13446 ret1 = new_loc_descr (second_op, 0, 0);
13447 add_loc_descr (&ret, ret1);
13449 have_address = 1;
13450 break;
13452 /* FALLTHRU */
13454 case PARM_DECL:
13455 case RESULT_DECL:
13456 if (DECL_HAS_VALUE_EXPR_P (loc))
13457 return loc_list_from_tree (DECL_VALUE_EXPR (loc),
13458 want_address);
13459 /* FALLTHRU */
13461 case FUNCTION_DECL:
13463 rtx rtl;
13464 var_loc_list *loc_list = lookup_decl_loc (loc);
13466 if (loc_list && loc_list->first)
13468 list_ret = dw_loc_list (loc_list, loc, want_address);
13469 have_address = want_address != 0;
13470 break;
13472 rtl = rtl_for_decl_location (loc);
13473 if (rtl == NULL_RTX)
13475 expansion_failed (loc, NULL_RTX, "DECL has no RTL");
13476 return 0;
13478 else if (CONST_INT_P (rtl))
13480 HOST_WIDE_INT val = INTVAL (rtl);
13481 if (TYPE_UNSIGNED (TREE_TYPE (loc)))
13482 val &= GET_MODE_MASK (DECL_MODE (loc));
13483 ret = int_loc_descriptor (val);
13485 else if (GET_CODE (rtl) == CONST_STRING)
13487 expansion_failed (loc, NULL_RTX, "CONST_STRING");
13488 return 0;
13490 else if (CONSTANT_P (rtl) && const_ok_for_output (rtl))
13492 ret = new_loc_descr (DW_OP_addr, 0, 0);
13493 ret->dw_loc_oprnd1.val_class = dw_val_class_addr;
13494 ret->dw_loc_oprnd1.v.val_addr = rtl;
13496 else
13498 enum machine_mode mode, mem_mode;
13500 /* Certain constructs can only be represented at top-level. */
13501 if (want_address == 2)
13503 ret = loc_descriptor (rtl, VOIDmode,
13504 VAR_INIT_STATUS_INITIALIZED);
13505 have_address = 1;
13507 else
13509 mode = GET_MODE (rtl);
13510 mem_mode = VOIDmode;
13511 if (MEM_P (rtl))
13513 mem_mode = mode;
13514 mode = get_address_mode (rtl);
13515 rtl = XEXP (rtl, 0);
13516 have_address = 1;
13518 ret = mem_loc_descriptor (rtl, mode, mem_mode,
13519 VAR_INIT_STATUS_INITIALIZED);
13521 if (!ret)
13522 expansion_failed (loc, rtl,
13523 "failed to produce loc descriptor for rtl");
13526 break;
13528 case MEM_REF:
13529 /* ??? FIXME. */
13530 if (!integer_zerop (TREE_OPERAND (loc, 1)))
13531 return 0;
13532 /* Fallthru. */
13533 case INDIRECT_REF:
13534 list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
13535 have_address = 1;
13536 break;
13538 case COMPOUND_EXPR:
13539 return loc_list_from_tree (TREE_OPERAND (loc, 1), want_address);
13541 CASE_CONVERT:
13542 case VIEW_CONVERT_EXPR:
13543 case SAVE_EXPR:
13544 case MODIFY_EXPR:
13545 return loc_list_from_tree (TREE_OPERAND (loc, 0), want_address);
13547 case COMPONENT_REF:
13548 case BIT_FIELD_REF:
13549 case ARRAY_REF:
13550 case ARRAY_RANGE_REF:
13551 case REALPART_EXPR:
13552 case IMAGPART_EXPR:
13554 tree obj, offset;
13555 HOST_WIDE_INT bitsize, bitpos, bytepos;
13556 enum machine_mode mode;
13557 int volatilep;
13558 int unsignedp = TYPE_UNSIGNED (TREE_TYPE (loc));
13560 obj = get_inner_reference (loc, &bitsize, &bitpos, &offset, &mode,
13561 &unsignedp, &volatilep, false);
13563 gcc_assert (obj != loc);
13565 list_ret = loc_list_from_tree (obj,
13566 want_address == 2
13567 && !bitpos && !offset ? 2 : 1);
13568 /* TODO: We can extract value of the small expression via shifting even
13569 for nonzero bitpos. */
13570 if (list_ret == 0)
13571 return 0;
13572 if (bitpos % BITS_PER_UNIT != 0 || bitsize % BITS_PER_UNIT != 0)
13574 expansion_failed (loc, NULL_RTX,
13575 "bitfield access");
13576 return 0;
13579 if (offset != NULL_TREE)
13581 /* Variable offset. */
13582 list_ret1 = loc_list_from_tree (offset, 0);
13583 if (list_ret1 == 0)
13584 return 0;
13585 add_loc_list (&list_ret, list_ret1);
13586 if (!list_ret)
13587 return 0;
13588 add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_plus, 0, 0));
13591 bytepos = bitpos / BITS_PER_UNIT;
13592 if (bytepos > 0)
13593 add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_plus_uconst, bytepos, 0));
13594 else if (bytepos < 0)
13595 loc_list_plus_const (list_ret, bytepos);
13597 have_address = 1;
13598 break;
13601 case INTEGER_CST:
13602 if ((want_address || !host_integerp (loc, 0))
13603 && (ret = cst_pool_loc_descr (loc)))
13604 have_address = 1;
13605 else if (want_address == 2
13606 && host_integerp (loc, 0)
13607 && (ret = address_of_int_loc_descriptor
13608 (int_size_in_bytes (TREE_TYPE (loc)),
13609 tree_low_cst (loc, 0))))
13610 have_address = 1;
13611 else if (host_integerp (loc, 0))
13612 ret = int_loc_descriptor (tree_low_cst (loc, 0));
13613 else
13615 expansion_failed (loc, NULL_RTX,
13616 "Integer operand is not host integer");
13617 return 0;
13619 break;
13621 case CONSTRUCTOR:
13622 case REAL_CST:
13623 case STRING_CST:
13624 case COMPLEX_CST:
13625 if ((ret = cst_pool_loc_descr (loc)))
13626 have_address = 1;
13627 else
13628 /* We can construct small constants here using int_loc_descriptor. */
13629 expansion_failed (loc, NULL_RTX,
13630 "constructor or constant not in constant pool");
13631 break;
13633 case TRUTH_AND_EXPR:
13634 case TRUTH_ANDIF_EXPR:
13635 case BIT_AND_EXPR:
13636 op = DW_OP_and;
13637 goto do_binop;
13639 case TRUTH_XOR_EXPR:
13640 case BIT_XOR_EXPR:
13641 op = DW_OP_xor;
13642 goto do_binop;
13644 case TRUTH_OR_EXPR:
13645 case TRUTH_ORIF_EXPR:
13646 case BIT_IOR_EXPR:
13647 op = DW_OP_or;
13648 goto do_binop;
13650 case FLOOR_DIV_EXPR:
13651 case CEIL_DIV_EXPR:
13652 case ROUND_DIV_EXPR:
13653 case TRUNC_DIV_EXPR:
13654 if (TYPE_UNSIGNED (TREE_TYPE (loc)))
13655 return 0;
13656 op = DW_OP_div;
13657 goto do_binop;
13659 case MINUS_EXPR:
13660 op = DW_OP_minus;
13661 goto do_binop;
13663 case FLOOR_MOD_EXPR:
13664 case CEIL_MOD_EXPR:
13665 case ROUND_MOD_EXPR:
13666 case TRUNC_MOD_EXPR:
13667 if (TYPE_UNSIGNED (TREE_TYPE (loc)))
13669 op = DW_OP_mod;
13670 goto do_binop;
13672 list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
13673 list_ret1 = loc_list_from_tree (TREE_OPERAND (loc, 1), 0);
13674 if (list_ret == 0 || list_ret1 == 0)
13675 return 0;
13677 add_loc_list (&list_ret, list_ret1);
13678 if (list_ret == 0)
13679 return 0;
13680 add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_over, 0, 0));
13681 add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_over, 0, 0));
13682 add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_div, 0, 0));
13683 add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_mul, 0, 0));
13684 add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_minus, 0, 0));
13685 break;
13687 case MULT_EXPR:
13688 op = DW_OP_mul;
13689 goto do_binop;
13691 case LSHIFT_EXPR:
13692 op = DW_OP_shl;
13693 goto do_binop;
13695 case RSHIFT_EXPR:
13696 op = (TYPE_UNSIGNED (TREE_TYPE (loc)) ? DW_OP_shr : DW_OP_shra);
13697 goto do_binop;
13699 case POINTER_PLUS_EXPR:
13700 case PLUS_EXPR:
13701 if (host_integerp (TREE_OPERAND (loc, 1), 0))
13703 list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
13704 if (list_ret == 0)
13705 return 0;
13707 loc_list_plus_const (list_ret, tree_low_cst (TREE_OPERAND (loc, 1), 0));
13708 break;
13711 op = DW_OP_plus;
13712 goto do_binop;
13714 case LE_EXPR:
13715 if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
13716 return 0;
13718 op = DW_OP_le;
13719 goto do_binop;
13721 case GE_EXPR:
13722 if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
13723 return 0;
13725 op = DW_OP_ge;
13726 goto do_binop;
13728 case LT_EXPR:
13729 if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
13730 return 0;
13732 op = DW_OP_lt;
13733 goto do_binop;
13735 case GT_EXPR:
13736 if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
13737 return 0;
13739 op = DW_OP_gt;
13740 goto do_binop;
13742 case EQ_EXPR:
13743 op = DW_OP_eq;
13744 goto do_binop;
13746 case NE_EXPR:
13747 op = DW_OP_ne;
13748 goto do_binop;
13750 do_binop:
13751 list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
13752 list_ret1 = loc_list_from_tree (TREE_OPERAND (loc, 1), 0);
13753 if (list_ret == 0 || list_ret1 == 0)
13754 return 0;
13756 add_loc_list (&list_ret, list_ret1);
13757 if (list_ret == 0)
13758 return 0;
13759 add_loc_descr_to_each (list_ret, new_loc_descr (op, 0, 0));
13760 break;
13762 case TRUTH_NOT_EXPR:
13763 case BIT_NOT_EXPR:
13764 op = DW_OP_not;
13765 goto do_unop;
13767 case ABS_EXPR:
13768 op = DW_OP_abs;
13769 goto do_unop;
13771 case NEGATE_EXPR:
13772 op = DW_OP_neg;
13773 goto do_unop;
13775 do_unop:
13776 list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
13777 if (list_ret == 0)
13778 return 0;
13780 add_loc_descr_to_each (list_ret, new_loc_descr (op, 0, 0));
13781 break;
13783 case MIN_EXPR:
13784 case MAX_EXPR:
13786 const enum tree_code code =
13787 TREE_CODE (loc) == MIN_EXPR ? GT_EXPR : LT_EXPR;
13789 loc = build3 (COND_EXPR, TREE_TYPE (loc),
13790 build2 (code, integer_type_node,
13791 TREE_OPERAND (loc, 0), TREE_OPERAND (loc, 1)),
13792 TREE_OPERAND (loc, 1), TREE_OPERAND (loc, 0));
13795 /* ... fall through ... */
13797 case COND_EXPR:
13799 dw_loc_descr_ref lhs
13800 = loc_descriptor_from_tree (TREE_OPERAND (loc, 1), 0);
13801 dw_loc_list_ref rhs
13802 = loc_list_from_tree (TREE_OPERAND (loc, 2), 0);
13803 dw_loc_descr_ref bra_node, jump_node, tmp;
13805 list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
13806 if (list_ret == 0 || lhs == 0 || rhs == 0)
13807 return 0;
13809 bra_node = new_loc_descr (DW_OP_bra, 0, 0);
13810 add_loc_descr_to_each (list_ret, bra_node);
13812 add_loc_list (&list_ret, rhs);
13813 jump_node = new_loc_descr (DW_OP_skip, 0, 0);
13814 add_loc_descr_to_each (list_ret, jump_node);
13816 add_loc_descr_to_each (list_ret, lhs);
13817 bra_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
13818 bra_node->dw_loc_oprnd1.v.val_loc = lhs;
13820 /* ??? Need a node to point the skip at. Use a nop. */
13821 tmp = new_loc_descr (DW_OP_nop, 0, 0);
13822 add_loc_descr_to_each (list_ret, tmp);
13823 jump_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
13824 jump_node->dw_loc_oprnd1.v.val_loc = tmp;
13826 break;
13828 case FIX_TRUNC_EXPR:
13829 return 0;
13831 default:
13832 /* Leave front-end specific codes as simply unknown. This comes
13833 up, for instance, with the C STMT_EXPR. */
13834 if ((unsigned int) TREE_CODE (loc)
13835 >= (unsigned int) LAST_AND_UNUSED_TREE_CODE)
13837 expansion_failed (loc, NULL_RTX,
13838 "language specific tree node");
13839 return 0;
13842 #ifdef ENABLE_CHECKING
13843 /* Otherwise this is a generic code; we should just lists all of
13844 these explicitly. We forgot one. */
13845 gcc_unreachable ();
13846 #else
13847 /* In a release build, we want to degrade gracefully: better to
13848 generate incomplete debugging information than to crash. */
13849 return NULL;
13850 #endif
13853 if (!ret && !list_ret)
13854 return 0;
13856 if (want_address == 2 && !have_address
13857 && (dwarf_version >= 4 || !dwarf_strict))
13859 if (int_size_in_bytes (TREE_TYPE (loc)) > DWARF2_ADDR_SIZE)
13861 expansion_failed (loc, NULL_RTX,
13862 "DWARF address size mismatch");
13863 return 0;
13865 if (ret)
13866 add_loc_descr (&ret, new_loc_descr (DW_OP_stack_value, 0, 0));
13867 else
13868 add_loc_descr_to_each (list_ret,
13869 new_loc_descr (DW_OP_stack_value, 0, 0));
13870 have_address = 1;
13872 /* Show if we can't fill the request for an address. */
13873 if (want_address && !have_address)
13875 expansion_failed (loc, NULL_RTX,
13876 "Want address and only have value");
13877 return 0;
13880 gcc_assert (!ret || !list_ret);
13882 /* If we've got an address and don't want one, dereference. */
13883 if (!want_address && have_address)
13885 HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (loc));
13887 if (size > DWARF2_ADDR_SIZE || size == -1)
13889 expansion_failed (loc, NULL_RTX,
13890 "DWARF address size mismatch");
13891 return 0;
13893 else if (size == DWARF2_ADDR_SIZE)
13894 op = DW_OP_deref;
13895 else
13896 op = DW_OP_deref_size;
13898 if (ret)
13899 add_loc_descr (&ret, new_loc_descr (op, size, 0));
13900 else
13901 add_loc_descr_to_each (list_ret, new_loc_descr (op, size, 0));
13903 if (ret)
13904 list_ret = new_loc_list (ret, NULL, NULL, NULL);
13906 return list_ret;
13909 /* Same as above but return only single location expression. */
13910 static dw_loc_descr_ref
13911 loc_descriptor_from_tree (tree loc, int want_address)
13913 dw_loc_list_ref ret = loc_list_from_tree (loc, want_address);
13914 if (!ret)
13915 return NULL;
13916 if (ret->dw_loc_next)
13918 expansion_failed (loc, NULL_RTX,
13919 "Location list where only loc descriptor needed");
13920 return NULL;
13922 return ret->expr;
13925 /* Given a value, round it up to the lowest multiple of `boundary'
13926 which is not less than the value itself. */
13928 static inline HOST_WIDE_INT
13929 ceiling (HOST_WIDE_INT value, unsigned int boundary)
13931 return (((value + boundary - 1) / boundary) * boundary);
13934 /* Given a pointer to what is assumed to be a FIELD_DECL node, return a
13935 pointer to the declared type for the relevant field variable, or return
13936 `integer_type_node' if the given node turns out to be an
13937 ERROR_MARK node. */
13939 static inline tree
13940 field_type (const_tree decl)
13942 tree type;
13944 if (TREE_CODE (decl) == ERROR_MARK)
13945 return integer_type_node;
13947 type = DECL_BIT_FIELD_TYPE (decl);
13948 if (type == NULL_TREE)
13949 type = TREE_TYPE (decl);
13951 return type;
13954 /* Given a pointer to a tree node, return the alignment in bits for
13955 it, or else return BITS_PER_WORD if the node actually turns out to
13956 be an ERROR_MARK node. */
13958 static inline unsigned
13959 simple_type_align_in_bits (const_tree type)
13961 return (TREE_CODE (type) != ERROR_MARK) ? TYPE_ALIGN (type) : BITS_PER_WORD;
13964 static inline unsigned
13965 simple_decl_align_in_bits (const_tree decl)
13967 return (TREE_CODE (decl) != ERROR_MARK) ? DECL_ALIGN (decl) : BITS_PER_WORD;
13970 /* Return the result of rounding T up to ALIGN. */
13972 static inline double_int
13973 round_up_to_align (double_int t, unsigned int align)
13975 double_int alignd = uhwi_to_double_int (align);
13976 t = double_int_add (t, alignd);
13977 t = double_int_add (t, double_int_minus_one);
13978 t = double_int_div (t, alignd, true, TRUNC_DIV_EXPR);
13979 t = double_int_mul (t, alignd);
13980 return t;
13983 /* Given a pointer to a FIELD_DECL, compute and return the byte offset of the
13984 lowest addressed byte of the "containing object" for the given FIELD_DECL,
13985 or return 0 if we are unable to determine what that offset is, either
13986 because the argument turns out to be a pointer to an ERROR_MARK node, or
13987 because the offset is actually variable. (We can't handle the latter case
13988 just yet). */
13990 static HOST_WIDE_INT
13991 field_byte_offset (const_tree decl)
13993 double_int object_offset_in_bits;
13994 double_int object_offset_in_bytes;
13995 double_int bitpos_int;
13997 if (TREE_CODE (decl) == ERROR_MARK)
13998 return 0;
14000 gcc_assert (TREE_CODE (decl) == FIELD_DECL);
14002 /* We cannot yet cope with fields whose positions are variable, so
14003 for now, when we see such things, we simply return 0. Someday, we may
14004 be able to handle such cases, but it will be damn difficult. */
14005 if (TREE_CODE (bit_position (decl)) != INTEGER_CST)
14006 return 0;
14008 bitpos_int = tree_to_double_int (bit_position (decl));
14010 #ifdef PCC_BITFIELD_TYPE_MATTERS
14011 if (PCC_BITFIELD_TYPE_MATTERS)
14013 tree type;
14014 tree field_size_tree;
14015 double_int deepest_bitpos;
14016 double_int field_size_in_bits;
14017 unsigned int type_align_in_bits;
14018 unsigned int decl_align_in_bits;
14019 double_int type_size_in_bits;
14021 type = field_type (decl);
14022 type_size_in_bits = double_int_type_size_in_bits (type);
14023 type_align_in_bits = simple_type_align_in_bits (type);
14025 field_size_tree = DECL_SIZE (decl);
14027 /* The size could be unspecified if there was an error, or for
14028 a flexible array member. */
14029 if (!field_size_tree)
14030 field_size_tree = bitsize_zero_node;
14032 /* If the size of the field is not constant, use the type size. */
14033 if (TREE_CODE (field_size_tree) == INTEGER_CST)
14034 field_size_in_bits = tree_to_double_int (field_size_tree);
14035 else
14036 field_size_in_bits = type_size_in_bits;
14038 decl_align_in_bits = simple_decl_align_in_bits (decl);
14040 /* The GCC front-end doesn't make any attempt to keep track of the
14041 starting bit offset (relative to the start of the containing
14042 structure type) of the hypothetical "containing object" for a
14043 bit-field. Thus, when computing the byte offset value for the
14044 start of the "containing object" of a bit-field, we must deduce
14045 this information on our own. This can be rather tricky to do in
14046 some cases. For example, handling the following structure type
14047 definition when compiling for an i386/i486 target (which only
14048 aligns long long's to 32-bit boundaries) can be very tricky:
14050 struct S { int field1; long long field2:31; };
14052 Fortunately, there is a simple rule-of-thumb which can be used
14053 in such cases. When compiling for an i386/i486, GCC will
14054 allocate 8 bytes for the structure shown above. It decides to
14055 do this based upon one simple rule for bit-field allocation.
14056 GCC allocates each "containing object" for each bit-field at
14057 the first (i.e. lowest addressed) legitimate alignment boundary
14058 (based upon the required minimum alignment for the declared
14059 type of the field) which it can possibly use, subject to the
14060 condition that there is still enough available space remaining
14061 in the containing object (when allocated at the selected point)
14062 to fully accommodate all of the bits of the bit-field itself.
14064 This simple rule makes it obvious why GCC allocates 8 bytes for
14065 each object of the structure type shown above. When looking
14066 for a place to allocate the "containing object" for `field2',
14067 the compiler simply tries to allocate a 64-bit "containing
14068 object" at each successive 32-bit boundary (starting at zero)
14069 until it finds a place to allocate that 64- bit field such that
14070 at least 31 contiguous (and previously unallocated) bits remain
14071 within that selected 64 bit field. (As it turns out, for the
14072 example above, the compiler finds it is OK to allocate the
14073 "containing object" 64-bit field at bit-offset zero within the
14074 structure type.)
14076 Here we attempt to work backwards from the limited set of facts
14077 we're given, and we try to deduce from those facts, where GCC
14078 must have believed that the containing object started (within
14079 the structure type). The value we deduce is then used (by the
14080 callers of this routine) to generate DW_AT_location and
14081 DW_AT_bit_offset attributes for fields (both bit-fields and, in
14082 the case of DW_AT_location, regular fields as well). */
14084 /* Figure out the bit-distance from the start of the structure to
14085 the "deepest" bit of the bit-field. */
14086 deepest_bitpos = double_int_add (bitpos_int, field_size_in_bits);
14088 /* This is the tricky part. Use some fancy footwork to deduce
14089 where the lowest addressed bit of the containing object must
14090 be. */
14091 object_offset_in_bits
14092 = double_int_sub (deepest_bitpos, type_size_in_bits);
14094 /* Round up to type_align by default. This works best for
14095 bitfields. */
14096 object_offset_in_bits
14097 = round_up_to_align (object_offset_in_bits, type_align_in_bits);
14099 if (double_int_ucmp (object_offset_in_bits, bitpos_int) > 0)
14101 object_offset_in_bits
14102 = double_int_sub (deepest_bitpos, type_size_in_bits);
14104 /* Round up to decl_align instead. */
14105 object_offset_in_bits
14106 = round_up_to_align (object_offset_in_bits, decl_align_in_bits);
14109 else
14110 #endif /* PCC_BITFIELD_TYPE_MATTERS */
14111 object_offset_in_bits = bitpos_int;
14113 object_offset_in_bytes
14114 = double_int_div (object_offset_in_bits,
14115 uhwi_to_double_int (BITS_PER_UNIT), true,
14116 TRUNC_DIV_EXPR);
14117 return double_int_to_shwi (object_offset_in_bytes);
14120 /* The following routines define various Dwarf attributes and any data
14121 associated with them. */
14123 /* Add a location description attribute value to a DIE.
14125 This emits location attributes suitable for whole variables and
14126 whole parameters. Note that the location attributes for struct fields are
14127 generated by the routine `data_member_location_attribute' below. */
14129 static inline void
14130 add_AT_location_description (dw_die_ref die, enum dwarf_attribute attr_kind,
14131 dw_loc_list_ref descr)
14133 if (descr == 0)
14134 return;
14135 if (single_element_loc_list_p (descr))
14136 add_AT_loc (die, attr_kind, descr->expr);
14137 else
14138 add_AT_loc_list (die, attr_kind, descr);
14141 /* Add DW_AT_accessibility attribute to DIE if needed. */
14143 static void
14144 add_accessibility_attribute (dw_die_ref die, tree decl)
14146 /* In DWARF3+ the default is DW_ACCESS_private only in DW_TAG_class_type
14147 children, otherwise the default is DW_ACCESS_public. In DWARF2
14148 the default has always been DW_ACCESS_public. */
14149 if (TREE_PROTECTED (decl))
14150 add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_protected);
14151 else if (TREE_PRIVATE (decl))
14153 if (dwarf_version == 2
14154 || die->die_parent == NULL
14155 || die->die_parent->die_tag != DW_TAG_class_type)
14156 add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_private);
14158 else if (dwarf_version > 2
14159 && die->die_parent
14160 && die->die_parent->die_tag == DW_TAG_class_type)
14161 add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_public);
14164 /* Attach the specialized form of location attribute used for data members of
14165 struct and union types. In the special case of a FIELD_DECL node which
14166 represents a bit-field, the "offset" part of this special location
14167 descriptor must indicate the distance in bytes from the lowest-addressed
14168 byte of the containing struct or union type to the lowest-addressed byte of
14169 the "containing object" for the bit-field. (See the `field_byte_offset'
14170 function above).
14172 For any given bit-field, the "containing object" is a hypothetical object
14173 (of some integral or enum type) within which the given bit-field lives. The
14174 type of this hypothetical "containing object" is always the same as the
14175 declared type of the individual bit-field itself (for GCC anyway... the
14176 DWARF spec doesn't actually mandate this). Note that it is the size (in
14177 bytes) of the hypothetical "containing object" which will be given in the
14178 DW_AT_byte_size attribute for this bit-field. (See the
14179 `byte_size_attribute' function below.) It is also used when calculating the
14180 value of the DW_AT_bit_offset attribute. (See the `bit_offset_attribute'
14181 function below.) */
14183 static void
14184 add_data_member_location_attribute (dw_die_ref die, tree decl)
14186 HOST_WIDE_INT offset;
14187 dw_loc_descr_ref loc_descr = 0;
14189 if (TREE_CODE (decl) == TREE_BINFO)
14191 /* We're working on the TAG_inheritance for a base class. */
14192 if (BINFO_VIRTUAL_P (decl) && is_cxx ())
14194 /* For C++ virtual bases we can't just use BINFO_OFFSET, as they
14195 aren't at a fixed offset from all (sub)objects of the same
14196 type. We need to extract the appropriate offset from our
14197 vtable. The following dwarf expression means
14199 BaseAddr = ObAddr + *((*ObAddr) - Offset)
14201 This is specific to the V3 ABI, of course. */
14203 dw_loc_descr_ref tmp;
14205 /* Make a copy of the object address. */
14206 tmp = new_loc_descr (DW_OP_dup, 0, 0);
14207 add_loc_descr (&loc_descr, tmp);
14209 /* Extract the vtable address. */
14210 tmp = new_loc_descr (DW_OP_deref, 0, 0);
14211 add_loc_descr (&loc_descr, tmp);
14213 /* Calculate the address of the offset. */
14214 offset = tree_low_cst (BINFO_VPTR_FIELD (decl), 0);
14215 gcc_assert (offset < 0);
14217 tmp = int_loc_descriptor (-offset);
14218 add_loc_descr (&loc_descr, tmp);
14219 tmp = new_loc_descr (DW_OP_minus, 0, 0);
14220 add_loc_descr (&loc_descr, tmp);
14222 /* Extract the offset. */
14223 tmp = new_loc_descr (DW_OP_deref, 0, 0);
14224 add_loc_descr (&loc_descr, tmp);
14226 /* Add it to the object address. */
14227 tmp = new_loc_descr (DW_OP_plus, 0, 0);
14228 add_loc_descr (&loc_descr, tmp);
14230 else
14231 offset = tree_low_cst (BINFO_OFFSET (decl), 0);
14233 else
14234 offset = field_byte_offset (decl);
14236 if (! loc_descr)
14238 if (dwarf_version > 2)
14240 /* Don't need to output a location expression, just the constant. */
14241 if (offset < 0)
14242 add_AT_int (die, DW_AT_data_member_location, offset);
14243 else
14244 add_AT_unsigned (die, DW_AT_data_member_location, offset);
14245 return;
14247 else
14249 enum dwarf_location_atom op;
14251 /* The DWARF2 standard says that we should assume that the structure
14252 address is already on the stack, so we can specify a structure
14253 field address by using DW_OP_plus_uconst. */
14255 #ifdef MIPS_DEBUGGING_INFO
14256 /* ??? The SGI dwarf reader does not handle the DW_OP_plus_uconst
14257 operator correctly. It works only if we leave the offset on the
14258 stack. */
14259 op = DW_OP_constu;
14260 #else
14261 op = DW_OP_plus_uconst;
14262 #endif
14264 loc_descr = new_loc_descr (op, offset, 0);
14268 add_AT_loc (die, DW_AT_data_member_location, loc_descr);
14271 /* Writes integer values to dw_vec_const array. */
14273 static void
14274 insert_int (HOST_WIDE_INT val, unsigned int size, unsigned char *dest)
14276 while (size != 0)
14278 *dest++ = val & 0xff;
14279 val >>= 8;
14280 --size;
14284 /* Reads integers from dw_vec_const array. Inverse of insert_int. */
14286 static HOST_WIDE_INT
14287 extract_int (const unsigned char *src, unsigned int size)
14289 HOST_WIDE_INT val = 0;
14291 src += size;
14292 while (size != 0)
14294 val <<= 8;
14295 val |= *--src & 0xff;
14296 --size;
14298 return val;
14301 /* Writes double_int values to dw_vec_const array. */
14303 static void
14304 insert_double (double_int val, unsigned char *dest)
14306 unsigned char *p0 = dest;
14307 unsigned char *p1 = dest + sizeof (HOST_WIDE_INT);
14309 if (WORDS_BIG_ENDIAN)
14311 p0 = p1;
14312 p1 = dest;
14315 insert_int ((HOST_WIDE_INT) val.low, sizeof (HOST_WIDE_INT), p0);
14316 insert_int ((HOST_WIDE_INT) val.high, sizeof (HOST_WIDE_INT), p1);
14319 /* Writes floating point values to dw_vec_const array. */
14321 static void
14322 insert_float (const_rtx rtl, unsigned char *array)
14324 REAL_VALUE_TYPE rv;
14325 long val[4];
14326 int i;
14328 REAL_VALUE_FROM_CONST_DOUBLE (rv, rtl);
14329 real_to_target (val, &rv, GET_MODE (rtl));
14331 /* real_to_target puts 32-bit pieces in each long. Pack them. */
14332 for (i = 0; i < GET_MODE_SIZE (GET_MODE (rtl)) / 4; i++)
14334 insert_int (val[i], 4, array);
14335 array += 4;
14339 /* Attach a DW_AT_const_value attribute for a variable or a parameter which
14340 does not have a "location" either in memory or in a register. These
14341 things can arise in GNU C when a constant is passed as an actual parameter
14342 to an inlined function. They can also arise in C++ where declared
14343 constants do not necessarily get memory "homes". */
14345 static bool
14346 add_const_value_attribute (dw_die_ref die, rtx rtl)
14348 switch (GET_CODE (rtl))
14350 case CONST_INT:
14352 HOST_WIDE_INT val = INTVAL (rtl);
14354 if (val < 0)
14355 add_AT_int (die, DW_AT_const_value, val);
14356 else
14357 add_AT_unsigned (die, DW_AT_const_value, (unsigned HOST_WIDE_INT) val);
14359 return true;
14361 case CONST_DOUBLE:
14362 /* Note that a CONST_DOUBLE rtx could represent either an integer or a
14363 floating-point constant. A CONST_DOUBLE is used whenever the
14364 constant requires more than one word in order to be adequately
14365 represented. */
14367 enum machine_mode mode = GET_MODE (rtl);
14369 if (SCALAR_FLOAT_MODE_P (mode))
14371 unsigned int length = GET_MODE_SIZE (mode);
14372 unsigned char *array = (unsigned char *) ggc_alloc_atomic (length);
14374 insert_float (rtl, array);
14375 add_AT_vec (die, DW_AT_const_value, length / 4, 4, array);
14377 else
14378 add_AT_double (die, DW_AT_const_value,
14379 CONST_DOUBLE_HIGH (rtl), CONST_DOUBLE_LOW (rtl));
14381 return true;
14383 case CONST_VECTOR:
14385 enum machine_mode mode = GET_MODE (rtl);
14386 unsigned int elt_size = GET_MODE_UNIT_SIZE (mode);
14387 unsigned int length = CONST_VECTOR_NUNITS (rtl);
14388 unsigned char *array = (unsigned char *) ggc_alloc_atomic
14389 (length * elt_size);
14390 unsigned int i;
14391 unsigned char *p;
14393 switch (GET_MODE_CLASS (mode))
14395 case MODE_VECTOR_INT:
14396 for (i = 0, p = array; i < length; i++, p += elt_size)
14398 rtx elt = CONST_VECTOR_ELT (rtl, i);
14399 double_int val = rtx_to_double_int (elt);
14401 if (elt_size <= sizeof (HOST_WIDE_INT))
14402 insert_int (double_int_to_shwi (val), elt_size, p);
14403 else
14405 gcc_assert (elt_size == 2 * sizeof (HOST_WIDE_INT));
14406 insert_double (val, p);
14409 break;
14411 case MODE_VECTOR_FLOAT:
14412 for (i = 0, p = array; i < length; i++, p += elt_size)
14414 rtx elt = CONST_VECTOR_ELT (rtl, i);
14415 insert_float (elt, p);
14417 break;
14419 default:
14420 gcc_unreachable ();
14423 add_AT_vec (die, DW_AT_const_value, length, elt_size, array);
14425 return true;
14427 case CONST_STRING:
14428 if (dwarf_version >= 4 || !dwarf_strict)
14430 dw_loc_descr_ref loc_result;
14431 resolve_one_addr (&rtl, NULL);
14432 rtl_addr:
14433 loc_result = new_loc_descr (DW_OP_addr, 0, 0);
14434 loc_result->dw_loc_oprnd1.val_class = dw_val_class_addr;
14435 loc_result->dw_loc_oprnd1.v.val_addr = rtl;
14436 add_loc_descr (&loc_result, new_loc_descr (DW_OP_stack_value, 0, 0));
14437 add_AT_loc (die, DW_AT_location, loc_result);
14438 VEC_safe_push (rtx, gc, used_rtx_array, rtl);
14439 return true;
14441 return false;
14443 case CONST:
14444 if (CONSTANT_P (XEXP (rtl, 0)))
14445 return add_const_value_attribute (die, XEXP (rtl, 0));
14446 /* FALLTHROUGH */
14447 case SYMBOL_REF:
14448 if (!const_ok_for_output (rtl))
14449 return false;
14450 case LABEL_REF:
14451 if (dwarf_version >= 4 || !dwarf_strict)
14452 goto rtl_addr;
14453 return false;
14455 case PLUS:
14456 /* In cases where an inlined instance of an inline function is passed
14457 the address of an `auto' variable (which is local to the caller) we
14458 can get a situation where the DECL_RTL of the artificial local
14459 variable (for the inlining) which acts as a stand-in for the
14460 corresponding formal parameter (of the inline function) will look
14461 like (plus:SI (reg:SI FRAME_PTR) (const_int ...)). This is not
14462 exactly a compile-time constant expression, but it isn't the address
14463 of the (artificial) local variable either. Rather, it represents the
14464 *value* which the artificial local variable always has during its
14465 lifetime. We currently have no way to represent such quasi-constant
14466 values in Dwarf, so for now we just punt and generate nothing. */
14467 return false;
14469 case HIGH:
14470 case CONST_FIXED:
14471 return false;
14473 case MEM:
14474 if (GET_CODE (XEXP (rtl, 0)) == CONST_STRING
14475 && MEM_READONLY_P (rtl)
14476 && GET_MODE (rtl) == BLKmode)
14478 add_AT_string (die, DW_AT_const_value, XSTR (XEXP (rtl, 0), 0));
14479 return true;
14481 return false;
14483 default:
14484 /* No other kinds of rtx should be possible here. */
14485 gcc_unreachable ();
14487 return false;
14490 /* Determine whether the evaluation of EXPR references any variables
14491 or functions which aren't otherwise used (and therefore may not be
14492 output). */
14493 static tree
14494 reference_to_unused (tree * tp, int * walk_subtrees,
14495 void * data ATTRIBUTE_UNUSED)
14497 if (! EXPR_P (*tp) && ! CONSTANT_CLASS_P (*tp))
14498 *walk_subtrees = 0;
14500 if (DECL_P (*tp) && ! TREE_PUBLIC (*tp) && ! TREE_USED (*tp)
14501 && ! TREE_ASM_WRITTEN (*tp))
14502 return *tp;
14503 /* ??? The C++ FE emits debug information for using decls, so
14504 putting gcc_unreachable here falls over. See PR31899. For now
14505 be conservative. */
14506 else if (!cgraph_global_info_ready
14507 && (TREE_CODE (*tp) == VAR_DECL || TREE_CODE (*tp) == FUNCTION_DECL))
14508 return *tp;
14509 else if (TREE_CODE (*tp) == VAR_DECL)
14511 struct varpool_node *node = varpool_get_node (*tp);
14512 if (!node || !node->needed)
14513 return *tp;
14515 else if (TREE_CODE (*tp) == FUNCTION_DECL
14516 && (!DECL_EXTERNAL (*tp) || DECL_DECLARED_INLINE_P (*tp)))
14518 /* The call graph machinery must have finished analyzing,
14519 optimizing and gimplifying the CU by now.
14520 So if *TP has no call graph node associated
14521 to it, it means *TP will not be emitted. */
14522 if (!cgraph_get_node (*tp))
14523 return *tp;
14525 else if (TREE_CODE (*tp) == STRING_CST && !TREE_ASM_WRITTEN (*tp))
14526 return *tp;
14528 return NULL_TREE;
14531 /* Generate an RTL constant from a decl initializer INIT with decl type TYPE,
14532 for use in a later add_const_value_attribute call. */
14534 static rtx
14535 rtl_for_decl_init (tree init, tree type)
14537 rtx rtl = NULL_RTX;
14539 STRIP_NOPS (init);
14541 /* If a variable is initialized with a string constant without embedded
14542 zeros, build CONST_STRING. */
14543 if (TREE_CODE (init) == STRING_CST && TREE_CODE (type) == ARRAY_TYPE)
14545 tree enttype = TREE_TYPE (type);
14546 tree domain = TYPE_DOMAIN (type);
14547 enum machine_mode mode = TYPE_MODE (enttype);
14549 if (GET_MODE_CLASS (mode) == MODE_INT && GET_MODE_SIZE (mode) == 1
14550 && domain
14551 && integer_zerop (TYPE_MIN_VALUE (domain))
14552 && compare_tree_int (TYPE_MAX_VALUE (domain),
14553 TREE_STRING_LENGTH (init) - 1) == 0
14554 && ((size_t) TREE_STRING_LENGTH (init)
14555 == strlen (TREE_STRING_POINTER (init)) + 1))
14557 rtl = gen_rtx_CONST_STRING (VOIDmode,
14558 ggc_strdup (TREE_STRING_POINTER (init)));
14559 rtl = gen_rtx_MEM (BLKmode, rtl);
14560 MEM_READONLY_P (rtl) = 1;
14563 /* Other aggregates, and complex values, could be represented using
14564 CONCAT: FIXME! */
14565 else if (AGGREGATE_TYPE_P (type)
14566 || (TREE_CODE (init) == VIEW_CONVERT_EXPR
14567 && AGGREGATE_TYPE_P (TREE_TYPE (TREE_OPERAND (init, 0))))
14568 || TREE_CODE (type) == COMPLEX_TYPE)
14570 /* Vectors only work if their mode is supported by the target.
14571 FIXME: generic vectors ought to work too. */
14572 else if (TREE_CODE (type) == VECTOR_TYPE
14573 && !VECTOR_MODE_P (TYPE_MODE (type)))
14575 /* If the initializer is something that we know will expand into an
14576 immediate RTL constant, expand it now. We must be careful not to
14577 reference variables which won't be output. */
14578 else if (initializer_constant_valid_p (init, type)
14579 && ! walk_tree (&init, reference_to_unused, NULL, NULL))
14581 /* Convert vector CONSTRUCTOR initializers to VECTOR_CST if
14582 possible. */
14583 if (TREE_CODE (type) == VECTOR_TYPE)
14584 switch (TREE_CODE (init))
14586 case VECTOR_CST:
14587 break;
14588 case CONSTRUCTOR:
14589 if (TREE_CONSTANT (init))
14591 VEC(constructor_elt,gc) *elts = CONSTRUCTOR_ELTS (init);
14592 bool constant_p = true;
14593 tree value;
14594 unsigned HOST_WIDE_INT ix;
14596 /* Even when ctor is constant, it might contain non-*_CST
14597 elements (e.g. { 1.0/0.0 - 1.0/0.0, 0.0 }) and those don't
14598 belong into VECTOR_CST nodes. */
14599 FOR_EACH_CONSTRUCTOR_VALUE (elts, ix, value)
14600 if (!CONSTANT_CLASS_P (value))
14602 constant_p = false;
14603 break;
14606 if (constant_p)
14608 init = build_vector_from_ctor (type, elts);
14609 break;
14612 /* FALLTHRU */
14614 default:
14615 return NULL;
14618 rtl = expand_expr (init, NULL_RTX, VOIDmode, EXPAND_INITIALIZER);
14620 /* If expand_expr returns a MEM, it wasn't immediate. */
14621 gcc_assert (!rtl || !MEM_P (rtl));
14624 return rtl;
14627 /* Generate RTL for the variable DECL to represent its location. */
14629 static rtx
14630 rtl_for_decl_location (tree decl)
14632 rtx rtl;
14634 /* Here we have to decide where we are going to say the parameter "lives"
14635 (as far as the debugger is concerned). We only have a couple of
14636 choices. GCC provides us with DECL_RTL and with DECL_INCOMING_RTL.
14638 DECL_RTL normally indicates where the parameter lives during most of the
14639 activation of the function. If optimization is enabled however, this
14640 could be either NULL or else a pseudo-reg. Both of those cases indicate
14641 that the parameter doesn't really live anywhere (as far as the code
14642 generation parts of GCC are concerned) during most of the function's
14643 activation. That will happen (for example) if the parameter is never
14644 referenced within the function.
14646 We could just generate a location descriptor here for all non-NULL
14647 non-pseudo values of DECL_RTL and ignore all of the rest, but we can be
14648 a little nicer than that if we also consider DECL_INCOMING_RTL in cases
14649 where DECL_RTL is NULL or is a pseudo-reg.
14651 Note however that we can only get away with using DECL_INCOMING_RTL as
14652 a backup substitute for DECL_RTL in certain limited cases. In cases
14653 where DECL_ARG_TYPE (decl) indicates the same type as TREE_TYPE (decl),
14654 we can be sure that the parameter was passed using the same type as it is
14655 declared to have within the function, and that its DECL_INCOMING_RTL
14656 points us to a place where a value of that type is passed.
14658 In cases where DECL_ARG_TYPE (decl) and TREE_TYPE (decl) are different,
14659 we cannot (in general) use DECL_INCOMING_RTL as a substitute for DECL_RTL
14660 because in these cases DECL_INCOMING_RTL points us to a value of some
14661 type which is *different* from the type of the parameter itself. Thus,
14662 if we tried to use DECL_INCOMING_RTL to generate a location attribute in
14663 such cases, the debugger would end up (for example) trying to fetch a
14664 `float' from a place which actually contains the first part of a
14665 `double'. That would lead to really incorrect and confusing
14666 output at debug-time.
14668 So, in general, we *do not* use DECL_INCOMING_RTL as a backup for DECL_RTL
14669 in cases where DECL_ARG_TYPE (decl) != TREE_TYPE (decl). There
14670 are a couple of exceptions however. On little-endian machines we can
14671 get away with using DECL_INCOMING_RTL even when DECL_ARG_TYPE (decl) is
14672 not the same as TREE_TYPE (decl), but only when DECL_ARG_TYPE (decl) is
14673 an integral type that is smaller than TREE_TYPE (decl). These cases arise
14674 when (on a little-endian machine) a non-prototyped function has a
14675 parameter declared to be of type `short' or `char'. In such cases,
14676 TREE_TYPE (decl) will be `short' or `char', DECL_ARG_TYPE (decl) will
14677 be `int', and DECL_INCOMING_RTL will point to the lowest-order byte of the
14678 passed `int' value. If the debugger then uses that address to fetch
14679 a `short' or a `char' (on a little-endian machine) the result will be
14680 the correct data, so we allow for such exceptional cases below.
14682 Note that our goal here is to describe the place where the given formal
14683 parameter lives during most of the function's activation (i.e. between the
14684 end of the prologue and the start of the epilogue). We'll do that as best
14685 as we can. Note however that if the given formal parameter is modified
14686 sometime during the execution of the function, then a stack backtrace (at
14687 debug-time) will show the function as having been called with the *new*
14688 value rather than the value which was originally passed in. This happens
14689 rarely enough that it is not a major problem, but it *is* a problem, and
14690 I'd like to fix it.
14692 A future version of dwarf2out.c may generate two additional attributes for
14693 any given DW_TAG_formal_parameter DIE which will describe the "passed
14694 type" and the "passed location" for the given formal parameter in addition
14695 to the attributes we now generate to indicate the "declared type" and the
14696 "active location" for each parameter. This additional set of attributes
14697 could be used by debuggers for stack backtraces. Separately, note that
14698 sometimes DECL_RTL can be NULL and DECL_INCOMING_RTL can be NULL also.
14699 This happens (for example) for inlined-instances of inline function formal
14700 parameters which are never referenced. This really shouldn't be
14701 happening. All PARM_DECL nodes should get valid non-NULL
14702 DECL_INCOMING_RTL values. FIXME. */
14704 /* Use DECL_RTL as the "location" unless we find something better. */
14705 rtl = DECL_RTL_IF_SET (decl);
14707 /* When generating abstract instances, ignore everything except
14708 constants, symbols living in memory, and symbols living in
14709 fixed registers. */
14710 if (! reload_completed)
14712 if (rtl
14713 && (CONSTANT_P (rtl)
14714 || (MEM_P (rtl)
14715 && CONSTANT_P (XEXP (rtl, 0)))
14716 || (REG_P (rtl)
14717 && TREE_CODE (decl) == VAR_DECL
14718 && TREE_STATIC (decl))))
14720 rtl = targetm.delegitimize_address (rtl);
14721 return rtl;
14723 rtl = NULL_RTX;
14725 else if (TREE_CODE (decl) == PARM_DECL)
14727 if (rtl == NULL_RTX
14728 || is_pseudo_reg (rtl)
14729 || (MEM_P (rtl)
14730 && is_pseudo_reg (XEXP (rtl, 0))
14731 && DECL_INCOMING_RTL (decl)
14732 && MEM_P (DECL_INCOMING_RTL (decl))
14733 && GET_MODE (rtl) == GET_MODE (DECL_INCOMING_RTL (decl))))
14735 tree declared_type = TREE_TYPE (decl);
14736 tree passed_type = DECL_ARG_TYPE (decl);
14737 enum machine_mode dmode = TYPE_MODE (declared_type);
14738 enum machine_mode pmode = TYPE_MODE (passed_type);
14740 /* This decl represents a formal parameter which was optimized out.
14741 Note that DECL_INCOMING_RTL may be NULL in here, but we handle
14742 all cases where (rtl == NULL_RTX) just below. */
14743 if (dmode == pmode)
14744 rtl = DECL_INCOMING_RTL (decl);
14745 else if ((rtl == NULL_RTX || is_pseudo_reg (rtl))
14746 && SCALAR_INT_MODE_P (dmode)
14747 && GET_MODE_SIZE (dmode) <= GET_MODE_SIZE (pmode)
14748 && DECL_INCOMING_RTL (decl))
14750 rtx inc = DECL_INCOMING_RTL (decl);
14751 if (REG_P (inc))
14752 rtl = inc;
14753 else if (MEM_P (inc))
14755 if (BYTES_BIG_ENDIAN)
14756 rtl = adjust_address_nv (inc, dmode,
14757 GET_MODE_SIZE (pmode)
14758 - GET_MODE_SIZE (dmode));
14759 else
14760 rtl = inc;
14765 /* If the parm was passed in registers, but lives on the stack, then
14766 make a big endian correction if the mode of the type of the
14767 parameter is not the same as the mode of the rtl. */
14768 /* ??? This is the same series of checks that are made in dbxout.c before
14769 we reach the big endian correction code there. It isn't clear if all
14770 of these checks are necessary here, but keeping them all is the safe
14771 thing to do. */
14772 else if (MEM_P (rtl)
14773 && XEXP (rtl, 0) != const0_rtx
14774 && ! CONSTANT_P (XEXP (rtl, 0))
14775 /* Not passed in memory. */
14776 && !MEM_P (DECL_INCOMING_RTL (decl))
14777 /* Not passed by invisible reference. */
14778 && (!REG_P (XEXP (rtl, 0))
14779 || REGNO (XEXP (rtl, 0)) == HARD_FRAME_POINTER_REGNUM
14780 || REGNO (XEXP (rtl, 0)) == STACK_POINTER_REGNUM
14781 #if !HARD_FRAME_POINTER_IS_ARG_POINTER
14782 || REGNO (XEXP (rtl, 0)) == ARG_POINTER_REGNUM
14783 #endif
14785 /* Big endian correction check. */
14786 && BYTES_BIG_ENDIAN
14787 && TYPE_MODE (TREE_TYPE (decl)) != GET_MODE (rtl)
14788 && (GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl)))
14789 < UNITS_PER_WORD))
14791 int offset = (UNITS_PER_WORD
14792 - GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl))));
14794 rtl = gen_rtx_MEM (TYPE_MODE (TREE_TYPE (decl)),
14795 plus_constant (XEXP (rtl, 0), offset));
14798 else if (TREE_CODE (decl) == VAR_DECL
14799 && rtl
14800 && MEM_P (rtl)
14801 && GET_MODE (rtl) != TYPE_MODE (TREE_TYPE (decl))
14802 && BYTES_BIG_ENDIAN)
14804 int rsize = GET_MODE_SIZE (GET_MODE (rtl));
14805 int dsize = GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl)));
14807 /* If a variable is declared "register" yet is smaller than
14808 a register, then if we store the variable to memory, it
14809 looks like we're storing a register-sized value, when in
14810 fact we are not. We need to adjust the offset of the
14811 storage location to reflect the actual value's bytes,
14812 else gdb will not be able to display it. */
14813 if (rsize > dsize)
14814 rtl = gen_rtx_MEM (TYPE_MODE (TREE_TYPE (decl)),
14815 plus_constant (XEXP (rtl, 0), rsize-dsize));
14818 /* A variable with no DECL_RTL but a DECL_INITIAL is a compile-time constant,
14819 and will have been substituted directly into all expressions that use it.
14820 C does not have such a concept, but C++ and other languages do. */
14821 if (!rtl && TREE_CODE (decl) == VAR_DECL && DECL_INITIAL (decl))
14822 rtl = rtl_for_decl_init (DECL_INITIAL (decl), TREE_TYPE (decl));
14824 if (rtl)
14825 rtl = targetm.delegitimize_address (rtl);
14827 /* If we don't look past the constant pool, we risk emitting a
14828 reference to a constant pool entry that isn't referenced from
14829 code, and thus is not emitted. */
14830 if (rtl)
14831 rtl = avoid_constant_pool_reference (rtl);
14833 /* Try harder to get a rtl. If this symbol ends up not being emitted
14834 in the current CU, resolve_addr will remove the expression referencing
14835 it. */
14836 if (rtl == NULL_RTX
14837 && TREE_CODE (decl) == VAR_DECL
14838 && !DECL_EXTERNAL (decl)
14839 && TREE_STATIC (decl)
14840 && DECL_NAME (decl)
14841 && !DECL_HARD_REGISTER (decl)
14842 && DECL_MODE (decl) != VOIDmode)
14844 rtl = make_decl_rtl_for_debug (decl);
14845 if (!MEM_P (rtl)
14846 || GET_CODE (XEXP (rtl, 0)) != SYMBOL_REF
14847 || SYMBOL_REF_DECL (XEXP (rtl, 0)) != decl)
14848 rtl = NULL_RTX;
14851 return rtl;
14854 /* Check whether decl is a Fortran COMMON symbol. If not, NULL_TREE is
14855 returned. If so, the decl for the COMMON block is returned, and the
14856 value is the offset into the common block for the symbol. */
14858 static tree
14859 fortran_common (tree decl, HOST_WIDE_INT *value)
14861 tree val_expr, cvar;
14862 enum machine_mode mode;
14863 HOST_WIDE_INT bitsize, bitpos;
14864 tree offset;
14865 int volatilep = 0, unsignedp = 0;
14867 /* If the decl isn't a VAR_DECL, or if it isn't static, or if
14868 it does not have a value (the offset into the common area), or if it
14869 is thread local (as opposed to global) then it isn't common, and shouldn't
14870 be handled as such. */
14871 if (TREE_CODE (decl) != VAR_DECL
14872 || !TREE_STATIC (decl)
14873 || !DECL_HAS_VALUE_EXPR_P (decl)
14874 || !is_fortran ())
14875 return NULL_TREE;
14877 val_expr = DECL_VALUE_EXPR (decl);
14878 if (TREE_CODE (val_expr) != COMPONENT_REF)
14879 return NULL_TREE;
14881 cvar = get_inner_reference (val_expr, &bitsize, &bitpos, &offset,
14882 &mode, &unsignedp, &volatilep, true);
14884 if (cvar == NULL_TREE
14885 || TREE_CODE (cvar) != VAR_DECL
14886 || DECL_ARTIFICIAL (cvar)
14887 || !TREE_PUBLIC (cvar))
14888 return NULL_TREE;
14890 *value = 0;
14891 if (offset != NULL)
14893 if (!host_integerp (offset, 0))
14894 return NULL_TREE;
14895 *value = tree_low_cst (offset, 0);
14897 if (bitpos != 0)
14898 *value += bitpos / BITS_PER_UNIT;
14900 return cvar;
14903 /* Generate *either* a DW_AT_location attribute or else a DW_AT_const_value
14904 data attribute for a variable or a parameter. We generate the
14905 DW_AT_const_value attribute only in those cases where the given variable
14906 or parameter does not have a true "location" either in memory or in a
14907 register. This can happen (for example) when a constant is passed as an
14908 actual argument in a call to an inline function. (It's possible that
14909 these things can crop up in other ways also.) Note that one type of
14910 constant value which can be passed into an inlined function is a constant
14911 pointer. This can happen for example if an actual argument in an inlined
14912 function call evaluates to a compile-time constant address.
14914 CACHE_P is true if it is worth caching the location list for DECL,
14915 so that future calls can reuse it rather than regenerate it from scratch.
14916 This is true for BLOCK_NONLOCALIZED_VARS in inlined subroutines,
14917 since we will need to refer to them each time the function is inlined. */
14919 static bool
14920 add_location_or_const_value_attribute (dw_die_ref die, tree decl, bool cache_p,
14921 enum dwarf_attribute attr)
14923 rtx rtl;
14924 dw_loc_list_ref list;
14925 var_loc_list *loc_list;
14926 cached_dw_loc_list *cache;
14927 void **slot;
14929 if (TREE_CODE (decl) == ERROR_MARK)
14930 return false;
14932 gcc_assert (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == PARM_DECL
14933 || TREE_CODE (decl) == RESULT_DECL);
14935 /* Try to get some constant RTL for this decl, and use that as the value of
14936 the location. */
14938 rtl = rtl_for_decl_location (decl);
14939 if (rtl && (CONSTANT_P (rtl) || GET_CODE (rtl) == CONST_STRING)
14940 && add_const_value_attribute (die, rtl))
14941 return true;
14943 /* See if we have single element location list that is equivalent to
14944 a constant value. That way we are better to use add_const_value_attribute
14945 rather than expanding constant value equivalent. */
14946 loc_list = lookup_decl_loc (decl);
14947 if (loc_list
14948 && loc_list->first
14949 && loc_list->first->next == NULL
14950 && NOTE_P (loc_list->first->loc)
14951 && NOTE_VAR_LOCATION (loc_list->first->loc)
14952 && NOTE_VAR_LOCATION_LOC (loc_list->first->loc))
14954 struct var_loc_node *node;
14956 node = loc_list->first;
14957 rtl = NOTE_VAR_LOCATION_LOC (node->loc);
14958 if (GET_CODE (rtl) == EXPR_LIST)
14959 rtl = XEXP (rtl, 0);
14960 if ((CONSTANT_P (rtl) || GET_CODE (rtl) == CONST_STRING)
14961 && add_const_value_attribute (die, rtl))
14962 return true;
14964 /* If this decl is from BLOCK_NONLOCALIZED_VARS, we might need its
14965 list several times. See if we've already cached the contents. */
14966 list = NULL;
14967 if (loc_list == NULL || cached_dw_loc_list_table == NULL)
14968 cache_p = false;
14969 if (cache_p)
14971 cache = (cached_dw_loc_list *)
14972 htab_find_with_hash (cached_dw_loc_list_table, decl, DECL_UID (decl));
14973 if (cache)
14974 list = cache->loc_list;
14976 if (list == NULL)
14978 list = loc_list_from_tree (decl, decl_by_reference_p (decl) ? 0 : 2);
14979 /* It is usually worth caching this result if the decl is from
14980 BLOCK_NONLOCALIZED_VARS and if the list has at least two elements. */
14981 if (cache_p && list && list->dw_loc_next)
14983 slot = htab_find_slot_with_hash (cached_dw_loc_list_table, decl,
14984 DECL_UID (decl), INSERT);
14985 cache = ggc_alloc_cleared_cached_dw_loc_list ();
14986 cache->decl_id = DECL_UID (decl);
14987 cache->loc_list = list;
14988 *slot = cache;
14991 if (list)
14993 add_AT_location_description (die, attr, list);
14994 return true;
14996 /* None of that worked, so it must not really have a location;
14997 try adding a constant value attribute from the DECL_INITIAL. */
14998 return tree_add_const_value_attribute_for_decl (die, decl);
15001 /* Add VARIABLE and DIE into deferred locations list. */
15003 static void
15004 defer_location (tree variable, dw_die_ref die)
15006 deferred_locations entry;
15007 entry.variable = variable;
15008 entry.die = die;
15009 VEC_safe_push (deferred_locations, gc, deferred_locations_list, &entry);
15012 /* Helper function for tree_add_const_value_attribute. Natively encode
15013 initializer INIT into an array. Return true if successful. */
15015 static bool
15016 native_encode_initializer (tree init, unsigned char *array, int size)
15018 tree type;
15020 if (init == NULL_TREE)
15021 return false;
15023 STRIP_NOPS (init);
15024 switch (TREE_CODE (init))
15026 case STRING_CST:
15027 type = TREE_TYPE (init);
15028 if (TREE_CODE (type) == ARRAY_TYPE)
15030 tree enttype = TREE_TYPE (type);
15031 enum machine_mode mode = TYPE_MODE (enttype);
15033 if (GET_MODE_CLASS (mode) != MODE_INT || GET_MODE_SIZE (mode) != 1)
15034 return false;
15035 if (int_size_in_bytes (type) != size)
15036 return false;
15037 if (size > TREE_STRING_LENGTH (init))
15039 memcpy (array, TREE_STRING_POINTER (init),
15040 TREE_STRING_LENGTH (init));
15041 memset (array + TREE_STRING_LENGTH (init),
15042 '\0', size - TREE_STRING_LENGTH (init));
15044 else
15045 memcpy (array, TREE_STRING_POINTER (init), size);
15046 return true;
15048 return false;
15049 case CONSTRUCTOR:
15050 type = TREE_TYPE (init);
15051 if (int_size_in_bytes (type) != size)
15052 return false;
15053 if (TREE_CODE (type) == ARRAY_TYPE)
15055 HOST_WIDE_INT min_index;
15056 unsigned HOST_WIDE_INT cnt;
15057 int curpos = 0, fieldsize;
15058 constructor_elt *ce;
15060 if (TYPE_DOMAIN (type) == NULL_TREE
15061 || !host_integerp (TYPE_MIN_VALUE (TYPE_DOMAIN (type)), 0))
15062 return false;
15064 fieldsize = int_size_in_bytes (TREE_TYPE (type));
15065 if (fieldsize <= 0)
15066 return false;
15068 min_index = tree_low_cst (TYPE_MIN_VALUE (TYPE_DOMAIN (type)), 0);
15069 memset (array, '\0', size);
15070 FOR_EACH_VEC_ELT (constructor_elt, CONSTRUCTOR_ELTS (init), cnt, ce)
15072 tree val = ce->value;
15073 tree index = ce->index;
15074 int pos = curpos;
15075 if (index && TREE_CODE (index) == RANGE_EXPR)
15076 pos = (tree_low_cst (TREE_OPERAND (index, 0), 0) - min_index)
15077 * fieldsize;
15078 else if (index)
15079 pos = (tree_low_cst (index, 0) - min_index) * fieldsize;
15081 if (val)
15083 STRIP_NOPS (val);
15084 if (!native_encode_initializer (val, array + pos, fieldsize))
15085 return false;
15087 curpos = pos + fieldsize;
15088 if (index && TREE_CODE (index) == RANGE_EXPR)
15090 int count = tree_low_cst (TREE_OPERAND (index, 1), 0)
15091 - tree_low_cst (TREE_OPERAND (index, 0), 0);
15092 while (count-- > 0)
15094 if (val)
15095 memcpy (array + curpos, array + pos, fieldsize);
15096 curpos += fieldsize;
15099 gcc_assert (curpos <= size);
15101 return true;
15103 else if (TREE_CODE (type) == RECORD_TYPE
15104 || TREE_CODE (type) == UNION_TYPE)
15106 tree field = NULL_TREE;
15107 unsigned HOST_WIDE_INT cnt;
15108 constructor_elt *ce;
15110 if (int_size_in_bytes (type) != size)
15111 return false;
15113 if (TREE_CODE (type) == RECORD_TYPE)
15114 field = TYPE_FIELDS (type);
15116 FOR_EACH_VEC_ELT (constructor_elt, CONSTRUCTOR_ELTS (init), cnt, ce)
15118 tree val = ce->value;
15119 int pos, fieldsize;
15121 if (ce->index != 0)
15122 field = ce->index;
15124 if (val)
15125 STRIP_NOPS (val);
15127 if (field == NULL_TREE || DECL_BIT_FIELD (field))
15128 return false;
15130 if (TREE_CODE (TREE_TYPE (field)) == ARRAY_TYPE
15131 && TYPE_DOMAIN (TREE_TYPE (field))
15132 && ! TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (field))))
15133 return false;
15134 else if (DECL_SIZE_UNIT (field) == NULL_TREE
15135 || !host_integerp (DECL_SIZE_UNIT (field), 0))
15136 return false;
15137 fieldsize = tree_low_cst (DECL_SIZE_UNIT (field), 0);
15138 pos = int_byte_position (field);
15139 gcc_assert (pos + fieldsize <= size);
15140 if (val
15141 && !native_encode_initializer (val, array + pos, fieldsize))
15142 return false;
15144 return true;
15146 return false;
15147 case VIEW_CONVERT_EXPR:
15148 case NON_LVALUE_EXPR:
15149 return native_encode_initializer (TREE_OPERAND (init, 0), array, size);
15150 default:
15151 return native_encode_expr (init, array, size) == size;
15155 /* Attach a DW_AT_const_value attribute to DIE. The value of the
15156 attribute is the const value T. */
15158 static bool
15159 tree_add_const_value_attribute (dw_die_ref die, tree t)
15161 tree init;
15162 tree type = TREE_TYPE (t);
15163 rtx rtl;
15165 if (!t || !TREE_TYPE (t) || TREE_TYPE (t) == error_mark_node)
15166 return false;
15168 init = t;
15169 gcc_assert (!DECL_P (init));
15171 rtl = rtl_for_decl_init (init, type);
15172 if (rtl)
15173 return add_const_value_attribute (die, rtl);
15174 /* If the host and target are sane, try harder. */
15175 else if (CHAR_BIT == 8 && BITS_PER_UNIT == 8
15176 && initializer_constant_valid_p (init, type))
15178 HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (init));
15179 if (size > 0 && (int) size == size)
15181 unsigned char *array = (unsigned char *)
15182 ggc_alloc_cleared_atomic (size);
15184 if (native_encode_initializer (init, array, size))
15186 add_AT_vec (die, DW_AT_const_value, size, 1, array);
15187 return true;
15191 return false;
15194 /* Attach a DW_AT_const_value attribute to VAR_DIE. The value of the
15195 attribute is the const value of T, where T is an integral constant
15196 variable with static storage duration
15197 (so it can't be a PARM_DECL or a RESULT_DECL). */
15199 static bool
15200 tree_add_const_value_attribute_for_decl (dw_die_ref var_die, tree decl)
15203 if (!decl
15204 || (TREE_CODE (decl) != VAR_DECL
15205 && TREE_CODE (decl) != CONST_DECL)
15206 || (TREE_CODE (decl) == VAR_DECL
15207 && !TREE_STATIC (decl)))
15208 return false;
15210 if (TREE_READONLY (decl)
15211 && ! TREE_THIS_VOLATILE (decl)
15212 && DECL_INITIAL (decl))
15213 /* OK */;
15214 else
15215 return false;
15217 /* Don't add DW_AT_const_value if abstract origin already has one. */
15218 if (get_AT (var_die, DW_AT_const_value))
15219 return false;
15221 return tree_add_const_value_attribute (var_die, DECL_INITIAL (decl));
15224 /* Convert the CFI instructions for the current function into a
15225 location list. This is used for DW_AT_frame_base when we targeting
15226 a dwarf2 consumer that does not support the dwarf3
15227 DW_OP_call_frame_cfa. OFFSET is a constant to be added to all CFA
15228 expressions. */
15230 static dw_loc_list_ref
15231 convert_cfa_to_fb_loc_list (HOST_WIDE_INT offset)
15233 int ix;
15234 dw_fde_ref fde;
15235 dw_loc_list_ref list, *list_tail;
15236 dw_cfi_ref cfi;
15237 dw_cfa_location last_cfa, next_cfa;
15238 const char *start_label, *last_label, *section;
15239 dw_cfa_location remember;
15241 fde = cfun->fde;
15242 gcc_assert (fde != NULL);
15244 section = secname_for_decl (current_function_decl);
15245 list_tail = &list;
15246 list = NULL;
15248 memset (&next_cfa, 0, sizeof (next_cfa));
15249 next_cfa.reg = INVALID_REGNUM;
15250 remember = next_cfa;
15252 start_label = fde->dw_fde_begin;
15254 /* ??? Bald assumption that the CIE opcode list does not contain
15255 advance opcodes. */
15256 FOR_EACH_VEC_ELT (dw_cfi_ref, cie_cfi_vec, ix, cfi)
15257 lookup_cfa_1 (cfi, &next_cfa, &remember);
15259 last_cfa = next_cfa;
15260 last_label = start_label;
15262 if (fde->dw_fde_second_begin && fde->dw_fde_switch_cfi_index == 0)
15264 /* If the first partition contained no CFI adjustments, the
15265 CIE opcodes apply to the whole first partition. */
15266 *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset),
15267 fde->dw_fde_begin, fde->dw_fde_end, section);
15268 list_tail =&(*list_tail)->dw_loc_next;
15269 start_label = last_label = fde->dw_fde_second_begin;
15272 FOR_EACH_VEC_ELT (dw_cfi_ref, fde->dw_fde_cfi, ix, cfi)
15274 switch (cfi->dw_cfi_opc)
15276 case DW_CFA_set_loc:
15277 case DW_CFA_advance_loc1:
15278 case DW_CFA_advance_loc2:
15279 case DW_CFA_advance_loc4:
15280 if (!cfa_equal_p (&last_cfa, &next_cfa))
15282 *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset),
15283 start_label, last_label, section);
15285 list_tail = &(*list_tail)->dw_loc_next;
15286 last_cfa = next_cfa;
15287 start_label = last_label;
15289 last_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
15290 break;
15292 case DW_CFA_advance_loc:
15293 /* The encoding is complex enough that we should never emit this. */
15294 gcc_unreachable ();
15296 default:
15297 lookup_cfa_1 (cfi, &next_cfa, &remember);
15298 break;
15300 if (ix + 1 == fde->dw_fde_switch_cfi_index)
15302 if (!cfa_equal_p (&last_cfa, &next_cfa))
15304 *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset),
15305 start_label, last_label, section);
15307 list_tail = &(*list_tail)->dw_loc_next;
15308 last_cfa = next_cfa;
15309 start_label = last_label;
15311 *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset),
15312 start_label, fde->dw_fde_end, section);
15313 list_tail = &(*list_tail)->dw_loc_next;
15314 start_label = last_label = fde->dw_fde_second_begin;
15318 if (!cfa_equal_p (&last_cfa, &next_cfa))
15320 *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset),
15321 start_label, last_label, section);
15322 list_tail = &(*list_tail)->dw_loc_next;
15323 start_label = last_label;
15326 *list_tail = new_loc_list (build_cfa_loc (&next_cfa, offset),
15327 start_label,
15328 fde->dw_fde_second_begin
15329 ? fde->dw_fde_second_end : fde->dw_fde_end,
15330 section);
15332 if (list && list->dw_loc_next)
15333 gen_llsym (list);
15335 return list;
15338 /* Compute a displacement from the "steady-state frame pointer" to the
15339 frame base (often the same as the CFA), and store it in
15340 frame_pointer_fb_offset. OFFSET is added to the displacement
15341 before the latter is negated. */
15343 static void
15344 compute_frame_pointer_to_fb_displacement (HOST_WIDE_INT offset)
15346 rtx reg, elim;
15348 #ifdef FRAME_POINTER_CFA_OFFSET
15349 reg = frame_pointer_rtx;
15350 offset += FRAME_POINTER_CFA_OFFSET (current_function_decl);
15351 #else
15352 reg = arg_pointer_rtx;
15353 offset += ARG_POINTER_CFA_OFFSET (current_function_decl);
15354 #endif
15356 elim = eliminate_regs (reg, VOIDmode, NULL_RTX);
15357 if (GET_CODE (elim) == PLUS)
15359 offset += INTVAL (XEXP (elim, 1));
15360 elim = XEXP (elim, 0);
15363 frame_pointer_fb_offset = -offset;
15365 /* ??? AVR doesn't set up valid eliminations when there is no stack frame
15366 in which to eliminate. This is because it's stack pointer isn't
15367 directly accessible as a register within the ISA. To work around
15368 this, assume that while we cannot provide a proper value for
15369 frame_pointer_fb_offset, we won't need one either. */
15370 frame_pointer_fb_offset_valid
15371 = ((SUPPORTS_STACK_ALIGNMENT
15372 && (elim == hard_frame_pointer_rtx
15373 || elim == stack_pointer_rtx))
15374 || elim == (frame_pointer_needed
15375 ? hard_frame_pointer_rtx
15376 : stack_pointer_rtx));
15379 /* Generate a DW_AT_name attribute given some string value to be included as
15380 the value of the attribute. */
15382 static void
15383 add_name_attribute (dw_die_ref die, const char *name_string)
15385 if (name_string != NULL && *name_string != 0)
15387 if (demangle_name_func)
15388 name_string = (*demangle_name_func) (name_string);
15390 add_AT_string (die, DW_AT_name, name_string);
15394 /* Retrieve the descriptive type of TYPE, if any, make sure it has a
15395 DIE and attach a DW_AT_GNAT_descriptive_type attribute to the DIE
15396 of TYPE accordingly.
15398 ??? This is a temporary measure until after we're able to generate
15399 regular DWARF for the complex Ada type system. */
15401 static void
15402 add_gnat_descriptive_type_attribute (dw_die_ref die, tree type,
15403 dw_die_ref context_die)
15405 tree dtype;
15406 dw_die_ref dtype_die;
15408 if (!lang_hooks.types.descriptive_type)
15409 return;
15411 dtype = lang_hooks.types.descriptive_type (type);
15412 if (!dtype)
15413 return;
15415 dtype_die = lookup_type_die (dtype);
15416 if (!dtype_die)
15418 /* The descriptive type indirectly references TYPE if this is also the
15419 case for TYPE itself. Do not deal with the circularity here. */
15420 TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type)) = 1;
15421 gen_type_die (dtype, context_die);
15422 TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type)) = 0;
15423 dtype_die = lookup_type_die (dtype);
15424 gcc_assert (dtype_die);
15427 add_AT_die_ref (die, DW_AT_GNAT_descriptive_type, dtype_die);
15430 /* Generate a DW_AT_comp_dir attribute for DIE. */
15432 static void
15433 add_comp_dir_attribute (dw_die_ref die)
15435 const char *wd = get_src_pwd ();
15436 char *wd1;
15438 if (wd == NULL)
15439 return;
15441 if (DWARF2_DIR_SHOULD_END_WITH_SEPARATOR)
15443 int wdlen;
15445 wdlen = strlen (wd);
15446 wd1 = (char *) ggc_alloc_atomic (wdlen + 2);
15447 strcpy (wd1, wd);
15448 wd1 [wdlen] = DIR_SEPARATOR;
15449 wd1 [wdlen + 1] = 0;
15450 wd = wd1;
15453 add_AT_string (die, DW_AT_comp_dir, remap_debug_filename (wd));
15456 /* Return the default for DW_AT_lower_bound, or -1 if there is not any
15457 default. */
15459 static int
15460 lower_bound_default (void)
15462 switch (get_AT_unsigned (comp_unit_die (), DW_AT_language))
15464 case DW_LANG_C:
15465 case DW_LANG_C89:
15466 case DW_LANG_C99:
15467 case DW_LANG_C_plus_plus:
15468 case DW_LANG_ObjC:
15469 case DW_LANG_ObjC_plus_plus:
15470 case DW_LANG_Java:
15471 return 0;
15472 case DW_LANG_Fortran77:
15473 case DW_LANG_Fortran90:
15474 case DW_LANG_Fortran95:
15475 return 1;
15476 case DW_LANG_UPC:
15477 case DW_LANG_D:
15478 case DW_LANG_Python:
15479 return dwarf_version >= 4 ? 0 : -1;
15480 case DW_LANG_Ada95:
15481 case DW_LANG_Ada83:
15482 case DW_LANG_Cobol74:
15483 case DW_LANG_Cobol85:
15484 case DW_LANG_Pascal83:
15485 case DW_LANG_Modula2:
15486 case DW_LANG_PLI:
15487 return dwarf_version >= 4 ? 1 : -1;
15488 default:
15489 return -1;
15493 /* Given a tree node describing an array bound (either lower or upper) output
15494 a representation for that bound. */
15496 static void
15497 add_bound_info (dw_die_ref subrange_die, enum dwarf_attribute bound_attr, tree bound)
15499 switch (TREE_CODE (bound))
15501 case ERROR_MARK:
15502 return;
15504 /* All fixed-bounds are represented by INTEGER_CST nodes. */
15505 case INTEGER_CST:
15507 unsigned int prec = simple_type_size_in_bits (TREE_TYPE (bound));
15508 int dflt;
15510 /* Use the default if possible. */
15511 if (bound_attr == DW_AT_lower_bound
15512 && host_integerp (bound, 0)
15513 && (dflt = lower_bound_default ()) != -1
15514 && tree_low_cst (bound, 0) == dflt)
15517 /* Otherwise represent the bound as an unsigned value with the
15518 precision of its type. The precision and signedness of the
15519 type will be necessary to re-interpret it unambiguously. */
15520 else if (prec < HOST_BITS_PER_WIDE_INT)
15522 unsigned HOST_WIDE_INT mask
15523 = ((unsigned HOST_WIDE_INT) 1 << prec) - 1;
15524 add_AT_unsigned (subrange_die, bound_attr,
15525 TREE_INT_CST_LOW (bound) & mask);
15527 else if (prec == HOST_BITS_PER_WIDE_INT
15528 || TREE_INT_CST_HIGH (bound) == 0)
15529 add_AT_unsigned (subrange_die, bound_attr,
15530 TREE_INT_CST_LOW (bound));
15531 else
15532 add_AT_double (subrange_die, bound_attr, TREE_INT_CST_HIGH (bound),
15533 TREE_INT_CST_LOW (bound));
15535 break;
15537 CASE_CONVERT:
15538 case VIEW_CONVERT_EXPR:
15539 add_bound_info (subrange_die, bound_attr, TREE_OPERAND (bound, 0));
15540 break;
15542 case SAVE_EXPR:
15543 break;
15545 case VAR_DECL:
15546 case PARM_DECL:
15547 case RESULT_DECL:
15549 dw_die_ref decl_die = lookup_decl_die (bound);
15551 /* ??? Can this happen, or should the variable have been bound
15552 first? Probably it can, since I imagine that we try to create
15553 the types of parameters in the order in which they exist in
15554 the list, and won't have created a forward reference to a
15555 later parameter. */
15556 if (decl_die != NULL)
15558 add_AT_die_ref (subrange_die, bound_attr, decl_die);
15559 break;
15562 /* FALLTHRU */
15564 default:
15566 /* Otherwise try to create a stack operation procedure to
15567 evaluate the value of the array bound. */
15569 dw_die_ref ctx, decl_die;
15570 dw_loc_list_ref list;
15572 list = loc_list_from_tree (bound, 2);
15573 if (list == NULL || single_element_loc_list_p (list))
15575 /* If DW_AT_*bound is not a reference nor constant, it is
15576 a DWARF expression rather than location description.
15577 For that loc_list_from_tree (bound, 0) is needed.
15578 If that fails to give a single element list,
15579 fall back to outputting this as a reference anyway. */
15580 dw_loc_list_ref list2 = loc_list_from_tree (bound, 0);
15581 if (list2 && single_element_loc_list_p (list2))
15583 add_AT_loc (subrange_die, bound_attr, list2->expr);
15584 break;
15587 if (list == NULL)
15588 break;
15590 if (current_function_decl == 0)
15591 ctx = comp_unit_die ();
15592 else
15593 ctx = lookup_decl_die (current_function_decl);
15595 decl_die = new_die (DW_TAG_variable, ctx, bound);
15596 add_AT_flag (decl_die, DW_AT_artificial, 1);
15597 add_type_attribute (decl_die, TREE_TYPE (bound), 1, 0, ctx);
15598 add_AT_location_description (decl_die, DW_AT_location, list);
15599 add_AT_die_ref (subrange_die, bound_attr, decl_die);
15600 break;
15605 /* Add subscript info to TYPE_DIE, describing an array TYPE, collapsing
15606 possibly nested array subscripts in a flat sequence if COLLAPSE_P is true.
15607 Note that the block of subscript information for an array type also
15608 includes information about the element type of the given array type. */
15610 static void
15611 add_subscript_info (dw_die_ref type_die, tree type, bool collapse_p)
15613 unsigned dimension_number;
15614 tree lower, upper;
15615 dw_die_ref subrange_die;
15617 for (dimension_number = 0;
15618 TREE_CODE (type) == ARRAY_TYPE && (dimension_number == 0 || collapse_p);
15619 type = TREE_TYPE (type), dimension_number++)
15621 tree domain = TYPE_DOMAIN (type);
15623 if (TYPE_STRING_FLAG (type) && is_fortran () && dimension_number > 0)
15624 break;
15626 /* Arrays come in three flavors: Unspecified bounds, fixed bounds,
15627 and (in GNU C only) variable bounds. Handle all three forms
15628 here. */
15629 subrange_die = new_die (DW_TAG_subrange_type, type_die, NULL);
15630 if (domain)
15632 /* We have an array type with specified bounds. */
15633 lower = TYPE_MIN_VALUE (domain);
15634 upper = TYPE_MAX_VALUE (domain);
15636 /* Define the index type. */
15637 if (TREE_TYPE (domain))
15639 /* ??? This is probably an Ada unnamed subrange type. Ignore the
15640 TREE_TYPE field. We can't emit debug info for this
15641 because it is an unnamed integral type. */
15642 if (TREE_CODE (domain) == INTEGER_TYPE
15643 && TYPE_NAME (domain) == NULL_TREE
15644 && TREE_CODE (TREE_TYPE (domain)) == INTEGER_TYPE
15645 && TYPE_NAME (TREE_TYPE (domain)) == NULL_TREE)
15647 else
15648 add_type_attribute (subrange_die, TREE_TYPE (domain), 0, 0,
15649 type_die);
15652 /* ??? If upper is NULL, the array has unspecified length,
15653 but it does have a lower bound. This happens with Fortran
15654 dimension arr(N:*)
15655 Since the debugger is definitely going to need to know N
15656 to produce useful results, go ahead and output the lower
15657 bound solo, and hope the debugger can cope. */
15659 add_bound_info (subrange_die, DW_AT_lower_bound, lower);
15660 if (upper)
15661 add_bound_info (subrange_die, DW_AT_upper_bound, upper);
15664 /* Otherwise we have an array type with an unspecified length. The
15665 DWARF-2 spec does not say how to handle this; let's just leave out the
15666 bounds. */
15670 static void
15671 add_byte_size_attribute (dw_die_ref die, tree tree_node)
15673 unsigned size;
15675 switch (TREE_CODE (tree_node))
15677 case ERROR_MARK:
15678 size = 0;
15679 break;
15680 case ENUMERAL_TYPE:
15681 case RECORD_TYPE:
15682 case UNION_TYPE:
15683 case QUAL_UNION_TYPE:
15684 size = int_size_in_bytes (tree_node);
15685 break;
15686 case FIELD_DECL:
15687 /* For a data member of a struct or union, the DW_AT_byte_size is
15688 generally given as the number of bytes normally allocated for an
15689 object of the *declared* type of the member itself. This is true
15690 even for bit-fields. */
15691 size = simple_type_size_in_bits (field_type (tree_node)) / BITS_PER_UNIT;
15692 break;
15693 default:
15694 gcc_unreachable ();
15697 /* Note that `size' might be -1 when we get to this point. If it is, that
15698 indicates that the byte size of the entity in question is variable. We
15699 have no good way of expressing this fact in Dwarf at the present time,
15700 so just let the -1 pass on through. */
15701 add_AT_unsigned (die, DW_AT_byte_size, size);
15704 /* For a FIELD_DECL node which represents a bit-field, output an attribute
15705 which specifies the distance in bits from the highest order bit of the
15706 "containing object" for the bit-field to the highest order bit of the
15707 bit-field itself.
15709 For any given bit-field, the "containing object" is a hypothetical object
15710 (of some integral or enum type) within which the given bit-field lives. The
15711 type of this hypothetical "containing object" is always the same as the
15712 declared type of the individual bit-field itself. The determination of the
15713 exact location of the "containing object" for a bit-field is rather
15714 complicated. It's handled by the `field_byte_offset' function (above).
15716 Note that it is the size (in bytes) of the hypothetical "containing object"
15717 which will be given in the DW_AT_byte_size attribute for this bit-field.
15718 (See `byte_size_attribute' above). */
15720 static inline void
15721 add_bit_offset_attribute (dw_die_ref die, tree decl)
15723 HOST_WIDE_INT object_offset_in_bytes = field_byte_offset (decl);
15724 tree type = DECL_BIT_FIELD_TYPE (decl);
15725 HOST_WIDE_INT bitpos_int;
15726 HOST_WIDE_INT highest_order_object_bit_offset;
15727 HOST_WIDE_INT highest_order_field_bit_offset;
15728 HOST_WIDE_INT bit_offset;
15730 /* Must be a field and a bit field. */
15731 gcc_assert (type && TREE_CODE (decl) == FIELD_DECL);
15733 /* We can't yet handle bit-fields whose offsets are variable, so if we
15734 encounter such things, just return without generating any attribute
15735 whatsoever. Likewise for variable or too large size. */
15736 if (! host_integerp (bit_position (decl), 0)
15737 || ! host_integerp (DECL_SIZE (decl), 1))
15738 return;
15740 bitpos_int = int_bit_position (decl);
15742 /* Note that the bit offset is always the distance (in bits) from the
15743 highest-order bit of the "containing object" to the highest-order bit of
15744 the bit-field itself. Since the "high-order end" of any object or field
15745 is different on big-endian and little-endian machines, the computation
15746 below must take account of these differences. */
15747 highest_order_object_bit_offset = object_offset_in_bytes * BITS_PER_UNIT;
15748 highest_order_field_bit_offset = bitpos_int;
15750 if (! BYTES_BIG_ENDIAN)
15752 highest_order_field_bit_offset += tree_low_cst (DECL_SIZE (decl), 0);
15753 highest_order_object_bit_offset += simple_type_size_in_bits (type);
15756 bit_offset
15757 = (! BYTES_BIG_ENDIAN
15758 ? highest_order_object_bit_offset - highest_order_field_bit_offset
15759 : highest_order_field_bit_offset - highest_order_object_bit_offset);
15761 if (bit_offset < 0)
15762 add_AT_int (die, DW_AT_bit_offset, bit_offset);
15763 else
15764 add_AT_unsigned (die, DW_AT_bit_offset, (unsigned HOST_WIDE_INT) bit_offset);
15767 /* For a FIELD_DECL node which represents a bit field, output an attribute
15768 which specifies the length in bits of the given field. */
15770 static inline void
15771 add_bit_size_attribute (dw_die_ref die, tree decl)
15773 /* Must be a field and a bit field. */
15774 gcc_assert (TREE_CODE (decl) == FIELD_DECL
15775 && DECL_BIT_FIELD_TYPE (decl));
15777 if (host_integerp (DECL_SIZE (decl), 1))
15778 add_AT_unsigned (die, DW_AT_bit_size, tree_low_cst (DECL_SIZE (decl), 1));
15781 /* If the compiled language is ANSI C, then add a 'prototyped'
15782 attribute, if arg types are given for the parameters of a function. */
15784 static inline void
15785 add_prototyped_attribute (dw_die_ref die, tree func_type)
15787 if (get_AT_unsigned (comp_unit_die (), DW_AT_language) == DW_LANG_C89
15788 && prototype_p (func_type))
15789 add_AT_flag (die, DW_AT_prototyped, 1);
15792 /* Add an 'abstract_origin' attribute below a given DIE. The DIE is found
15793 by looking in either the type declaration or object declaration
15794 equate table. */
15796 static inline dw_die_ref
15797 add_abstract_origin_attribute (dw_die_ref die, tree origin)
15799 dw_die_ref origin_die = NULL;
15801 if (TREE_CODE (origin) != FUNCTION_DECL)
15803 /* We may have gotten separated from the block for the inlined
15804 function, if we're in an exception handler or some such; make
15805 sure that the abstract function has been written out.
15807 Doing this for nested functions is wrong, however; functions are
15808 distinct units, and our context might not even be inline. */
15809 tree fn = origin;
15811 if (TYPE_P (fn))
15812 fn = TYPE_STUB_DECL (fn);
15814 fn = decl_function_context (fn);
15815 if (fn)
15816 dwarf2out_abstract_function (fn);
15819 if (DECL_P (origin))
15820 origin_die = lookup_decl_die (origin);
15821 else if (TYPE_P (origin))
15822 origin_die = lookup_type_die (origin);
15824 /* XXX: Functions that are never lowered don't always have correct block
15825 trees (in the case of java, they simply have no block tree, in some other
15826 languages). For these functions, there is nothing we can really do to
15827 output correct debug info for inlined functions in all cases. Rather
15828 than die, we'll just produce deficient debug info now, in that we will
15829 have variables without a proper abstract origin. In the future, when all
15830 functions are lowered, we should re-add a gcc_assert (origin_die)
15831 here. */
15833 if (origin_die)
15834 add_AT_die_ref (die, DW_AT_abstract_origin, origin_die);
15835 return origin_die;
15838 /* We do not currently support the pure_virtual attribute. */
15840 static inline void
15841 add_pure_or_virtual_attribute (dw_die_ref die, tree func_decl)
15843 if (DECL_VINDEX (func_decl))
15845 add_AT_unsigned (die, DW_AT_virtuality, DW_VIRTUALITY_virtual);
15847 if (host_integerp (DECL_VINDEX (func_decl), 0))
15848 add_AT_loc (die, DW_AT_vtable_elem_location,
15849 new_loc_descr (DW_OP_constu,
15850 tree_low_cst (DECL_VINDEX (func_decl), 0),
15851 0));
15853 /* GNU extension: Record what type this method came from originally. */
15854 if (debug_info_level > DINFO_LEVEL_TERSE
15855 && DECL_CONTEXT (func_decl))
15856 add_AT_die_ref (die, DW_AT_containing_type,
15857 lookup_type_die (DECL_CONTEXT (func_decl)));
15861 /* Add a DW_AT_linkage_name or DW_AT_MIPS_linkage_name attribute for the
15862 given decl. This used to be a vendor extension until after DWARF 4
15863 standardized it. */
15865 static void
15866 add_linkage_attr (dw_die_ref die, tree decl)
15868 const char *name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
15870 /* Mimic what assemble_name_raw does with a leading '*'. */
15871 if (name[0] == '*')
15872 name = &name[1];
15874 if (dwarf_version >= 4)
15875 add_AT_string (die, DW_AT_linkage_name, name);
15876 else
15877 add_AT_string (die, DW_AT_MIPS_linkage_name, name);
15880 /* Add source coordinate attributes for the given decl. */
15882 static void
15883 add_src_coords_attributes (dw_die_ref die, tree decl)
15885 expanded_location s;
15887 if (DECL_SOURCE_LOCATION (decl) == UNKNOWN_LOCATION)
15888 return;
15889 s = expand_location (DECL_SOURCE_LOCATION (decl));
15890 add_AT_file (die, DW_AT_decl_file, lookup_filename (s.file));
15891 add_AT_unsigned (die, DW_AT_decl_line, s.line);
15894 /* Add DW_AT_{,MIPS_}linkage_name attribute for the given decl. */
15896 static void
15897 add_linkage_name (dw_die_ref die, tree decl)
15899 if ((TREE_CODE (decl) == FUNCTION_DECL || TREE_CODE (decl) == VAR_DECL)
15900 && TREE_PUBLIC (decl)
15901 && !DECL_ABSTRACT (decl)
15902 && !(TREE_CODE (decl) == VAR_DECL && DECL_REGISTER (decl))
15903 && die->die_tag != DW_TAG_member)
15905 /* Defer until we have an assembler name set. */
15906 if (!DECL_ASSEMBLER_NAME_SET_P (decl))
15908 limbo_die_node *asm_name;
15910 asm_name = ggc_alloc_cleared_limbo_die_node ();
15911 asm_name->die = die;
15912 asm_name->created_for = decl;
15913 asm_name->next = deferred_asm_name;
15914 deferred_asm_name = asm_name;
15916 else if (DECL_ASSEMBLER_NAME (decl) != DECL_NAME (decl))
15917 add_linkage_attr (die, decl);
15921 /* Add a DW_AT_name attribute and source coordinate attribute for the
15922 given decl, but only if it actually has a name. */
15924 static void
15925 add_name_and_src_coords_attributes (dw_die_ref die, tree decl)
15927 tree decl_name;
15929 decl_name = DECL_NAME (decl);
15930 if (decl_name != NULL && IDENTIFIER_POINTER (decl_name) != NULL)
15932 const char *name = dwarf2_name (decl, 0);
15933 if (name)
15934 add_name_attribute (die, name);
15935 if (! DECL_ARTIFICIAL (decl))
15936 add_src_coords_attributes (die, decl);
15938 add_linkage_name (die, decl);
15941 #ifdef VMS_DEBUGGING_INFO
15942 /* Get the function's name, as described by its RTL. This may be different
15943 from the DECL_NAME name used in the source file. */
15944 if (TREE_CODE (decl) == FUNCTION_DECL && TREE_ASM_WRITTEN (decl))
15946 add_AT_addr (die, DW_AT_VMS_rtnbeg_pd_address,
15947 XEXP (DECL_RTL (decl), 0));
15948 VEC_safe_push (rtx, gc, used_rtx_array, XEXP (DECL_RTL (decl), 0));
15950 #endif /* VMS_DEBUGGING_INFO */
15953 #ifdef VMS_DEBUGGING_INFO
15954 /* Output the debug main pointer die for VMS */
15956 void
15957 dwarf2out_vms_debug_main_pointer (void)
15959 char label[MAX_ARTIFICIAL_LABEL_BYTES];
15960 dw_die_ref die;
15962 /* Allocate the VMS debug main subprogram die. */
15963 die = ggc_alloc_cleared_die_node ();
15964 die->die_tag = DW_TAG_subprogram;
15965 add_name_attribute (die, VMS_DEBUG_MAIN_POINTER);
15966 ASM_GENERATE_INTERNAL_LABEL (label, PROLOGUE_END_LABEL,
15967 current_function_funcdef_no);
15968 add_AT_lbl_id (die, DW_AT_entry_pc, label);
15970 /* Make it the first child of comp_unit_die (). */
15971 die->die_parent = comp_unit_die ();
15972 if (comp_unit_die ()->die_child)
15974 die->die_sib = comp_unit_die ()->die_child->die_sib;
15975 comp_unit_die ()->die_child->die_sib = die;
15977 else
15979 die->die_sib = die;
15980 comp_unit_die ()->die_child = die;
15983 #endif /* VMS_DEBUGGING_INFO */
15985 /* Push a new declaration scope. */
15987 static void
15988 push_decl_scope (tree scope)
15990 VEC_safe_push (tree, gc, decl_scope_table, scope);
15993 /* Pop a declaration scope. */
15995 static inline void
15996 pop_decl_scope (void)
15998 VEC_pop (tree, decl_scope_table);
16001 /* Return the DIE for the scope that immediately contains this type.
16002 Non-named types get global scope. Named types nested in other
16003 types get their containing scope if it's open, or global scope
16004 otherwise. All other types (i.e. function-local named types) get
16005 the current active scope. */
16007 static dw_die_ref
16008 scope_die_for (tree t, dw_die_ref context_die)
16010 dw_die_ref scope_die = NULL;
16011 tree containing_scope;
16012 int i;
16014 /* Non-types always go in the current scope. */
16015 gcc_assert (TYPE_P (t));
16017 containing_scope = TYPE_CONTEXT (t);
16019 /* Use the containing namespace if it was passed in (for a declaration). */
16020 if (containing_scope && TREE_CODE (containing_scope) == NAMESPACE_DECL)
16022 if (context_die == lookup_decl_die (containing_scope))
16023 /* OK */;
16024 else
16025 containing_scope = NULL_TREE;
16028 /* Ignore function type "scopes" from the C frontend. They mean that
16029 a tagged type is local to a parmlist of a function declarator, but
16030 that isn't useful to DWARF. */
16031 if (containing_scope && TREE_CODE (containing_scope) == FUNCTION_TYPE)
16032 containing_scope = NULL_TREE;
16034 if (SCOPE_FILE_SCOPE_P (containing_scope))
16035 scope_die = comp_unit_die ();
16036 else if (TYPE_P (containing_scope))
16038 /* For types, we can just look up the appropriate DIE. But
16039 first we check to see if we're in the middle of emitting it
16040 so we know where the new DIE should go. */
16041 for (i = VEC_length (tree, decl_scope_table) - 1; i >= 0; --i)
16042 if (VEC_index (tree, decl_scope_table, i) == containing_scope)
16043 break;
16045 if (i < 0)
16047 gcc_assert (debug_info_level <= DINFO_LEVEL_TERSE
16048 || TREE_ASM_WRITTEN (containing_scope));
16049 /*We are not in the middle of emitting the type
16050 CONTAINING_SCOPE. Let's see if it's emitted already. */
16051 scope_die = lookup_type_die (containing_scope);
16053 /* If none of the current dies are suitable, we get file scope. */
16054 if (scope_die == NULL)
16055 scope_die = comp_unit_die ();
16057 else
16058 scope_die = lookup_type_die_strip_naming_typedef (containing_scope);
16060 else
16061 scope_die = context_die;
16063 return scope_die;
16066 /* Returns nonzero if CONTEXT_DIE is internal to a function. */
16068 static inline int
16069 local_scope_p (dw_die_ref context_die)
16071 for (; context_die; context_die = context_die->die_parent)
16072 if (context_die->die_tag == DW_TAG_inlined_subroutine
16073 || context_die->die_tag == DW_TAG_subprogram)
16074 return 1;
16076 return 0;
16079 /* Returns nonzero if CONTEXT_DIE is a class. */
16081 static inline int
16082 class_scope_p (dw_die_ref context_die)
16084 return (context_die
16085 && (context_die->die_tag == DW_TAG_structure_type
16086 || context_die->die_tag == DW_TAG_class_type
16087 || context_die->die_tag == DW_TAG_interface_type
16088 || context_die->die_tag == DW_TAG_union_type));
16091 /* Returns nonzero if CONTEXT_DIE is a class or namespace, for deciding
16092 whether or not to treat a DIE in this context as a declaration. */
16094 static inline int
16095 class_or_namespace_scope_p (dw_die_ref context_die)
16097 return (class_scope_p (context_die)
16098 || (context_die && context_die->die_tag == DW_TAG_namespace));
16101 /* Many forms of DIEs require a "type description" attribute. This
16102 routine locates the proper "type descriptor" die for the type given
16103 by 'type', and adds a DW_AT_type attribute below the given die. */
16105 static void
16106 add_type_attribute (dw_die_ref object_die, tree type, int decl_const,
16107 int decl_volatile, dw_die_ref context_die)
16109 enum tree_code code = TREE_CODE (type);
16110 dw_die_ref type_die = NULL;
16112 /* ??? If this type is an unnamed subrange type of an integral, floating-point
16113 or fixed-point type, use the inner type. This is because we have no
16114 support for unnamed types in base_type_die. This can happen if this is
16115 an Ada subrange type. Correct solution is emit a subrange type die. */
16116 if ((code == INTEGER_TYPE || code == REAL_TYPE || code == FIXED_POINT_TYPE)
16117 && TREE_TYPE (type) != 0 && TYPE_NAME (type) == 0)
16118 type = TREE_TYPE (type), code = TREE_CODE (type);
16120 if (code == ERROR_MARK
16121 /* Handle a special case. For functions whose return type is void, we
16122 generate *no* type attribute. (Note that no object may have type
16123 `void', so this only applies to function return types). */
16124 || code == VOID_TYPE)
16125 return;
16127 type_die = modified_type_die (type,
16128 decl_const || TYPE_READONLY (type),
16129 decl_volatile || TYPE_VOLATILE (type),
16130 context_die);
16132 if (type_die != NULL)
16133 add_AT_die_ref (object_die, DW_AT_type, type_die);
16136 /* Given an object die, add the calling convention attribute for the
16137 function call type. */
16138 static void
16139 add_calling_convention_attribute (dw_die_ref subr_die, tree decl)
16141 enum dwarf_calling_convention value = DW_CC_normal;
16143 value = ((enum dwarf_calling_convention)
16144 targetm.dwarf_calling_convention (TREE_TYPE (decl)));
16146 if (is_fortran ()
16147 && !strcmp (IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)), "MAIN__"))
16149 /* DWARF 2 doesn't provide a way to identify a program's source-level
16150 entry point. DW_AT_calling_convention attributes are only meant
16151 to describe functions' calling conventions. However, lacking a
16152 better way to signal the Fortran main program, we used this for
16153 a long time, following existing custom. Now, DWARF 4 has
16154 DW_AT_main_subprogram, which we add below, but some tools still
16155 rely on the old way, which we thus keep. */
16156 value = DW_CC_program;
16158 if (dwarf_version >= 4 || !dwarf_strict)
16159 add_AT_flag (subr_die, DW_AT_main_subprogram, 1);
16162 /* Only add the attribute if the backend requests it, and
16163 is not DW_CC_normal. */
16164 if (value && (value != DW_CC_normal))
16165 add_AT_unsigned (subr_die, DW_AT_calling_convention, value);
16168 /* Given a tree pointer to a struct, class, union, or enum type node, return
16169 a pointer to the (string) tag name for the given type, or zero if the type
16170 was declared without a tag. */
16172 static const char *
16173 type_tag (const_tree type)
16175 const char *name = 0;
16177 if (TYPE_NAME (type) != 0)
16179 tree t = 0;
16181 /* Find the IDENTIFIER_NODE for the type name. */
16182 if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE
16183 && !TYPE_NAMELESS (type))
16184 t = TYPE_NAME (type);
16186 /* The g++ front end makes the TYPE_NAME of *each* tagged type point to
16187 a TYPE_DECL node, regardless of whether or not a `typedef' was
16188 involved. */
16189 else if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
16190 && ! DECL_IGNORED_P (TYPE_NAME (type)))
16192 /* We want to be extra verbose. Don't call dwarf_name if
16193 DECL_NAME isn't set. The default hook for decl_printable_name
16194 doesn't like that, and in this context it's correct to return
16195 0, instead of "<anonymous>" or the like. */
16196 if (DECL_NAME (TYPE_NAME (type))
16197 && !DECL_NAMELESS (TYPE_NAME (type)))
16198 name = lang_hooks.dwarf_name (TYPE_NAME (type), 2);
16201 /* Now get the name as a string, or invent one. */
16202 if (!name && t != 0)
16203 name = IDENTIFIER_POINTER (t);
16206 return (name == 0 || *name == '\0') ? 0 : name;
16209 /* Return the type associated with a data member, make a special check
16210 for bit field types. */
16212 static inline tree
16213 member_declared_type (const_tree member)
16215 return (DECL_BIT_FIELD_TYPE (member)
16216 ? DECL_BIT_FIELD_TYPE (member) : TREE_TYPE (member));
16219 /* Get the decl's label, as described by its RTL. This may be different
16220 from the DECL_NAME name used in the source file. */
16222 #if 0
16223 static const char *
16224 decl_start_label (tree decl)
16226 rtx x;
16227 const char *fnname;
16229 x = DECL_RTL (decl);
16230 gcc_assert (MEM_P (x));
16232 x = XEXP (x, 0);
16233 gcc_assert (GET_CODE (x) == SYMBOL_REF);
16235 fnname = XSTR (x, 0);
16236 return fnname;
16238 #endif
16240 /* These routines generate the internal representation of the DIE's for
16241 the compilation unit. Debugging information is collected by walking
16242 the declaration trees passed in from dwarf2out_decl(). */
16244 static void
16245 gen_array_type_die (tree type, dw_die_ref context_die)
16247 dw_die_ref scope_die = scope_die_for (type, context_die);
16248 dw_die_ref array_die;
16250 /* GNU compilers represent multidimensional array types as sequences of one
16251 dimensional array types whose element types are themselves array types.
16252 We sometimes squish that down to a single array_type DIE with multiple
16253 subscripts in the Dwarf debugging info. The draft Dwarf specification
16254 say that we are allowed to do this kind of compression in C, because
16255 there is no difference between an array of arrays and a multidimensional
16256 array. We don't do this for Ada to remain as close as possible to the
16257 actual representation, which is especially important against the language
16258 flexibilty wrt arrays of variable size. */
16260 bool collapse_nested_arrays = !is_ada ();
16261 tree element_type;
16263 /* Emit DW_TAG_string_type for Fortran character types (with kind 1 only, as
16264 DW_TAG_string_type doesn't have DW_AT_type attribute). */
16265 if (TYPE_STRING_FLAG (type)
16266 && TREE_CODE (type) == ARRAY_TYPE
16267 && is_fortran ()
16268 && TYPE_MODE (TREE_TYPE (type)) == TYPE_MODE (char_type_node))
16270 HOST_WIDE_INT size;
16272 array_die = new_die (DW_TAG_string_type, scope_die, type);
16273 add_name_attribute (array_die, type_tag (type));
16274 equate_type_number_to_die (type, array_die);
16275 size = int_size_in_bytes (type);
16276 if (size >= 0)
16277 add_AT_unsigned (array_die, DW_AT_byte_size, size);
16278 else if (TYPE_DOMAIN (type) != NULL_TREE
16279 && TYPE_MAX_VALUE (TYPE_DOMAIN (type)) != NULL_TREE
16280 && DECL_P (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))
16282 tree szdecl = TYPE_MAX_VALUE (TYPE_DOMAIN (type));
16283 dw_loc_list_ref loc = loc_list_from_tree (szdecl, 2);
16285 size = int_size_in_bytes (TREE_TYPE (szdecl));
16286 if (loc && size > 0)
16288 add_AT_location_description (array_die, DW_AT_string_length, loc);
16289 if (size != DWARF2_ADDR_SIZE)
16290 add_AT_unsigned (array_die, DW_AT_byte_size, size);
16293 return;
16296 /* ??? The SGI dwarf reader fails for array of array of enum types
16297 (e.g. const enum machine_mode insn_operand_mode[2][10]) unless the inner
16298 array type comes before the outer array type. We thus call gen_type_die
16299 before we new_die and must prevent nested array types collapsing for this
16300 target. */
16302 #ifdef MIPS_DEBUGGING_INFO
16303 gen_type_die (TREE_TYPE (type), context_die);
16304 collapse_nested_arrays = false;
16305 #endif
16307 array_die = new_die (DW_TAG_array_type, scope_die, type);
16308 add_name_attribute (array_die, type_tag (type));
16309 add_gnat_descriptive_type_attribute (array_die, type, context_die);
16310 if (TYPE_ARTIFICIAL (type))
16311 add_AT_flag (array_die, DW_AT_artificial, 1);
16312 equate_type_number_to_die (type, array_die);
16314 if (TREE_CODE (type) == VECTOR_TYPE)
16315 add_AT_flag (array_die, DW_AT_GNU_vector, 1);
16317 /* For Fortran multidimensional arrays use DW_ORD_col_major ordering. */
16318 if (is_fortran ()
16319 && TREE_CODE (type) == ARRAY_TYPE
16320 && TREE_CODE (TREE_TYPE (type)) == ARRAY_TYPE
16321 && !TYPE_STRING_FLAG (TREE_TYPE (type)))
16322 add_AT_unsigned (array_die, DW_AT_ordering, DW_ORD_col_major);
16324 #if 0
16325 /* We default the array ordering. SDB will probably do
16326 the right things even if DW_AT_ordering is not present. It's not even
16327 an issue until we start to get into multidimensional arrays anyway. If
16328 SDB is ever caught doing the Wrong Thing for multi-dimensional arrays,
16329 then we'll have to put the DW_AT_ordering attribute back in. (But if
16330 and when we find out that we need to put these in, we will only do so
16331 for multidimensional arrays. */
16332 add_AT_unsigned (array_die, DW_AT_ordering, DW_ORD_row_major);
16333 #endif
16335 #ifdef MIPS_DEBUGGING_INFO
16336 /* The SGI compilers handle arrays of unknown bound by setting
16337 AT_declaration and not emitting any subrange DIEs. */
16338 if (TREE_CODE (type) == ARRAY_TYPE
16339 && ! TYPE_DOMAIN (type))
16340 add_AT_flag (array_die, DW_AT_declaration, 1);
16341 else
16342 #endif
16343 if (TREE_CODE (type) == VECTOR_TYPE)
16345 /* For VECTOR_TYPEs we use an array die with appropriate bounds. */
16346 dw_die_ref subrange_die = new_die (DW_TAG_subrange_type, array_die, NULL);
16347 add_bound_info (subrange_die, DW_AT_lower_bound, size_zero_node);
16348 add_bound_info (subrange_die, DW_AT_upper_bound,
16349 size_int (TYPE_VECTOR_SUBPARTS (type) - 1));
16351 else
16352 add_subscript_info (array_die, type, collapse_nested_arrays);
16354 /* Add representation of the type of the elements of this array type and
16355 emit the corresponding DIE if we haven't done it already. */
16356 element_type = TREE_TYPE (type);
16357 if (collapse_nested_arrays)
16358 while (TREE_CODE (element_type) == ARRAY_TYPE)
16360 if (TYPE_STRING_FLAG (element_type) && is_fortran ())
16361 break;
16362 element_type = TREE_TYPE (element_type);
16365 #ifndef MIPS_DEBUGGING_INFO
16366 gen_type_die (element_type, context_die);
16367 #endif
16369 add_type_attribute (array_die, element_type, 0, 0, context_die);
16371 if (get_AT (array_die, DW_AT_name))
16372 add_pubtype (type, array_die);
16375 static dw_loc_descr_ref
16376 descr_info_loc (tree val, tree base_decl)
16378 HOST_WIDE_INT size;
16379 dw_loc_descr_ref loc, loc2;
16380 enum dwarf_location_atom op;
16382 if (val == base_decl)
16383 return new_loc_descr (DW_OP_push_object_address, 0, 0);
16385 switch (TREE_CODE (val))
16387 CASE_CONVERT:
16388 return descr_info_loc (TREE_OPERAND (val, 0), base_decl);
16389 case VAR_DECL:
16390 return loc_descriptor_from_tree (val, 0);
16391 case INTEGER_CST:
16392 if (host_integerp (val, 0))
16393 return int_loc_descriptor (tree_low_cst (val, 0));
16394 break;
16395 case INDIRECT_REF:
16396 size = int_size_in_bytes (TREE_TYPE (val));
16397 if (size < 0)
16398 break;
16399 loc = descr_info_loc (TREE_OPERAND (val, 0), base_decl);
16400 if (!loc)
16401 break;
16402 if (size == DWARF2_ADDR_SIZE)
16403 add_loc_descr (&loc, new_loc_descr (DW_OP_deref, 0, 0));
16404 else
16405 add_loc_descr (&loc, new_loc_descr (DW_OP_deref_size, size, 0));
16406 return loc;
16407 case POINTER_PLUS_EXPR:
16408 case PLUS_EXPR:
16409 if (host_integerp (TREE_OPERAND (val, 1), 1)
16410 && (unsigned HOST_WIDE_INT) tree_low_cst (TREE_OPERAND (val, 1), 1)
16411 < 16384)
16413 loc = descr_info_loc (TREE_OPERAND (val, 0), base_decl);
16414 if (!loc)
16415 break;
16416 loc_descr_plus_const (&loc, tree_low_cst (TREE_OPERAND (val, 1), 0));
16418 else
16420 op = DW_OP_plus;
16421 do_binop:
16422 loc = descr_info_loc (TREE_OPERAND (val, 0), base_decl);
16423 if (!loc)
16424 break;
16425 loc2 = descr_info_loc (TREE_OPERAND (val, 1), base_decl);
16426 if (!loc2)
16427 break;
16428 add_loc_descr (&loc, loc2);
16429 add_loc_descr (&loc2, new_loc_descr (op, 0, 0));
16431 return loc;
16432 case MINUS_EXPR:
16433 op = DW_OP_minus;
16434 goto do_binop;
16435 case MULT_EXPR:
16436 op = DW_OP_mul;
16437 goto do_binop;
16438 case EQ_EXPR:
16439 op = DW_OP_eq;
16440 goto do_binop;
16441 case NE_EXPR:
16442 op = DW_OP_ne;
16443 goto do_binop;
16444 default:
16445 break;
16447 return NULL;
16450 static void
16451 add_descr_info_field (dw_die_ref die, enum dwarf_attribute attr,
16452 tree val, tree base_decl)
16454 dw_loc_descr_ref loc;
16456 if (host_integerp (val, 0))
16458 add_AT_unsigned (die, attr, tree_low_cst (val, 0));
16459 return;
16462 loc = descr_info_loc (val, base_decl);
16463 if (!loc)
16464 return;
16466 add_AT_loc (die, attr, loc);
16469 /* This routine generates DIE for array with hidden descriptor, details
16470 are filled into *info by a langhook. */
16472 static void
16473 gen_descr_array_type_die (tree type, struct array_descr_info *info,
16474 dw_die_ref context_die)
16476 dw_die_ref scope_die = scope_die_for (type, context_die);
16477 dw_die_ref array_die;
16478 int dim;
16480 array_die = new_die (DW_TAG_array_type, scope_die, type);
16481 add_name_attribute (array_die, type_tag (type));
16482 equate_type_number_to_die (type, array_die);
16484 /* For Fortran multidimensional arrays use DW_ORD_col_major ordering. */
16485 if (is_fortran ()
16486 && info->ndimensions >= 2)
16487 add_AT_unsigned (array_die, DW_AT_ordering, DW_ORD_col_major);
16489 if (info->data_location)
16490 add_descr_info_field (array_die, DW_AT_data_location, info->data_location,
16491 info->base_decl);
16492 if (info->associated)
16493 add_descr_info_field (array_die, DW_AT_associated, info->associated,
16494 info->base_decl);
16495 if (info->allocated)
16496 add_descr_info_field (array_die, DW_AT_allocated, info->allocated,
16497 info->base_decl);
16499 for (dim = 0; dim < info->ndimensions; dim++)
16501 dw_die_ref subrange_die
16502 = new_die (DW_TAG_subrange_type, array_die, NULL);
16504 if (info->dimen[dim].lower_bound)
16506 /* If it is the default value, omit it. */
16507 int dflt;
16509 if (host_integerp (info->dimen[dim].lower_bound, 0)
16510 && (dflt = lower_bound_default ()) != -1
16511 && tree_low_cst (info->dimen[dim].lower_bound, 0) == dflt)
16513 else
16514 add_descr_info_field (subrange_die, DW_AT_lower_bound,
16515 info->dimen[dim].lower_bound,
16516 info->base_decl);
16518 if (info->dimen[dim].upper_bound)
16519 add_descr_info_field (subrange_die, DW_AT_upper_bound,
16520 info->dimen[dim].upper_bound,
16521 info->base_decl);
16522 if (info->dimen[dim].stride)
16523 add_descr_info_field (subrange_die, DW_AT_byte_stride,
16524 info->dimen[dim].stride,
16525 info->base_decl);
16528 gen_type_die (info->element_type, context_die);
16529 add_type_attribute (array_die, info->element_type, 0, 0, context_die);
16531 if (get_AT (array_die, DW_AT_name))
16532 add_pubtype (type, array_die);
16535 #if 0
16536 static void
16537 gen_entry_point_die (tree decl, dw_die_ref context_die)
16539 tree origin = decl_ultimate_origin (decl);
16540 dw_die_ref decl_die = new_die (DW_TAG_entry_point, context_die, decl);
16542 if (origin != NULL)
16543 add_abstract_origin_attribute (decl_die, origin);
16544 else
16546 add_name_and_src_coords_attributes (decl_die, decl);
16547 add_type_attribute (decl_die, TREE_TYPE (TREE_TYPE (decl)),
16548 0, 0, context_die);
16551 if (DECL_ABSTRACT (decl))
16552 equate_decl_number_to_die (decl, decl_die);
16553 else
16554 add_AT_lbl_id (decl_die, DW_AT_low_pc, decl_start_label (decl));
16556 #endif
16558 /* Walk through the list of incomplete types again, trying once more to
16559 emit full debugging info for them. */
16561 static void
16562 retry_incomplete_types (void)
16564 int i;
16566 for (i = VEC_length (tree, incomplete_types) - 1; i >= 0; i--)
16567 if (should_emit_struct_debug (VEC_index (tree, incomplete_types, i),
16568 DINFO_USAGE_DIR_USE))
16569 gen_type_die (VEC_index (tree, incomplete_types, i), comp_unit_die ());
16572 /* Determine what tag to use for a record type. */
16574 static enum dwarf_tag
16575 record_type_tag (tree type)
16577 if (! lang_hooks.types.classify_record)
16578 return DW_TAG_structure_type;
16580 switch (lang_hooks.types.classify_record (type))
16582 case RECORD_IS_STRUCT:
16583 return DW_TAG_structure_type;
16585 case RECORD_IS_CLASS:
16586 return DW_TAG_class_type;
16588 case RECORD_IS_INTERFACE:
16589 if (dwarf_version >= 3 || !dwarf_strict)
16590 return DW_TAG_interface_type;
16591 return DW_TAG_structure_type;
16593 default:
16594 gcc_unreachable ();
16598 /* Generate a DIE to represent an enumeration type. Note that these DIEs
16599 include all of the information about the enumeration values also. Each
16600 enumerated type name/value is listed as a child of the enumerated type
16601 DIE. */
16603 static dw_die_ref
16604 gen_enumeration_type_die (tree type, dw_die_ref context_die)
16606 dw_die_ref type_die = lookup_type_die (type);
16608 if (type_die == NULL)
16610 type_die = new_die (DW_TAG_enumeration_type,
16611 scope_die_for (type, context_die), type);
16612 equate_type_number_to_die (type, type_die);
16613 add_name_attribute (type_die, type_tag (type));
16614 add_gnat_descriptive_type_attribute (type_die, type, context_die);
16615 if (TYPE_ARTIFICIAL (type))
16616 add_AT_flag (type_die, DW_AT_artificial, 1);
16617 if (dwarf_version >= 4 || !dwarf_strict)
16619 if (ENUM_IS_SCOPED (type))
16620 add_AT_flag (type_die, DW_AT_enum_class, 1);
16621 if (ENUM_IS_OPAQUE (type))
16622 add_AT_flag (type_die, DW_AT_declaration, 1);
16625 else if (! TYPE_SIZE (type))
16626 return type_die;
16627 else
16628 remove_AT (type_die, DW_AT_declaration);
16630 /* Handle a GNU C/C++ extension, i.e. incomplete enum types. If the
16631 given enum type is incomplete, do not generate the DW_AT_byte_size
16632 attribute or the DW_AT_element_list attribute. */
16633 if (TYPE_SIZE (type))
16635 tree link;
16637 TREE_ASM_WRITTEN (type) = 1;
16638 add_byte_size_attribute (type_die, type);
16639 if (TYPE_STUB_DECL (type) != NULL_TREE)
16641 add_src_coords_attributes (type_die, TYPE_STUB_DECL (type));
16642 add_accessibility_attribute (type_die, TYPE_STUB_DECL (type));
16645 /* If the first reference to this type was as the return type of an
16646 inline function, then it may not have a parent. Fix this now. */
16647 if (type_die->die_parent == NULL)
16648 add_child_die (scope_die_for (type, context_die), type_die);
16650 for (link = TYPE_VALUES (type);
16651 link != NULL; link = TREE_CHAIN (link))
16653 dw_die_ref enum_die = new_die (DW_TAG_enumerator, type_die, link);
16654 tree value = TREE_VALUE (link);
16656 add_name_attribute (enum_die,
16657 IDENTIFIER_POINTER (TREE_PURPOSE (link)));
16659 if (TREE_CODE (value) == CONST_DECL)
16660 value = DECL_INITIAL (value);
16662 if (host_integerp (value, TYPE_UNSIGNED (TREE_TYPE (value))))
16663 /* DWARF2 does not provide a way of indicating whether or
16664 not enumeration constants are signed or unsigned. GDB
16665 always assumes the values are signed, so we output all
16666 values as if they were signed. That means that
16667 enumeration constants with very large unsigned values
16668 will appear to have negative values in the debugger. */
16669 add_AT_int (enum_die, DW_AT_const_value,
16670 tree_low_cst (value, tree_int_cst_sgn (value) > 0));
16673 else
16674 add_AT_flag (type_die, DW_AT_declaration, 1);
16676 if (get_AT (type_die, DW_AT_name))
16677 add_pubtype (type, type_die);
16679 return type_die;
16682 /* Generate a DIE to represent either a real live formal parameter decl or to
16683 represent just the type of some formal parameter position in some function
16684 type.
16686 Note that this routine is a bit unusual because its argument may be a
16687 ..._DECL node (i.e. either a PARM_DECL or perhaps a VAR_DECL which
16688 represents an inlining of some PARM_DECL) or else some sort of a ..._TYPE
16689 node. If it's the former then this function is being called to output a
16690 DIE to represent a formal parameter object (or some inlining thereof). If
16691 it's the latter, then this function is only being called to output a
16692 DW_TAG_formal_parameter DIE to stand as a placeholder for some formal
16693 argument type of some subprogram type.
16694 If EMIT_NAME_P is true, name and source coordinate attributes
16695 are emitted. */
16697 static dw_die_ref
16698 gen_formal_parameter_die (tree node, tree origin, bool emit_name_p,
16699 dw_die_ref context_die)
16701 tree node_or_origin = node ? node : origin;
16702 tree ultimate_origin;
16703 dw_die_ref parm_die
16704 = new_die (DW_TAG_formal_parameter, context_die, node);
16706 switch (TREE_CODE_CLASS (TREE_CODE (node_or_origin)))
16708 case tcc_declaration:
16709 ultimate_origin = decl_ultimate_origin (node_or_origin);
16710 if (node || ultimate_origin)
16711 origin = ultimate_origin;
16712 if (origin != NULL)
16713 add_abstract_origin_attribute (parm_die, origin);
16714 else if (emit_name_p)
16715 add_name_and_src_coords_attributes (parm_die, node);
16716 if (origin == NULL
16717 || (! DECL_ABSTRACT (node_or_origin)
16718 && variably_modified_type_p (TREE_TYPE (node_or_origin),
16719 decl_function_context
16720 (node_or_origin))))
16722 tree type = TREE_TYPE (node_or_origin);
16723 if (decl_by_reference_p (node_or_origin))
16724 add_type_attribute (parm_die, TREE_TYPE (type), 0, 0,
16725 context_die);
16726 else
16727 add_type_attribute (parm_die, type,
16728 TREE_READONLY (node_or_origin),
16729 TREE_THIS_VOLATILE (node_or_origin),
16730 context_die);
16732 if (origin == NULL && DECL_ARTIFICIAL (node))
16733 add_AT_flag (parm_die, DW_AT_artificial, 1);
16735 if (node && node != origin)
16736 equate_decl_number_to_die (node, parm_die);
16737 if (! DECL_ABSTRACT (node_or_origin))
16738 add_location_or_const_value_attribute (parm_die, node_or_origin,
16739 node == NULL, DW_AT_location);
16741 break;
16743 case tcc_type:
16744 /* We were called with some kind of a ..._TYPE node. */
16745 add_type_attribute (parm_die, node_or_origin, 0, 0, context_die);
16746 break;
16748 default:
16749 gcc_unreachable ();
16752 return parm_die;
16755 /* Generate and return a DW_TAG_GNU_formal_parameter_pack. Also generate
16756 children DW_TAG_formal_parameter DIEs representing the arguments of the
16757 parameter pack.
16759 PARM_PACK must be a function parameter pack.
16760 PACK_ARG is the first argument of the parameter pack. Its TREE_CHAIN
16761 must point to the subsequent arguments of the function PACK_ARG belongs to.
16762 SUBR_DIE is the DIE of the function PACK_ARG belongs to.
16763 If NEXT_ARG is non NULL, *NEXT_ARG is set to the function argument
16764 following the last one for which a DIE was generated. */
16766 static dw_die_ref
16767 gen_formal_parameter_pack_die (tree parm_pack,
16768 tree pack_arg,
16769 dw_die_ref subr_die,
16770 tree *next_arg)
16772 tree arg;
16773 dw_die_ref parm_pack_die;
16775 gcc_assert (parm_pack
16776 && lang_hooks.function_parameter_pack_p (parm_pack)
16777 && subr_die);
16779 parm_pack_die = new_die (DW_TAG_GNU_formal_parameter_pack, subr_die, parm_pack);
16780 add_src_coords_attributes (parm_pack_die, parm_pack);
16782 for (arg = pack_arg; arg; arg = DECL_CHAIN (arg))
16784 if (! lang_hooks.decls.function_parm_expanded_from_pack_p (arg,
16785 parm_pack))
16786 break;
16787 gen_formal_parameter_die (arg, NULL,
16788 false /* Don't emit name attribute. */,
16789 parm_pack_die);
16791 if (next_arg)
16792 *next_arg = arg;
16793 return parm_pack_die;
16796 /* Generate a special type of DIE used as a stand-in for a trailing ellipsis
16797 at the end of an (ANSI prototyped) formal parameters list. */
16799 static void
16800 gen_unspecified_parameters_die (tree decl_or_type, dw_die_ref context_die)
16802 new_die (DW_TAG_unspecified_parameters, context_die, decl_or_type);
16805 /* Generate a list of nameless DW_TAG_formal_parameter DIEs (and perhaps a
16806 DW_TAG_unspecified_parameters DIE) to represent the types of the formal
16807 parameters as specified in some function type specification (except for
16808 those which appear as part of a function *definition*). */
16810 static void
16811 gen_formal_types_die (tree function_or_method_type, dw_die_ref context_die)
16813 tree link;
16814 tree formal_type = NULL;
16815 tree first_parm_type;
16816 tree arg;
16818 if (TREE_CODE (function_or_method_type) == FUNCTION_DECL)
16820 arg = DECL_ARGUMENTS (function_or_method_type);
16821 function_or_method_type = TREE_TYPE (function_or_method_type);
16823 else
16824 arg = NULL_TREE;
16826 first_parm_type = TYPE_ARG_TYPES (function_or_method_type);
16828 /* Make our first pass over the list of formal parameter types and output a
16829 DW_TAG_formal_parameter DIE for each one. */
16830 for (link = first_parm_type; link; )
16832 dw_die_ref parm_die;
16834 formal_type = TREE_VALUE (link);
16835 if (formal_type == void_type_node)
16836 break;
16838 /* Output a (nameless) DIE to represent the formal parameter itself. */
16839 parm_die = gen_formal_parameter_die (formal_type, NULL,
16840 true /* Emit name attribute. */,
16841 context_die);
16842 if (TREE_CODE (function_or_method_type) == METHOD_TYPE
16843 && link == first_parm_type)
16845 add_AT_flag (parm_die, DW_AT_artificial, 1);
16846 if (dwarf_version >= 3 || !dwarf_strict)
16847 add_AT_die_ref (context_die, DW_AT_object_pointer, parm_die);
16849 else if (arg && DECL_ARTIFICIAL (arg))
16850 add_AT_flag (parm_die, DW_AT_artificial, 1);
16852 link = TREE_CHAIN (link);
16853 if (arg)
16854 arg = DECL_CHAIN (arg);
16857 /* If this function type has an ellipsis, add a
16858 DW_TAG_unspecified_parameters DIE to the end of the parameter list. */
16859 if (formal_type != void_type_node)
16860 gen_unspecified_parameters_die (function_or_method_type, context_die);
16862 /* Make our second (and final) pass over the list of formal parameter types
16863 and output DIEs to represent those types (as necessary). */
16864 for (link = TYPE_ARG_TYPES (function_or_method_type);
16865 link && TREE_VALUE (link);
16866 link = TREE_CHAIN (link))
16867 gen_type_die (TREE_VALUE (link), context_die);
16870 /* We want to generate the DIE for TYPE so that we can generate the
16871 die for MEMBER, which has been defined; we will need to refer back
16872 to the member declaration nested within TYPE. If we're trying to
16873 generate minimal debug info for TYPE, processing TYPE won't do the
16874 trick; we need to attach the member declaration by hand. */
16876 static void
16877 gen_type_die_for_member (tree type, tree member, dw_die_ref context_die)
16879 gen_type_die (type, context_die);
16881 /* If we're trying to avoid duplicate debug info, we may not have
16882 emitted the member decl for this function. Emit it now. */
16883 if (TYPE_STUB_DECL (type)
16884 && TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type))
16885 && ! lookup_decl_die (member))
16887 dw_die_ref type_die;
16888 gcc_assert (!decl_ultimate_origin (member));
16890 push_decl_scope (type);
16891 type_die = lookup_type_die_strip_naming_typedef (type);
16892 if (TREE_CODE (member) == FUNCTION_DECL)
16893 gen_subprogram_die (member, type_die);
16894 else if (TREE_CODE (member) == FIELD_DECL)
16896 /* Ignore the nameless fields that are used to skip bits but handle
16897 C++ anonymous unions and structs. */
16898 if (DECL_NAME (member) != NULL_TREE
16899 || TREE_CODE (TREE_TYPE (member)) == UNION_TYPE
16900 || TREE_CODE (TREE_TYPE (member)) == RECORD_TYPE)
16902 gen_type_die (member_declared_type (member), type_die);
16903 gen_field_die (member, type_die);
16906 else
16907 gen_variable_die (member, NULL_TREE, type_die);
16909 pop_decl_scope ();
16913 /* Generate the DWARF2 info for the "abstract" instance of a function which we
16914 may later generate inlined and/or out-of-line instances of. */
16916 static void
16917 dwarf2out_abstract_function (tree decl)
16919 dw_die_ref old_die;
16920 tree save_fn;
16921 tree context;
16922 int was_abstract;
16923 htab_t old_decl_loc_table;
16924 htab_t old_cached_dw_loc_list_table;
16925 int old_call_site_count, old_tail_call_site_count;
16926 struct call_arg_loc_node *old_call_arg_locations;
16928 /* Make sure we have the actual abstract inline, not a clone. */
16929 decl = DECL_ORIGIN (decl);
16931 old_die = lookup_decl_die (decl);
16932 if (old_die && get_AT (old_die, DW_AT_inline))
16933 /* We've already generated the abstract instance. */
16934 return;
16936 /* We can be called while recursively when seeing block defining inlined subroutine
16937 DIE. Be sure to not clobber the outer location table nor use it or we would
16938 get locations in abstract instantces. */
16939 old_decl_loc_table = decl_loc_table;
16940 decl_loc_table = NULL;
16941 old_cached_dw_loc_list_table = cached_dw_loc_list_table;
16942 cached_dw_loc_list_table = NULL;
16943 old_call_arg_locations = call_arg_locations;
16944 call_arg_locations = NULL;
16945 old_call_site_count = call_site_count;
16946 call_site_count = -1;
16947 old_tail_call_site_count = tail_call_site_count;
16948 tail_call_site_count = -1;
16950 /* Be sure we've emitted the in-class declaration DIE (if any) first, so
16951 we don't get confused by DECL_ABSTRACT. */
16952 if (debug_info_level > DINFO_LEVEL_TERSE)
16954 context = decl_class_context (decl);
16955 if (context)
16956 gen_type_die_for_member
16957 (context, decl, decl_function_context (decl) ? NULL : comp_unit_die ());
16960 /* Pretend we've just finished compiling this function. */
16961 save_fn = current_function_decl;
16962 current_function_decl = decl;
16963 push_cfun (DECL_STRUCT_FUNCTION (decl));
16965 was_abstract = DECL_ABSTRACT (decl);
16966 set_decl_abstract_flags (decl, 1);
16967 dwarf2out_decl (decl);
16968 if (! was_abstract)
16969 set_decl_abstract_flags (decl, 0);
16971 current_function_decl = save_fn;
16972 decl_loc_table = old_decl_loc_table;
16973 cached_dw_loc_list_table = old_cached_dw_loc_list_table;
16974 call_arg_locations = old_call_arg_locations;
16975 call_site_count = old_call_site_count;
16976 tail_call_site_count = old_tail_call_site_count;
16977 pop_cfun ();
16980 /* Helper function of premark_used_types() which gets called through
16981 htab_traverse.
16983 Marks the DIE of a given type in *SLOT as perennial, so it never gets
16984 marked as unused by prune_unused_types. */
16986 static int
16987 premark_used_types_helper (void **slot, void *data ATTRIBUTE_UNUSED)
16989 tree type;
16990 dw_die_ref die;
16992 type = (tree) *slot;
16993 die = lookup_type_die (type);
16994 if (die != NULL)
16995 die->die_perennial_p = 1;
16996 return 1;
16999 /* Helper function of premark_types_used_by_global_vars which gets called
17000 through htab_traverse.
17002 Marks the DIE of a given type in *SLOT as perennial, so it never gets
17003 marked as unused by prune_unused_types. The DIE of the type is marked
17004 only if the global variable using the type will actually be emitted. */
17006 static int
17007 premark_types_used_by_global_vars_helper (void **slot,
17008 void *data ATTRIBUTE_UNUSED)
17010 struct types_used_by_vars_entry *entry;
17011 dw_die_ref die;
17013 entry = (struct types_used_by_vars_entry *) *slot;
17014 gcc_assert (entry->type != NULL
17015 && entry->var_decl != NULL);
17016 die = lookup_type_die (entry->type);
17017 if (die)
17019 /* Ask cgraph if the global variable really is to be emitted.
17020 If yes, then we'll keep the DIE of ENTRY->TYPE. */
17021 struct varpool_node *node = varpool_get_node (entry->var_decl);
17022 if (node && node->needed)
17024 die->die_perennial_p = 1;
17025 /* Keep the parent DIEs as well. */
17026 while ((die = die->die_parent) && die->die_perennial_p == 0)
17027 die->die_perennial_p = 1;
17030 return 1;
17033 /* Mark all members of used_types_hash as perennial. */
17035 static void
17036 premark_used_types (void)
17038 if (cfun && cfun->used_types_hash)
17039 htab_traverse (cfun->used_types_hash, premark_used_types_helper, NULL);
17042 /* Mark all members of types_used_by_vars_entry as perennial. */
17044 static void
17045 premark_types_used_by_global_vars (void)
17047 if (types_used_by_vars_hash)
17048 htab_traverse (types_used_by_vars_hash,
17049 premark_types_used_by_global_vars_helper, NULL);
17052 /* Generate a DW_TAG_GNU_call_site DIE in function DECL under SUBR_DIE
17053 for CA_LOC call arg loc node. */
17055 static dw_die_ref
17056 gen_call_site_die (tree decl, dw_die_ref subr_die,
17057 struct call_arg_loc_node *ca_loc)
17059 dw_die_ref stmt_die = NULL, die;
17060 tree block = ca_loc->block;
17062 while (block
17063 && block != DECL_INITIAL (decl)
17064 && TREE_CODE (block) == BLOCK)
17066 if (VEC_length (dw_die_ref, block_map) > BLOCK_NUMBER (block))
17067 stmt_die = VEC_index (dw_die_ref, block_map, BLOCK_NUMBER (block));
17068 if (stmt_die)
17069 break;
17070 block = BLOCK_SUPERCONTEXT (block);
17072 if (stmt_die == NULL)
17073 stmt_die = subr_die;
17074 die = new_die (DW_TAG_GNU_call_site, stmt_die, NULL_TREE);
17075 add_AT_lbl_id (die, DW_AT_low_pc, ca_loc->label);
17076 if (ca_loc->tail_call_p)
17077 add_AT_flag (die, DW_AT_GNU_tail_call, 1);
17078 if (ca_loc->symbol_ref)
17080 dw_die_ref tdie = lookup_decl_die (SYMBOL_REF_DECL (ca_loc->symbol_ref));
17081 if (tdie)
17082 add_AT_die_ref (die, DW_AT_abstract_origin, tdie);
17083 else
17084 add_AT_addr (die, DW_AT_abstract_origin, ca_loc->symbol_ref);
17086 return die;
17089 /* Generate a DIE to represent a declared function (either file-scope or
17090 block-local). */
17092 static void
17093 gen_subprogram_die (tree decl, dw_die_ref context_die)
17095 tree origin = decl_ultimate_origin (decl);
17096 dw_die_ref subr_die;
17097 tree outer_scope;
17098 dw_die_ref old_die = lookup_decl_die (decl);
17099 int declaration = (current_function_decl != decl
17100 || class_or_namespace_scope_p (context_die));
17102 premark_used_types ();
17104 /* It is possible to have both DECL_ABSTRACT and DECLARATION be true if we
17105 started to generate the abstract instance of an inline, decided to output
17106 its containing class, and proceeded to emit the declaration of the inline
17107 from the member list for the class. If so, DECLARATION takes priority;
17108 we'll get back to the abstract instance when done with the class. */
17110 /* The class-scope declaration DIE must be the primary DIE. */
17111 if (origin && declaration && class_or_namespace_scope_p (context_die))
17113 origin = NULL;
17114 gcc_assert (!old_die);
17117 /* Now that the C++ front end lazily declares artificial member fns, we
17118 might need to retrofit the declaration into its class. */
17119 if (!declaration && !origin && !old_die
17120 && DECL_CONTEXT (decl) && TYPE_P (DECL_CONTEXT (decl))
17121 && !class_or_namespace_scope_p (context_die)
17122 && debug_info_level > DINFO_LEVEL_TERSE)
17123 old_die = force_decl_die (decl);
17125 if (origin != NULL)
17127 gcc_assert (!declaration || local_scope_p (context_die));
17129 /* Fixup die_parent for the abstract instance of a nested
17130 inline function. */
17131 if (old_die && old_die->die_parent == NULL)
17132 add_child_die (context_die, old_die);
17134 subr_die = new_die (DW_TAG_subprogram, context_die, decl);
17135 add_abstract_origin_attribute (subr_die, origin);
17136 /* This is where the actual code for a cloned function is.
17137 Let's emit linkage name attribute for it. This helps
17138 debuggers to e.g, set breakpoints into
17139 constructors/destructors when the user asks "break
17140 K::K". */
17141 add_linkage_name (subr_die, decl);
17143 else if (old_die)
17145 expanded_location s = expand_location (DECL_SOURCE_LOCATION (decl));
17146 struct dwarf_file_data * file_index = lookup_filename (s.file);
17148 if (!get_AT_flag (old_die, DW_AT_declaration)
17149 /* We can have a normal definition following an inline one in the
17150 case of redefinition of GNU C extern inlines.
17151 It seems reasonable to use AT_specification in this case. */
17152 && !get_AT (old_die, DW_AT_inline))
17154 /* Detect and ignore this case, where we are trying to output
17155 something we have already output. */
17156 return;
17159 /* If the definition comes from the same place as the declaration,
17160 maybe use the old DIE. We always want the DIE for this function
17161 that has the *_pc attributes to be under comp_unit_die so the
17162 debugger can find it. We also need to do this for abstract
17163 instances of inlines, since the spec requires the out-of-line copy
17164 to have the same parent. For local class methods, this doesn't
17165 apply; we just use the old DIE. */
17166 if ((is_cu_die (old_die->die_parent) || context_die == NULL)
17167 && (DECL_ARTIFICIAL (decl)
17168 || (get_AT_file (old_die, DW_AT_decl_file) == file_index
17169 && (get_AT_unsigned (old_die, DW_AT_decl_line)
17170 == (unsigned) s.line))))
17172 subr_die = old_die;
17174 /* Clear out the declaration attribute and the formal parameters.
17175 Do not remove all children, because it is possible that this
17176 declaration die was forced using force_decl_die(). In such
17177 cases die that forced declaration die (e.g. TAG_imported_module)
17178 is one of the children that we do not want to remove. */
17179 remove_AT (subr_die, DW_AT_declaration);
17180 remove_AT (subr_die, DW_AT_object_pointer);
17181 remove_child_TAG (subr_die, DW_TAG_formal_parameter);
17183 else
17185 subr_die = new_die (DW_TAG_subprogram, context_die, decl);
17186 add_AT_specification (subr_die, old_die);
17187 if (get_AT_file (old_die, DW_AT_decl_file) != file_index)
17188 add_AT_file (subr_die, DW_AT_decl_file, file_index);
17189 if (get_AT_unsigned (old_die, DW_AT_decl_line) != (unsigned) s.line)
17190 add_AT_unsigned (subr_die, DW_AT_decl_line, s.line);
17193 else
17195 subr_die = new_die (DW_TAG_subprogram, context_die, decl);
17197 if (TREE_PUBLIC (decl))
17198 add_AT_flag (subr_die, DW_AT_external, 1);
17200 add_name_and_src_coords_attributes (subr_die, decl);
17201 if (debug_info_level > DINFO_LEVEL_TERSE)
17203 add_prototyped_attribute (subr_die, TREE_TYPE (decl));
17204 add_type_attribute (subr_die, TREE_TYPE (TREE_TYPE (decl)),
17205 0, 0, context_die);
17208 add_pure_or_virtual_attribute (subr_die, decl);
17209 if (DECL_ARTIFICIAL (decl))
17210 add_AT_flag (subr_die, DW_AT_artificial, 1);
17212 add_accessibility_attribute (subr_die, decl);
17215 if (declaration)
17217 if (!old_die || !get_AT (old_die, DW_AT_inline))
17219 add_AT_flag (subr_die, DW_AT_declaration, 1);
17221 /* If this is an explicit function declaration then generate
17222 a DW_AT_explicit attribute. */
17223 if (lang_hooks.decls.function_decl_explicit_p (decl)
17224 && (dwarf_version >= 3 || !dwarf_strict))
17225 add_AT_flag (subr_die, DW_AT_explicit, 1);
17227 /* The first time we see a member function, it is in the context of
17228 the class to which it belongs. We make sure of this by emitting
17229 the class first. The next time is the definition, which is
17230 handled above. The two may come from the same source text.
17232 Note that force_decl_die() forces function declaration die. It is
17233 later reused to represent definition. */
17234 equate_decl_number_to_die (decl, subr_die);
17237 else if (DECL_ABSTRACT (decl))
17239 if (DECL_DECLARED_INLINE_P (decl))
17241 if (cgraph_function_possibly_inlined_p (decl))
17242 add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_declared_inlined);
17243 else
17244 add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_declared_not_inlined);
17246 else
17248 if (cgraph_function_possibly_inlined_p (decl))
17249 add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_inlined);
17250 else
17251 add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_not_inlined);
17254 if (DECL_DECLARED_INLINE_P (decl)
17255 && lookup_attribute ("artificial", DECL_ATTRIBUTES (decl)))
17256 add_AT_flag (subr_die, DW_AT_artificial, 1);
17258 equate_decl_number_to_die (decl, subr_die);
17260 else if (!DECL_EXTERNAL (decl))
17262 HOST_WIDE_INT cfa_fb_offset;
17264 if (!old_die || !get_AT (old_die, DW_AT_inline))
17265 equate_decl_number_to_die (decl, subr_die);
17267 if (!flag_reorder_blocks_and_partition)
17269 dw_fde_ref fde = cfun->fde;
17270 if (fde->dw_fde_begin)
17272 /* We have already generated the labels. */
17273 add_AT_lbl_id (subr_die, DW_AT_low_pc, fde->dw_fde_begin);
17274 add_AT_lbl_id (subr_die, DW_AT_high_pc, fde->dw_fde_end);
17276 else
17278 /* Create start/end labels and add the range. */
17279 char label_id[MAX_ARTIFICIAL_LABEL_BYTES];
17280 ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_BEGIN_LABEL,
17281 current_function_funcdef_no);
17282 add_AT_lbl_id (subr_die, DW_AT_low_pc, label_id);
17283 ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_END_LABEL,
17284 current_function_funcdef_no);
17285 add_AT_lbl_id (subr_die, DW_AT_high_pc, label_id);
17288 #if VMS_DEBUGGING_INFO
17289 /* HP OpenVMS Industry Standard 64: DWARF Extensions
17290 Section 2.3 Prologue and Epilogue Attributes:
17291 When a breakpoint is set on entry to a function, it is generally
17292 desirable for execution to be suspended, not on the very first
17293 instruction of the function, but rather at a point after the
17294 function's frame has been set up, after any language defined local
17295 declaration processing has been completed, and before execution of
17296 the first statement of the function begins. Debuggers generally
17297 cannot properly determine where this point is. Similarly for a
17298 breakpoint set on exit from a function. The prologue and epilogue
17299 attributes allow a compiler to communicate the location(s) to use. */
17302 if (fde->dw_fde_vms_end_prologue)
17303 add_AT_vms_delta (subr_die, DW_AT_HP_prologue,
17304 fde->dw_fde_begin, fde->dw_fde_vms_end_prologue);
17306 if (fde->dw_fde_vms_begin_epilogue)
17307 add_AT_vms_delta (subr_die, DW_AT_HP_epilogue,
17308 fde->dw_fde_begin, fde->dw_fde_vms_begin_epilogue);
17310 #endif
17312 add_pubname (decl, subr_die);
17314 else
17316 /* Generate pubnames entries for the split function code ranges. */
17317 dw_fde_ref fde = cfun->fde;
17319 if (fde->dw_fde_second_begin)
17321 if (dwarf_version >= 3 || !dwarf_strict)
17323 /* We should use ranges for non-contiguous code section
17324 addresses. Use the actual code range for the initial
17325 section, since the HOT/COLD labels might precede an
17326 alignment offset. */
17327 bool range_list_added = false;
17328 add_ranges_by_labels (subr_die, fde->dw_fde_begin,
17329 fde->dw_fde_end, &range_list_added);
17330 add_ranges_by_labels (subr_die, fde->dw_fde_second_begin,
17331 fde->dw_fde_second_end,
17332 &range_list_added);
17333 add_pubname (decl, subr_die);
17334 if (range_list_added)
17335 add_ranges (NULL);
17337 else
17339 /* There is no real support in DW2 for this .. so we make
17340 a work-around. First, emit the pub name for the segment
17341 containing the function label. Then make and emit a
17342 simplified subprogram DIE for the second segment with the
17343 name pre-fixed by __hot/cold_sect_of_. We use the same
17344 linkage name for the second die so that gdb will find both
17345 sections when given "b foo". */
17346 const char *name = NULL;
17347 tree decl_name = DECL_NAME (decl);
17348 dw_die_ref seg_die;
17350 /* Do the 'primary' section. */
17351 add_AT_lbl_id (subr_die, DW_AT_low_pc,
17352 fde->dw_fde_begin);
17353 add_AT_lbl_id (subr_die, DW_AT_high_pc,
17354 fde->dw_fde_end);
17355 /* Add it. */
17356 add_pubname (decl, subr_die);
17358 /* Build a minimal DIE for the secondary section. */
17359 seg_die = new_die (DW_TAG_subprogram,
17360 subr_die->die_parent, decl);
17362 if (TREE_PUBLIC (decl))
17363 add_AT_flag (seg_die, DW_AT_external, 1);
17365 if (decl_name != NULL
17366 && IDENTIFIER_POINTER (decl_name) != NULL)
17368 name = dwarf2_name (decl, 1);
17369 if (! DECL_ARTIFICIAL (decl))
17370 add_src_coords_attributes (seg_die, decl);
17372 add_linkage_name (seg_die, decl);
17374 gcc_assert (name != NULL);
17375 add_pure_or_virtual_attribute (seg_die, decl);
17376 if (DECL_ARTIFICIAL (decl))
17377 add_AT_flag (seg_die, DW_AT_artificial, 1);
17379 name = concat ("__second_sect_of_", name, NULL);
17380 add_AT_lbl_id (seg_die, DW_AT_low_pc,
17381 fde->dw_fde_second_begin);
17382 add_AT_lbl_id (seg_die, DW_AT_high_pc,
17383 fde->dw_fde_second_end);
17384 add_name_attribute (seg_die, name);
17385 add_pubname_string (name, seg_die);
17388 else
17390 add_AT_lbl_id (subr_die, DW_AT_low_pc, fde->dw_fde_begin);
17391 add_AT_lbl_id (subr_die, DW_AT_high_pc, fde->dw_fde_end);
17392 add_pubname (decl, subr_die);
17396 #ifdef MIPS_DEBUGGING_INFO
17397 /* Add a reference to the FDE for this routine. */
17398 add_AT_fde_ref (subr_die, DW_AT_MIPS_fde, cfun->fde->fde_index);
17399 #endif
17401 cfa_fb_offset = CFA_FRAME_BASE_OFFSET (decl);
17403 /* We define the "frame base" as the function's CFA. This is more
17404 convenient for several reasons: (1) It's stable across the prologue
17405 and epilogue, which makes it better than just a frame pointer,
17406 (2) With dwarf3, there exists a one-byte encoding that allows us
17407 to reference the .debug_frame data by proxy, but failing that,
17408 (3) We can at least reuse the code inspection and interpretation
17409 code that determines the CFA position at various points in the
17410 function. */
17411 if (dwarf_version >= 3)
17413 dw_loc_descr_ref op = new_loc_descr (DW_OP_call_frame_cfa, 0, 0);
17414 add_AT_loc (subr_die, DW_AT_frame_base, op);
17416 else
17418 dw_loc_list_ref list = convert_cfa_to_fb_loc_list (cfa_fb_offset);
17419 if (list->dw_loc_next)
17420 add_AT_loc_list (subr_die, DW_AT_frame_base, list);
17421 else
17422 add_AT_loc (subr_die, DW_AT_frame_base, list->expr);
17425 /* Compute a displacement from the "steady-state frame pointer" to
17426 the CFA. The former is what all stack slots and argument slots
17427 will reference in the rtl; the later is what we've told the
17428 debugger about. We'll need to adjust all frame_base references
17429 by this displacement. */
17430 compute_frame_pointer_to_fb_displacement (cfa_fb_offset);
17432 if (cfun->static_chain_decl)
17433 add_AT_location_description (subr_die, DW_AT_static_link,
17434 loc_list_from_tree (cfun->static_chain_decl, 2));
17437 /* Generate child dies for template paramaters. */
17438 if (debug_info_level > DINFO_LEVEL_TERSE)
17439 gen_generic_params_dies (decl);
17441 /* Now output descriptions of the arguments for this function. This gets
17442 (unnecessarily?) complex because of the fact that the DECL_ARGUMENT list
17443 for a FUNCTION_DECL doesn't indicate cases where there was a trailing
17444 `...' at the end of the formal parameter list. In order to find out if
17445 there was a trailing ellipsis or not, we must instead look at the type
17446 associated with the FUNCTION_DECL. This will be a node of type
17447 FUNCTION_TYPE. If the chain of type nodes hanging off of this
17448 FUNCTION_TYPE node ends with a void_type_node then there should *not* be
17449 an ellipsis at the end. */
17451 /* In the case where we are describing a mere function declaration, all we
17452 need to do here (and all we *can* do here) is to describe the *types* of
17453 its formal parameters. */
17454 if (debug_info_level <= DINFO_LEVEL_TERSE)
17456 else if (declaration)
17457 gen_formal_types_die (decl, subr_die);
17458 else
17460 /* Generate DIEs to represent all known formal parameters. */
17461 tree parm = DECL_ARGUMENTS (decl);
17462 tree generic_decl = lang_hooks.decls.get_generic_function_decl (decl);
17463 tree generic_decl_parm = generic_decl
17464 ? DECL_ARGUMENTS (generic_decl)
17465 : NULL;
17467 /* Now we want to walk the list of parameters of the function and
17468 emit their relevant DIEs.
17470 We consider the case of DECL being an instance of a generic function
17471 as well as it being a normal function.
17473 If DECL is an instance of a generic function we walk the
17474 parameters of the generic function declaration _and_ the parameters of
17475 DECL itself. This is useful because we want to emit specific DIEs for
17476 function parameter packs and those are declared as part of the
17477 generic function declaration. In that particular case,
17478 the parameter pack yields a DW_TAG_GNU_formal_parameter_pack DIE.
17479 That DIE has children DIEs representing the set of arguments
17480 of the pack. Note that the set of pack arguments can be empty.
17481 In that case, the DW_TAG_GNU_formal_parameter_pack DIE will not have any
17482 children DIE.
17484 Otherwise, we just consider the parameters of DECL. */
17485 while (generic_decl_parm || parm)
17487 if (generic_decl_parm
17488 && lang_hooks.function_parameter_pack_p (generic_decl_parm))
17489 gen_formal_parameter_pack_die (generic_decl_parm,
17490 parm, subr_die,
17491 &parm);
17492 else if (parm)
17494 dw_die_ref parm_die = gen_decl_die (parm, NULL, subr_die);
17496 if (parm == DECL_ARGUMENTS (decl)
17497 && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE
17498 && parm_die
17499 && (dwarf_version >= 3 || !dwarf_strict))
17500 add_AT_die_ref (subr_die, DW_AT_object_pointer, parm_die);
17502 parm = DECL_CHAIN (parm);
17505 if (generic_decl_parm)
17506 generic_decl_parm = DECL_CHAIN (generic_decl_parm);
17509 /* Decide whether we need an unspecified_parameters DIE at the end.
17510 There are 2 more cases to do this for: 1) the ansi ... declaration -
17511 this is detectable when the end of the arg list is not a
17512 void_type_node 2) an unprototyped function declaration (not a
17513 definition). This just means that we have no info about the
17514 parameters at all. */
17515 if (prototype_p (TREE_TYPE (decl)))
17517 /* This is the prototyped case, check for.... */
17518 if (stdarg_p (TREE_TYPE (decl)))
17519 gen_unspecified_parameters_die (decl, subr_die);
17521 else if (DECL_INITIAL (decl) == NULL_TREE)
17522 gen_unspecified_parameters_die (decl, subr_die);
17525 /* Output Dwarf info for all of the stuff within the body of the function
17526 (if it has one - it may be just a declaration). */
17527 outer_scope = DECL_INITIAL (decl);
17529 /* OUTER_SCOPE is a pointer to the outermost BLOCK node created to represent
17530 a function. This BLOCK actually represents the outermost binding contour
17531 for the function, i.e. the contour in which the function's formal
17532 parameters and labels get declared. Curiously, it appears that the front
17533 end doesn't actually put the PARM_DECL nodes for the current function onto
17534 the BLOCK_VARS list for this outer scope, but are strung off of the
17535 DECL_ARGUMENTS list for the function instead.
17537 The BLOCK_VARS list for the `outer_scope' does provide us with a list of
17538 the LABEL_DECL nodes for the function however, and we output DWARF info
17539 for those in decls_for_scope. Just within the `outer_scope' there will be
17540 a BLOCK node representing the function's outermost pair of curly braces,
17541 and any blocks used for the base and member initializers of a C++
17542 constructor function. */
17543 if (! declaration && TREE_CODE (outer_scope) != ERROR_MARK)
17545 int call_site_note_count = 0;
17546 int tail_call_site_note_count = 0;
17548 /* Emit a DW_TAG_variable DIE for a named return value. */
17549 if (DECL_NAME (DECL_RESULT (decl)))
17550 gen_decl_die (DECL_RESULT (decl), NULL, subr_die);
17552 current_function_has_inlines = 0;
17553 decls_for_scope (outer_scope, subr_die, 0);
17555 if (call_arg_locations && !dwarf_strict)
17557 struct call_arg_loc_node *ca_loc;
17558 for (ca_loc = call_arg_locations; ca_loc; ca_loc = ca_loc->next)
17560 dw_die_ref die = NULL;
17561 rtx tloc = NULL_RTX, tlocc = NULL_RTX;
17562 rtx arg, next_arg;
17564 for (arg = NOTE_VAR_LOCATION (ca_loc->call_arg_loc_note);
17565 arg; arg = next_arg)
17567 dw_loc_descr_ref reg, val;
17568 enum machine_mode mode = GET_MODE (XEXP (XEXP (arg, 0), 1));
17569 dw_die_ref cdie, tdie = NULL;
17571 next_arg = XEXP (arg, 1);
17572 if (REG_P (XEXP (XEXP (arg, 0), 0))
17573 && next_arg
17574 && MEM_P (XEXP (XEXP (next_arg, 0), 0))
17575 && REG_P (XEXP (XEXP (XEXP (next_arg, 0), 0), 0))
17576 && REGNO (XEXP (XEXP (arg, 0), 0))
17577 == REGNO (XEXP (XEXP (XEXP (next_arg, 0), 0), 0)))
17578 next_arg = XEXP (next_arg, 1);
17579 if (mode == VOIDmode)
17581 mode = GET_MODE (XEXP (XEXP (arg, 0), 0));
17582 if (mode == VOIDmode)
17583 mode = GET_MODE (XEXP (arg, 0));
17585 if (mode == VOIDmode || mode == BLKmode)
17586 continue;
17587 if (XEXP (XEXP (arg, 0), 0) == pc_rtx)
17589 gcc_assert (ca_loc->symbol_ref == NULL_RTX);
17590 tloc = XEXP (XEXP (arg, 0), 1);
17591 continue;
17593 else if (GET_CODE (XEXP (XEXP (arg, 0), 0)) == CLOBBER
17594 && XEXP (XEXP (XEXP (arg, 0), 0), 0) == pc_rtx)
17596 gcc_assert (ca_loc->symbol_ref == NULL_RTX);
17597 tlocc = XEXP (XEXP (arg, 0), 1);
17598 continue;
17600 reg = NULL;
17601 if (REG_P (XEXP (XEXP (arg, 0), 0)))
17602 reg = reg_loc_descriptor (XEXP (XEXP (arg, 0), 0),
17603 VAR_INIT_STATUS_INITIALIZED);
17604 else if (MEM_P (XEXP (XEXP (arg, 0), 0)))
17606 rtx mem = XEXP (XEXP (arg, 0), 0);
17607 reg = mem_loc_descriptor (XEXP (mem, 0),
17608 get_address_mode (mem),
17609 GET_MODE (mem),
17610 VAR_INIT_STATUS_INITIALIZED);
17612 else if (GET_CODE (XEXP (XEXP (arg, 0), 0))
17613 == DEBUG_PARAMETER_REF)
17615 tree tdecl
17616 = DEBUG_PARAMETER_REF_DECL (XEXP (XEXP (arg, 0), 0));
17617 tdie = lookup_decl_die (tdecl);
17618 if (tdie == NULL)
17619 continue;
17621 else
17622 continue;
17623 if (reg == NULL
17624 && GET_CODE (XEXP (XEXP (arg, 0), 0))
17625 != DEBUG_PARAMETER_REF)
17626 continue;
17627 val = mem_loc_descriptor (XEXP (XEXP (arg, 0), 1), mode,
17628 VOIDmode,
17629 VAR_INIT_STATUS_INITIALIZED);
17630 if (val == NULL)
17631 continue;
17632 if (die == NULL)
17633 die = gen_call_site_die (decl, subr_die, ca_loc);
17634 cdie = new_die (DW_TAG_GNU_call_site_parameter, die,
17635 NULL_TREE);
17636 if (reg != NULL)
17637 add_AT_loc (cdie, DW_AT_location, reg);
17638 else if (tdie != NULL)
17639 add_AT_die_ref (cdie, DW_AT_abstract_origin, tdie);
17640 add_AT_loc (cdie, DW_AT_GNU_call_site_value, val);
17641 if (next_arg != XEXP (arg, 1))
17643 mode = GET_MODE (XEXP (XEXP (XEXP (arg, 1), 0), 1));
17644 if (mode == VOIDmode)
17645 mode = GET_MODE (XEXP (XEXP (XEXP (arg, 1), 0), 0));
17646 val = mem_loc_descriptor (XEXP (XEXP (XEXP (arg, 1),
17647 0), 1),
17648 mode, VOIDmode,
17649 VAR_INIT_STATUS_INITIALIZED);
17650 if (val != NULL)
17651 add_AT_loc (cdie, DW_AT_GNU_call_site_data_value, val);
17654 if (die == NULL
17655 && (ca_loc->symbol_ref || tloc))
17656 die = gen_call_site_die (decl, subr_die, ca_loc);
17657 if (die != NULL && (tloc != NULL_RTX || tlocc != NULL_RTX))
17659 dw_loc_descr_ref tval = NULL;
17661 if (tloc != NULL_RTX)
17662 tval = mem_loc_descriptor (tloc,
17663 GET_MODE (tloc) == VOIDmode
17664 ? Pmode : GET_MODE (tloc),
17665 VOIDmode,
17666 VAR_INIT_STATUS_INITIALIZED);
17667 if (tval)
17668 add_AT_loc (die, DW_AT_GNU_call_site_target, tval);
17669 else if (tlocc != NULL_RTX)
17671 tval = mem_loc_descriptor (tlocc,
17672 GET_MODE (tlocc) == VOIDmode
17673 ? Pmode : GET_MODE (tlocc),
17674 VOIDmode,
17675 VAR_INIT_STATUS_INITIALIZED);
17676 if (tval)
17677 add_AT_loc (die, DW_AT_GNU_call_site_target_clobbered,
17678 tval);
17681 if (die != NULL)
17683 call_site_note_count++;
17684 if (ca_loc->tail_call_p)
17685 tail_call_site_note_count++;
17689 call_arg_locations = NULL;
17690 call_arg_loc_last = NULL;
17691 if (tail_call_site_count >= 0
17692 && tail_call_site_count == tail_call_site_note_count
17693 && !dwarf_strict)
17695 if (call_site_count >= 0
17696 && call_site_count == call_site_note_count)
17697 add_AT_flag (subr_die, DW_AT_GNU_all_call_sites, 1);
17698 else
17699 add_AT_flag (subr_die, DW_AT_GNU_all_tail_call_sites, 1);
17701 call_site_count = -1;
17702 tail_call_site_count = -1;
17704 /* Add the calling convention attribute if requested. */
17705 add_calling_convention_attribute (subr_die, decl);
17709 /* Returns a hash value for X (which really is a die_struct). */
17711 static hashval_t
17712 common_block_die_table_hash (const void *x)
17714 const_dw_die_ref d = (const_dw_die_ref) x;
17715 return (hashval_t) d->decl_id ^ htab_hash_pointer (d->die_parent);
17718 /* Return nonzero if decl_id and die_parent of die_struct X is the same
17719 as decl_id and die_parent of die_struct Y. */
17721 static int
17722 common_block_die_table_eq (const void *x, const void *y)
17724 const_dw_die_ref d = (const_dw_die_ref) x;
17725 const_dw_die_ref e = (const_dw_die_ref) y;
17726 return d->decl_id == e->decl_id && d->die_parent == e->die_parent;
17729 /* Generate a DIE to represent a declared data object.
17730 Either DECL or ORIGIN must be non-null. */
17732 static void
17733 gen_variable_die (tree decl, tree origin, dw_die_ref context_die)
17735 HOST_WIDE_INT off;
17736 tree com_decl;
17737 tree decl_or_origin = decl ? decl : origin;
17738 tree ultimate_origin;
17739 dw_die_ref var_die;
17740 dw_die_ref old_die = decl ? lookup_decl_die (decl) : NULL;
17741 dw_die_ref origin_die;
17742 bool declaration = (DECL_EXTERNAL (decl_or_origin)
17743 || class_or_namespace_scope_p (context_die));
17744 bool specialization_p = false;
17746 ultimate_origin = decl_ultimate_origin (decl_or_origin);
17747 if (decl || ultimate_origin)
17748 origin = ultimate_origin;
17749 com_decl = fortran_common (decl_or_origin, &off);
17751 /* Symbol in common gets emitted as a child of the common block, in the form
17752 of a data member. */
17753 if (com_decl)
17755 dw_die_ref com_die;
17756 dw_loc_list_ref loc;
17757 die_node com_die_arg;
17759 var_die = lookup_decl_die (decl_or_origin);
17760 if (var_die)
17762 if (get_AT (var_die, DW_AT_location) == NULL)
17764 loc = loc_list_from_tree (com_decl, off ? 1 : 2);
17765 if (loc)
17767 if (off)
17769 /* Optimize the common case. */
17770 if (single_element_loc_list_p (loc)
17771 && loc->expr->dw_loc_opc == DW_OP_addr
17772 && loc->expr->dw_loc_next == NULL
17773 && GET_CODE (loc->expr->dw_loc_oprnd1.v.val_addr)
17774 == SYMBOL_REF)
17775 loc->expr->dw_loc_oprnd1.v.val_addr
17776 = plus_constant (loc->expr->dw_loc_oprnd1.v.val_addr, off);
17777 else
17778 loc_list_plus_const (loc, off);
17780 add_AT_location_description (var_die, DW_AT_location, loc);
17781 remove_AT (var_die, DW_AT_declaration);
17784 return;
17787 if (common_block_die_table == NULL)
17788 common_block_die_table
17789 = htab_create_ggc (10, common_block_die_table_hash,
17790 common_block_die_table_eq, NULL);
17792 com_die_arg.decl_id = DECL_UID (com_decl);
17793 com_die_arg.die_parent = context_die;
17794 com_die = (dw_die_ref) htab_find (common_block_die_table, &com_die_arg);
17795 loc = loc_list_from_tree (com_decl, 2);
17796 if (com_die == NULL)
17798 const char *cnam
17799 = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (com_decl));
17800 void **slot;
17802 com_die = new_die (DW_TAG_common_block, context_die, decl);
17803 add_name_and_src_coords_attributes (com_die, com_decl);
17804 if (loc)
17806 add_AT_location_description (com_die, DW_AT_location, loc);
17807 /* Avoid sharing the same loc descriptor between
17808 DW_TAG_common_block and DW_TAG_variable. */
17809 loc = loc_list_from_tree (com_decl, 2);
17811 else if (DECL_EXTERNAL (decl))
17812 add_AT_flag (com_die, DW_AT_declaration, 1);
17813 add_pubname_string (cnam, com_die); /* ??? needed? */
17814 com_die->decl_id = DECL_UID (com_decl);
17815 slot = htab_find_slot (common_block_die_table, com_die, INSERT);
17816 *slot = (void *) com_die;
17818 else if (get_AT (com_die, DW_AT_location) == NULL && loc)
17820 add_AT_location_description (com_die, DW_AT_location, loc);
17821 loc = loc_list_from_tree (com_decl, 2);
17822 remove_AT (com_die, DW_AT_declaration);
17824 var_die = new_die (DW_TAG_variable, com_die, decl);
17825 add_name_and_src_coords_attributes (var_die, decl);
17826 add_type_attribute (var_die, TREE_TYPE (decl), TREE_READONLY (decl),
17827 TREE_THIS_VOLATILE (decl), context_die);
17828 add_AT_flag (var_die, DW_AT_external, 1);
17829 if (loc)
17831 if (off)
17833 /* Optimize the common case. */
17834 if (single_element_loc_list_p (loc)
17835 && loc->expr->dw_loc_opc == DW_OP_addr
17836 && loc->expr->dw_loc_next == NULL
17837 && GET_CODE (loc->expr->dw_loc_oprnd1.v.val_addr) == SYMBOL_REF)
17838 loc->expr->dw_loc_oprnd1.v.val_addr
17839 = plus_constant (loc->expr->dw_loc_oprnd1.v.val_addr, off);
17840 else
17841 loc_list_plus_const (loc, off);
17843 add_AT_location_description (var_die, DW_AT_location, loc);
17845 else if (DECL_EXTERNAL (decl))
17846 add_AT_flag (var_die, DW_AT_declaration, 1);
17847 equate_decl_number_to_die (decl, var_die);
17848 return;
17851 /* If the compiler emitted a definition for the DECL declaration
17852 and if we already emitted a DIE for it, don't emit a second
17853 DIE for it again. Allow re-declarations of DECLs that are
17854 inside functions, though. */
17855 if (old_die && declaration && !local_scope_p (context_die))
17856 return;
17858 /* For static data members, the declaration in the class is supposed
17859 to have DW_TAG_member tag; the specification should still be
17860 DW_TAG_variable referencing the DW_TAG_member DIE. */
17861 if (declaration && class_scope_p (context_die))
17862 var_die = new_die (DW_TAG_member, context_die, decl);
17863 else
17864 var_die = new_die (DW_TAG_variable, context_die, decl);
17866 origin_die = NULL;
17867 if (origin != NULL)
17868 origin_die = add_abstract_origin_attribute (var_die, origin);
17870 /* Loop unrolling can create multiple blocks that refer to the same
17871 static variable, so we must test for the DW_AT_declaration flag.
17873 ??? Loop unrolling/reorder_blocks should perhaps be rewritten to
17874 copy decls and set the DECL_ABSTRACT flag on them instead of
17875 sharing them.
17877 ??? Duplicated blocks have been rewritten to use .debug_ranges.
17879 ??? The declare_in_namespace support causes us to get two DIEs for one
17880 variable, both of which are declarations. We want to avoid considering
17881 one to be a specification, so we must test that this DIE is not a
17882 declaration. */
17883 else if (old_die && TREE_STATIC (decl) && ! declaration
17884 && get_AT_flag (old_die, DW_AT_declaration) == 1)
17886 /* This is a definition of a C++ class level static. */
17887 add_AT_specification (var_die, old_die);
17888 specialization_p = true;
17889 if (DECL_NAME (decl))
17891 expanded_location s = expand_location (DECL_SOURCE_LOCATION (decl));
17892 struct dwarf_file_data * file_index = lookup_filename (s.file);
17894 if (get_AT_file (old_die, DW_AT_decl_file) != file_index)
17895 add_AT_file (var_die, DW_AT_decl_file, file_index);
17897 if (get_AT_unsigned (old_die, DW_AT_decl_line) != (unsigned) s.line)
17898 add_AT_unsigned (var_die, DW_AT_decl_line, s.line);
17900 if (old_die->die_tag == DW_TAG_member)
17901 add_linkage_name (var_die, decl);
17904 else
17905 add_name_and_src_coords_attributes (var_die, decl);
17907 if ((origin == NULL && !specialization_p)
17908 || (origin != NULL
17909 && !DECL_ABSTRACT (decl_or_origin)
17910 && variably_modified_type_p (TREE_TYPE (decl_or_origin),
17911 decl_function_context
17912 (decl_or_origin))))
17914 tree type = TREE_TYPE (decl_or_origin);
17916 if (decl_by_reference_p (decl_or_origin))
17917 add_type_attribute (var_die, TREE_TYPE (type), 0, 0, context_die);
17918 else
17919 add_type_attribute (var_die, type, TREE_READONLY (decl_or_origin),
17920 TREE_THIS_VOLATILE (decl_or_origin), context_die);
17923 if (origin == NULL && !specialization_p)
17925 if (TREE_PUBLIC (decl))
17926 add_AT_flag (var_die, DW_AT_external, 1);
17928 if (DECL_ARTIFICIAL (decl))
17929 add_AT_flag (var_die, DW_AT_artificial, 1);
17931 add_accessibility_attribute (var_die, decl);
17934 if (declaration)
17935 add_AT_flag (var_die, DW_AT_declaration, 1);
17937 if (decl && (DECL_ABSTRACT (decl) || declaration || old_die == NULL))
17938 equate_decl_number_to_die (decl, var_die);
17940 if (! declaration
17941 && (! DECL_ABSTRACT (decl_or_origin)
17942 /* Local static vars are shared between all clones/inlines,
17943 so emit DW_AT_location on the abstract DIE if DECL_RTL is
17944 already set. */
17945 || (TREE_CODE (decl_or_origin) == VAR_DECL
17946 && TREE_STATIC (decl_or_origin)
17947 && DECL_RTL_SET_P (decl_or_origin)))
17948 /* When abstract origin already has DW_AT_location attribute, no need
17949 to add it again. */
17950 && (origin_die == NULL || get_AT (origin_die, DW_AT_location) == NULL))
17952 if (TREE_CODE (decl_or_origin) == VAR_DECL && TREE_STATIC (decl_or_origin)
17953 && !TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl_or_origin)))
17954 defer_location (decl_or_origin, var_die);
17955 else
17956 add_location_or_const_value_attribute (var_die, decl_or_origin,
17957 decl == NULL, DW_AT_location);
17958 add_pubname (decl_or_origin, var_die);
17960 else
17961 tree_add_const_value_attribute_for_decl (var_die, decl_or_origin);
17964 /* Generate a DIE to represent a named constant. */
17966 static void
17967 gen_const_die (tree decl, dw_die_ref context_die)
17969 dw_die_ref const_die;
17970 tree type = TREE_TYPE (decl);
17972 const_die = new_die (DW_TAG_constant, context_die, decl);
17973 add_name_and_src_coords_attributes (const_die, decl);
17974 add_type_attribute (const_die, type, 1, 0, context_die);
17975 if (TREE_PUBLIC (decl))
17976 add_AT_flag (const_die, DW_AT_external, 1);
17977 if (DECL_ARTIFICIAL (decl))
17978 add_AT_flag (const_die, DW_AT_artificial, 1);
17979 tree_add_const_value_attribute_for_decl (const_die, decl);
17982 /* Generate a DIE to represent a label identifier. */
17984 static void
17985 gen_label_die (tree decl, dw_die_ref context_die)
17987 tree origin = decl_ultimate_origin (decl);
17988 dw_die_ref lbl_die = new_die (DW_TAG_label, context_die, decl);
17989 rtx insn;
17990 char label[MAX_ARTIFICIAL_LABEL_BYTES];
17992 if (origin != NULL)
17993 add_abstract_origin_attribute (lbl_die, origin);
17994 else
17995 add_name_and_src_coords_attributes (lbl_die, decl);
17997 if (DECL_ABSTRACT (decl))
17998 equate_decl_number_to_die (decl, lbl_die);
17999 else
18001 insn = DECL_RTL_IF_SET (decl);
18003 /* Deleted labels are programmer specified labels which have been
18004 eliminated because of various optimizations. We still emit them
18005 here so that it is possible to put breakpoints on them. */
18006 if (insn
18007 && (LABEL_P (insn)
18008 || ((NOTE_P (insn)
18009 && NOTE_KIND (insn) == NOTE_INSN_DELETED_LABEL))))
18011 /* When optimization is enabled (via -O) some parts of the compiler
18012 (e.g. jump.c and cse.c) may try to delete CODE_LABEL insns which
18013 represent source-level labels which were explicitly declared by
18014 the user. This really shouldn't be happening though, so catch
18015 it if it ever does happen. */
18016 gcc_assert (!INSN_DELETED_P (insn));
18018 ASM_GENERATE_INTERNAL_LABEL (label, "L", CODE_LABEL_NUMBER (insn));
18019 add_AT_lbl_id (lbl_die, DW_AT_low_pc, label);
18024 /* A helper function for gen_inlined_subroutine_die. Add source coordinate
18025 attributes to the DIE for a block STMT, to describe where the inlined
18026 function was called from. This is similar to add_src_coords_attributes. */
18028 static inline void
18029 add_call_src_coords_attributes (tree stmt, dw_die_ref die)
18031 expanded_location s = expand_location (BLOCK_SOURCE_LOCATION (stmt));
18033 if (dwarf_version >= 3 || !dwarf_strict)
18035 add_AT_file (die, DW_AT_call_file, lookup_filename (s.file));
18036 add_AT_unsigned (die, DW_AT_call_line, s.line);
18041 /* A helper function for gen_lexical_block_die and gen_inlined_subroutine_die.
18042 Add low_pc and high_pc attributes to the DIE for a block STMT. */
18044 static inline void
18045 add_high_low_attributes (tree stmt, dw_die_ref die)
18047 char label[MAX_ARTIFICIAL_LABEL_BYTES];
18049 if (BLOCK_FRAGMENT_CHAIN (stmt)
18050 && (dwarf_version >= 3 || !dwarf_strict))
18052 tree chain;
18054 if (inlined_function_outer_scope_p (stmt))
18056 ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_BEGIN_LABEL,
18057 BLOCK_NUMBER (stmt));
18058 add_AT_lbl_id (die, DW_AT_entry_pc, label);
18061 add_AT_range_list (die, DW_AT_ranges, add_ranges (stmt));
18063 chain = BLOCK_FRAGMENT_CHAIN (stmt);
18066 add_ranges (chain);
18067 chain = BLOCK_FRAGMENT_CHAIN (chain);
18069 while (chain);
18070 add_ranges (NULL);
18072 else
18074 ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_BEGIN_LABEL,
18075 BLOCK_NUMBER (stmt));
18076 add_AT_lbl_id (die, DW_AT_low_pc, label);
18077 ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_END_LABEL,
18078 BLOCK_NUMBER (stmt));
18079 add_AT_lbl_id (die, DW_AT_high_pc, label);
18083 /* Generate a DIE for a lexical block. */
18085 static void
18086 gen_lexical_block_die (tree stmt, dw_die_ref context_die, int depth)
18088 dw_die_ref stmt_die = new_die (DW_TAG_lexical_block, context_die, stmt);
18090 if (call_arg_locations)
18092 if (VEC_length (dw_die_ref, block_map) <= BLOCK_NUMBER (stmt))
18093 VEC_safe_grow_cleared (dw_die_ref, heap, block_map,
18094 BLOCK_NUMBER (stmt) + 1);
18095 VEC_replace (dw_die_ref, block_map, BLOCK_NUMBER (stmt), stmt_die);
18098 if (! BLOCK_ABSTRACT (stmt) && TREE_ASM_WRITTEN (stmt))
18099 add_high_low_attributes (stmt, stmt_die);
18101 decls_for_scope (stmt, stmt_die, depth);
18104 /* Generate a DIE for an inlined subprogram. */
18106 static void
18107 gen_inlined_subroutine_die (tree stmt, dw_die_ref context_die, int depth)
18109 tree decl;
18111 /* The instance of function that is effectively being inlined shall not
18112 be abstract. */
18113 gcc_assert (! BLOCK_ABSTRACT (stmt));
18115 decl = block_ultimate_origin (stmt);
18117 /* Emit info for the abstract instance first, if we haven't yet. We
18118 must emit this even if the block is abstract, otherwise when we
18119 emit the block below (or elsewhere), we may end up trying to emit
18120 a die whose origin die hasn't been emitted, and crashing. */
18121 dwarf2out_abstract_function (decl);
18123 if (! BLOCK_ABSTRACT (stmt))
18125 dw_die_ref subr_die
18126 = new_die (DW_TAG_inlined_subroutine, context_die, stmt);
18128 if (call_arg_locations)
18130 if (VEC_length (dw_die_ref, block_map) <= BLOCK_NUMBER (stmt))
18131 VEC_safe_grow_cleared (dw_die_ref, heap, block_map,
18132 BLOCK_NUMBER (stmt) + 1);
18133 VEC_replace (dw_die_ref, block_map, BLOCK_NUMBER (stmt), subr_die);
18135 add_abstract_origin_attribute (subr_die, decl);
18136 if (TREE_ASM_WRITTEN (stmt))
18137 add_high_low_attributes (stmt, subr_die);
18138 add_call_src_coords_attributes (stmt, subr_die);
18140 decls_for_scope (stmt, subr_die, depth);
18141 current_function_has_inlines = 1;
18145 /* Generate a DIE for a field in a record, or structure. */
18147 static void
18148 gen_field_die (tree decl, dw_die_ref context_die)
18150 dw_die_ref decl_die;
18152 if (TREE_TYPE (decl) == error_mark_node)
18153 return;
18155 decl_die = new_die (DW_TAG_member, context_die, decl);
18156 add_name_and_src_coords_attributes (decl_die, decl);
18157 add_type_attribute (decl_die, member_declared_type (decl),
18158 TREE_READONLY (decl), TREE_THIS_VOLATILE (decl),
18159 context_die);
18161 if (DECL_BIT_FIELD_TYPE (decl))
18163 add_byte_size_attribute (decl_die, decl);
18164 add_bit_size_attribute (decl_die, decl);
18165 add_bit_offset_attribute (decl_die, decl);
18168 if (TREE_CODE (DECL_FIELD_CONTEXT (decl)) != UNION_TYPE)
18169 add_data_member_location_attribute (decl_die, decl);
18171 if (DECL_ARTIFICIAL (decl))
18172 add_AT_flag (decl_die, DW_AT_artificial, 1);
18174 add_accessibility_attribute (decl_die, decl);
18176 /* Equate decl number to die, so that we can look up this decl later on. */
18177 equate_decl_number_to_die (decl, decl_die);
18180 #if 0
18181 /* Don't generate either pointer_type DIEs or reference_type DIEs here.
18182 Use modified_type_die instead.
18183 We keep this code here just in case these types of DIEs may be needed to
18184 represent certain things in other languages (e.g. Pascal) someday. */
18186 static void
18187 gen_pointer_type_die (tree type, dw_die_ref context_die)
18189 dw_die_ref ptr_die
18190 = new_die (DW_TAG_pointer_type, scope_die_for (type, context_die), type);
18192 equate_type_number_to_die (type, ptr_die);
18193 add_type_attribute (ptr_die, TREE_TYPE (type), 0, 0, context_die);
18194 add_AT_unsigned (mod_type_die, DW_AT_byte_size, PTR_SIZE);
18197 /* Don't generate either pointer_type DIEs or reference_type DIEs here.
18198 Use modified_type_die instead.
18199 We keep this code here just in case these types of DIEs may be needed to
18200 represent certain things in other languages (e.g. Pascal) someday. */
18202 static void
18203 gen_reference_type_die (tree type, dw_die_ref context_die)
18205 dw_die_ref ref_die, scope_die = scope_die_for (type, context_die);
18207 if (TYPE_REF_IS_RVALUE (type) && dwarf_version >= 4)
18208 ref_die = new_die (DW_TAG_rvalue_reference_type, scope_die, type);
18209 else
18210 ref_die = new_die (DW_TAG_reference_type, scope_die, type);
18212 equate_type_number_to_die (type, ref_die);
18213 add_type_attribute (ref_die, TREE_TYPE (type), 0, 0, context_die);
18214 add_AT_unsigned (mod_type_die, DW_AT_byte_size, PTR_SIZE);
18216 #endif
18218 /* Generate a DIE for a pointer to a member type. */
18220 static void
18221 gen_ptr_to_mbr_type_die (tree type, dw_die_ref context_die)
18223 dw_die_ref ptr_die
18224 = new_die (DW_TAG_ptr_to_member_type,
18225 scope_die_for (type, context_die), type);
18227 equate_type_number_to_die (type, ptr_die);
18228 add_AT_die_ref (ptr_die, DW_AT_containing_type,
18229 lookup_type_die (TYPE_OFFSET_BASETYPE (type)));
18230 add_type_attribute (ptr_die, TREE_TYPE (type), 0, 0, context_die);
18233 typedef const char *dchar_p; /* For DEF_VEC_P. */
18234 DEF_VEC_P(dchar_p);
18235 DEF_VEC_ALLOC_P(dchar_p,heap);
18237 static char *producer_string;
18239 /* Return a heap allocated producer string including command line options
18240 if -grecord-gcc-switches. */
18242 static char *
18243 gen_producer_string (void)
18245 size_t j;
18246 VEC(dchar_p, heap) *switches = NULL;
18247 const char *language_string = lang_hooks.name;
18248 char *producer, *tail;
18249 const char *p;
18250 size_t len = dwarf_record_gcc_switches ? 0 : 3;
18251 size_t plen = strlen (language_string) + 1 + strlen (version_string);
18253 for (j = 1; dwarf_record_gcc_switches && j < save_decoded_options_count; j++)
18254 switch (save_decoded_options[j].opt_index)
18256 case OPT_o:
18257 case OPT_d:
18258 case OPT_dumpbase:
18259 case OPT_dumpdir:
18260 case OPT_auxbase:
18261 case OPT_auxbase_strip:
18262 case OPT_quiet:
18263 case OPT_version:
18264 case OPT_v:
18265 case OPT_w:
18266 case OPT_L:
18267 case OPT_D:
18268 case OPT_I:
18269 case OPT_U:
18270 case OPT_SPECIAL_unknown:
18271 case OPT_SPECIAL_ignore:
18272 case OPT_SPECIAL_program_name:
18273 case OPT_SPECIAL_input_file:
18274 case OPT_grecord_gcc_switches:
18275 case OPT_gno_record_gcc_switches:
18276 case OPT__output_pch_:
18277 case OPT_fdiagnostics_show_location_:
18278 case OPT_fdiagnostics_show_option:
18279 case OPT_fverbose_asm:
18280 case OPT____:
18281 case OPT__sysroot_:
18282 case OPT_nostdinc:
18283 case OPT_nostdinc__:
18284 /* Ignore these. */
18285 continue;
18286 default:
18287 gcc_checking_assert (save_decoded_options[j].canonical_option[0][0]
18288 == '-');
18289 switch (save_decoded_options[j].canonical_option[0][1])
18291 case 'M':
18292 case 'i':
18293 case 'W':
18294 continue;
18295 case 'f':
18296 if (strncmp (save_decoded_options[j].canonical_option[0] + 2,
18297 "dump", 4) == 0)
18298 continue;
18299 break;
18300 default:
18301 break;
18303 VEC_safe_push (dchar_p, heap, switches,
18304 save_decoded_options[j].orig_option_with_args_text);
18305 len += strlen (save_decoded_options[j].orig_option_with_args_text) + 1;
18306 break;
18309 producer = XNEWVEC (char, plen + 1 + len + 1);
18310 tail = producer;
18311 sprintf (tail, "%s %s", language_string, version_string);
18312 tail += plen;
18314 if (!dwarf_record_gcc_switches)
18316 #ifdef MIPS_DEBUGGING_INFO
18317 /* The MIPS/SGI compilers place the 'cc' command line options in the
18318 producer string. The SGI debugger looks for -g, -g1, -g2, or -g3;
18319 if they do not appear in the producer string, the debugger reaches
18320 the conclusion that the object file is stripped and has no debugging
18321 information. To get the MIPS/SGI debugger to believe that there is
18322 debugging information in the object file, we add a -g to the producer
18323 string. */
18324 if (debug_info_level > DINFO_LEVEL_TERSE)
18326 memcpy (tail, " -g", 3);
18327 tail += 3;
18329 #endif
18332 FOR_EACH_VEC_ELT (dchar_p, switches, j, p)
18334 len = strlen (p);
18335 *tail = ' ';
18336 memcpy (tail + 1, p, len);
18337 tail += len + 1;
18340 *tail = '\0';
18341 VEC_free (dchar_p, heap, switches);
18342 return producer;
18345 /* Generate the DIE for the compilation unit. */
18347 static dw_die_ref
18348 gen_compile_unit_die (const char *filename)
18350 dw_die_ref die;
18351 const char *language_string = lang_hooks.name;
18352 int language;
18354 die = new_die (DW_TAG_compile_unit, NULL, NULL);
18356 if (filename)
18358 add_name_attribute (die, filename);
18359 /* Don't add cwd for <built-in>. */
18360 if (!IS_ABSOLUTE_PATH (filename) && filename[0] != '<')
18361 add_comp_dir_attribute (die);
18364 if (producer_string == NULL)
18365 producer_string = gen_producer_string ();
18366 add_AT_string (die, DW_AT_producer, producer_string);
18368 /* If our producer is LTO try to figure out a common language to use
18369 from the global list of translation units. */
18370 if (strcmp (language_string, "GNU GIMPLE") == 0)
18372 unsigned i;
18373 tree t;
18374 const char *common_lang = NULL;
18376 FOR_EACH_VEC_ELT (tree, all_translation_units, i, t)
18378 if (!TRANSLATION_UNIT_LANGUAGE (t))
18379 continue;
18380 if (!common_lang)
18381 common_lang = TRANSLATION_UNIT_LANGUAGE (t);
18382 else if (strcmp (common_lang, TRANSLATION_UNIT_LANGUAGE (t)) == 0)
18384 else if (strncmp (common_lang, "GNU C", 5) == 0
18385 && strncmp (TRANSLATION_UNIT_LANGUAGE (t), "GNU C", 5) == 0)
18386 /* Mixing C and C++ is ok, use C++ in that case. */
18387 common_lang = "GNU C++";
18388 else
18390 /* Fall back to C. */
18391 common_lang = NULL;
18392 break;
18396 if (common_lang)
18397 language_string = common_lang;
18400 language = DW_LANG_C89;
18401 if (strcmp (language_string, "GNU C++") == 0)
18402 language = DW_LANG_C_plus_plus;
18403 else if (strcmp (language_string, "GNU F77") == 0)
18404 language = DW_LANG_Fortran77;
18405 else if (strcmp (language_string, "GNU Pascal") == 0)
18406 language = DW_LANG_Pascal83;
18407 else if (dwarf_version >= 3 || !dwarf_strict)
18409 if (strcmp (language_string, "GNU Ada") == 0)
18410 language = DW_LANG_Ada95;
18411 else if (strcmp (language_string, "GNU Fortran") == 0)
18412 language = DW_LANG_Fortran95;
18413 else if (strcmp (language_string, "GNU Java") == 0)
18414 language = DW_LANG_Java;
18415 else if (strcmp (language_string, "GNU Objective-C") == 0)
18416 language = DW_LANG_ObjC;
18417 else if (strcmp (language_string, "GNU Objective-C++") == 0)
18418 language = DW_LANG_ObjC_plus_plus;
18421 add_AT_unsigned (die, DW_AT_language, language);
18423 switch (language)
18425 case DW_LANG_Fortran77:
18426 case DW_LANG_Fortran90:
18427 case DW_LANG_Fortran95:
18428 /* Fortran has case insensitive identifiers and the front-end
18429 lowercases everything. */
18430 add_AT_unsigned (die, DW_AT_identifier_case, DW_ID_down_case);
18431 break;
18432 default:
18433 /* The default DW_ID_case_sensitive doesn't need to be specified. */
18434 break;
18436 return die;
18439 /* Generate the DIE for a base class. */
18441 static void
18442 gen_inheritance_die (tree binfo, tree access, dw_die_ref context_die)
18444 dw_die_ref die = new_die (DW_TAG_inheritance, context_die, binfo);
18446 add_type_attribute (die, BINFO_TYPE (binfo), 0, 0, context_die);
18447 add_data_member_location_attribute (die, binfo);
18449 if (BINFO_VIRTUAL_P (binfo))
18450 add_AT_unsigned (die, DW_AT_virtuality, DW_VIRTUALITY_virtual);
18452 /* In DWARF3+ the default is DW_ACCESS_private only in DW_TAG_class_type
18453 children, otherwise the default is DW_ACCESS_public. In DWARF2
18454 the default has always been DW_ACCESS_private. */
18455 if (access == access_public_node)
18457 if (dwarf_version == 2
18458 || context_die->die_tag == DW_TAG_class_type)
18459 add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_public);
18461 else if (access == access_protected_node)
18462 add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_protected);
18463 else if (dwarf_version > 2
18464 && context_die->die_tag != DW_TAG_class_type)
18465 add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_private);
18468 /* Generate a DIE for a class member. */
18470 static void
18471 gen_member_die (tree type, dw_die_ref context_die)
18473 tree member;
18474 tree binfo = TYPE_BINFO (type);
18475 dw_die_ref child;
18477 /* If this is not an incomplete type, output descriptions of each of its
18478 members. Note that as we output the DIEs necessary to represent the
18479 members of this record or union type, we will also be trying to output
18480 DIEs to represent the *types* of those members. However the `type'
18481 function (above) will specifically avoid generating type DIEs for member
18482 types *within* the list of member DIEs for this (containing) type except
18483 for those types (of members) which are explicitly marked as also being
18484 members of this (containing) type themselves. The g++ front- end can
18485 force any given type to be treated as a member of some other (containing)
18486 type by setting the TYPE_CONTEXT of the given (member) type to point to
18487 the TREE node representing the appropriate (containing) type. */
18489 /* First output info about the base classes. */
18490 if (binfo)
18492 VEC(tree,gc) *accesses = BINFO_BASE_ACCESSES (binfo);
18493 int i;
18494 tree base;
18496 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base); i++)
18497 gen_inheritance_die (base,
18498 (accesses ? VEC_index (tree, accesses, i)
18499 : access_public_node), context_die);
18502 /* Now output info about the data members and type members. */
18503 for (member = TYPE_FIELDS (type); member; member = DECL_CHAIN (member))
18505 /* If we thought we were generating minimal debug info for TYPE
18506 and then changed our minds, some of the member declarations
18507 may have already been defined. Don't define them again, but
18508 do put them in the right order. */
18510 child = lookup_decl_die (member);
18511 if (child)
18512 splice_child_die (context_die, child);
18513 else
18514 gen_decl_die (member, NULL, context_die);
18517 /* Now output info about the function members (if any). */
18518 for (member = TYPE_METHODS (type); member; member = DECL_CHAIN (member))
18520 /* Don't include clones in the member list. */
18521 if (DECL_ABSTRACT_ORIGIN (member))
18522 continue;
18524 child = lookup_decl_die (member);
18525 if (child)
18526 splice_child_die (context_die, child);
18527 else
18528 gen_decl_die (member, NULL, context_die);
18532 /* Generate a DIE for a structure or union type. If TYPE_DECL_SUPPRESS_DEBUG
18533 is set, we pretend that the type was never defined, so we only get the
18534 member DIEs needed by later specification DIEs. */
18536 static void
18537 gen_struct_or_union_type_die (tree type, dw_die_ref context_die,
18538 enum debug_info_usage usage)
18540 dw_die_ref type_die = lookup_type_die (type);
18541 dw_die_ref scope_die = 0;
18542 int nested = 0;
18543 int complete = (TYPE_SIZE (type)
18544 && (! TYPE_STUB_DECL (type)
18545 || ! TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type))));
18546 int ns_decl = (context_die && context_die->die_tag == DW_TAG_namespace);
18547 complete = complete && should_emit_struct_debug (type, usage);
18549 if (type_die && ! complete)
18550 return;
18552 if (TYPE_CONTEXT (type) != NULL_TREE
18553 && (AGGREGATE_TYPE_P (TYPE_CONTEXT (type))
18554 || TREE_CODE (TYPE_CONTEXT (type)) == NAMESPACE_DECL))
18555 nested = 1;
18557 scope_die = scope_die_for (type, context_die);
18559 if (! type_die || (nested && is_cu_die (scope_die)))
18560 /* First occurrence of type or toplevel definition of nested class. */
18562 dw_die_ref old_die = type_die;
18564 type_die = new_die (TREE_CODE (type) == RECORD_TYPE
18565 ? record_type_tag (type) : DW_TAG_union_type,
18566 scope_die, type);
18567 equate_type_number_to_die (type, type_die);
18568 if (old_die)
18569 add_AT_specification (type_die, old_die);
18570 else
18572 add_name_attribute (type_die, type_tag (type));
18573 add_gnat_descriptive_type_attribute (type_die, type, context_die);
18574 if (TYPE_ARTIFICIAL (type))
18575 add_AT_flag (type_die, DW_AT_artificial, 1);
18578 else
18579 remove_AT (type_die, DW_AT_declaration);
18581 /* Generate child dies for template paramaters. */
18582 if (debug_info_level > DINFO_LEVEL_TERSE
18583 && COMPLETE_TYPE_P (type))
18584 schedule_generic_params_dies_gen (type);
18586 /* If this type has been completed, then give it a byte_size attribute and
18587 then give a list of members. */
18588 if (complete && !ns_decl)
18590 /* Prevent infinite recursion in cases where the type of some member of
18591 this type is expressed in terms of this type itself. */
18592 TREE_ASM_WRITTEN (type) = 1;
18593 add_byte_size_attribute (type_die, type);
18594 if (TYPE_STUB_DECL (type) != NULL_TREE)
18596 add_src_coords_attributes (type_die, TYPE_STUB_DECL (type));
18597 add_accessibility_attribute (type_die, TYPE_STUB_DECL (type));
18600 /* If the first reference to this type was as the return type of an
18601 inline function, then it may not have a parent. Fix this now. */
18602 if (type_die->die_parent == NULL)
18603 add_child_die (scope_die, type_die);
18605 push_decl_scope (type);
18606 gen_member_die (type, type_die);
18607 pop_decl_scope ();
18609 /* GNU extension: Record what type our vtable lives in. */
18610 if (TYPE_VFIELD (type))
18612 tree vtype = DECL_FCONTEXT (TYPE_VFIELD (type));
18614 gen_type_die (vtype, context_die);
18615 add_AT_die_ref (type_die, DW_AT_containing_type,
18616 lookup_type_die (vtype));
18619 else
18621 add_AT_flag (type_die, DW_AT_declaration, 1);
18623 /* We don't need to do this for function-local types. */
18624 if (TYPE_STUB_DECL (type)
18625 && ! decl_function_context (TYPE_STUB_DECL (type)))
18626 VEC_safe_push (tree, gc, incomplete_types, type);
18629 if (get_AT (type_die, DW_AT_name))
18630 add_pubtype (type, type_die);
18633 /* Generate a DIE for a subroutine _type_. */
18635 static void
18636 gen_subroutine_type_die (tree type, dw_die_ref context_die)
18638 tree return_type = TREE_TYPE (type);
18639 dw_die_ref subr_die
18640 = new_die (DW_TAG_subroutine_type,
18641 scope_die_for (type, context_die), type);
18643 equate_type_number_to_die (type, subr_die);
18644 add_prototyped_attribute (subr_die, type);
18645 add_type_attribute (subr_die, return_type, 0, 0, context_die);
18646 gen_formal_types_die (type, subr_die);
18648 if (get_AT (subr_die, DW_AT_name))
18649 add_pubtype (type, subr_die);
18652 /* Generate a DIE for a type definition. */
18654 static void
18655 gen_typedef_die (tree decl, dw_die_ref context_die)
18657 dw_die_ref type_die;
18658 tree origin;
18660 if (TREE_ASM_WRITTEN (decl))
18661 return;
18663 TREE_ASM_WRITTEN (decl) = 1;
18664 type_die = new_die (DW_TAG_typedef, context_die, decl);
18665 origin = decl_ultimate_origin (decl);
18666 if (origin != NULL)
18667 add_abstract_origin_attribute (type_die, origin);
18668 else
18670 tree type;
18672 add_name_and_src_coords_attributes (type_die, decl);
18673 if (DECL_ORIGINAL_TYPE (decl))
18675 type = DECL_ORIGINAL_TYPE (decl);
18677 gcc_assert (type != TREE_TYPE (decl));
18678 equate_type_number_to_die (TREE_TYPE (decl), type_die);
18680 else
18682 type = TREE_TYPE (decl);
18684 if (is_naming_typedef_decl (TYPE_NAME (type)))
18686 /* Here, we are in the case of decl being a typedef naming
18687 an anonymous type, e.g:
18688 typedef struct {...} foo;
18689 In that case TREE_TYPE (decl) is not a typedef variant
18690 type and TYPE_NAME of the anonymous type is set to the
18691 TYPE_DECL of the typedef. This construct is emitted by
18692 the C++ FE.
18694 TYPE is the anonymous struct named by the typedef
18695 DECL. As we need the DW_AT_type attribute of the
18696 DW_TAG_typedef to point to the DIE of TYPE, let's
18697 generate that DIE right away. add_type_attribute
18698 called below will then pick (via lookup_type_die) that
18699 anonymous struct DIE. */
18700 if (!TREE_ASM_WRITTEN (type))
18701 gen_tagged_type_die (type, context_die, DINFO_USAGE_DIR_USE);
18703 /* This is a GNU Extension. We are adding a
18704 DW_AT_linkage_name attribute to the DIE of the
18705 anonymous struct TYPE. The value of that attribute
18706 is the name of the typedef decl naming the anonymous
18707 struct. This greatly eases the work of consumers of
18708 this debug info. */
18709 add_linkage_attr (lookup_type_die (type), decl);
18713 add_type_attribute (type_die, type, TREE_READONLY (decl),
18714 TREE_THIS_VOLATILE (decl), context_die);
18716 if (is_naming_typedef_decl (decl))
18717 /* We want that all subsequent calls to lookup_type_die with
18718 TYPE in argument yield the DW_TAG_typedef we have just
18719 created. */
18720 equate_type_number_to_die (type, type_die);
18722 add_accessibility_attribute (type_die, decl);
18725 if (DECL_ABSTRACT (decl))
18726 equate_decl_number_to_die (decl, type_die);
18728 if (get_AT (type_die, DW_AT_name))
18729 add_pubtype (decl, type_die);
18732 /* Generate a DIE for a struct, class, enum or union type. */
18734 static void
18735 gen_tagged_type_die (tree type,
18736 dw_die_ref context_die,
18737 enum debug_info_usage usage)
18739 int need_pop;
18741 if (type == NULL_TREE
18742 || !is_tagged_type (type))
18743 return;
18745 /* If this is a nested type whose containing class hasn't been written
18746 out yet, writing it out will cover this one, too. This does not apply
18747 to instantiations of member class templates; they need to be added to
18748 the containing class as they are generated. FIXME: This hurts the
18749 idea of combining type decls from multiple TUs, since we can't predict
18750 what set of template instantiations we'll get. */
18751 if (TYPE_CONTEXT (type)
18752 && AGGREGATE_TYPE_P (TYPE_CONTEXT (type))
18753 && ! TREE_ASM_WRITTEN (TYPE_CONTEXT (type)))
18755 gen_type_die_with_usage (TYPE_CONTEXT (type), context_die, usage);
18757 if (TREE_ASM_WRITTEN (type))
18758 return;
18760 /* If that failed, attach ourselves to the stub. */
18761 push_decl_scope (TYPE_CONTEXT (type));
18762 context_die = lookup_type_die (TYPE_CONTEXT (type));
18763 need_pop = 1;
18765 else if (TYPE_CONTEXT (type) != NULL_TREE
18766 && (TREE_CODE (TYPE_CONTEXT (type)) == FUNCTION_DECL))
18768 /* If this type is local to a function that hasn't been written
18769 out yet, use a NULL context for now; it will be fixed up in
18770 decls_for_scope. */
18771 context_die = lookup_decl_die (TYPE_CONTEXT (type));
18772 /* A declaration DIE doesn't count; nested types need to go in the
18773 specification. */
18774 if (context_die && is_declaration_die (context_die))
18775 context_die = NULL;
18776 need_pop = 0;
18778 else
18780 context_die = declare_in_namespace (type, context_die);
18781 need_pop = 0;
18784 if (TREE_CODE (type) == ENUMERAL_TYPE)
18786 /* This might have been written out by the call to
18787 declare_in_namespace. */
18788 if (!TREE_ASM_WRITTEN (type))
18789 gen_enumeration_type_die (type, context_die);
18791 else
18792 gen_struct_or_union_type_die (type, context_die, usage);
18794 if (need_pop)
18795 pop_decl_scope ();
18797 /* Don't set TREE_ASM_WRITTEN on an incomplete struct; we want to fix
18798 it up if it is ever completed. gen_*_type_die will set it for us
18799 when appropriate. */
18802 /* Generate a type description DIE. */
18804 static void
18805 gen_type_die_with_usage (tree type, dw_die_ref context_die,
18806 enum debug_info_usage usage)
18808 struct array_descr_info info;
18810 if (type == NULL_TREE || type == error_mark_node)
18811 return;
18813 if (TYPE_NAME (type) != NULL_TREE
18814 && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
18815 && is_redundant_typedef (TYPE_NAME (type))
18816 && DECL_ORIGINAL_TYPE (TYPE_NAME (type)))
18817 /* The DECL of this type is a typedef we don't want to emit debug
18818 info for but we want debug info for its underlying typedef.
18819 This can happen for e.g, the injected-class-name of a C++
18820 type. */
18821 type = DECL_ORIGINAL_TYPE (TYPE_NAME (type));
18823 /* If TYPE is a typedef type variant, let's generate debug info
18824 for the parent typedef which TYPE is a type of. */
18825 if (typedef_variant_p (type))
18827 if (TREE_ASM_WRITTEN (type))
18828 return;
18830 /* Prevent broken recursion; we can't hand off to the same type. */
18831 gcc_assert (DECL_ORIGINAL_TYPE (TYPE_NAME (type)) != type);
18833 /* Use the DIE of the containing namespace as the parent DIE of
18834 the type description DIE we want to generate. */
18835 if (DECL_CONTEXT (TYPE_NAME (type))
18836 && TREE_CODE (DECL_CONTEXT (TYPE_NAME (type))) == NAMESPACE_DECL)
18837 context_die = get_context_die (DECL_CONTEXT (TYPE_NAME (type)));
18839 TREE_ASM_WRITTEN (type) = 1;
18841 gen_decl_die (TYPE_NAME (type), NULL, context_die);
18842 return;
18845 /* If type is an anonymous tagged type named by a typedef, let's
18846 generate debug info for the typedef. */
18847 if (is_naming_typedef_decl (TYPE_NAME (type)))
18849 /* Use the DIE of the containing namespace as the parent DIE of
18850 the type description DIE we want to generate. */
18851 if (DECL_CONTEXT (TYPE_NAME (type))
18852 && TREE_CODE (DECL_CONTEXT (TYPE_NAME (type))) == NAMESPACE_DECL)
18853 context_die = get_context_die (DECL_CONTEXT (TYPE_NAME (type)));
18855 gen_decl_die (TYPE_NAME (type), NULL, context_die);
18856 return;
18859 /* If this is an array type with hidden descriptor, handle it first. */
18860 if (!TREE_ASM_WRITTEN (type)
18861 && lang_hooks.types.get_array_descr_info
18862 && lang_hooks.types.get_array_descr_info (type, &info)
18863 && (dwarf_version >= 3 || !dwarf_strict))
18865 gen_descr_array_type_die (type, &info, context_die);
18866 TREE_ASM_WRITTEN (type) = 1;
18867 return;
18870 /* We are going to output a DIE to represent the unqualified version
18871 of this type (i.e. without any const or volatile qualifiers) so
18872 get the main variant (i.e. the unqualified version) of this type
18873 now. (Vectors are special because the debugging info is in the
18874 cloned type itself). */
18875 if (TREE_CODE (type) != VECTOR_TYPE)
18876 type = type_main_variant (type);
18878 if (TREE_ASM_WRITTEN (type))
18879 return;
18881 switch (TREE_CODE (type))
18883 case ERROR_MARK:
18884 break;
18886 case POINTER_TYPE:
18887 case REFERENCE_TYPE:
18888 /* We must set TREE_ASM_WRITTEN in case this is a recursive type. This
18889 ensures that the gen_type_die recursion will terminate even if the
18890 type is recursive. Recursive types are possible in Ada. */
18891 /* ??? We could perhaps do this for all types before the switch
18892 statement. */
18893 TREE_ASM_WRITTEN (type) = 1;
18895 /* For these types, all that is required is that we output a DIE (or a
18896 set of DIEs) to represent the "basis" type. */
18897 gen_type_die_with_usage (TREE_TYPE (type), context_die,
18898 DINFO_USAGE_IND_USE);
18899 break;
18901 case OFFSET_TYPE:
18902 /* This code is used for C++ pointer-to-data-member types.
18903 Output a description of the relevant class type. */
18904 gen_type_die_with_usage (TYPE_OFFSET_BASETYPE (type), context_die,
18905 DINFO_USAGE_IND_USE);
18907 /* Output a description of the type of the object pointed to. */
18908 gen_type_die_with_usage (TREE_TYPE (type), context_die,
18909 DINFO_USAGE_IND_USE);
18911 /* Now output a DIE to represent this pointer-to-data-member type
18912 itself. */
18913 gen_ptr_to_mbr_type_die (type, context_die);
18914 break;
18916 case FUNCTION_TYPE:
18917 /* Force out return type (in case it wasn't forced out already). */
18918 gen_type_die_with_usage (TREE_TYPE (type), context_die,
18919 DINFO_USAGE_DIR_USE);
18920 gen_subroutine_type_die (type, context_die);
18921 break;
18923 case METHOD_TYPE:
18924 /* Force out return type (in case it wasn't forced out already). */
18925 gen_type_die_with_usage (TREE_TYPE (type), context_die,
18926 DINFO_USAGE_DIR_USE);
18927 gen_subroutine_type_die (type, context_die);
18928 break;
18930 case ARRAY_TYPE:
18931 gen_array_type_die (type, context_die);
18932 break;
18934 case VECTOR_TYPE:
18935 gen_array_type_die (type, context_die);
18936 break;
18938 case ENUMERAL_TYPE:
18939 case RECORD_TYPE:
18940 case UNION_TYPE:
18941 case QUAL_UNION_TYPE:
18942 gen_tagged_type_die (type, context_die, usage);
18943 return;
18945 case VOID_TYPE:
18946 case INTEGER_TYPE:
18947 case REAL_TYPE:
18948 case FIXED_POINT_TYPE:
18949 case COMPLEX_TYPE:
18950 case BOOLEAN_TYPE:
18951 /* No DIEs needed for fundamental types. */
18952 break;
18954 case NULLPTR_TYPE:
18955 case LANG_TYPE:
18956 /* Just use DW_TAG_unspecified_type. */
18958 dw_die_ref type_die = lookup_type_die (type);
18959 if (type_die == NULL)
18961 tree name = TYPE_NAME (type);
18962 if (TREE_CODE (name) == TYPE_DECL)
18963 name = DECL_NAME (name);
18964 type_die = new_die (DW_TAG_unspecified_type, comp_unit_die (), type);
18965 add_name_attribute (type_die, IDENTIFIER_POINTER (name));
18966 equate_type_number_to_die (type, type_die);
18969 break;
18971 default:
18972 gcc_unreachable ();
18975 TREE_ASM_WRITTEN (type) = 1;
18978 static void
18979 gen_type_die (tree type, dw_die_ref context_die)
18981 gen_type_die_with_usage (type, context_die, DINFO_USAGE_DIR_USE);
18984 /* Generate a DW_TAG_lexical_block DIE followed by DIEs to represent all of the
18985 things which are local to the given block. */
18987 static void
18988 gen_block_die (tree stmt, dw_die_ref context_die, int depth)
18990 int must_output_die = 0;
18991 bool inlined_func;
18993 /* Ignore blocks that are NULL. */
18994 if (stmt == NULL_TREE)
18995 return;
18997 inlined_func = inlined_function_outer_scope_p (stmt);
18999 /* If the block is one fragment of a non-contiguous block, do not
19000 process the variables, since they will have been done by the
19001 origin block. Do process subblocks. */
19002 if (BLOCK_FRAGMENT_ORIGIN (stmt))
19004 tree sub;
19006 for (sub = BLOCK_SUBBLOCKS (stmt); sub; sub = BLOCK_CHAIN (sub))
19007 gen_block_die (sub, context_die, depth + 1);
19009 return;
19012 /* Determine if we need to output any Dwarf DIEs at all to represent this
19013 block. */
19014 if (inlined_func)
19015 /* The outer scopes for inlinings *must* always be represented. We
19016 generate DW_TAG_inlined_subroutine DIEs for them. (See below.) */
19017 must_output_die = 1;
19018 else
19020 /* Determine if this block directly contains any "significant"
19021 local declarations which we will need to output DIEs for. */
19022 if (debug_info_level > DINFO_LEVEL_TERSE)
19023 /* We are not in terse mode so *any* local declaration counts
19024 as being a "significant" one. */
19025 must_output_die = ((BLOCK_VARS (stmt) != NULL
19026 || BLOCK_NUM_NONLOCALIZED_VARS (stmt))
19027 && (TREE_USED (stmt)
19028 || TREE_ASM_WRITTEN (stmt)
19029 || BLOCK_ABSTRACT (stmt)));
19030 else if ((TREE_USED (stmt)
19031 || TREE_ASM_WRITTEN (stmt)
19032 || BLOCK_ABSTRACT (stmt))
19033 && !dwarf2out_ignore_block (stmt))
19034 must_output_die = 1;
19037 /* It would be a waste of space to generate a Dwarf DW_TAG_lexical_block
19038 DIE for any block which contains no significant local declarations at
19039 all. Rather, in such cases we just call `decls_for_scope' so that any
19040 needed Dwarf info for any sub-blocks will get properly generated. Note
19041 that in terse mode, our definition of what constitutes a "significant"
19042 local declaration gets restricted to include only inlined function
19043 instances and local (nested) function definitions. */
19044 if (must_output_die)
19046 if (inlined_func)
19048 /* If STMT block is abstract, that means we have been called
19049 indirectly from dwarf2out_abstract_function.
19050 That function rightfully marks the descendent blocks (of
19051 the abstract function it is dealing with) as being abstract,
19052 precisely to prevent us from emitting any
19053 DW_TAG_inlined_subroutine DIE as a descendent
19054 of an abstract function instance. So in that case, we should
19055 not call gen_inlined_subroutine_die.
19057 Later though, when cgraph asks dwarf2out to emit info
19058 for the concrete instance of the function decl into which
19059 the concrete instance of STMT got inlined, the later will lead
19060 to the generation of a DW_TAG_inlined_subroutine DIE. */
19061 if (! BLOCK_ABSTRACT (stmt))
19062 gen_inlined_subroutine_die (stmt, context_die, depth);
19064 else
19065 gen_lexical_block_die (stmt, context_die, depth);
19067 else
19068 decls_for_scope (stmt, context_die, depth);
19071 /* Process variable DECL (or variable with origin ORIGIN) within
19072 block STMT and add it to CONTEXT_DIE. */
19073 static void
19074 process_scope_var (tree stmt, tree decl, tree origin, dw_die_ref context_die)
19076 dw_die_ref die;
19077 tree decl_or_origin = decl ? decl : origin;
19079 if (TREE_CODE (decl_or_origin) == FUNCTION_DECL)
19080 die = lookup_decl_die (decl_or_origin);
19081 else if (TREE_CODE (decl_or_origin) == TYPE_DECL
19082 && TYPE_DECL_IS_STUB (decl_or_origin))
19083 die = lookup_type_die (TREE_TYPE (decl_or_origin));
19084 else
19085 die = NULL;
19087 if (die != NULL && die->die_parent == NULL)
19088 add_child_die (context_die, die);
19089 else if (TREE_CODE (decl_or_origin) == IMPORTED_DECL)
19090 dwarf2out_imported_module_or_decl_1 (decl_or_origin, DECL_NAME (decl_or_origin),
19091 stmt, context_die);
19092 else
19093 gen_decl_die (decl, origin, context_die);
19096 /* Generate all of the decls declared within a given scope and (recursively)
19097 all of its sub-blocks. */
19099 static void
19100 decls_for_scope (tree stmt, dw_die_ref context_die, int depth)
19102 tree decl;
19103 unsigned int i;
19104 tree subblocks;
19106 /* Ignore NULL blocks. */
19107 if (stmt == NULL_TREE)
19108 return;
19110 /* Output the DIEs to represent all of the data objects and typedefs
19111 declared directly within this block but not within any nested
19112 sub-blocks. Also, nested function and tag DIEs have been
19113 generated with a parent of NULL; fix that up now. */
19114 for (decl = BLOCK_VARS (stmt); decl != NULL; decl = DECL_CHAIN (decl))
19115 process_scope_var (stmt, decl, NULL_TREE, context_die);
19116 for (i = 0; i < BLOCK_NUM_NONLOCALIZED_VARS (stmt); i++)
19117 process_scope_var (stmt, NULL, BLOCK_NONLOCALIZED_VAR (stmt, i),
19118 context_die);
19120 /* If we're at -g1, we're not interested in subblocks. */
19121 if (debug_info_level <= DINFO_LEVEL_TERSE)
19122 return;
19124 /* Output the DIEs to represent all sub-blocks (and the items declared
19125 therein) of this block. */
19126 for (subblocks = BLOCK_SUBBLOCKS (stmt);
19127 subblocks != NULL;
19128 subblocks = BLOCK_CHAIN (subblocks))
19129 gen_block_die (subblocks, context_die, depth + 1);
19132 /* Is this a typedef we can avoid emitting? */
19134 static inline int
19135 is_redundant_typedef (const_tree decl)
19137 if (TYPE_DECL_IS_STUB (decl))
19138 return 1;
19140 if (DECL_ARTIFICIAL (decl)
19141 && DECL_CONTEXT (decl)
19142 && is_tagged_type (DECL_CONTEXT (decl))
19143 && TREE_CODE (TYPE_NAME (DECL_CONTEXT (decl))) == TYPE_DECL
19144 && DECL_NAME (decl) == DECL_NAME (TYPE_NAME (DECL_CONTEXT (decl))))
19145 /* Also ignore the artificial member typedef for the class name. */
19146 return 1;
19148 return 0;
19151 /* Return TRUE if TYPE is a typedef that names a type for linkage
19152 purposes. This kind of typedefs is produced by the C++ FE for
19153 constructs like:
19155 typedef struct {...} foo;
19157 In that case, there is no typedef variant type produced for foo.
19158 Rather, the TREE_TYPE of the TYPE_DECL of foo is the anonymous
19159 struct type. */
19161 static bool
19162 is_naming_typedef_decl (const_tree decl)
19164 if (decl == NULL_TREE
19165 || TREE_CODE (decl) != TYPE_DECL
19166 || !is_tagged_type (TREE_TYPE (decl))
19167 || DECL_IS_BUILTIN (decl)
19168 || is_redundant_typedef (decl)
19169 /* It looks like Ada produces TYPE_DECLs that are very similar
19170 to C++ naming typedefs but that have different
19171 semantics. Let's be specific to c++ for now. */
19172 || !is_cxx ())
19173 return FALSE;
19175 return (DECL_ORIGINAL_TYPE (decl) == NULL_TREE
19176 && TYPE_NAME (TREE_TYPE (decl)) == decl
19177 && (TYPE_STUB_DECL (TREE_TYPE (decl))
19178 != TYPE_NAME (TREE_TYPE (decl))));
19181 /* Returns the DIE for a context. */
19183 static inline dw_die_ref
19184 get_context_die (tree context)
19186 if (context)
19188 /* Find die that represents this context. */
19189 if (TYPE_P (context))
19191 context = TYPE_MAIN_VARIANT (context);
19192 return strip_naming_typedef (context, force_type_die (context));
19194 else
19195 return force_decl_die (context);
19197 return comp_unit_die ();
19200 /* Returns the DIE for decl. A DIE will always be returned. */
19202 static dw_die_ref
19203 force_decl_die (tree decl)
19205 dw_die_ref decl_die;
19206 unsigned saved_external_flag;
19207 tree save_fn = NULL_TREE;
19208 decl_die = lookup_decl_die (decl);
19209 if (!decl_die)
19211 dw_die_ref context_die = get_context_die (DECL_CONTEXT (decl));
19213 decl_die = lookup_decl_die (decl);
19214 if (decl_die)
19215 return decl_die;
19217 switch (TREE_CODE (decl))
19219 case FUNCTION_DECL:
19220 /* Clear current_function_decl, so that gen_subprogram_die thinks
19221 that this is a declaration. At this point, we just want to force
19222 declaration die. */
19223 save_fn = current_function_decl;
19224 current_function_decl = NULL_TREE;
19225 gen_subprogram_die (decl, context_die);
19226 current_function_decl = save_fn;
19227 break;
19229 case VAR_DECL:
19230 /* Set external flag to force declaration die. Restore it after
19231 gen_decl_die() call. */
19232 saved_external_flag = DECL_EXTERNAL (decl);
19233 DECL_EXTERNAL (decl) = 1;
19234 gen_decl_die (decl, NULL, context_die);
19235 DECL_EXTERNAL (decl) = saved_external_flag;
19236 break;
19238 case NAMESPACE_DECL:
19239 if (dwarf_version >= 3 || !dwarf_strict)
19240 dwarf2out_decl (decl);
19241 else
19242 /* DWARF2 has neither DW_TAG_module, nor DW_TAG_namespace. */
19243 decl_die = comp_unit_die ();
19244 break;
19246 case TRANSLATION_UNIT_DECL:
19247 decl_die = comp_unit_die ();
19248 break;
19250 default:
19251 gcc_unreachable ();
19254 /* We should be able to find the DIE now. */
19255 if (!decl_die)
19256 decl_die = lookup_decl_die (decl);
19257 gcc_assert (decl_die);
19260 return decl_die;
19263 /* Returns the DIE for TYPE, that must not be a base type. A DIE is
19264 always returned. */
19266 static dw_die_ref
19267 force_type_die (tree type)
19269 dw_die_ref type_die;
19271 type_die = lookup_type_die (type);
19272 if (!type_die)
19274 dw_die_ref context_die = get_context_die (TYPE_CONTEXT (type));
19276 type_die = modified_type_die (type, TYPE_READONLY (type),
19277 TYPE_VOLATILE (type), context_die);
19278 gcc_assert (type_die);
19280 return type_die;
19283 /* Force out any required namespaces to be able to output DECL,
19284 and return the new context_die for it, if it's changed. */
19286 static dw_die_ref
19287 setup_namespace_context (tree thing, dw_die_ref context_die)
19289 tree context = (DECL_P (thing)
19290 ? DECL_CONTEXT (thing) : TYPE_CONTEXT (thing));
19291 if (context && TREE_CODE (context) == NAMESPACE_DECL)
19292 /* Force out the namespace. */
19293 context_die = force_decl_die (context);
19295 return context_die;
19298 /* Emit a declaration DIE for THING (which is either a DECL or a tagged
19299 type) within its namespace, if appropriate.
19301 For compatibility with older debuggers, namespace DIEs only contain
19302 declarations; all definitions are emitted at CU scope. */
19304 static dw_die_ref
19305 declare_in_namespace (tree thing, dw_die_ref context_die)
19307 dw_die_ref ns_context;
19309 if (debug_info_level <= DINFO_LEVEL_TERSE)
19310 return context_die;
19312 /* If this decl is from an inlined function, then don't try to emit it in its
19313 namespace, as we will get confused. It would have already been emitted
19314 when the abstract instance of the inline function was emitted anyways. */
19315 if (DECL_P (thing) && DECL_ABSTRACT_ORIGIN (thing))
19316 return context_die;
19318 ns_context = setup_namespace_context (thing, context_die);
19320 if (ns_context != context_die)
19322 if (is_fortran ())
19323 return ns_context;
19324 if (DECL_P (thing))
19325 gen_decl_die (thing, NULL, ns_context);
19326 else
19327 gen_type_die (thing, ns_context);
19329 return context_die;
19332 /* Generate a DIE for a namespace or namespace alias. */
19334 static void
19335 gen_namespace_die (tree decl, dw_die_ref context_die)
19337 dw_die_ref namespace_die;
19339 /* Namespace aliases have a DECL_ABSTRACT_ORIGIN of the namespace
19340 they are an alias of. */
19341 if (DECL_ABSTRACT_ORIGIN (decl) == NULL)
19343 /* Output a real namespace or module. */
19344 context_die = setup_namespace_context (decl, comp_unit_die ());
19345 namespace_die = new_die (is_fortran ()
19346 ? DW_TAG_module : DW_TAG_namespace,
19347 context_die, decl);
19348 /* For Fortran modules defined in different CU don't add src coords. */
19349 if (namespace_die->die_tag == DW_TAG_module && DECL_EXTERNAL (decl))
19351 const char *name = dwarf2_name (decl, 0);
19352 if (name)
19353 add_name_attribute (namespace_die, name);
19355 else
19356 add_name_and_src_coords_attributes (namespace_die, decl);
19357 if (DECL_EXTERNAL (decl))
19358 add_AT_flag (namespace_die, DW_AT_declaration, 1);
19359 equate_decl_number_to_die (decl, namespace_die);
19361 else
19363 /* Output a namespace alias. */
19365 /* Force out the namespace we are an alias of, if necessary. */
19366 dw_die_ref origin_die
19367 = force_decl_die (DECL_ABSTRACT_ORIGIN (decl));
19369 if (DECL_FILE_SCOPE_P (decl)
19370 || TREE_CODE (DECL_CONTEXT (decl)) == NAMESPACE_DECL)
19371 context_die = setup_namespace_context (decl, comp_unit_die ());
19372 /* Now create the namespace alias DIE. */
19373 namespace_die = new_die (DW_TAG_imported_declaration, context_die, decl);
19374 add_name_and_src_coords_attributes (namespace_die, decl);
19375 add_AT_die_ref (namespace_die, DW_AT_import, origin_die);
19376 equate_decl_number_to_die (decl, namespace_die);
19380 /* Generate Dwarf debug information for a decl described by DECL.
19381 The return value is currently only meaningful for PARM_DECLs,
19382 for all other decls it returns NULL. */
19384 static dw_die_ref
19385 gen_decl_die (tree decl, tree origin, dw_die_ref context_die)
19387 tree decl_or_origin = decl ? decl : origin;
19388 tree class_origin = NULL, ultimate_origin;
19390 if (DECL_P (decl_or_origin) && DECL_IGNORED_P (decl_or_origin))
19391 return NULL;
19393 switch (TREE_CODE (decl_or_origin))
19395 case ERROR_MARK:
19396 break;
19398 case CONST_DECL:
19399 if (!is_fortran () && !is_ada ())
19401 /* The individual enumerators of an enum type get output when we output
19402 the Dwarf representation of the relevant enum type itself. */
19403 break;
19406 /* Emit its type. */
19407 gen_type_die (TREE_TYPE (decl), context_die);
19409 /* And its containing namespace. */
19410 context_die = declare_in_namespace (decl, context_die);
19412 gen_const_die (decl, context_die);
19413 break;
19415 case FUNCTION_DECL:
19416 /* Don't output any DIEs to represent mere function declarations,
19417 unless they are class members or explicit block externs. */
19418 if (DECL_INITIAL (decl_or_origin) == NULL_TREE
19419 && DECL_FILE_SCOPE_P (decl_or_origin)
19420 && (current_function_decl == NULL_TREE
19421 || DECL_ARTIFICIAL (decl_or_origin)))
19422 break;
19424 #if 0
19425 /* FIXME */
19426 /* This doesn't work because the C frontend sets DECL_ABSTRACT_ORIGIN
19427 on local redeclarations of global functions. That seems broken. */
19428 if (current_function_decl != decl)
19429 /* This is only a declaration. */;
19430 #endif
19432 /* If we're emitting a clone, emit info for the abstract instance. */
19433 if (origin || DECL_ORIGIN (decl) != decl)
19434 dwarf2out_abstract_function (origin
19435 ? DECL_ORIGIN (origin)
19436 : DECL_ABSTRACT_ORIGIN (decl));
19438 /* If we're emitting an out-of-line copy of an inline function,
19439 emit info for the abstract instance and set up to refer to it. */
19440 else if (cgraph_function_possibly_inlined_p (decl)
19441 && ! DECL_ABSTRACT (decl)
19442 && ! class_or_namespace_scope_p (context_die)
19443 /* dwarf2out_abstract_function won't emit a die if this is just
19444 a declaration. We must avoid setting DECL_ABSTRACT_ORIGIN in
19445 that case, because that works only if we have a die. */
19446 && DECL_INITIAL (decl) != NULL_TREE)
19448 dwarf2out_abstract_function (decl);
19449 set_decl_origin_self (decl);
19452 /* Otherwise we're emitting the primary DIE for this decl. */
19453 else if (debug_info_level > DINFO_LEVEL_TERSE)
19455 /* Before we describe the FUNCTION_DECL itself, make sure that we
19456 have its containing type. */
19457 if (!origin)
19458 origin = decl_class_context (decl);
19459 if (origin != NULL_TREE)
19460 gen_type_die (origin, context_die);
19462 /* And its return type. */
19463 gen_type_die (TREE_TYPE (TREE_TYPE (decl)), context_die);
19465 /* And its virtual context. */
19466 if (DECL_VINDEX (decl) != NULL_TREE)
19467 gen_type_die (DECL_CONTEXT (decl), context_die);
19469 /* Make sure we have a member DIE for decl. */
19470 if (origin != NULL_TREE)
19471 gen_type_die_for_member (origin, decl, context_die);
19473 /* And its containing namespace. */
19474 context_die = declare_in_namespace (decl, context_die);
19477 /* Now output a DIE to represent the function itself. */
19478 if (decl)
19479 gen_subprogram_die (decl, context_die);
19480 break;
19482 case TYPE_DECL:
19483 /* If we are in terse mode, don't generate any DIEs to represent any
19484 actual typedefs. */
19485 if (debug_info_level <= DINFO_LEVEL_TERSE)
19486 break;
19488 /* In the special case of a TYPE_DECL node representing the declaration
19489 of some type tag, if the given TYPE_DECL is marked as having been
19490 instantiated from some other (original) TYPE_DECL node (e.g. one which
19491 was generated within the original definition of an inline function) we
19492 used to generate a special (abbreviated) DW_TAG_structure_type,
19493 DW_TAG_union_type, or DW_TAG_enumeration_type DIE here. But nothing
19494 should be actually referencing those DIEs, as variable DIEs with that
19495 type would be emitted already in the abstract origin, so it was always
19496 removed during unused type prunning. Don't add anything in this
19497 case. */
19498 if (TYPE_DECL_IS_STUB (decl) && decl_ultimate_origin (decl) != NULL_TREE)
19499 break;
19501 if (is_redundant_typedef (decl))
19502 gen_type_die (TREE_TYPE (decl), context_die);
19503 else
19504 /* Output a DIE to represent the typedef itself. */
19505 gen_typedef_die (decl, context_die);
19506 break;
19508 case LABEL_DECL:
19509 if (debug_info_level >= DINFO_LEVEL_NORMAL)
19510 gen_label_die (decl, context_die);
19511 break;
19513 case VAR_DECL:
19514 case RESULT_DECL:
19515 /* If we are in terse mode, don't generate any DIEs to represent any
19516 variable declarations or definitions. */
19517 if (debug_info_level <= DINFO_LEVEL_TERSE)
19518 break;
19520 /* Output any DIEs that are needed to specify the type of this data
19521 object. */
19522 if (decl_by_reference_p (decl_or_origin))
19523 gen_type_die (TREE_TYPE (TREE_TYPE (decl_or_origin)), context_die);
19524 else
19525 gen_type_die (TREE_TYPE (decl_or_origin), context_die);
19527 /* And its containing type. */
19528 class_origin = decl_class_context (decl_or_origin);
19529 if (class_origin != NULL_TREE)
19530 gen_type_die_for_member (class_origin, decl_or_origin, context_die);
19532 /* And its containing namespace. */
19533 context_die = declare_in_namespace (decl_or_origin, context_die);
19535 /* Now output the DIE to represent the data object itself. This gets
19536 complicated because of the possibility that the VAR_DECL really
19537 represents an inlined instance of a formal parameter for an inline
19538 function. */
19539 ultimate_origin = decl_ultimate_origin (decl_or_origin);
19540 if (ultimate_origin != NULL_TREE
19541 && TREE_CODE (ultimate_origin) == PARM_DECL)
19542 gen_formal_parameter_die (decl, origin,
19543 true /* Emit name attribute. */,
19544 context_die);
19545 else
19546 gen_variable_die (decl, origin, context_die);
19547 break;
19549 case FIELD_DECL:
19550 /* Ignore the nameless fields that are used to skip bits but handle C++
19551 anonymous unions and structs. */
19552 if (DECL_NAME (decl) != NULL_TREE
19553 || TREE_CODE (TREE_TYPE (decl)) == UNION_TYPE
19554 || TREE_CODE (TREE_TYPE (decl)) == RECORD_TYPE)
19556 gen_type_die (member_declared_type (decl), context_die);
19557 gen_field_die (decl, context_die);
19559 break;
19561 case PARM_DECL:
19562 if (DECL_BY_REFERENCE (decl_or_origin))
19563 gen_type_die (TREE_TYPE (TREE_TYPE (decl_or_origin)), context_die);
19564 else
19565 gen_type_die (TREE_TYPE (decl_or_origin), context_die);
19566 return gen_formal_parameter_die (decl, origin,
19567 true /* Emit name attribute. */,
19568 context_die);
19570 case NAMESPACE_DECL:
19571 case IMPORTED_DECL:
19572 if (dwarf_version >= 3 || !dwarf_strict)
19573 gen_namespace_die (decl, context_die);
19574 break;
19576 default:
19577 /* Probably some frontend-internal decl. Assume we don't care. */
19578 gcc_assert ((int)TREE_CODE (decl) > NUM_TREE_CODES);
19579 break;
19582 return NULL;
19585 /* Output debug information for global decl DECL. Called from toplev.c after
19586 compilation proper has finished. */
19588 static void
19589 dwarf2out_global_decl (tree decl)
19591 /* Output DWARF2 information for file-scope tentative data object
19592 declarations, file-scope (extern) function declarations (which
19593 had no corresponding body) and file-scope tagged type declarations
19594 and definitions which have not yet been forced out. */
19595 if (TREE_CODE (decl) != FUNCTION_DECL || !DECL_INITIAL (decl))
19596 dwarf2out_decl (decl);
19599 /* Output debug information for type decl DECL. Called from toplev.c
19600 and from language front ends (to record built-in types). */
19601 static void
19602 dwarf2out_type_decl (tree decl, int local)
19604 if (!local)
19605 dwarf2out_decl (decl);
19608 /* Output debug information for imported module or decl DECL.
19609 NAME is non-NULL name in the lexical block if the decl has been renamed.
19610 LEXICAL_BLOCK is the lexical block (which TREE_CODE is a BLOCK)
19611 that DECL belongs to.
19612 LEXICAL_BLOCK_DIE is the DIE of LEXICAL_BLOCK. */
19613 static void
19614 dwarf2out_imported_module_or_decl_1 (tree decl,
19615 tree name,
19616 tree lexical_block,
19617 dw_die_ref lexical_block_die)
19619 expanded_location xloc;
19620 dw_die_ref imported_die = NULL;
19621 dw_die_ref at_import_die;
19623 if (TREE_CODE (decl) == IMPORTED_DECL)
19625 xloc = expand_location (DECL_SOURCE_LOCATION (decl));
19626 decl = IMPORTED_DECL_ASSOCIATED_DECL (decl);
19627 gcc_assert (decl);
19629 else
19630 xloc = expand_location (input_location);
19632 if (TREE_CODE (decl) == TYPE_DECL || TREE_CODE (decl) == CONST_DECL)
19634 at_import_die = force_type_die (TREE_TYPE (decl));
19635 /* For namespace N { typedef void T; } using N::T; base_type_die
19636 returns NULL, but DW_TAG_imported_declaration requires
19637 the DW_AT_import tag. Force creation of DW_TAG_typedef. */
19638 if (!at_import_die)
19640 gcc_assert (TREE_CODE (decl) == TYPE_DECL);
19641 gen_typedef_die (decl, get_context_die (DECL_CONTEXT (decl)));
19642 at_import_die = lookup_type_die (TREE_TYPE (decl));
19643 gcc_assert (at_import_die);
19646 else
19648 at_import_die = lookup_decl_die (decl);
19649 if (!at_import_die)
19651 /* If we're trying to avoid duplicate debug info, we may not have
19652 emitted the member decl for this field. Emit it now. */
19653 if (TREE_CODE (decl) == FIELD_DECL)
19655 tree type = DECL_CONTEXT (decl);
19657 if (TYPE_CONTEXT (type)
19658 && TYPE_P (TYPE_CONTEXT (type))
19659 && !should_emit_struct_debug (TYPE_CONTEXT (type),
19660 DINFO_USAGE_DIR_USE))
19661 return;
19662 gen_type_die_for_member (type, decl,
19663 get_context_die (TYPE_CONTEXT (type)));
19665 at_import_die = force_decl_die (decl);
19669 if (TREE_CODE (decl) == NAMESPACE_DECL)
19671 if (dwarf_version >= 3 || !dwarf_strict)
19672 imported_die = new_die (DW_TAG_imported_module,
19673 lexical_block_die,
19674 lexical_block);
19675 else
19676 return;
19678 else
19679 imported_die = new_die (DW_TAG_imported_declaration,
19680 lexical_block_die,
19681 lexical_block);
19683 add_AT_file (imported_die, DW_AT_decl_file, lookup_filename (xloc.file));
19684 add_AT_unsigned (imported_die, DW_AT_decl_line, xloc.line);
19685 if (name)
19686 add_AT_string (imported_die, DW_AT_name,
19687 IDENTIFIER_POINTER (name));
19688 add_AT_die_ref (imported_die, DW_AT_import, at_import_die);
19691 /* Output debug information for imported module or decl DECL.
19692 NAME is non-NULL name in context if the decl has been renamed.
19693 CHILD is true if decl is one of the renamed decls as part of
19694 importing whole module. */
19696 static void
19697 dwarf2out_imported_module_or_decl (tree decl, tree name, tree context,
19698 bool child)
19700 /* dw_die_ref at_import_die; */
19701 dw_die_ref scope_die;
19703 if (debug_info_level <= DINFO_LEVEL_TERSE)
19704 return;
19706 gcc_assert (decl);
19708 /* To emit DW_TAG_imported_module or DW_TAG_imported_decl, we need two DIEs.
19709 We need decl DIE for reference and scope die. First, get DIE for the decl
19710 itself. */
19712 /* Get the scope die for decl context. Use comp_unit_die for global module
19713 or decl. If die is not found for non globals, force new die. */
19714 if (context
19715 && TYPE_P (context)
19716 && !should_emit_struct_debug (context, DINFO_USAGE_DIR_USE))
19717 return;
19719 if (!(dwarf_version >= 3 || !dwarf_strict))
19720 return;
19722 scope_die = get_context_die (context);
19724 if (child)
19726 gcc_assert (scope_die->die_child);
19727 gcc_assert (scope_die->die_child->die_tag == DW_TAG_imported_module);
19728 gcc_assert (TREE_CODE (decl) != NAMESPACE_DECL);
19729 scope_die = scope_die->die_child;
19732 /* OK, now we have DIEs for decl as well as scope. Emit imported die. */
19733 dwarf2out_imported_module_or_decl_1 (decl, name, context, scope_die);
19737 /* Write the debugging output for DECL. */
19739 void
19740 dwarf2out_decl (tree decl)
19742 dw_die_ref context_die = comp_unit_die ();
19744 switch (TREE_CODE (decl))
19746 case ERROR_MARK:
19747 return;
19749 case FUNCTION_DECL:
19750 /* What we would really like to do here is to filter out all mere
19751 file-scope declarations of file-scope functions which are never
19752 referenced later within this translation unit (and keep all of ones
19753 that *are* referenced later on) but we aren't clairvoyant, so we have
19754 no idea which functions will be referenced in the future (i.e. later
19755 on within the current translation unit). So here we just ignore all
19756 file-scope function declarations which are not also definitions. If
19757 and when the debugger needs to know something about these functions,
19758 it will have to hunt around and find the DWARF information associated
19759 with the definition of the function.
19761 We can't just check DECL_EXTERNAL to find out which FUNCTION_DECL
19762 nodes represent definitions and which ones represent mere
19763 declarations. We have to check DECL_INITIAL instead. That's because
19764 the C front-end supports some weird semantics for "extern inline"
19765 function definitions. These can get inlined within the current
19766 translation unit (and thus, we need to generate Dwarf info for their
19767 abstract instances so that the Dwarf info for the concrete inlined
19768 instances can have something to refer to) but the compiler never
19769 generates any out-of-lines instances of such things (despite the fact
19770 that they *are* definitions).
19772 The important point is that the C front-end marks these "extern
19773 inline" functions as DECL_EXTERNAL, but we need to generate DWARF for
19774 them anyway. Note that the C++ front-end also plays some similar games
19775 for inline function definitions appearing within include files which
19776 also contain `#pragma interface' pragmas. */
19777 if (DECL_INITIAL (decl) == NULL_TREE)
19778 return;
19780 /* If we're a nested function, initially use a parent of NULL; if we're
19781 a plain function, this will be fixed up in decls_for_scope. If
19782 we're a method, it will be ignored, since we already have a DIE. */
19783 if (decl_function_context (decl)
19784 /* But if we're in terse mode, we don't care about scope. */
19785 && debug_info_level > DINFO_LEVEL_TERSE)
19786 context_die = NULL;
19787 break;
19789 case VAR_DECL:
19790 /* Ignore this VAR_DECL if it refers to a file-scope extern data object
19791 declaration and if the declaration was never even referenced from
19792 within this entire compilation unit. We suppress these DIEs in
19793 order to save space in the .debug section (by eliminating entries
19794 which are probably useless). Note that we must not suppress
19795 block-local extern declarations (whether used or not) because that
19796 would screw-up the debugger's name lookup mechanism and cause it to
19797 miss things which really ought to be in scope at a given point. */
19798 if (DECL_EXTERNAL (decl) && !TREE_USED (decl))
19799 return;
19801 /* For local statics lookup proper context die. */
19802 if (TREE_STATIC (decl) && decl_function_context (decl))
19803 context_die = lookup_decl_die (DECL_CONTEXT (decl));
19805 /* If we are in terse mode, don't generate any DIEs to represent any
19806 variable declarations or definitions. */
19807 if (debug_info_level <= DINFO_LEVEL_TERSE)
19808 return;
19809 break;
19811 case CONST_DECL:
19812 if (debug_info_level <= DINFO_LEVEL_TERSE)
19813 return;
19814 if (!is_fortran () && !is_ada ())
19815 return;
19816 if (TREE_STATIC (decl) && decl_function_context (decl))
19817 context_die = lookup_decl_die (DECL_CONTEXT (decl));
19818 break;
19820 case NAMESPACE_DECL:
19821 case IMPORTED_DECL:
19822 if (debug_info_level <= DINFO_LEVEL_TERSE)
19823 return;
19824 if (lookup_decl_die (decl) != NULL)
19825 return;
19826 break;
19828 case TYPE_DECL:
19829 /* Don't emit stubs for types unless they are needed by other DIEs. */
19830 if (TYPE_DECL_SUPPRESS_DEBUG (decl))
19831 return;
19833 /* Don't bother trying to generate any DIEs to represent any of the
19834 normal built-in types for the language we are compiling. */
19835 if (DECL_IS_BUILTIN (decl))
19836 return;
19838 /* If we are in terse mode, don't generate any DIEs for types. */
19839 if (debug_info_level <= DINFO_LEVEL_TERSE)
19840 return;
19842 /* If we're a function-scope tag, initially use a parent of NULL;
19843 this will be fixed up in decls_for_scope. */
19844 if (decl_function_context (decl))
19845 context_die = NULL;
19847 break;
19849 default:
19850 return;
19853 gen_decl_die (decl, NULL, context_die);
19856 /* Write the debugging output for DECL. */
19858 static void
19859 dwarf2out_function_decl (tree decl)
19861 dwarf2out_decl (decl);
19862 call_arg_locations = NULL;
19863 call_arg_loc_last = NULL;
19864 call_site_count = -1;
19865 tail_call_site_count = -1;
19866 VEC_free (dw_die_ref, heap, block_map);
19867 htab_empty (decl_loc_table);
19868 htab_empty (cached_dw_loc_list_table);
19871 /* Output a marker (i.e. a label) for the beginning of the generated code for
19872 a lexical block. */
19874 static void
19875 dwarf2out_begin_block (unsigned int line ATTRIBUTE_UNUSED,
19876 unsigned int blocknum)
19878 switch_to_section (current_function_section ());
19879 ASM_OUTPUT_DEBUG_LABEL (asm_out_file, BLOCK_BEGIN_LABEL, blocknum);
19882 /* Output a marker (i.e. a label) for the end of the generated code for a
19883 lexical block. */
19885 static void
19886 dwarf2out_end_block (unsigned int line ATTRIBUTE_UNUSED, unsigned int blocknum)
19888 switch_to_section (current_function_section ());
19889 ASM_OUTPUT_DEBUG_LABEL (asm_out_file, BLOCK_END_LABEL, blocknum);
19892 /* Returns nonzero if it is appropriate not to emit any debugging
19893 information for BLOCK, because it doesn't contain any instructions.
19895 Don't allow this for blocks with nested functions or local classes
19896 as we would end up with orphans, and in the presence of scheduling
19897 we may end up calling them anyway. */
19899 static bool
19900 dwarf2out_ignore_block (const_tree block)
19902 tree decl;
19903 unsigned int i;
19905 for (decl = BLOCK_VARS (block); decl; decl = DECL_CHAIN (decl))
19906 if (TREE_CODE (decl) == FUNCTION_DECL
19907 || (TREE_CODE (decl) == TYPE_DECL && TYPE_DECL_IS_STUB (decl)))
19908 return 0;
19909 for (i = 0; i < BLOCK_NUM_NONLOCALIZED_VARS (block); i++)
19911 decl = BLOCK_NONLOCALIZED_VAR (block, i);
19912 if (TREE_CODE (decl) == FUNCTION_DECL
19913 || (TREE_CODE (decl) == TYPE_DECL && TYPE_DECL_IS_STUB (decl)))
19914 return 0;
19917 return 1;
19920 /* Hash table routines for file_hash. */
19922 static int
19923 file_table_eq (const void *p1_p, const void *p2_p)
19925 const struct dwarf_file_data *const p1 =
19926 (const struct dwarf_file_data *) p1_p;
19927 const char *const p2 = (const char *) p2_p;
19928 return filename_cmp (p1->filename, p2) == 0;
19931 static hashval_t
19932 file_table_hash (const void *p_p)
19934 const struct dwarf_file_data *const p = (const struct dwarf_file_data *) p_p;
19935 return htab_hash_string (p->filename);
19938 /* Lookup FILE_NAME (in the list of filenames that we know about here in
19939 dwarf2out.c) and return its "index". The index of each (known) filename is
19940 just a unique number which is associated with only that one filename. We
19941 need such numbers for the sake of generating labels (in the .debug_sfnames
19942 section) and references to those files numbers (in the .debug_srcinfo
19943 and.debug_macinfo sections). If the filename given as an argument is not
19944 found in our current list, add it to the list and assign it the next
19945 available unique index number. In order to speed up searches, we remember
19946 the index of the filename was looked up last. This handles the majority of
19947 all searches. */
19949 static struct dwarf_file_data *
19950 lookup_filename (const char *file_name)
19952 void ** slot;
19953 struct dwarf_file_data * created;
19955 /* Check to see if the file name that was searched on the previous
19956 call matches this file name. If so, return the index. */
19957 if (file_table_last_lookup
19958 && (file_name == file_table_last_lookup->filename
19959 || filename_cmp (file_table_last_lookup->filename, file_name) == 0))
19960 return file_table_last_lookup;
19962 /* Didn't match the previous lookup, search the table. */
19963 slot = htab_find_slot_with_hash (file_table, file_name,
19964 htab_hash_string (file_name), INSERT);
19965 if (*slot)
19966 return (struct dwarf_file_data *) *slot;
19968 created = ggc_alloc_dwarf_file_data ();
19969 created->filename = file_name;
19970 created->emitted_number = 0;
19971 *slot = created;
19972 return created;
19975 /* If the assembler will construct the file table, then translate the compiler
19976 internal file table number into the assembler file table number, and emit
19977 a .file directive if we haven't already emitted one yet. The file table
19978 numbers are different because we prune debug info for unused variables and
19979 types, which may include filenames. */
19981 static int
19982 maybe_emit_file (struct dwarf_file_data * fd)
19984 if (! fd->emitted_number)
19986 if (last_emitted_file)
19987 fd->emitted_number = last_emitted_file->emitted_number + 1;
19988 else
19989 fd->emitted_number = 1;
19990 last_emitted_file = fd;
19992 if (DWARF2_ASM_LINE_DEBUG_INFO)
19994 fprintf (asm_out_file, "\t.file %u ", fd->emitted_number);
19995 output_quoted_string (asm_out_file,
19996 remap_debug_filename (fd->filename));
19997 fputc ('\n', asm_out_file);
20001 return fd->emitted_number;
20004 /* Schedule generation of a DW_AT_const_value attribute to DIE.
20005 That generation should happen after function debug info has been
20006 generated. The value of the attribute is the constant value of ARG. */
20008 static void
20009 append_entry_to_tmpl_value_parm_die_table (dw_die_ref die, tree arg)
20011 die_arg_entry entry;
20013 if (!die || !arg)
20014 return;
20016 if (!tmpl_value_parm_die_table)
20017 tmpl_value_parm_die_table
20018 = VEC_alloc (die_arg_entry, gc, 32);
20020 entry.die = die;
20021 entry.arg = arg;
20022 VEC_safe_push (die_arg_entry, gc,
20023 tmpl_value_parm_die_table,
20024 &entry);
20027 /* Return TRUE if T is an instance of generic type, FALSE
20028 otherwise. */
20030 static bool
20031 generic_type_p (tree t)
20033 if (t == NULL_TREE || !TYPE_P (t))
20034 return false;
20035 return lang_hooks.get_innermost_generic_parms (t) != NULL_TREE;
20038 /* Schedule the generation of the generic parameter dies for the
20039 instance of generic type T. The proper generation itself is later
20040 done by gen_scheduled_generic_parms_dies. */
20042 static void
20043 schedule_generic_params_dies_gen (tree t)
20045 if (!generic_type_p (t))
20046 return;
20048 if (generic_type_instances == NULL)
20049 generic_type_instances = VEC_alloc (tree, gc, 256);
20051 VEC_safe_push (tree, gc, generic_type_instances, t);
20054 /* Add a DW_AT_const_value attribute to DIEs that were scheduled
20055 by append_entry_to_tmpl_value_parm_die_table. This function must
20056 be called after function DIEs have been generated. */
20058 static void
20059 gen_remaining_tmpl_value_param_die_attribute (void)
20061 if (tmpl_value_parm_die_table)
20063 unsigned i;
20064 die_arg_entry *e;
20066 FOR_EACH_VEC_ELT (die_arg_entry, tmpl_value_parm_die_table, i, e)
20067 tree_add_const_value_attribute (e->die, e->arg);
20071 /* Generate generic parameters DIEs for instances of generic types
20072 that have been previously scheduled by
20073 schedule_generic_params_dies_gen. This function must be called
20074 after all the types of the CU have been laid out. */
20076 static void
20077 gen_scheduled_generic_parms_dies (void)
20079 unsigned i;
20080 tree t;
20082 if (generic_type_instances == NULL)
20083 return;
20085 FOR_EACH_VEC_ELT (tree, generic_type_instances, i, t)
20086 gen_generic_params_dies (t);
20090 /* Replace DW_AT_name for the decl with name. */
20092 static void
20093 dwarf2out_set_name (tree decl, tree name)
20095 dw_die_ref die;
20096 dw_attr_ref attr;
20097 const char *dname;
20099 die = TYPE_SYMTAB_DIE (decl);
20100 if (!die)
20101 return;
20103 dname = dwarf2_name (name, 0);
20104 if (!dname)
20105 return;
20107 attr = get_AT (die, DW_AT_name);
20108 if (attr)
20110 struct indirect_string_node *node;
20112 node = find_AT_string (dname);
20113 /* replace the string. */
20114 attr->dw_attr_val.v.val_str = node;
20117 else
20118 add_name_attribute (die, dname);
20121 /* Called by the final INSN scan whenever we see a var location. We
20122 use it to drop labels in the right places, and throw the location in
20123 our lookup table. */
20125 static void
20126 dwarf2out_var_location (rtx loc_note)
20128 char loclabel[MAX_ARTIFICIAL_LABEL_BYTES + 2];
20129 struct var_loc_node *newloc;
20130 rtx next_real;
20131 static const char *last_label;
20132 static const char *last_postcall_label;
20133 static bool last_in_cold_section_p;
20134 tree decl;
20135 bool var_loc_p;
20137 if (!NOTE_P (loc_note))
20139 if (CALL_P (loc_note))
20141 call_site_count++;
20142 if (SIBLING_CALL_P (loc_note))
20143 tail_call_site_count++;
20145 return;
20148 var_loc_p = NOTE_KIND (loc_note) == NOTE_INSN_VAR_LOCATION;
20149 if (var_loc_p && !DECL_P (NOTE_VAR_LOCATION_DECL (loc_note)))
20150 return;
20152 next_real = next_real_insn (loc_note);
20154 /* If there are no instructions which would be affected by this note,
20155 don't do anything. */
20156 if (var_loc_p
20157 && next_real == NULL_RTX
20158 && !NOTE_DURING_CALL_P (loc_note))
20159 return;
20161 if (next_real == NULL_RTX)
20162 next_real = get_last_insn ();
20164 /* If there were any real insns between note we processed last time
20165 and this note (or if it is the first note), clear
20166 last_{,postcall_}label so that they are not reused this time. */
20167 if (last_var_location_insn == NULL_RTX
20168 || last_var_location_insn != next_real
20169 || last_in_cold_section_p != in_cold_section_p)
20171 last_label = NULL;
20172 last_postcall_label = NULL;
20175 if (var_loc_p)
20177 decl = NOTE_VAR_LOCATION_DECL (loc_note);
20178 newloc = add_var_loc_to_decl (decl, loc_note,
20179 NOTE_DURING_CALL_P (loc_note)
20180 ? last_postcall_label : last_label);
20181 if (newloc == NULL)
20182 return;
20184 else
20186 decl = NULL_TREE;
20187 newloc = NULL;
20190 /* If there were no real insns between note we processed last time
20191 and this note, use the label we emitted last time. Otherwise
20192 create a new label and emit it. */
20193 if (last_label == NULL)
20195 ASM_GENERATE_INTERNAL_LABEL (loclabel, "LVL", loclabel_num);
20196 ASM_OUTPUT_DEBUG_LABEL (asm_out_file, "LVL", loclabel_num);
20197 loclabel_num++;
20198 last_label = ggc_strdup (loclabel);
20201 if (!var_loc_p)
20203 struct call_arg_loc_node *ca_loc
20204 = ggc_alloc_cleared_call_arg_loc_node ();
20205 rtx prev = prev_real_insn (loc_note), x;
20206 ca_loc->call_arg_loc_note = loc_note;
20207 ca_loc->next = NULL;
20208 ca_loc->label = last_label;
20209 gcc_assert (prev
20210 && (CALL_P (prev)
20211 || (NONJUMP_INSN_P (prev)
20212 && GET_CODE (PATTERN (prev)) == SEQUENCE
20213 && CALL_P (XVECEXP (PATTERN (prev), 0, 0)))));
20214 if (!CALL_P (prev))
20215 prev = XVECEXP (PATTERN (prev), 0, 0);
20216 ca_loc->tail_call_p = SIBLING_CALL_P (prev);
20217 x = PATTERN (prev);
20218 if (GET_CODE (x) == PARALLEL)
20219 x = XVECEXP (x, 0, 0);
20220 if (GET_CODE (x) == SET)
20221 x = SET_SRC (x);
20222 if (GET_CODE (x) == CALL && MEM_P (XEXP (x, 0)))
20224 x = XEXP (XEXP (x, 0), 0);
20225 if (GET_CODE (x) == SYMBOL_REF
20226 && SYMBOL_REF_DECL (x)
20227 && TREE_CODE (SYMBOL_REF_DECL (x)) == FUNCTION_DECL)
20228 ca_loc->symbol_ref = x;
20230 ca_loc->block = insn_scope (prev);
20231 if (call_arg_locations)
20232 call_arg_loc_last->next = ca_loc;
20233 else
20234 call_arg_locations = ca_loc;
20235 call_arg_loc_last = ca_loc;
20237 else if (!NOTE_DURING_CALL_P (loc_note))
20238 newloc->label = last_label;
20239 else
20241 if (!last_postcall_label)
20243 sprintf (loclabel, "%s-1", last_label);
20244 last_postcall_label = ggc_strdup (loclabel);
20246 newloc->label = last_postcall_label;
20249 last_var_location_insn = next_real;
20250 last_in_cold_section_p = in_cold_section_p;
20253 /* Note in one location list that text section has changed. */
20255 static int
20256 var_location_switch_text_section_1 (void **slot, void *data ATTRIBUTE_UNUSED)
20258 var_loc_list *list = (var_loc_list *) *slot;
20259 if (list->first)
20260 list->last_before_switch
20261 = list->last->next ? list->last->next : list->last;
20262 return 1;
20265 /* Note in all location lists that text section has changed. */
20267 static void
20268 var_location_switch_text_section (void)
20270 if (decl_loc_table == NULL)
20271 return;
20273 htab_traverse (decl_loc_table, var_location_switch_text_section_1, NULL);
20276 /* Create a new line number table. */
20278 static dw_line_info_table *
20279 new_line_info_table (void)
20281 dw_line_info_table *table;
20283 table = ggc_alloc_cleared_dw_line_info_table_struct ();
20284 table->file_num = 1;
20285 table->line_num = 1;
20286 table->is_stmt = DWARF_LINE_DEFAULT_IS_STMT_START;
20288 return table;
20291 /* Lookup the "current" table into which we emit line info, so
20292 that we don't have to do it for every source line. */
20294 static void
20295 set_cur_line_info_table (section *sec)
20297 dw_line_info_table *table;
20299 if (sec == text_section)
20300 table = text_section_line_info;
20301 else if (sec == cold_text_section)
20303 table = cold_text_section_line_info;
20304 if (!table)
20306 cold_text_section_line_info = table = new_line_info_table ();
20307 table->end_label = cold_end_label;
20310 else
20312 const char *end_label;
20314 if (flag_reorder_blocks_and_partition)
20316 if (in_cold_section_p)
20317 end_label = crtl->subsections.cold_section_end_label;
20318 else
20319 end_label = crtl->subsections.hot_section_end_label;
20321 else
20323 char label[MAX_ARTIFICIAL_LABEL_BYTES];
20324 ASM_GENERATE_INTERNAL_LABEL (label, FUNC_END_LABEL,
20325 current_function_funcdef_no);
20326 end_label = ggc_strdup (label);
20329 table = new_line_info_table ();
20330 table->end_label = end_label;
20332 VEC_safe_push (dw_line_info_table_p, gc, separate_line_info, table);
20335 cur_line_info_table = table;
20339 /* We need to reset the locations at the beginning of each
20340 function. We can't do this in the end_function hook, because the
20341 declarations that use the locations won't have been output when
20342 that hook is called. Also compute have_multiple_function_sections here. */
20344 static void
20345 dwarf2out_begin_function (tree fun)
20347 section *sec = function_section (fun);
20349 if (sec != text_section)
20350 have_multiple_function_sections = true;
20352 if (flag_reorder_blocks_and_partition && !cold_text_section)
20354 gcc_assert (current_function_decl == fun);
20355 cold_text_section = unlikely_text_section ();
20356 switch_to_section (cold_text_section);
20357 ASM_OUTPUT_LABEL (asm_out_file, cold_text_section_label);
20358 switch_to_section (sec);
20361 dwarf2out_note_section_used ();
20362 call_site_count = 0;
20363 tail_call_site_count = 0;
20365 set_cur_line_info_table (sec);
20368 /* Add OPCODE+VAL as an entry at the end of the opcode array in TABLE. */
20370 static void
20371 push_dw_line_info_entry (dw_line_info_table *table,
20372 enum dw_line_info_opcode opcode, unsigned int val)
20374 dw_line_info_entry e;
20375 e.opcode = opcode;
20376 e.val = val;
20377 VEC_safe_push (dw_line_info_entry, gc, table->entries, &e);
20380 /* Output a label to mark the beginning of a source code line entry
20381 and record information relating to this source line, in
20382 'line_info_table' for later output of the .debug_line section. */
20383 /* ??? The discriminator parameter ought to be unsigned. */
20385 static void
20386 dwarf2out_source_line (unsigned int line, const char *filename,
20387 int discriminator, bool is_stmt)
20389 unsigned int file_num;
20390 dw_line_info_table *table;
20392 if (debug_info_level < DINFO_LEVEL_NORMAL || line == 0)
20393 return;
20395 /* The discriminator column was added in dwarf4. Simplify the below
20396 by simply removing it if we're not supposed to output it. */
20397 if (dwarf_version < 4 && dwarf_strict)
20398 discriminator = 0;
20400 table = cur_line_info_table;
20401 file_num = maybe_emit_file (lookup_filename (filename));
20403 /* ??? TODO: Elide duplicate line number entries. Traditionally,
20404 the debugger has used the second (possibly duplicate) line number
20405 at the beginning of the function to mark the end of the prologue.
20406 We could eliminate any other duplicates within the function. For
20407 Dwarf3, we ought to include the DW_LNS_set_prologue_end mark in
20408 that second line number entry. */
20409 /* Recall that this end-of-prologue indication is *not* the same thing
20410 as the end_prologue debug hook. The NOTE_INSN_PROLOGUE_END note,
20411 to which the hook corresponds, follows the last insn that was
20412 emitted by gen_prologue. What we need is to preceed the first insn
20413 that had been emitted after NOTE_INSN_FUNCTION_BEG, i.e. the first
20414 insn that corresponds to something the user wrote. These may be
20415 very different locations once scheduling is enabled. */
20417 if (0 && file_num == table->file_num
20418 && line == table->line_num
20419 && discriminator == table->discrim_num
20420 && is_stmt == table->is_stmt)
20421 return;
20423 switch_to_section (current_function_section ());
20425 /* If requested, emit something human-readable. */
20426 if (flag_debug_asm)
20427 fprintf (asm_out_file, "\t%s %s:%d\n", ASM_COMMENT_START, filename, line);
20429 if (DWARF2_ASM_LINE_DEBUG_INFO)
20431 /* Emit the .loc directive understood by GNU as. */
20432 fprintf (asm_out_file, "\t.loc %d %d 0", file_num, line);
20433 if (is_stmt != table->is_stmt)
20434 fprintf (asm_out_file, " is_stmt %d", is_stmt ? 1 : 0);
20435 if (SUPPORTS_DISCRIMINATOR && discriminator != 0)
20436 fprintf (asm_out_file, " discriminator %d", discriminator);
20437 fputc ('\n', asm_out_file);
20439 else
20441 unsigned int label_num = ++line_info_label_num;
20443 targetm.asm_out.internal_label (asm_out_file, LINE_CODE_LABEL, label_num);
20445 push_dw_line_info_entry (table, LI_set_address, label_num);
20446 if (file_num != table->file_num)
20447 push_dw_line_info_entry (table, LI_set_file, file_num);
20448 if (discriminator != table->discrim_num)
20449 push_dw_line_info_entry (table, LI_set_discriminator, discriminator);
20450 if (is_stmt != table->is_stmt)
20451 push_dw_line_info_entry (table, LI_negate_stmt, 0);
20452 push_dw_line_info_entry (table, LI_set_line, line);
20455 table->file_num = file_num;
20456 table->line_num = line;
20457 table->discrim_num = discriminator;
20458 table->is_stmt = is_stmt;
20459 table->in_use = true;
20462 /* Record the beginning of a new source file. */
20464 static void
20465 dwarf2out_start_source_file (unsigned int lineno, const char *filename)
20467 if (flag_eliminate_dwarf2_dups && ! use_debug_types)
20469 /* Record the beginning of the file for break_out_includes. */
20470 dw_die_ref bincl_die;
20472 bincl_die = new_die (DW_TAG_GNU_BINCL, comp_unit_die (), NULL);
20473 add_AT_string (bincl_die, DW_AT_name, remap_debug_filename (filename));
20476 if (debug_info_level >= DINFO_LEVEL_VERBOSE)
20478 macinfo_entry e;
20479 e.code = DW_MACINFO_start_file;
20480 e.lineno = lineno;
20481 e.info = xstrdup (filename);
20482 VEC_safe_push (macinfo_entry, gc, macinfo_table, &e);
20486 /* Record the end of a source file. */
20488 static void
20489 dwarf2out_end_source_file (unsigned int lineno ATTRIBUTE_UNUSED)
20491 if (flag_eliminate_dwarf2_dups && ! use_debug_types)
20492 /* Record the end of the file for break_out_includes. */
20493 new_die (DW_TAG_GNU_EINCL, comp_unit_die (), NULL);
20495 if (debug_info_level >= DINFO_LEVEL_VERBOSE)
20497 macinfo_entry e;
20498 e.code = DW_MACINFO_end_file;
20499 e.lineno = lineno;
20500 e.info = NULL;
20501 VEC_safe_push (macinfo_entry, gc, macinfo_table, &e);
20505 /* Called from debug_define in toplev.c. The `buffer' parameter contains
20506 the tail part of the directive line, i.e. the part which is past the
20507 initial whitespace, #, whitespace, directive-name, whitespace part. */
20509 static void
20510 dwarf2out_define (unsigned int lineno ATTRIBUTE_UNUSED,
20511 const char *buffer ATTRIBUTE_UNUSED)
20513 if (debug_info_level >= DINFO_LEVEL_VERBOSE)
20515 macinfo_entry e;
20516 /* Insert a dummy first entry to be able to optimize the whole
20517 predefined macro block using DW_MACRO_GNU_transparent_include. */
20518 if (VEC_empty (macinfo_entry, macinfo_table) && lineno == 0)
20520 e.code = 0;
20521 e.lineno = 0;
20522 e.info = NULL;
20523 VEC_safe_push (macinfo_entry, gc, macinfo_table, &e);
20525 e.code = DW_MACINFO_define;
20526 e.lineno = lineno;
20527 e.info = xstrdup (buffer);;
20528 VEC_safe_push (macinfo_entry, gc, macinfo_table, &e);
20532 /* Called from debug_undef in toplev.c. The `buffer' parameter contains
20533 the tail part of the directive line, i.e. the part which is past the
20534 initial whitespace, #, whitespace, directive-name, whitespace part. */
20536 static void
20537 dwarf2out_undef (unsigned int lineno ATTRIBUTE_UNUSED,
20538 const char *buffer ATTRIBUTE_UNUSED)
20540 if (debug_info_level >= DINFO_LEVEL_VERBOSE)
20542 macinfo_entry e;
20543 /* Insert a dummy first entry to be able to optimize the whole
20544 predefined macro block using DW_MACRO_GNU_transparent_include. */
20545 if (VEC_empty (macinfo_entry, macinfo_table) && lineno == 0)
20547 e.code = 0;
20548 e.lineno = 0;
20549 e.info = NULL;
20550 VEC_safe_push (macinfo_entry, gc, macinfo_table, &e);
20552 e.code = DW_MACINFO_undef;
20553 e.lineno = lineno;
20554 e.info = xstrdup (buffer);
20555 VEC_safe_push (macinfo_entry, gc, macinfo_table, &e);
20559 /* Routines to manipulate hash table of CUs. */
20561 static hashval_t
20562 htab_macinfo_hash (const void *of)
20564 const macinfo_entry *const entry =
20565 (const macinfo_entry *) of;
20567 return htab_hash_string (entry->info);
20570 static int
20571 htab_macinfo_eq (const void *of1, const void *of2)
20573 const macinfo_entry *const entry1 = (const macinfo_entry *) of1;
20574 const macinfo_entry *const entry2 = (const macinfo_entry *) of2;
20576 return !strcmp (entry1->info, entry2->info);
20579 /* Output a single .debug_macinfo entry. */
20581 static void
20582 output_macinfo_op (macinfo_entry *ref)
20584 int file_num;
20585 size_t len;
20586 struct indirect_string_node *node;
20587 char label[MAX_ARTIFICIAL_LABEL_BYTES];
20588 struct dwarf_file_data *fd;
20590 switch (ref->code)
20592 case DW_MACINFO_start_file:
20593 fd = lookup_filename (ref->info);
20594 if (fd->filename == ref->info)
20595 fd->filename = ggc_strdup (fd->filename);
20596 file_num = maybe_emit_file (fd);
20597 dw2_asm_output_data (1, DW_MACINFO_start_file, "Start new file");
20598 dw2_asm_output_data_uleb128 (ref->lineno,
20599 "Included from line number %lu",
20600 (unsigned long) ref->lineno);
20601 dw2_asm_output_data_uleb128 (file_num, "file %s", ref->info);
20602 break;
20603 case DW_MACINFO_end_file:
20604 dw2_asm_output_data (1, DW_MACINFO_end_file, "End file");
20605 break;
20606 case DW_MACINFO_define:
20607 case DW_MACINFO_undef:
20608 len = strlen (ref->info) + 1;
20609 if (!dwarf_strict
20610 && len > DWARF_OFFSET_SIZE
20611 && !DWARF2_INDIRECT_STRING_SUPPORT_MISSING_ON_TARGET
20612 && (debug_str_section->common.flags & SECTION_MERGE) != 0)
20614 ref->code = ref->code == DW_MACINFO_define
20615 ? DW_MACRO_GNU_define_indirect
20616 : DW_MACRO_GNU_undef_indirect;
20617 output_macinfo_op (ref);
20618 return;
20620 dw2_asm_output_data (1, ref->code,
20621 ref->code == DW_MACINFO_define
20622 ? "Define macro" : "Undefine macro");
20623 dw2_asm_output_data_uleb128 (ref->lineno, "At line number %lu",
20624 (unsigned long) ref->lineno);
20625 dw2_asm_output_nstring (ref->info, -1, "The macro");
20626 break;
20627 case DW_MACRO_GNU_define_indirect:
20628 case DW_MACRO_GNU_undef_indirect:
20629 node = find_AT_string (ref->info);
20630 if (node->form != DW_FORM_strp)
20632 char label[32];
20633 ASM_GENERATE_INTERNAL_LABEL (label, "LASF", dw2_string_counter);
20634 ++dw2_string_counter;
20635 node->label = xstrdup (label);
20636 node->form = DW_FORM_strp;
20638 dw2_asm_output_data (1, ref->code,
20639 ref->code == DW_MACRO_GNU_define_indirect
20640 ? "Define macro indirect"
20641 : "Undefine macro indirect");
20642 dw2_asm_output_data_uleb128 (ref->lineno, "At line number %lu",
20643 (unsigned long) ref->lineno);
20644 dw2_asm_output_offset (DWARF_OFFSET_SIZE, node->label,
20645 debug_str_section, "The macro: \"%s\"",
20646 ref->info);
20647 break;
20648 case DW_MACRO_GNU_transparent_include:
20649 dw2_asm_output_data (1, ref->code, "Transparent include");
20650 ASM_GENERATE_INTERNAL_LABEL (label,
20651 DEBUG_MACRO_SECTION_LABEL, ref->lineno);
20652 dw2_asm_output_offset (DWARF_OFFSET_SIZE, label, NULL, NULL);
20653 break;
20654 default:
20655 fprintf (asm_out_file, "%s unrecognized macinfo code %lu\n",
20656 ASM_COMMENT_START, (unsigned long) ref->code);
20657 break;
20661 /* Attempt to make a sequence of define/undef macinfo ops shareable with
20662 other compilation unit .debug_macinfo sections. IDX is the first
20663 index of a define/undef, return the number of ops that should be
20664 emitted in a comdat .debug_macinfo section and emit
20665 a DW_MACRO_GNU_transparent_include entry referencing it.
20666 If the define/undef entry should be emitted normally, return 0. */
20668 static unsigned
20669 optimize_macinfo_range (unsigned int idx, VEC (macinfo_entry, gc) *files,
20670 htab_t *macinfo_htab)
20672 macinfo_entry *first, *second, *cur, *inc;
20673 char linebuf[sizeof (HOST_WIDE_INT) * 3 + 1];
20674 unsigned char checksum[16];
20675 struct md5_ctx ctx;
20676 char *grp_name, *tail;
20677 const char *base;
20678 unsigned int i, count, encoded_filename_len, linebuf_len;
20679 void **slot;
20681 first = VEC_index (macinfo_entry, macinfo_table, idx);
20682 second = VEC_index (macinfo_entry, macinfo_table, idx + 1);
20684 /* Optimize only if there are at least two consecutive define/undef ops,
20685 and either all of them are before first DW_MACINFO_start_file
20686 with lineno 0 (i.e. predefined macro block), or all of them are
20687 in some included header file. */
20688 if (second->code != DW_MACINFO_define && second->code != DW_MACINFO_undef)
20689 return 0;
20690 if (VEC_empty (macinfo_entry, files))
20692 if (first->lineno != 0 || second->lineno != 0)
20693 return 0;
20695 else if (first->lineno == 0)
20696 return 0;
20698 /* Find the last define/undef entry that can be grouped together
20699 with first and at the same time compute md5 checksum of their
20700 codes, linenumbers and strings. */
20701 md5_init_ctx (&ctx);
20702 for (i = idx; VEC_iterate (macinfo_entry, macinfo_table, i, cur); i++)
20703 if (cur->code != DW_MACINFO_define && cur->code != DW_MACINFO_undef)
20704 break;
20705 else if (first->lineno == 0 && cur->lineno != 0)
20706 break;
20707 else
20709 unsigned char code = cur->code;
20710 md5_process_bytes (&code, 1, &ctx);
20711 checksum_uleb128 (cur->lineno, &ctx);
20712 md5_process_bytes (cur->info, strlen (cur->info) + 1, &ctx);
20714 md5_finish_ctx (&ctx, checksum);
20715 count = i - idx;
20717 /* From the containing include filename (if any) pick up just
20718 usable characters from its basename. */
20719 if (first->lineno == 0)
20720 base = "";
20721 else
20722 base = lbasename (VEC_last (macinfo_entry, files)->info);
20723 for (encoded_filename_len = 0, i = 0; base[i]; i++)
20724 if (ISIDNUM (base[i]) || base[i] == '.')
20725 encoded_filename_len++;
20726 /* Count . at the end. */
20727 if (encoded_filename_len)
20728 encoded_filename_len++;
20730 sprintf (linebuf, HOST_WIDE_INT_PRINT_UNSIGNED, first->lineno);
20731 linebuf_len = strlen (linebuf);
20733 /* The group name format is: wmN.[<encoded filename>.]<lineno>.<md5sum> */
20734 grp_name = XNEWVEC (char, 4 + encoded_filename_len + linebuf_len + 1
20735 + 16 * 2 + 1);
20736 memcpy (grp_name, DWARF_OFFSET_SIZE == 4 ? "wm4." : "wm8.", 4);
20737 tail = grp_name + 4;
20738 if (encoded_filename_len)
20740 for (i = 0; base[i]; i++)
20741 if (ISIDNUM (base[i]) || base[i] == '.')
20742 *tail++ = base[i];
20743 *tail++ = '.';
20745 memcpy (tail, linebuf, linebuf_len);
20746 tail += linebuf_len;
20747 *tail++ = '.';
20748 for (i = 0; i < 16; i++)
20749 sprintf (tail + i * 2, "%02x", checksum[i] & 0xff);
20751 /* Construct a macinfo_entry for DW_MACRO_GNU_transparent_include
20752 in the empty vector entry before the first define/undef. */
20753 inc = VEC_index (macinfo_entry, macinfo_table, idx - 1);
20754 inc->code = DW_MACRO_GNU_transparent_include;
20755 inc->lineno = 0;
20756 inc->info = grp_name;
20757 if (*macinfo_htab == NULL)
20758 *macinfo_htab = htab_create (10, htab_macinfo_hash, htab_macinfo_eq, NULL);
20759 /* Avoid emitting duplicates. */
20760 slot = htab_find_slot (*macinfo_htab, inc, INSERT);
20761 if (*slot != NULL)
20763 free (CONST_CAST (char *, inc->info));
20764 inc->code = 0;
20765 inc->info = NULL;
20766 /* If such an entry has been used before, just emit
20767 a DW_MACRO_GNU_transparent_include op. */
20768 inc = (macinfo_entry *) *slot;
20769 output_macinfo_op (inc);
20770 /* And clear all macinfo_entry in the range to avoid emitting them
20771 in the second pass. */
20772 for (i = idx;
20773 VEC_iterate (macinfo_entry, macinfo_table, i, cur)
20774 && i < idx + count;
20775 i++)
20777 cur->code = 0;
20778 free (CONST_CAST (char *, cur->info));
20779 cur->info = NULL;
20782 else
20784 *slot = inc;
20785 inc->lineno = htab_elements (*macinfo_htab);
20786 output_macinfo_op (inc);
20788 return count;
20791 /* Output macinfo section(s). */
20793 static void
20794 output_macinfo (void)
20796 unsigned i;
20797 unsigned long length = VEC_length (macinfo_entry, macinfo_table);
20798 macinfo_entry *ref;
20799 VEC (macinfo_entry, gc) *files = NULL;
20800 htab_t macinfo_htab = NULL;
20802 if (! length)
20803 return;
20805 /* output_macinfo* uses these interchangeably. */
20806 gcc_assert ((int) DW_MACINFO_define == (int) DW_MACRO_GNU_define
20807 && (int) DW_MACINFO_undef == (int) DW_MACRO_GNU_undef
20808 && (int) DW_MACINFO_start_file == (int) DW_MACRO_GNU_start_file
20809 && (int) DW_MACINFO_end_file == (int) DW_MACRO_GNU_end_file);
20811 /* For .debug_macro emit the section header. */
20812 if (!dwarf_strict)
20814 dw2_asm_output_data (2, 4, "DWARF macro version number");
20815 if (DWARF_OFFSET_SIZE == 8)
20816 dw2_asm_output_data (1, 3, "Flags: 64-bit, lineptr present");
20817 else
20818 dw2_asm_output_data (1, 2, "Flags: 32-bit, lineptr present");
20819 dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_line_section_label,
20820 debug_line_section, NULL);
20823 /* In the first loop, it emits the primary .debug_macinfo section
20824 and after each emitted op the macinfo_entry is cleared.
20825 If a longer range of define/undef ops can be optimized using
20826 DW_MACRO_GNU_transparent_include, the
20827 DW_MACRO_GNU_transparent_include op is emitted and kept in
20828 the vector before the first define/undef in the range and the
20829 whole range of define/undef ops is not emitted and kept. */
20830 for (i = 0; VEC_iterate (macinfo_entry, macinfo_table, i, ref); i++)
20832 switch (ref->code)
20834 case DW_MACINFO_start_file:
20835 VEC_safe_push (macinfo_entry, gc, files, ref);
20836 break;
20837 case DW_MACINFO_end_file:
20838 if (!VEC_empty (macinfo_entry, files))
20840 macinfo_entry *file = VEC_last (macinfo_entry, files);
20841 free (CONST_CAST (char *, file->info));
20842 VEC_pop (macinfo_entry, files);
20844 break;
20845 case DW_MACINFO_define:
20846 case DW_MACINFO_undef:
20847 if (!dwarf_strict
20848 && HAVE_COMDAT_GROUP
20849 && VEC_length (macinfo_entry, files) != 1
20850 && i > 0
20851 && i + 1 < length
20852 && VEC_index (macinfo_entry, macinfo_table, i - 1)->code == 0)
20854 unsigned count = optimize_macinfo_range (i, files, &macinfo_htab);
20855 if (count)
20857 i += count - 1;
20858 continue;
20861 break;
20862 case 0:
20863 /* A dummy entry may be inserted at the beginning to be able
20864 to optimize the whole block of predefined macros. */
20865 if (i == 0)
20866 continue;
20867 default:
20868 break;
20870 output_macinfo_op (ref);
20871 /* For DW_MACINFO_start_file ref->info has been copied into files
20872 vector. */
20873 if (ref->code != DW_MACINFO_start_file)
20874 free (CONST_CAST (char *, ref->info));
20875 ref->info = NULL;
20876 ref->code = 0;
20879 if (macinfo_htab == NULL)
20880 return;
20882 htab_delete (macinfo_htab);
20884 /* If any DW_MACRO_GNU_transparent_include were used, on those
20885 DW_MACRO_GNU_transparent_include entries terminate the
20886 current chain and switch to a new comdat .debug_macinfo
20887 section and emit the define/undef entries within it. */
20888 for (i = 0; VEC_iterate (macinfo_entry, macinfo_table, i, ref); i++)
20889 switch (ref->code)
20891 case 0:
20892 continue;
20893 case DW_MACRO_GNU_transparent_include:
20895 char label[MAX_ARTIFICIAL_LABEL_BYTES];
20896 tree comdat_key = get_identifier (ref->info);
20897 /* Terminate the previous .debug_macinfo section. */
20898 dw2_asm_output_data (1, 0, "End compilation unit");
20899 targetm.asm_out.named_section (DEBUG_MACRO_SECTION,
20900 SECTION_DEBUG
20901 | SECTION_LINKONCE,
20902 comdat_key);
20903 ASM_GENERATE_INTERNAL_LABEL (label,
20904 DEBUG_MACRO_SECTION_LABEL,
20905 ref->lineno);
20906 ASM_OUTPUT_LABEL (asm_out_file, label);
20907 ref->code = 0;
20908 free (CONST_CAST (char *, ref->info));
20909 ref->info = NULL;
20910 dw2_asm_output_data (2, 4, "DWARF macro version number");
20911 if (DWARF_OFFSET_SIZE == 8)
20912 dw2_asm_output_data (1, 1, "Flags: 64-bit");
20913 else
20914 dw2_asm_output_data (1, 0, "Flags: 32-bit");
20916 break;
20917 case DW_MACINFO_define:
20918 case DW_MACINFO_undef:
20919 output_macinfo_op (ref);
20920 ref->code = 0;
20921 free (CONST_CAST (char *, ref->info));
20922 ref->info = NULL;
20923 break;
20924 default:
20925 gcc_unreachable ();
20929 /* Set up for Dwarf output at the start of compilation. */
20931 static void
20932 dwarf2out_init (const char *filename ATTRIBUTE_UNUSED)
20934 /* Allocate the file_table. */
20935 file_table = htab_create_ggc (50, file_table_hash,
20936 file_table_eq, NULL);
20938 /* Allocate the decl_die_table. */
20939 decl_die_table = htab_create_ggc (10, decl_die_table_hash,
20940 decl_die_table_eq, NULL);
20942 /* Allocate the decl_loc_table. */
20943 decl_loc_table = htab_create_ggc (10, decl_loc_table_hash,
20944 decl_loc_table_eq, NULL);
20946 /* Allocate the cached_dw_loc_list_table. */
20947 cached_dw_loc_list_table
20948 = htab_create_ggc (10, cached_dw_loc_list_table_hash,
20949 cached_dw_loc_list_table_eq, NULL);
20951 /* Allocate the initial hunk of the decl_scope_table. */
20952 decl_scope_table = VEC_alloc (tree, gc, 256);
20954 /* Allocate the initial hunk of the abbrev_die_table. */
20955 abbrev_die_table = ggc_alloc_cleared_vec_dw_die_ref
20956 (ABBREV_DIE_TABLE_INCREMENT);
20957 abbrev_die_table_allocated = ABBREV_DIE_TABLE_INCREMENT;
20958 /* Zero-th entry is allocated, but unused. */
20959 abbrev_die_table_in_use = 1;
20961 /* Allocate the pubtypes and pubnames vectors. */
20962 pubname_table = VEC_alloc (pubname_entry, gc, 32);
20963 pubtype_table = VEC_alloc (pubname_entry, gc, 32);
20965 incomplete_types = VEC_alloc (tree, gc, 64);
20967 used_rtx_array = VEC_alloc (rtx, gc, 32);
20969 debug_info_section = get_section (DEBUG_INFO_SECTION,
20970 SECTION_DEBUG, NULL);
20971 debug_abbrev_section = get_section (DEBUG_ABBREV_SECTION,
20972 SECTION_DEBUG, NULL);
20973 debug_aranges_section = get_section (DEBUG_ARANGES_SECTION,
20974 SECTION_DEBUG, NULL);
20975 debug_macinfo_section = get_section (dwarf_strict
20976 ? DEBUG_MACINFO_SECTION
20977 : DEBUG_MACRO_SECTION,
20978 SECTION_DEBUG, NULL);
20979 debug_line_section = get_section (DEBUG_LINE_SECTION,
20980 SECTION_DEBUG, NULL);
20981 debug_loc_section = get_section (DEBUG_LOC_SECTION,
20982 SECTION_DEBUG, NULL);
20983 debug_pubnames_section = get_section (DEBUG_PUBNAMES_SECTION,
20984 SECTION_DEBUG, NULL);
20985 debug_pubtypes_section = get_section (DEBUG_PUBTYPES_SECTION,
20986 SECTION_DEBUG, NULL);
20987 debug_str_section = get_section (DEBUG_STR_SECTION,
20988 DEBUG_STR_SECTION_FLAGS, NULL);
20989 debug_ranges_section = get_section (DEBUG_RANGES_SECTION,
20990 SECTION_DEBUG, NULL);
20991 debug_frame_section = get_section (DEBUG_FRAME_SECTION,
20992 SECTION_DEBUG, NULL);
20994 ASM_GENERATE_INTERNAL_LABEL (text_end_label, TEXT_END_LABEL, 0);
20995 ASM_GENERATE_INTERNAL_LABEL (abbrev_section_label,
20996 DEBUG_ABBREV_SECTION_LABEL, 0);
20997 ASM_GENERATE_INTERNAL_LABEL (text_section_label, TEXT_SECTION_LABEL, 0);
20998 ASM_GENERATE_INTERNAL_LABEL (cold_text_section_label,
20999 COLD_TEXT_SECTION_LABEL, 0);
21000 ASM_GENERATE_INTERNAL_LABEL (cold_end_label, COLD_END_LABEL, 0);
21002 ASM_GENERATE_INTERNAL_LABEL (debug_info_section_label,
21003 DEBUG_INFO_SECTION_LABEL, 0);
21004 ASM_GENERATE_INTERNAL_LABEL (debug_line_section_label,
21005 DEBUG_LINE_SECTION_LABEL, 0);
21006 ASM_GENERATE_INTERNAL_LABEL (ranges_section_label,
21007 DEBUG_RANGES_SECTION_LABEL, 0);
21008 ASM_GENERATE_INTERNAL_LABEL (macinfo_section_label,
21009 dwarf_strict
21010 ? DEBUG_MACINFO_SECTION_LABEL
21011 : DEBUG_MACRO_SECTION_LABEL, 0);
21013 if (debug_info_level >= DINFO_LEVEL_VERBOSE)
21014 macinfo_table = VEC_alloc (macinfo_entry, gc, 64);
21016 switch_to_section (text_section);
21017 ASM_OUTPUT_LABEL (asm_out_file, text_section_label);
21019 /* Make sure the line number table for .text always exists. */
21020 text_section_line_info = new_line_info_table ();
21021 text_section_line_info->end_label = text_end_label;
21024 /* Called before cgraph_optimize starts outputtting functions, variables
21025 and toplevel asms into assembly. */
21027 static void
21028 dwarf2out_assembly_start (void)
21030 if (HAVE_GAS_CFI_SECTIONS_DIRECTIVE
21031 && dwarf2out_do_cfi_asm ()
21032 && (!(flag_unwind_tables || flag_exceptions)
21033 || targetm_common.except_unwind_info (&global_options) != UI_DWARF2))
21034 fprintf (asm_out_file, "\t.cfi_sections\t.debug_frame\n");
21037 /* A helper function for dwarf2out_finish called through
21038 htab_traverse. Emit one queued .debug_str string. */
21040 static int
21041 output_indirect_string (void **h, void *v ATTRIBUTE_UNUSED)
21043 struct indirect_string_node *node = (struct indirect_string_node *) *h;
21045 if (node->form == DW_FORM_strp)
21047 switch_to_section (debug_str_section);
21048 ASM_OUTPUT_LABEL (asm_out_file, node->label);
21049 assemble_string (node->str, strlen (node->str) + 1);
21052 return 1;
21055 #if ENABLE_ASSERT_CHECKING
21056 /* Verify that all marks are clear. */
21058 static void
21059 verify_marks_clear (dw_die_ref die)
21061 dw_die_ref c;
21063 gcc_assert (! die->die_mark);
21064 FOR_EACH_CHILD (die, c, verify_marks_clear (c));
21066 #endif /* ENABLE_ASSERT_CHECKING */
21068 /* Clear the marks for a die and its children.
21069 Be cool if the mark isn't set. */
21071 static void
21072 prune_unmark_dies (dw_die_ref die)
21074 dw_die_ref c;
21076 if (die->die_mark)
21077 die->die_mark = 0;
21078 FOR_EACH_CHILD (die, c, prune_unmark_dies (c));
21081 /* Given DIE that we're marking as used, find any other dies
21082 it references as attributes and mark them as used. */
21084 static void
21085 prune_unused_types_walk_attribs (dw_die_ref die)
21087 dw_attr_ref a;
21088 unsigned ix;
21090 FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a)
21092 if (a->dw_attr_val.val_class == dw_val_class_die_ref)
21094 /* A reference to another DIE.
21095 Make sure that it will get emitted.
21096 If it was broken out into a comdat group, don't follow it. */
21097 if (! use_debug_types
21098 || a->dw_attr == DW_AT_specification
21099 || a->dw_attr_val.v.val_die_ref.die->die_id.die_type_node == NULL)
21100 prune_unused_types_mark (a->dw_attr_val.v.val_die_ref.die, 1);
21102 /* Set the string's refcount to 0 so that prune_unused_types_mark
21103 accounts properly for it. */
21104 if (AT_class (a) == dw_val_class_str)
21105 a->dw_attr_val.v.val_str->refcount = 0;
21109 /* Mark the generic parameters and arguments children DIEs of DIE. */
21111 static void
21112 prune_unused_types_mark_generic_parms_dies (dw_die_ref die)
21114 dw_die_ref c;
21116 if (die == NULL || die->die_child == NULL)
21117 return;
21118 c = die->die_child;
21121 switch (c->die_tag)
21123 case DW_TAG_template_type_param:
21124 case DW_TAG_template_value_param:
21125 case DW_TAG_GNU_template_template_param:
21126 case DW_TAG_GNU_template_parameter_pack:
21127 prune_unused_types_mark (c, 1);
21128 break;
21129 default:
21130 break;
21132 c = c->die_sib;
21133 } while (c && c != die->die_child);
21136 /* Mark DIE as being used. If DOKIDS is true, then walk down
21137 to DIE's children. */
21139 static void
21140 prune_unused_types_mark (dw_die_ref die, int dokids)
21142 dw_die_ref c;
21144 if (die->die_mark == 0)
21146 /* We haven't done this node yet. Mark it as used. */
21147 die->die_mark = 1;
21148 /* If this is the DIE of a generic type instantiation,
21149 mark the children DIEs that describe its generic parms and
21150 args. */
21151 prune_unused_types_mark_generic_parms_dies (die);
21153 /* We also have to mark its parents as used.
21154 (But we don't want to mark our parents' kids due to this.) */
21155 if (die->die_parent)
21156 prune_unused_types_mark (die->die_parent, 0);
21158 /* Mark any referenced nodes. */
21159 prune_unused_types_walk_attribs (die);
21161 /* If this node is a specification,
21162 also mark the definition, if it exists. */
21163 if (get_AT_flag (die, DW_AT_declaration) && die->die_definition)
21164 prune_unused_types_mark (die->die_definition, 1);
21167 if (dokids && die->die_mark != 2)
21169 /* We need to walk the children, but haven't done so yet.
21170 Remember that we've walked the kids. */
21171 die->die_mark = 2;
21173 /* If this is an array type, we need to make sure our
21174 kids get marked, even if they're types. If we're
21175 breaking out types into comdat sections, do this
21176 for all type definitions. */
21177 if (die->die_tag == DW_TAG_array_type
21178 || (use_debug_types
21179 && is_type_die (die) && ! is_declaration_die (die)))
21180 FOR_EACH_CHILD (die, c, prune_unused_types_mark (c, 1));
21181 else
21182 FOR_EACH_CHILD (die, c, prune_unused_types_walk (c));
21186 /* For local classes, look if any static member functions were emitted
21187 and if so, mark them. */
21189 static void
21190 prune_unused_types_walk_local_classes (dw_die_ref die)
21192 dw_die_ref c;
21194 if (die->die_mark == 2)
21195 return;
21197 switch (die->die_tag)
21199 case DW_TAG_structure_type:
21200 case DW_TAG_union_type:
21201 case DW_TAG_class_type:
21202 break;
21204 case DW_TAG_subprogram:
21205 if (!get_AT_flag (die, DW_AT_declaration)
21206 || die->die_definition != NULL)
21207 prune_unused_types_mark (die, 1);
21208 return;
21210 default:
21211 return;
21214 /* Mark children. */
21215 FOR_EACH_CHILD (die, c, prune_unused_types_walk_local_classes (c));
21218 /* Walk the tree DIE and mark types that we actually use. */
21220 static void
21221 prune_unused_types_walk (dw_die_ref die)
21223 dw_die_ref c;
21225 /* Don't do anything if this node is already marked and
21226 children have been marked as well. */
21227 if (die->die_mark == 2)
21228 return;
21230 switch (die->die_tag)
21232 case DW_TAG_structure_type:
21233 case DW_TAG_union_type:
21234 case DW_TAG_class_type:
21235 if (die->die_perennial_p)
21236 break;
21238 for (c = die->die_parent; c; c = c->die_parent)
21239 if (c->die_tag == DW_TAG_subprogram)
21240 break;
21242 /* Finding used static member functions inside of classes
21243 is needed just for local classes, because for other classes
21244 static member function DIEs with DW_AT_specification
21245 are emitted outside of the DW_TAG_*_type. If we ever change
21246 it, we'd need to call this even for non-local classes. */
21247 if (c)
21248 prune_unused_types_walk_local_classes (die);
21250 /* It's a type node --- don't mark it. */
21251 return;
21253 case DW_TAG_const_type:
21254 case DW_TAG_packed_type:
21255 case DW_TAG_pointer_type:
21256 case DW_TAG_reference_type:
21257 case DW_TAG_rvalue_reference_type:
21258 case DW_TAG_volatile_type:
21259 case DW_TAG_typedef:
21260 case DW_TAG_array_type:
21261 case DW_TAG_interface_type:
21262 case DW_TAG_friend:
21263 case DW_TAG_variant_part:
21264 case DW_TAG_enumeration_type:
21265 case DW_TAG_subroutine_type:
21266 case DW_TAG_string_type:
21267 case DW_TAG_set_type:
21268 case DW_TAG_subrange_type:
21269 case DW_TAG_ptr_to_member_type:
21270 case DW_TAG_file_type:
21271 if (die->die_perennial_p)
21272 break;
21274 /* It's a type node --- don't mark it. */
21275 return;
21277 default:
21278 /* Mark everything else. */
21279 break;
21282 if (die->die_mark == 0)
21284 die->die_mark = 1;
21286 /* Now, mark any dies referenced from here. */
21287 prune_unused_types_walk_attribs (die);
21290 die->die_mark = 2;
21292 /* Mark children. */
21293 FOR_EACH_CHILD (die, c, prune_unused_types_walk (c));
21296 /* Increment the string counts on strings referred to from DIE's
21297 attributes. */
21299 static void
21300 prune_unused_types_update_strings (dw_die_ref die)
21302 dw_attr_ref a;
21303 unsigned ix;
21305 FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a)
21306 if (AT_class (a) == dw_val_class_str)
21308 struct indirect_string_node *s = a->dw_attr_val.v.val_str;
21309 s->refcount++;
21310 /* Avoid unnecessarily putting strings that are used less than
21311 twice in the hash table. */
21312 if (s->refcount
21313 == ((DEBUG_STR_SECTION_FLAGS & SECTION_MERGE) ? 1 : 2))
21315 void ** slot;
21316 slot = htab_find_slot_with_hash (debug_str_hash, s->str,
21317 htab_hash_string (s->str),
21318 INSERT);
21319 gcc_assert (*slot == NULL);
21320 *slot = s;
21325 /* Remove from the tree DIE any dies that aren't marked. */
21327 static void
21328 prune_unused_types_prune (dw_die_ref die)
21330 dw_die_ref c;
21332 gcc_assert (die->die_mark);
21333 prune_unused_types_update_strings (die);
21335 if (! die->die_child)
21336 return;
21338 c = die->die_child;
21339 do {
21340 dw_die_ref prev = c;
21341 for (c = c->die_sib; ! c->die_mark; c = c->die_sib)
21342 if (c == die->die_child)
21344 /* No marked children between 'prev' and the end of the list. */
21345 if (prev == c)
21346 /* No marked children at all. */
21347 die->die_child = NULL;
21348 else
21350 prev->die_sib = c->die_sib;
21351 die->die_child = prev;
21353 return;
21356 if (c != prev->die_sib)
21357 prev->die_sib = c;
21358 prune_unused_types_prune (c);
21359 } while (c != die->die_child);
21362 /* Remove dies representing declarations that we never use. */
21364 static void
21365 prune_unused_types (void)
21367 unsigned int i;
21368 limbo_die_node *node;
21369 comdat_type_node *ctnode;
21370 pubname_ref pub;
21371 dw_die_ref base_type;
21373 #if ENABLE_ASSERT_CHECKING
21374 /* All the marks should already be clear. */
21375 verify_marks_clear (comp_unit_die ());
21376 for (node = limbo_die_list; node; node = node->next)
21377 verify_marks_clear (node->die);
21378 for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next)
21379 verify_marks_clear (ctnode->root_die);
21380 #endif /* ENABLE_ASSERT_CHECKING */
21382 /* Mark types that are used in global variables. */
21383 premark_types_used_by_global_vars ();
21385 /* Set the mark on nodes that are actually used. */
21386 prune_unused_types_walk (comp_unit_die ());
21387 for (node = limbo_die_list; node; node = node->next)
21388 prune_unused_types_walk (node->die);
21389 for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next)
21391 prune_unused_types_walk (ctnode->root_die);
21392 prune_unused_types_mark (ctnode->type_die, 1);
21395 /* Also set the mark on nodes referenced from the
21396 pubname_table. */
21397 FOR_EACH_VEC_ELT (pubname_entry, pubname_table, i, pub)
21398 prune_unused_types_mark (pub->die, 1);
21399 for (i = 0; VEC_iterate (dw_die_ref, base_types, i, base_type); i++)
21400 prune_unused_types_mark (base_type, 1);
21402 if (debug_str_hash)
21403 htab_empty (debug_str_hash);
21404 prune_unused_types_prune (comp_unit_die ());
21405 for (node = limbo_die_list; node; node = node->next)
21406 prune_unused_types_prune (node->die);
21407 for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next)
21408 prune_unused_types_prune (ctnode->root_die);
21410 /* Leave the marks clear. */
21411 prune_unmark_dies (comp_unit_die ());
21412 for (node = limbo_die_list; node; node = node->next)
21413 prune_unmark_dies (node->die);
21414 for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next)
21415 prune_unmark_dies (ctnode->root_die);
21418 /* Set the parameter to true if there are any relative pathnames in
21419 the file table. */
21420 static int
21421 file_table_relative_p (void ** slot, void *param)
21423 bool *p = (bool *) param;
21424 struct dwarf_file_data *d = (struct dwarf_file_data *) *slot;
21425 if (!IS_ABSOLUTE_PATH (d->filename))
21427 *p = true;
21428 return 0;
21430 return 1;
21433 /* Routines to manipulate hash table of comdat type units. */
21435 static hashval_t
21436 htab_ct_hash (const void *of)
21438 hashval_t h;
21439 const comdat_type_node *const type_node = (const comdat_type_node *) of;
21441 memcpy (&h, type_node->signature, sizeof (h));
21442 return h;
21445 static int
21446 htab_ct_eq (const void *of1, const void *of2)
21448 const comdat_type_node *const type_node_1 = (const comdat_type_node *) of1;
21449 const comdat_type_node *const type_node_2 = (const comdat_type_node *) of2;
21451 return (! memcmp (type_node_1->signature, type_node_2->signature,
21452 DWARF_TYPE_SIGNATURE_SIZE));
21455 /* Move a DW_AT_{,MIPS_}linkage_name attribute just added to dw_die_ref
21456 to the location it would have been added, should we know its
21457 DECL_ASSEMBLER_NAME when we added other attributes. This will
21458 probably improve compactness of debug info, removing equivalent
21459 abbrevs, and hide any differences caused by deferring the
21460 computation of the assembler name, triggered by e.g. PCH. */
21462 static inline void
21463 move_linkage_attr (dw_die_ref die)
21465 unsigned ix = VEC_length (dw_attr_node, die->die_attr);
21466 dw_attr_node linkage = *VEC_index (dw_attr_node, die->die_attr, ix - 1);
21468 gcc_assert (linkage.dw_attr == DW_AT_linkage_name
21469 || linkage.dw_attr == DW_AT_MIPS_linkage_name);
21471 while (--ix > 0)
21473 dw_attr_node *prev = VEC_index (dw_attr_node, die->die_attr, ix - 1);
21475 if (prev->dw_attr == DW_AT_decl_line || prev->dw_attr == DW_AT_name)
21476 break;
21479 if (ix != VEC_length (dw_attr_node, die->die_attr) - 1)
21481 VEC_pop (dw_attr_node, die->die_attr);
21482 VEC_quick_insert (dw_attr_node, die->die_attr, ix, &linkage);
21486 /* Helper function for resolve_addr, mark DW_TAG_base_type nodes
21487 referenced from typed stack ops and count how often they are used. */
21489 static void
21490 mark_base_types (dw_loc_descr_ref loc)
21492 dw_die_ref base_type = NULL;
21494 for (; loc; loc = loc->dw_loc_next)
21496 switch (loc->dw_loc_opc)
21498 case DW_OP_GNU_regval_type:
21499 case DW_OP_GNU_deref_type:
21500 base_type = loc->dw_loc_oprnd2.v.val_die_ref.die;
21501 break;
21502 case DW_OP_GNU_convert:
21503 case DW_OP_GNU_reinterpret:
21504 if (loc->dw_loc_oprnd1.val_class == dw_val_class_unsigned_const)
21505 continue;
21506 /* FALLTHRU */
21507 case DW_OP_GNU_const_type:
21508 base_type = loc->dw_loc_oprnd1.v.val_die_ref.die;
21509 break;
21510 case DW_OP_GNU_entry_value:
21511 mark_base_types (loc->dw_loc_oprnd1.v.val_loc);
21512 continue;
21513 default:
21514 continue;
21516 gcc_assert (base_type->die_parent == comp_unit_die ());
21517 if (base_type->die_mark)
21518 base_type->die_mark++;
21519 else
21521 VEC_safe_push (dw_die_ref, heap, base_types, base_type);
21522 base_type->die_mark = 1;
21527 /* Comparison function for sorting marked base types. */
21529 static int
21530 base_type_cmp (const void *x, const void *y)
21532 dw_die_ref dx = *(const dw_die_ref *) x;
21533 dw_die_ref dy = *(const dw_die_ref *) y;
21534 unsigned int byte_size1, byte_size2;
21535 unsigned int encoding1, encoding2;
21536 if (dx->die_mark > dy->die_mark)
21537 return -1;
21538 if (dx->die_mark < dy->die_mark)
21539 return 1;
21540 byte_size1 = get_AT_unsigned (dx, DW_AT_byte_size);
21541 byte_size2 = get_AT_unsigned (dy, DW_AT_byte_size);
21542 if (byte_size1 < byte_size2)
21543 return 1;
21544 if (byte_size1 > byte_size2)
21545 return -1;
21546 encoding1 = get_AT_unsigned (dx, DW_AT_encoding);
21547 encoding2 = get_AT_unsigned (dy, DW_AT_encoding);
21548 if (encoding1 < encoding2)
21549 return 1;
21550 if (encoding1 > encoding2)
21551 return -1;
21552 return 0;
21555 /* Move base types marked by mark_base_types as early as possible
21556 in the CU, sorted by decreasing usage count both to make the
21557 uleb128 references as small as possible and to make sure they
21558 will have die_offset already computed by calc_die_sizes when
21559 sizes of typed stack loc ops is computed. */
21561 static void
21562 move_marked_base_types (void)
21564 unsigned int i;
21565 dw_die_ref base_type, die, c;
21567 if (VEC_empty (dw_die_ref, base_types))
21568 return;
21570 /* Sort by decreasing usage count, they will be added again in that
21571 order later on. */
21572 VEC_qsort (dw_die_ref, base_types, base_type_cmp);
21573 die = comp_unit_die ();
21574 c = die->die_child;
21577 dw_die_ref prev = c;
21578 c = c->die_sib;
21579 while (c->die_mark)
21581 remove_child_with_prev (c, prev);
21582 /* As base types got marked, there must be at least
21583 one node other than DW_TAG_base_type. */
21584 gcc_assert (c != c->die_sib);
21585 c = c->die_sib;
21588 while (c != die->die_child);
21589 gcc_assert (die->die_child);
21590 c = die->die_child;
21591 for (i = 0; VEC_iterate (dw_die_ref, base_types, i, base_type); i++)
21593 base_type->die_mark = 0;
21594 base_type->die_sib = c->die_sib;
21595 c->die_sib = base_type;
21596 c = base_type;
21600 /* Helper function for resolve_addr, attempt to resolve
21601 one CONST_STRING, return non-zero if not successful. Similarly verify that
21602 SYMBOL_REFs refer to variables emitted in the current CU. */
21604 static int
21605 resolve_one_addr (rtx *addr, void *data ATTRIBUTE_UNUSED)
21607 rtx rtl = *addr;
21609 if (GET_CODE (rtl) == CONST_STRING)
21611 size_t len = strlen (XSTR (rtl, 0)) + 1;
21612 tree t = build_string (len, XSTR (rtl, 0));
21613 tree tlen = size_int (len - 1);
21614 TREE_TYPE (t)
21615 = build_array_type (char_type_node, build_index_type (tlen));
21616 rtl = lookup_constant_def (t);
21617 if (!rtl || !MEM_P (rtl))
21618 return 1;
21619 rtl = XEXP (rtl, 0);
21620 VEC_safe_push (rtx, gc, used_rtx_array, rtl);
21621 *addr = rtl;
21622 return 0;
21625 if (GET_CODE (rtl) == SYMBOL_REF
21626 && SYMBOL_REF_DECL (rtl))
21628 if (TREE_CONSTANT_POOL_ADDRESS_P (rtl))
21630 if (!TREE_ASM_WRITTEN (DECL_INITIAL (SYMBOL_REF_DECL (rtl))))
21631 return 1;
21633 else if (!TREE_ASM_WRITTEN (SYMBOL_REF_DECL (rtl)))
21634 return 1;
21637 if (GET_CODE (rtl) == CONST
21638 && for_each_rtx (&XEXP (rtl, 0), resolve_one_addr, NULL))
21639 return 1;
21641 return 0;
21644 /* Helper function for resolve_addr, handle one location
21645 expression, return false if at least one CONST_STRING or SYMBOL_REF in
21646 the location list couldn't be resolved. */
21648 static bool
21649 resolve_addr_in_expr (dw_loc_descr_ref loc)
21651 dw_loc_descr_ref keep = NULL;
21652 for (; loc; loc = loc->dw_loc_next)
21653 switch (loc->dw_loc_opc)
21655 case DW_OP_addr:
21656 if (resolve_one_addr (&loc->dw_loc_oprnd1.v.val_addr, NULL))
21657 return false;
21658 break;
21659 case DW_OP_const4u:
21660 case DW_OP_const8u:
21661 if (loc->dtprel
21662 && resolve_one_addr (&loc->dw_loc_oprnd1.v.val_addr, NULL))
21663 return false;
21664 break;
21665 case DW_OP_plus_uconst:
21666 if (size_of_loc_descr (loc)
21667 > size_of_int_loc_descriptor (loc->dw_loc_oprnd1.v.val_unsigned)
21669 && loc->dw_loc_oprnd1.v.val_unsigned > 0)
21671 dw_loc_descr_ref repl
21672 = int_loc_descriptor (loc->dw_loc_oprnd1.v.val_unsigned);
21673 add_loc_descr (&repl, new_loc_descr (DW_OP_plus, 0, 0));
21674 add_loc_descr (&repl, loc->dw_loc_next);
21675 *loc = *repl;
21677 break;
21678 case DW_OP_implicit_value:
21679 if (loc->dw_loc_oprnd2.val_class == dw_val_class_addr
21680 && resolve_one_addr (&loc->dw_loc_oprnd2.v.val_addr, NULL))
21681 return false;
21682 break;
21683 case DW_OP_GNU_implicit_pointer:
21684 case DW_OP_GNU_parameter_ref:
21685 if (loc->dw_loc_oprnd1.val_class == dw_val_class_decl_ref)
21687 dw_die_ref ref
21688 = lookup_decl_die (loc->dw_loc_oprnd1.v.val_decl_ref);
21689 if (ref == NULL)
21690 return false;
21691 loc->dw_loc_oprnd1.val_class = dw_val_class_die_ref;
21692 loc->dw_loc_oprnd1.v.val_die_ref.die = ref;
21693 loc->dw_loc_oprnd1.v.val_die_ref.external = 0;
21695 break;
21696 case DW_OP_GNU_const_type:
21697 case DW_OP_GNU_regval_type:
21698 case DW_OP_GNU_deref_type:
21699 case DW_OP_GNU_convert:
21700 case DW_OP_GNU_reinterpret:
21701 while (loc->dw_loc_next
21702 && loc->dw_loc_next->dw_loc_opc == DW_OP_GNU_convert)
21704 dw_die_ref base1, base2;
21705 unsigned enc1, enc2, size1, size2;
21706 if (loc->dw_loc_opc == DW_OP_GNU_regval_type
21707 || loc->dw_loc_opc == DW_OP_GNU_deref_type)
21708 base1 = loc->dw_loc_oprnd2.v.val_die_ref.die;
21709 else if (loc->dw_loc_oprnd1.val_class
21710 == dw_val_class_unsigned_const)
21711 break;
21712 else
21713 base1 = loc->dw_loc_oprnd1.v.val_die_ref.die;
21714 if (loc->dw_loc_next->dw_loc_oprnd1.val_class
21715 == dw_val_class_unsigned_const)
21716 break;
21717 base2 = loc->dw_loc_next->dw_loc_oprnd1.v.val_die_ref.die;
21718 gcc_assert (base1->die_tag == DW_TAG_base_type
21719 && base2->die_tag == DW_TAG_base_type);
21720 enc1 = get_AT_unsigned (base1, DW_AT_encoding);
21721 enc2 = get_AT_unsigned (base2, DW_AT_encoding);
21722 size1 = get_AT_unsigned (base1, DW_AT_byte_size);
21723 size2 = get_AT_unsigned (base2, DW_AT_byte_size);
21724 if (size1 == size2
21725 && (((enc1 == DW_ATE_unsigned || enc1 == DW_ATE_signed)
21726 && (enc2 == DW_ATE_unsigned || enc2 == DW_ATE_signed)
21727 && loc != keep)
21728 || enc1 == enc2))
21730 /* Optimize away next DW_OP_GNU_convert after
21731 adjusting LOC's base type die reference. */
21732 if (loc->dw_loc_opc == DW_OP_GNU_regval_type
21733 || loc->dw_loc_opc == DW_OP_GNU_deref_type)
21734 loc->dw_loc_oprnd2.v.val_die_ref.die = base2;
21735 else
21736 loc->dw_loc_oprnd1.v.val_die_ref.die = base2;
21737 loc->dw_loc_next = loc->dw_loc_next->dw_loc_next;
21738 continue;
21740 /* Don't change integer DW_OP_GNU_convert after e.g. floating
21741 point typed stack entry. */
21742 else if (enc1 != DW_ATE_unsigned && enc1 != DW_ATE_signed)
21743 keep = loc->dw_loc_next;
21744 break;
21746 break;
21747 default:
21748 break;
21750 return true;
21753 /* Resolve DW_OP_addr and DW_AT_const_value CONST_STRING arguments to
21754 an address in .rodata section if the string literal is emitted there,
21755 or remove the containing location list or replace DW_AT_const_value
21756 with DW_AT_location and empty location expression, if it isn't found
21757 in .rodata. Similarly for SYMBOL_REFs, keep only those that refer
21758 to something that has been emitted in the current CU. */
21760 static void
21761 resolve_addr (dw_die_ref die)
21763 dw_die_ref c;
21764 dw_attr_ref a;
21765 dw_loc_list_ref *curr, *start, loc;
21766 unsigned ix;
21768 FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a)
21769 switch (AT_class (a))
21771 case dw_val_class_loc_list:
21772 start = curr = AT_loc_list_ptr (a);
21773 loc = *curr;
21774 gcc_assert (loc);
21775 /* The same list can be referenced more than once. See if we have
21776 already recorded the result from a previous pass. */
21777 if (loc->replaced)
21778 *curr = loc->dw_loc_next;
21779 else if (!loc->resolved_addr)
21781 /* As things stand, we do not expect or allow one die to
21782 reference a suffix of another die's location list chain.
21783 References must be identical or completely separate.
21784 There is therefore no need to cache the result of this
21785 pass on any list other than the first; doing so
21786 would lead to unnecessary writes. */
21787 while (*curr)
21789 gcc_assert (!(*curr)->replaced && !(*curr)->resolved_addr);
21790 if (!resolve_addr_in_expr ((*curr)->expr))
21792 dw_loc_list_ref next = (*curr)->dw_loc_next;
21793 if (next && (*curr)->ll_symbol)
21795 gcc_assert (!next->ll_symbol);
21796 next->ll_symbol = (*curr)->ll_symbol;
21798 *curr = next;
21800 else
21802 mark_base_types ((*curr)->expr);
21803 curr = &(*curr)->dw_loc_next;
21806 if (loc == *start)
21807 loc->resolved_addr = 1;
21808 else
21810 loc->replaced = 1;
21811 loc->dw_loc_next = *start;
21814 if (!*start)
21816 remove_AT (die, a->dw_attr);
21817 ix--;
21819 break;
21820 case dw_val_class_loc:
21822 dw_loc_descr_ref l = AT_loc (a);
21823 /* For -gdwarf-2 don't attempt to optimize
21824 DW_AT_data_member_location containing
21825 DW_OP_plus_uconst - older consumers might
21826 rely on it being that op instead of a more complex,
21827 but shorter, location description. */
21828 if ((dwarf_version > 2
21829 || a->dw_attr != DW_AT_data_member_location
21830 || l == NULL
21831 || l->dw_loc_opc != DW_OP_plus_uconst
21832 || l->dw_loc_next != NULL)
21833 && !resolve_addr_in_expr (l))
21835 remove_AT (die, a->dw_attr);
21836 ix--;
21838 else
21839 mark_base_types (l);
21841 break;
21842 case dw_val_class_addr:
21843 if (a->dw_attr == DW_AT_const_value
21844 && resolve_one_addr (&a->dw_attr_val.v.val_addr, NULL))
21846 remove_AT (die, a->dw_attr);
21847 ix--;
21849 if (die->die_tag == DW_TAG_GNU_call_site
21850 && a->dw_attr == DW_AT_abstract_origin)
21852 tree tdecl = SYMBOL_REF_DECL (a->dw_attr_val.v.val_addr);
21853 dw_die_ref tdie = lookup_decl_die (tdecl);
21854 if (tdie == NULL
21855 && DECL_EXTERNAL (tdecl)
21856 && DECL_ABSTRACT_ORIGIN (tdecl) == NULL_TREE)
21858 force_decl_die (tdecl);
21859 tdie = lookup_decl_die (tdecl);
21861 if (tdie)
21863 a->dw_attr_val.val_class = dw_val_class_die_ref;
21864 a->dw_attr_val.v.val_die_ref.die = tdie;
21865 a->dw_attr_val.v.val_die_ref.external = 0;
21867 else
21869 remove_AT (die, a->dw_attr);
21870 ix--;
21873 break;
21874 default:
21875 break;
21878 FOR_EACH_CHILD (die, c, resolve_addr (c));
21881 /* Helper routines for optimize_location_lists.
21882 This pass tries to share identical local lists in .debug_loc
21883 section. */
21885 /* Iteratively hash operands of LOC opcode. */
21887 static inline hashval_t
21888 hash_loc_operands (dw_loc_descr_ref loc, hashval_t hash)
21890 dw_val_ref val1 = &loc->dw_loc_oprnd1;
21891 dw_val_ref val2 = &loc->dw_loc_oprnd2;
21893 switch (loc->dw_loc_opc)
21895 case DW_OP_const4u:
21896 case DW_OP_const8u:
21897 if (loc->dtprel)
21898 goto hash_addr;
21899 /* FALLTHRU */
21900 case DW_OP_const1u:
21901 case DW_OP_const1s:
21902 case DW_OP_const2u:
21903 case DW_OP_const2s:
21904 case DW_OP_const4s:
21905 case DW_OP_const8s:
21906 case DW_OP_constu:
21907 case DW_OP_consts:
21908 case DW_OP_pick:
21909 case DW_OP_plus_uconst:
21910 case DW_OP_breg0:
21911 case DW_OP_breg1:
21912 case DW_OP_breg2:
21913 case DW_OP_breg3:
21914 case DW_OP_breg4:
21915 case DW_OP_breg5:
21916 case DW_OP_breg6:
21917 case DW_OP_breg7:
21918 case DW_OP_breg8:
21919 case DW_OP_breg9:
21920 case DW_OP_breg10:
21921 case DW_OP_breg11:
21922 case DW_OP_breg12:
21923 case DW_OP_breg13:
21924 case DW_OP_breg14:
21925 case DW_OP_breg15:
21926 case DW_OP_breg16:
21927 case DW_OP_breg17:
21928 case DW_OP_breg18:
21929 case DW_OP_breg19:
21930 case DW_OP_breg20:
21931 case DW_OP_breg21:
21932 case DW_OP_breg22:
21933 case DW_OP_breg23:
21934 case DW_OP_breg24:
21935 case DW_OP_breg25:
21936 case DW_OP_breg26:
21937 case DW_OP_breg27:
21938 case DW_OP_breg28:
21939 case DW_OP_breg29:
21940 case DW_OP_breg30:
21941 case DW_OP_breg31:
21942 case DW_OP_regx:
21943 case DW_OP_fbreg:
21944 case DW_OP_piece:
21945 case DW_OP_deref_size:
21946 case DW_OP_xderef_size:
21947 hash = iterative_hash_object (val1->v.val_int, hash);
21948 break;
21949 case DW_OP_skip:
21950 case DW_OP_bra:
21952 int offset;
21954 gcc_assert (val1->val_class == dw_val_class_loc);
21955 offset = val1->v.val_loc->dw_loc_addr - (loc->dw_loc_addr + 3);
21956 hash = iterative_hash_object (offset, hash);
21958 break;
21959 case DW_OP_implicit_value:
21960 hash = iterative_hash_object (val1->v.val_unsigned, hash);
21961 switch (val2->val_class)
21963 case dw_val_class_const:
21964 hash = iterative_hash_object (val2->v.val_int, hash);
21965 break;
21966 case dw_val_class_vec:
21968 unsigned int elt_size = val2->v.val_vec.elt_size;
21969 unsigned int len = val2->v.val_vec.length;
21971 hash = iterative_hash_object (elt_size, hash);
21972 hash = iterative_hash_object (len, hash);
21973 hash = iterative_hash (val2->v.val_vec.array,
21974 len * elt_size, hash);
21976 break;
21977 case dw_val_class_const_double:
21978 hash = iterative_hash_object (val2->v.val_double.low, hash);
21979 hash = iterative_hash_object (val2->v.val_double.high, hash);
21980 break;
21981 case dw_val_class_addr:
21982 hash = iterative_hash_rtx (val2->v.val_addr, hash);
21983 break;
21984 default:
21985 gcc_unreachable ();
21987 break;
21988 case DW_OP_bregx:
21989 case DW_OP_bit_piece:
21990 hash = iterative_hash_object (val1->v.val_int, hash);
21991 hash = iterative_hash_object (val2->v.val_int, hash);
21992 break;
21993 case DW_OP_addr:
21994 hash_addr:
21995 if (loc->dtprel)
21997 unsigned char dtprel = 0xd1;
21998 hash = iterative_hash_object (dtprel, hash);
22000 hash = iterative_hash_rtx (val1->v.val_addr, hash);
22001 break;
22002 case DW_OP_GNU_implicit_pointer:
22003 hash = iterative_hash_object (val2->v.val_int, hash);
22004 break;
22005 case DW_OP_GNU_entry_value:
22006 hash = hash_loc_operands (val1->v.val_loc, hash);
22007 break;
22008 case DW_OP_GNU_regval_type:
22009 case DW_OP_GNU_deref_type:
22011 unsigned int byte_size
22012 = get_AT_unsigned (val2->v.val_die_ref.die, DW_AT_byte_size);
22013 unsigned int encoding
22014 = get_AT_unsigned (val2->v.val_die_ref.die, DW_AT_encoding);
22015 hash = iterative_hash_object (val1->v.val_int, hash);
22016 hash = iterative_hash_object (byte_size, hash);
22017 hash = iterative_hash_object (encoding, hash);
22019 break;
22020 case DW_OP_GNU_convert:
22021 case DW_OP_GNU_reinterpret:
22022 if (val1->val_class == dw_val_class_unsigned_const)
22024 hash = iterative_hash_object (val1->v.val_unsigned, hash);
22025 break;
22027 /* FALLTHRU */
22028 case DW_OP_GNU_const_type:
22030 unsigned int byte_size
22031 = get_AT_unsigned (val1->v.val_die_ref.die, DW_AT_byte_size);
22032 unsigned int encoding
22033 = get_AT_unsigned (val1->v.val_die_ref.die, DW_AT_encoding);
22034 hash = iterative_hash_object (byte_size, hash);
22035 hash = iterative_hash_object (encoding, hash);
22036 if (loc->dw_loc_opc != DW_OP_GNU_const_type)
22037 break;
22038 hash = iterative_hash_object (val2->val_class, hash);
22039 switch (val2->val_class)
22041 case dw_val_class_const:
22042 hash = iterative_hash_object (val2->v.val_int, hash);
22043 break;
22044 case dw_val_class_vec:
22046 unsigned int elt_size = val2->v.val_vec.elt_size;
22047 unsigned int len = val2->v.val_vec.length;
22049 hash = iterative_hash_object (elt_size, hash);
22050 hash = iterative_hash_object (len, hash);
22051 hash = iterative_hash (val2->v.val_vec.array,
22052 len * elt_size, hash);
22054 break;
22055 case dw_val_class_const_double:
22056 hash = iterative_hash_object (val2->v.val_double.low, hash);
22057 hash = iterative_hash_object (val2->v.val_double.high, hash);
22058 break;
22059 default:
22060 gcc_unreachable ();
22063 break;
22065 default:
22066 /* Other codes have no operands. */
22067 break;
22069 return hash;
22072 /* Iteratively hash the whole DWARF location expression LOC. */
22074 static inline hashval_t
22075 hash_locs (dw_loc_descr_ref loc, hashval_t hash)
22077 dw_loc_descr_ref l;
22078 bool sizes_computed = false;
22079 /* Compute sizes, so that DW_OP_skip/DW_OP_bra can be checksummed. */
22080 size_of_locs (loc);
22082 for (l = loc; l != NULL; l = l->dw_loc_next)
22084 enum dwarf_location_atom opc = l->dw_loc_opc;
22085 hash = iterative_hash_object (opc, hash);
22086 if ((opc == DW_OP_skip || opc == DW_OP_bra) && !sizes_computed)
22088 size_of_locs (loc);
22089 sizes_computed = true;
22091 hash = hash_loc_operands (l, hash);
22093 return hash;
22096 /* Compute hash of the whole location list LIST_HEAD. */
22098 static inline void
22099 hash_loc_list (dw_loc_list_ref list_head)
22101 dw_loc_list_ref curr = list_head;
22102 hashval_t hash = 0;
22104 for (curr = list_head; curr != NULL; curr = curr->dw_loc_next)
22106 hash = iterative_hash (curr->begin, strlen (curr->begin) + 1, hash);
22107 hash = iterative_hash (curr->end, strlen (curr->end) + 1, hash);
22108 if (curr->section)
22109 hash = iterative_hash (curr->section, strlen (curr->section) + 1,
22110 hash);
22111 hash = hash_locs (curr->expr, hash);
22113 list_head->hash = hash;
22116 /* Return true if X and Y opcodes have the same operands. */
22118 static inline bool
22119 compare_loc_operands (dw_loc_descr_ref x, dw_loc_descr_ref y)
22121 dw_val_ref valx1 = &x->dw_loc_oprnd1;
22122 dw_val_ref valx2 = &x->dw_loc_oprnd2;
22123 dw_val_ref valy1 = &y->dw_loc_oprnd1;
22124 dw_val_ref valy2 = &y->dw_loc_oprnd2;
22126 switch (x->dw_loc_opc)
22128 case DW_OP_const4u:
22129 case DW_OP_const8u:
22130 if (x->dtprel)
22131 goto hash_addr;
22132 /* FALLTHRU */
22133 case DW_OP_const1u:
22134 case DW_OP_const1s:
22135 case DW_OP_const2u:
22136 case DW_OP_const2s:
22137 case DW_OP_const4s:
22138 case DW_OP_const8s:
22139 case DW_OP_constu:
22140 case DW_OP_consts:
22141 case DW_OP_pick:
22142 case DW_OP_plus_uconst:
22143 case DW_OP_breg0:
22144 case DW_OP_breg1:
22145 case DW_OP_breg2:
22146 case DW_OP_breg3:
22147 case DW_OP_breg4:
22148 case DW_OP_breg5:
22149 case DW_OP_breg6:
22150 case DW_OP_breg7:
22151 case DW_OP_breg8:
22152 case DW_OP_breg9:
22153 case DW_OP_breg10:
22154 case DW_OP_breg11:
22155 case DW_OP_breg12:
22156 case DW_OP_breg13:
22157 case DW_OP_breg14:
22158 case DW_OP_breg15:
22159 case DW_OP_breg16:
22160 case DW_OP_breg17:
22161 case DW_OP_breg18:
22162 case DW_OP_breg19:
22163 case DW_OP_breg20:
22164 case DW_OP_breg21:
22165 case DW_OP_breg22:
22166 case DW_OP_breg23:
22167 case DW_OP_breg24:
22168 case DW_OP_breg25:
22169 case DW_OP_breg26:
22170 case DW_OP_breg27:
22171 case DW_OP_breg28:
22172 case DW_OP_breg29:
22173 case DW_OP_breg30:
22174 case DW_OP_breg31:
22175 case DW_OP_regx:
22176 case DW_OP_fbreg:
22177 case DW_OP_piece:
22178 case DW_OP_deref_size:
22179 case DW_OP_xderef_size:
22180 return valx1->v.val_int == valy1->v.val_int;
22181 case DW_OP_skip:
22182 case DW_OP_bra:
22183 gcc_assert (valx1->val_class == dw_val_class_loc
22184 && valy1->val_class == dw_val_class_loc
22185 && x->dw_loc_addr == y->dw_loc_addr);
22186 return valx1->v.val_loc->dw_loc_addr == valy1->v.val_loc->dw_loc_addr;
22187 case DW_OP_implicit_value:
22188 if (valx1->v.val_unsigned != valy1->v.val_unsigned
22189 || valx2->val_class != valy2->val_class)
22190 return false;
22191 switch (valx2->val_class)
22193 case dw_val_class_const:
22194 return valx2->v.val_int == valy2->v.val_int;
22195 case dw_val_class_vec:
22196 return valx2->v.val_vec.elt_size == valy2->v.val_vec.elt_size
22197 && valx2->v.val_vec.length == valy2->v.val_vec.length
22198 && memcmp (valx2->v.val_vec.array, valy2->v.val_vec.array,
22199 valx2->v.val_vec.elt_size
22200 * valx2->v.val_vec.length) == 0;
22201 case dw_val_class_const_double:
22202 return valx2->v.val_double.low == valy2->v.val_double.low
22203 && valx2->v.val_double.high == valy2->v.val_double.high;
22204 case dw_val_class_addr:
22205 return rtx_equal_p (valx2->v.val_addr, valy2->v.val_addr);
22206 default:
22207 gcc_unreachable ();
22209 case DW_OP_bregx:
22210 case DW_OP_bit_piece:
22211 return valx1->v.val_int == valy1->v.val_int
22212 && valx2->v.val_int == valy2->v.val_int;
22213 case DW_OP_addr:
22214 hash_addr:
22215 return rtx_equal_p (valx1->v.val_addr, valy1->v.val_addr);
22216 case DW_OP_GNU_implicit_pointer:
22217 return valx1->val_class == dw_val_class_die_ref
22218 && valx1->val_class == valy1->val_class
22219 && valx1->v.val_die_ref.die == valy1->v.val_die_ref.die
22220 && valx2->v.val_int == valy2->v.val_int;
22221 case DW_OP_GNU_entry_value:
22222 return compare_loc_operands (valx1->v.val_loc, valy1->v.val_loc);
22223 case DW_OP_GNU_const_type:
22224 if (valx1->v.val_die_ref.die != valy1->v.val_die_ref.die
22225 || valx2->val_class != valy2->val_class)
22226 return false;
22227 switch (valx2->val_class)
22229 case dw_val_class_const:
22230 return valx2->v.val_int == valy2->v.val_int;
22231 case dw_val_class_vec:
22232 return valx2->v.val_vec.elt_size == valy2->v.val_vec.elt_size
22233 && valx2->v.val_vec.length == valy2->v.val_vec.length
22234 && memcmp (valx2->v.val_vec.array, valy2->v.val_vec.array,
22235 valx2->v.val_vec.elt_size
22236 * valx2->v.val_vec.length) == 0;
22237 case dw_val_class_const_double:
22238 return valx2->v.val_double.low == valy2->v.val_double.low
22239 && valx2->v.val_double.high == valy2->v.val_double.high;
22240 default:
22241 gcc_unreachable ();
22243 case DW_OP_GNU_regval_type:
22244 case DW_OP_GNU_deref_type:
22245 return valx1->v.val_int == valy1->v.val_int
22246 && valx2->v.val_die_ref.die == valy2->v.val_die_ref.die;
22247 case DW_OP_GNU_convert:
22248 case DW_OP_GNU_reinterpret:
22249 if (valx1->val_class != valy1->val_class)
22250 return false;
22251 if (valx1->val_class == dw_val_class_unsigned_const)
22252 return valx1->v.val_unsigned == valy1->v.val_unsigned;
22253 return valx1->v.val_die_ref.die == valy1->v.val_die_ref.die;
22254 case DW_OP_GNU_parameter_ref:
22255 return valx1->val_class == dw_val_class_die_ref
22256 && valx1->val_class == valy1->val_class
22257 && valx1->v.val_die_ref.die == valy1->v.val_die_ref.die;
22258 default:
22259 /* Other codes have no operands. */
22260 return true;
22264 /* Return true if DWARF location expressions X and Y are the same. */
22266 static inline bool
22267 compare_locs (dw_loc_descr_ref x, dw_loc_descr_ref y)
22269 for (; x != NULL && y != NULL; x = x->dw_loc_next, y = y->dw_loc_next)
22270 if (x->dw_loc_opc != y->dw_loc_opc
22271 || x->dtprel != y->dtprel
22272 || !compare_loc_operands (x, y))
22273 break;
22274 return x == NULL && y == NULL;
22277 /* Return precomputed hash of location list X. */
22279 static hashval_t
22280 loc_list_hash (const void *x)
22282 return ((const struct dw_loc_list_struct *) x)->hash;
22285 /* Return 1 if location lists X and Y are the same. */
22287 static int
22288 loc_list_eq (const void *x, const void *y)
22290 const struct dw_loc_list_struct *a = (const struct dw_loc_list_struct *) x;
22291 const struct dw_loc_list_struct *b = (const struct dw_loc_list_struct *) y;
22292 if (a == b)
22293 return 1;
22294 if (a->hash != b->hash)
22295 return 0;
22296 for (; a != NULL && b != NULL; a = a->dw_loc_next, b = b->dw_loc_next)
22297 if (strcmp (a->begin, b->begin) != 0
22298 || strcmp (a->end, b->end) != 0
22299 || (a->section == NULL) != (b->section == NULL)
22300 || (a->section && strcmp (a->section, b->section) != 0)
22301 || !compare_locs (a->expr, b->expr))
22302 break;
22303 return a == NULL && b == NULL;
22306 /* Recursively optimize location lists referenced from DIE
22307 children and share them whenever possible. */
22309 static void
22310 optimize_location_lists_1 (dw_die_ref die, htab_t htab)
22312 dw_die_ref c;
22313 dw_attr_ref a;
22314 unsigned ix;
22315 void **slot;
22317 FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a)
22318 if (AT_class (a) == dw_val_class_loc_list)
22320 dw_loc_list_ref list = AT_loc_list (a);
22321 /* TODO: perform some optimizations here, before hashing
22322 it and storing into the hash table. */
22323 hash_loc_list (list);
22324 slot = htab_find_slot_with_hash (htab, list, list->hash,
22325 INSERT);
22326 if (*slot == NULL)
22327 *slot = (void *) list;
22328 else
22329 a->dw_attr_val.v.val_loc_list = (dw_loc_list_ref) *slot;
22332 FOR_EACH_CHILD (die, c, optimize_location_lists_1 (c, htab));
22335 /* Optimize location lists referenced from DIE
22336 children and share them whenever possible. */
22338 static void
22339 optimize_location_lists (dw_die_ref die)
22341 htab_t htab = htab_create (500, loc_list_hash, loc_list_eq, NULL);
22342 optimize_location_lists_1 (die, htab);
22343 htab_delete (htab);
22346 /* Output stuff that dwarf requires at the end of every file,
22347 and generate the DWARF-2 debugging info. */
22349 static void
22350 dwarf2out_finish (const char *filename)
22352 limbo_die_node *node, *next_node;
22353 comdat_type_node *ctnode;
22354 htab_t comdat_type_table;
22355 unsigned int i;
22357 /* PCH might result in DW_AT_producer string being restored from the
22358 header compilation, fix it up if needed. */
22359 dw_attr_ref producer = get_AT (comp_unit_die (), DW_AT_producer);
22360 if (strcmp (AT_string (producer), producer_string) != 0)
22362 struct indirect_string_node *node = find_AT_string (producer_string);
22363 producer->dw_attr_val.v.val_str = node;
22366 gen_scheduled_generic_parms_dies ();
22367 gen_remaining_tmpl_value_param_die_attribute ();
22369 /* Add the name for the main input file now. We delayed this from
22370 dwarf2out_init to avoid complications with PCH. */
22371 add_name_attribute (comp_unit_die (), remap_debug_filename (filename));
22372 if (!IS_ABSOLUTE_PATH (filename))
22373 add_comp_dir_attribute (comp_unit_die ());
22374 else if (get_AT (comp_unit_die (), DW_AT_comp_dir) == NULL)
22376 bool p = false;
22377 htab_traverse (file_table, file_table_relative_p, &p);
22378 if (p)
22379 add_comp_dir_attribute (comp_unit_die ());
22382 for (i = 0; i < VEC_length (deferred_locations, deferred_locations_list); i++)
22384 add_location_or_const_value_attribute (
22385 VEC_index (deferred_locations, deferred_locations_list, i)->die,
22386 VEC_index (deferred_locations, deferred_locations_list, i)->variable,
22387 false,
22388 DW_AT_location);
22391 /* Traverse the limbo die list, and add parent/child links. The only
22392 dies without parents that should be here are concrete instances of
22393 inline functions, and the comp_unit_die. We can ignore the comp_unit_die.
22394 For concrete instances, we can get the parent die from the abstract
22395 instance. */
22396 for (node = limbo_die_list; node; node = next_node)
22398 dw_die_ref die = node->die;
22399 next_node = node->next;
22401 if (die->die_parent == NULL)
22403 dw_die_ref origin = get_AT_ref (die, DW_AT_abstract_origin);
22405 if (origin && origin->die_parent)
22406 add_child_die (origin->die_parent, die);
22407 else if (is_cu_die (die))
22409 else if (seen_error ())
22410 /* It's OK to be confused by errors in the input. */
22411 add_child_die (comp_unit_die (), die);
22412 else
22414 /* In certain situations, the lexical block containing a
22415 nested function can be optimized away, which results
22416 in the nested function die being orphaned. Likewise
22417 with the return type of that nested function. Force
22418 this to be a child of the containing function.
22420 It may happen that even the containing function got fully
22421 inlined and optimized out. In that case we are lost and
22422 assign the empty child. This should not be big issue as
22423 the function is likely unreachable too. */
22424 tree context = NULL_TREE;
22426 gcc_assert (node->created_for);
22428 if (DECL_P (node->created_for))
22429 context = DECL_CONTEXT (node->created_for);
22430 else if (TYPE_P (node->created_for))
22431 context = TYPE_CONTEXT (node->created_for);
22433 gcc_assert (context
22434 && (TREE_CODE (context) == FUNCTION_DECL
22435 || TREE_CODE (context) == NAMESPACE_DECL));
22437 origin = lookup_decl_die (context);
22438 if (origin)
22439 add_child_die (origin, die);
22440 else
22441 add_child_die (comp_unit_die (), die);
22446 limbo_die_list = NULL;
22448 #if ENABLE_ASSERT_CHECKING
22450 dw_die_ref die = comp_unit_die (), c;
22451 FOR_EACH_CHILD (die, c, gcc_assert (! c->die_mark));
22453 #endif
22454 resolve_addr (comp_unit_die ());
22455 move_marked_base_types ();
22457 for (node = deferred_asm_name; node; node = node->next)
22459 tree decl = node->created_for;
22460 if (DECL_ASSEMBLER_NAME (decl) != DECL_NAME (decl))
22462 add_linkage_attr (node->die, decl);
22463 move_linkage_attr (node->die);
22467 deferred_asm_name = NULL;
22469 /* Walk through the list of incomplete types again, trying once more to
22470 emit full debugging info for them. */
22471 retry_incomplete_types ();
22473 if (flag_eliminate_unused_debug_types)
22474 prune_unused_types ();
22476 /* Generate separate CUs for each of the include files we've seen.
22477 They will go into limbo_die_list. */
22478 if (flag_eliminate_dwarf2_dups && ! use_debug_types)
22479 break_out_includes (comp_unit_die ());
22481 /* Generate separate COMDAT sections for type DIEs. */
22482 if (use_debug_types)
22484 break_out_comdat_types (comp_unit_die ());
22486 /* Each new type_unit DIE was added to the limbo die list when created.
22487 Since these have all been added to comdat_type_list, clear the
22488 limbo die list. */
22489 limbo_die_list = NULL;
22491 /* For each new comdat type unit, copy declarations for incomplete
22492 types to make the new unit self-contained (i.e., no direct
22493 references to the main compile unit). */
22494 for (ctnode = comdat_type_list; ctnode != NULL; ctnode = ctnode->next)
22495 copy_decls_for_unworthy_types (ctnode->root_die);
22496 copy_decls_for_unworthy_types (comp_unit_die ());
22498 /* In the process of copying declarations from one unit to another,
22499 we may have left some declarations behind that are no longer
22500 referenced. Prune them. */
22501 prune_unused_types ();
22504 /* Traverse the DIE's and add add sibling attributes to those DIE's
22505 that have children. */
22506 add_sibling_attributes (comp_unit_die ());
22507 for (node = limbo_die_list; node; node = node->next)
22508 add_sibling_attributes (node->die);
22509 for (ctnode = comdat_type_list; ctnode != NULL; ctnode = ctnode->next)
22510 add_sibling_attributes (ctnode->root_die);
22512 /* Output a terminator label for the .text section. */
22513 switch_to_section (text_section);
22514 targetm.asm_out.internal_label (asm_out_file, TEXT_END_LABEL, 0);
22515 if (cold_text_section)
22517 switch_to_section (cold_text_section);
22518 targetm.asm_out.internal_label (asm_out_file, COLD_END_LABEL, 0);
22521 /* We can only use the low/high_pc attributes if all of the code was
22522 in .text. */
22523 if (!have_multiple_function_sections
22524 || (dwarf_version < 3 && dwarf_strict))
22526 /* Don't add if the CU has no associated code. */
22527 if (text_section_used)
22529 add_AT_lbl_id (comp_unit_die (), DW_AT_low_pc, text_section_label);
22530 add_AT_lbl_id (comp_unit_die (), DW_AT_high_pc, text_end_label);
22533 else
22535 unsigned fde_idx;
22536 dw_fde_ref fde;
22537 bool range_list_added = false;
22539 if (text_section_used)
22540 add_ranges_by_labels (comp_unit_die (), text_section_label,
22541 text_end_label, &range_list_added);
22542 if (cold_text_section_used)
22543 add_ranges_by_labels (comp_unit_die (), cold_text_section_label,
22544 cold_end_label, &range_list_added);
22546 FOR_EACH_VEC_ELT (dw_fde_ref, fde_vec, fde_idx, fde)
22548 if (!fde->in_std_section)
22549 add_ranges_by_labels (comp_unit_die (), fde->dw_fde_begin,
22550 fde->dw_fde_end, &range_list_added);
22551 if (fde->dw_fde_second_begin && !fde->second_in_std_section)
22552 add_ranges_by_labels (comp_unit_die (), fde->dw_fde_second_begin,
22553 fde->dw_fde_second_end, &range_list_added);
22556 if (range_list_added)
22558 /* We need to give .debug_loc and .debug_ranges an appropriate
22559 "base address". Use zero so that these addresses become
22560 absolute. Historically, we've emitted the unexpected
22561 DW_AT_entry_pc instead of DW_AT_low_pc for this purpose.
22562 Emit both to give time for other tools to adapt. */
22563 add_AT_addr (comp_unit_die (), DW_AT_low_pc, const0_rtx);
22564 if (! dwarf_strict && dwarf_version < 4)
22565 add_AT_addr (comp_unit_die (), DW_AT_entry_pc, const0_rtx);
22567 add_ranges (NULL);
22571 if (debug_info_level >= DINFO_LEVEL_NORMAL)
22572 add_AT_lineptr (comp_unit_die (), DW_AT_stmt_list,
22573 debug_line_section_label);
22575 if (debug_info_level >= DINFO_LEVEL_VERBOSE)
22576 add_AT_macptr (comp_unit_die (),
22577 dwarf_strict ? DW_AT_macro_info : DW_AT_GNU_macros,
22578 macinfo_section_label);
22580 if (have_location_lists)
22581 optimize_location_lists (comp_unit_die ());
22583 /* Output all of the compilation units. We put the main one last so that
22584 the offsets are available to output_pubnames. */
22585 for (node = limbo_die_list; node; node = node->next)
22586 output_comp_unit (node->die, 0);
22588 comdat_type_table = htab_create (100, htab_ct_hash, htab_ct_eq, NULL);
22589 for (ctnode = comdat_type_list; ctnode != NULL; ctnode = ctnode->next)
22591 void **slot = htab_find_slot (comdat_type_table, ctnode, INSERT);
22593 /* Don't output duplicate types. */
22594 if (*slot != HTAB_EMPTY_ENTRY)
22595 continue;
22597 /* Add a pointer to the line table for the main compilation unit
22598 so that the debugger can make sense of DW_AT_decl_file
22599 attributes. */
22600 if (debug_info_level >= DINFO_LEVEL_NORMAL)
22601 add_AT_lineptr (ctnode->root_die, DW_AT_stmt_list,
22602 debug_line_section_label);
22604 output_comdat_type_unit (ctnode);
22605 *slot = ctnode;
22607 htab_delete (comdat_type_table);
22609 /* Output the main compilation unit if non-empty or if .debug_macinfo
22610 will be emitted. */
22611 output_comp_unit (comp_unit_die (), debug_info_level >= DINFO_LEVEL_VERBOSE);
22613 /* Output the abbreviation table. */
22614 if (abbrev_die_table_in_use != 1)
22616 switch_to_section (debug_abbrev_section);
22617 ASM_OUTPUT_LABEL (asm_out_file, abbrev_section_label);
22618 output_abbrev_section ();
22621 /* Output location list section if necessary. */
22622 if (have_location_lists)
22624 /* Output the location lists info. */
22625 switch_to_section (debug_loc_section);
22626 ASM_GENERATE_INTERNAL_LABEL (loc_section_label,
22627 DEBUG_LOC_SECTION_LABEL, 0);
22628 ASM_OUTPUT_LABEL (asm_out_file, loc_section_label);
22629 output_location_lists (comp_unit_die ());
22632 /* Output public names table if necessary. */
22633 if (!VEC_empty (pubname_entry, pubname_table))
22635 gcc_assert (info_section_emitted);
22636 switch_to_section (debug_pubnames_section);
22637 output_pubnames (pubname_table);
22640 /* Output public types table if necessary. */
22641 /* ??? Only defined by DWARF3, but emitted by Darwin for DWARF2.
22642 It shouldn't hurt to emit it always, since pure DWARF2 consumers
22643 simply won't look for the section. */
22644 if (!VEC_empty (pubname_entry, pubtype_table))
22646 bool empty = false;
22648 if (flag_eliminate_unused_debug_types)
22650 /* The pubtypes table might be emptied by pruning unused items. */
22651 unsigned i;
22652 pubname_ref p;
22653 empty = true;
22654 FOR_EACH_VEC_ELT (pubname_entry, pubtype_table, i, p)
22655 if (p->die->die_offset != 0)
22657 empty = false;
22658 break;
22661 if (!empty)
22663 gcc_assert (info_section_emitted);
22664 switch_to_section (debug_pubtypes_section);
22665 output_pubnames (pubtype_table);
22669 /* Output the address range information if a CU (.debug_info section)
22670 was emitted. We output an empty table even if we had no functions
22671 to put in it. This because the consumer has no way to tell the
22672 difference between an empty table that we omitted and failure to
22673 generate a table that would have contained data. */
22674 if (info_section_emitted)
22676 unsigned long aranges_length = size_of_aranges ();
22678 switch_to_section (debug_aranges_section);
22679 output_aranges (aranges_length);
22682 /* Output ranges section if necessary. */
22683 if (ranges_table_in_use)
22685 switch_to_section (debug_ranges_section);
22686 ASM_OUTPUT_LABEL (asm_out_file, ranges_section_label);
22687 output_ranges ();
22690 /* Have to end the macro section. */
22691 if (debug_info_level >= DINFO_LEVEL_VERBOSE)
22693 switch_to_section (debug_macinfo_section);
22694 ASM_OUTPUT_LABEL (asm_out_file, macinfo_section_label);
22695 if (!VEC_empty (macinfo_entry, macinfo_table))
22696 output_macinfo ();
22697 dw2_asm_output_data (1, 0, "End compilation unit");
22700 /* Output the source line correspondence table. We must do this
22701 even if there is no line information. Otherwise, on an empty
22702 translation unit, we will generate a present, but empty,
22703 .debug_info section. IRIX 6.5 `nm' will then complain when
22704 examining the file. This is done late so that any filenames
22705 used by the debug_info section are marked as 'used'. */
22706 switch_to_section (debug_line_section);
22707 ASM_OUTPUT_LABEL (asm_out_file, debug_line_section_label);
22708 if (! DWARF2_ASM_LINE_DEBUG_INFO)
22709 output_line_info ();
22711 /* If we emitted any DW_FORM_strp form attribute, output the string
22712 table too. */
22713 if (debug_str_hash)
22714 htab_traverse (debug_str_hash, output_indirect_string, NULL);
22717 #include "gt-dwarf2out.h"